diff --git a/.github/workflows/open-source-build-parent.yml b/.github/workflows/open-source-build-parent.yml
new file mode 100644
index 0000000000..603d999565
--- /dev/null
+++ b/.github/workflows/open-source-build-parent.yml
@@ -0,0 +1,45 @@
+name: "Open Source Build: Parent"
+
+on:
+ schedule:
+ - cron: '0 9 * * 1'
+ workflow_dispatch:
+
+jobs:
+ build:
+ name: Build Parent
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run open source script
+ run: ./open_source.sh
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+
+ - name: Cache Gradle packages
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle-wrapper.properties') }}
+ restore-keys: |
+ ${{ runner.os }}-gradle-
+
+ - name: Build DevDebug
+ run: |
+ ./gradle/gradlew -p apps :parent:assembleDevDebug \
+ --build-cache \
+ --parallel \
+ --max-workers=4 \
+ --no-daemon \
+ -Dorg.gradle.jvmargs="-Xmx6g -XX:+HeapDumpOnOutOfMemoryError"
+
diff --git a/.github/workflows/open-source-build-student.yml b/.github/workflows/open-source-build-student.yml
new file mode 100644
index 0000000000..6bab8028e3
--- /dev/null
+++ b/.github/workflows/open-source-build-student.yml
@@ -0,0 +1,45 @@
+name: "Open Source Build: Student"
+
+on:
+ schedule:
+ - cron: '0 9 * * 1'
+ workflow_dispatch:
+
+jobs:
+ build:
+ name: Build Student
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run open source script
+ run: ./open_source.sh
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+
+ - name: Cache Gradle packages
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle-wrapper.properties') }}
+ restore-keys: |
+ ${{ runner.os }}-gradle-
+
+ - name: Build DevDebug
+ run: |
+ ./gradle/gradlew -p apps :student:assembleDevDebug \
+ --build-cache \
+ --parallel \
+ --max-workers=4 \
+ --no-daemon \
+ -Dorg.gradle.jvmargs="-Xmx6g -XX:+HeapDumpOnOutOfMemoryError"
+
diff --git a/.github/workflows/open-source-build-teacher.yml b/.github/workflows/open-source-build-teacher.yml
new file mode 100644
index 0000000000..5c49c643c7
--- /dev/null
+++ b/.github/workflows/open-source-build-teacher.yml
@@ -0,0 +1,45 @@
+name: "Open Source Build: Teacher"
+
+on:
+ schedule:
+ - cron: '0 9 * * 1'
+ workflow_dispatch:
+
+jobs:
+ build:
+ name: Build Teacher
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run open source script
+ run: ./open_source.sh
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+
+ - name: Cache Gradle packages
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/.gradle/caches
+ ~/.gradle/wrapper
+ key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle-wrapper.properties') }}
+ restore-keys: |
+ ${{ runner.os }}-gradle-
+
+ - name: Build DevDebug
+ run: |
+ ./gradle/gradlew -p apps :teacher:assembleDevDebug \
+ --build-cache \
+ --parallel \
+ --max-workers=4 \
+ --no-daemon \
+ -Dorg.gradle.jvmargs="-Xmx6g -XX:+HeapDumpOnOutOfMemoryError"
+
diff --git a/.github/workflows/release-student.yml b/.github/workflows/release-student.yml
index bb2039023b..85462aade5 100644
--- a/.github/workflows/release-student.yml
+++ b/.github/workflows/release-student.yml
@@ -16,7 +16,7 @@ jobs:
with:
app-name: student
app-display-name: Student
- include-e2e-offline: true
+ include-e2e-offline: false
slack-emoji: ':student-app:'
secrets:
GH_APP_ID: ${{ secrets.GH_APP_ID }}
diff --git a/.github/workflows/reusable-release-pipeline.yml b/.github/workflows/reusable-release-pipeline.yml
index 3bb7772de3..83a7675028 100644
--- a/.github/workflows/reusable-release-pipeline.yml
+++ b/.github/workflows/reusable-release-pipeline.yml
@@ -158,13 +158,13 @@ jobs:
matrix:
include:
- test-type: portrait
- flank-config: flank.yml
+ flank-config: flank_portrait_interaction_release.yml
- test-type: landscape
- flank-config: flank_landscape.yml
+ flank-config: flank_landscape_interaction_release.yml
- test-type: tablet
- flank-config: flank_tablet.yml
+ flank-config: flank_tablet_interaction_release.yml
- test-type: e2e
- flank-config: flank_e2e.yml
+ flank-config: flank_e2e_release.yml
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -186,7 +186,7 @@ jobs:
chmod 600 service-account-key.json
- name: Setup Flank config
- run: cp ./apps/${{ inputs.app-name }}/${{ matrix.flank-config }} ./flank.yml
+ run: cp ./apps/${{ inputs.app-name }}/release_tests/${{ matrix.flank-config }} ./flank.yml
- name: Copy APKs to expected locations
run: |
diff --git a/README.md b/README.md
index 5bfce5e8d6..6aca1554eb 100644
--- a/README.md
+++ b/README.md
@@ -6,31 +6,22 @@ The open source code provided by the Android Team at Instructure.
## Building
-First, install the Flutter SDK using the instructions found [here](https://flutter.dev/docs/get-started/install).
-
-Next, run `./open_source.sh` once. You may now use Gradle to build the apps.
+Run `./open_source.sh` once. You may now use Gradle to build the apps.
### Student, Teacher and native Parent
1. Open `apps/build.gradle` in Android Studio
-```
-Android Studio > Import Project > canvas-android/apps/build.gradle
-```
-
-2. Select the app from the list of configurations (`student` or `teacher`)
-3. Tap 'Run' (`^R`) to run the app
-
-### Flutter Parent
-
-1. Open `canvas-android/apps/flutter_parent` in Android Studio.
-2. Make sure the `main.dart` configuration is selected
+ ```
+ Android Studio > Import Project > canvas-android/apps/build.gradle
+ ```
+2. Select the app from the list of configurations
3. Tap 'Run' (`^R`) to run the app
-App | Command | Build Status
---- | --- | ---
-Student | `./gradle/gradlew -p apps :student:assembleDevDebug` | [](https://app.bitrise.io/app/9417c28328c02b7c)
-Teacher | `./gradle/gradlew -p apps :teacher:assembleDevDebug` | [](https://app.bitrise.io/app/4f5339d0ec3436ca)
-Parent | (in apps/flutter_parent) `flutter pub get; flutter build apk` | [](https://app.bitrise.io/app/39fd3312f33be200)
+| App | Command | Build Status |
+|---------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Student | `./gradle/gradlew -p apps :student:assembleDevDebug` | [](https://github.com/instructure/canvas-android/actions/workflows/open-source-build-student.yml) |
+| Teacher | `./gradle/gradlew -p apps :teacher:assembleDevDebug` | [](https://github.com/instructure/canvas-android/actions/workflows/open-source-build-teacher.yml) |
+| Parent | `./gradle/gradlew -p apps :parent:assembleDevDebug` | [](https://github.com/instructure/canvas-android/actions/workflows/open-source-build-parent.yml) |
## Running tests
@@ -42,11 +33,11 @@ To run unit tests for Student, Teacher and native Parent
#### The Applications we have published on Google Play.
-App | Description
---- | ---
-[Canvas Student][canvas] | Used by Students all over the world to be smarter, go faster, and do more.
-[Canvas Teacher][teacher] | User by Teachers all over the world to update course content or grade on the go.
-[Canvas Parent][parent] | Used by Parents all over the world to be parents.
+| App | Description |
+|---------------------------|----------------------------------------------------------------------------------|
+| [Canvas Student][canvas] | Used by Students all over the world to be smarter, go faster, and do more. |
+| [Canvas Teacher][teacher] | User by Teachers all over the world to update course content or grade on the go. |
+| [Canvas Parent][parent] | Used by Parents all over the world to be parents. |
[canvas]: https://play.google.com/store/apps/details?id=com.instructure.candroid
[teacher]: https://play.google.com/store/apps/details?id=com.instructure.teacher
@@ -56,20 +47,20 @@ App | Description
#### These are things that we use internally to create our applications.
-Module | Description
- --- | ---
-annotations | A wrapper for the PSPDFKit library and logic for annotation handling and converting in PDF documents.
-buildSrc | Library for common gradle dependencies and gradle transformers that are used by the project.
-canvas-api-2 | Canvas for Android Api used to talk to the Canvas LMS and is testable.
-dataseedingapi | gRPC wrapper for Canvas that enables creating data to test the apps.
-DocumentScanner | A wrapper for document scanning features.
-espresso | The UI testing library built on Espresso.
-interactions | Interactions for navigation used in the apps.
-login-api-2 | The libarary used to make logging in and getting a token relative easy and is testable.
-pandares | Collection of resources used in our apps.
-pandautils | The core library for the apps. All the common code is implemented here that is reused by the 3 apps.
-rceditor | A wrapper for rich content editing used in our apps.
-recyclerview | A fancy RecyclerView library that supports expanding and collapsing, pagination, and stuff like that. (deprecated)
+| Module | Description |
+|----------------|--------------------------------------------------------------------------------------------------------------------|
+| annotations | A wrapper for the PSPDFKit library and logic for annotation handling and converting in PDF documents. |
+| buildSrc | Library for common gradle dependencies and gradle transformers that are used by the project. |
+| canvas-api-2 | Canvas for Android Api used to talk to the Canvas LMS and is testable. |
+| dataseedingapi | gRPC wrapper for Canvas that enables creating data to test the apps. |
+| espresso | The UI testing library built on Espresso. |
+| horizon | Canvas Career experience for the Student app. |
+| interactions | Interactions for navigation used in the apps. |
+| login-api-2 | The libarary used to make logging in and getting a token relative easy and is testable. |
+| pandares | Collection of resources used in our apps. |
+| pandautils | The core library for the apps. All the common code is implemented here that is reused by the 3 apps. |
+| rceditor | A wrapper for rich content editing used in our apps. |
+| recyclerview | A fancy RecyclerView library that supports expanding and collapsing, pagination, and stuff like that. (deprecated) |
#### Our applications are licensed under the GPLv3 License.
diff --git a/apps/build.gradle b/apps/build.gradle
index e350784c6f..6b0bdfd7ac 100644
--- a/apps/build.gradle
+++ b/apps/build.gradle
@@ -90,11 +90,13 @@ task assembleAllApps() {
apply from: '../gradle/jacoco.gradle'
-configurations.all{
- resolutionStrategy {
- eachDependency { details ->
- if ('org.jacoco' == details.requested.group) {
- details.useVersion "0.8.7"
+configurations.configureEach {
+ if (canBeResolved) {
+ resolutionStrategy {
+ eachDependency { details ->
+ if ('org.jacoco' == details.requested.group) {
+ details.useVersion "0.8.7"
+ }
}
}
}
diff --git a/apps/buildSrc/src/main/java/GlobalDependencies.kt b/apps/buildSrc/src/main/java/GlobalDependencies.kt
index 19d8833326..e02e8b72c7 100644
--- a/apps/buildSrc/src/main/java/GlobalDependencies.kt
+++ b/apps/buildSrc/src/main/java/GlobalDependencies.kt
@@ -199,6 +199,7 @@ object Libs {
const val COMPOSE_NAVIGATION_HILT = "androidx.hilt:hilt-navigation-compose:1.3.0"
const val COMPOSE_FRAGMENT = "androidx.fragment:fragment-compose:1.8.9"
const val COMPOSE_REORDERABLE = "sh.calvin.reorderable:reorderable:${Versions.REORDERABLE}"
+ const val COMPOSE_FOUNDATION = "androidx.compose.foundation:foundation"
// Glance
const val GLANCE = "androidx.glance:glance:${Versions.GLANCE}"
diff --git a/apps/buildSrc/src/main/java/MergePrivateData.kt b/apps/buildSrc/src/main/java/MergePrivateData.kt
index d3e8e4d542..d7c9c6ddab 100644
--- a/apps/buildSrc/src/main/java/MergePrivateData.kt
+++ b/apps/buildSrc/src/main/java/MergePrivateData.kt
@@ -20,7 +20,7 @@ object PrivateData {
val dataDir = File(baseDir, dataDirName).canonicalFile
println("")
- println("============= MERGE PRIVATE FILES: ${dataDirName.toUpperCase()} ".padEnd(PRINT_PAD_SIZE, '='))
+ println("============= MERGE PRIVATE FILES: ${dataDirName.uppercase()} ".padEnd(PRINT_PAD_SIZE, '='))
/* Confirm dir exists */
if (!dataDir.exists() || !dataDir.isDirectory) {
diff --git a/apps/parent/build.gradle b/apps/parent/build.gradle
index d5bffc8112..1cc57b4fa6 100644
--- a/apps/parent/build.gradle
+++ b/apps/parent/build.gradle
@@ -26,9 +26,9 @@ plugins {
id 'org.jetbrains.kotlin.plugin.compose'
}
-configurations {
- all*.exclude group: 'commons-logging', module: 'commons-logging'
- all*.exclude group: 'org.apache.httpcomponents', module: 'httpclient'
+configurations.configureEach {
+ exclude group: 'commons-logging', module: 'commons-logging'
+ exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
def coverageEnabled = project.hasProperty('coverage')
@@ -41,8 +41,8 @@ android {
applicationId "com.instructure.parentapp"
minSdkVersion Versions.MIN_SDK
targetSdkVersion Versions.TARGET_SDK
- versionCode 67
- versionName "4.10.1"
+ versionCode 69
+ versionName "4.11.1"
buildConfigField "boolean", "IS_TESTING", "false"
testInstrumentationRunner 'com.instructure.parentapp.ui.espresso.ParentHiltTestRunner'
@@ -123,17 +123,19 @@ android {
}
}
- configurations.all {
- resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
- /*
- Resolves dependency versions across test and production APKs, specifically, transitive
- dependencies. This is required since Espresso internally has a dependency on support-annotations.
- https://github.com/googlecodelabs/android-testing/blob/57852eaf7df88ddaf828eca879a407f2249d5348/app/build.gradle#L86
- */
- resolutionStrategy.force Libs.ANDROIDX_ANNOTATION
-
- resolutionStrategy.force Libs.KOTLIN_COROUTINES_CORE
- resolutionStrategy.force Libs.KOTLIN_STD_LIB
+ configurations.configureEach {
+ if (canBeResolved) {
+ resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
+ /*
+ Resolves dependency versions across test and production APKs, specifically, transitive
+ dependencies. This is required since Espresso internally has a dependency on support-annotations.
+ https://github.com/googlecodelabs/android-testing/blob/57852eaf7df88ddaf828eca879a407f2249d5348/app/build.gradle#L86
+ */
+ resolutionStrategy.force Libs.ANDROIDX_ANNOTATION
+
+ resolutionStrategy.force Libs.KOTLIN_COROUTINES_CORE
+ resolutionStrategy.force Libs.KOTLIN_STD_LIB
+ }
}
configurations.implementation.dependencies.each { compileDependency ->
diff --git a/apps/parent/release_tests/flank_e2e_release.yml b/apps/parent/release_tests/flank_e2e_release.yml
new file mode 100644
index 0000000000..12cf2907f6
--- /dev/null
+++ b/apps/parent/release_tests/flank_e2e_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ../build/outputs/apk/qa/debug/parent-qa-debug.apk
+ # test: ../build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ app: ../apps/parent/build/outputs/apk/qa/debug/parent-qa-debug.apk
+ test: ../apps/parent/build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ results-bucket: android-parent
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - annotation com.instructure.canvas.espresso.annotations.E2E
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/parent/release_tests/flank_landscape_interaction_release.yml b/apps/parent/release_tests/flank_landscape_interaction_release.yml
new file mode 100644
index 0000000000..ca3e31c1c9
--- /dev/null
+++ b/apps/parent/release_tests/flank_landscape_interaction_release.yml
@@ -0,0 +1,24 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ../build/outputs/apk/qa/debug/parent-qa-debug.apk
+ # test: ../build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ app: ../apps/parent/build/outputs/apk/qa/debug/parent-qa-debug.apk
+ test: ../apps/parent/build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ results-bucket: android-parent
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.StubLandscape, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: landscape
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/parent/release_tests/flank_portrait_interaction_release.yml b/apps/parent/release_tests/flank_portrait_interaction_release.yml
new file mode 100644
index 0000000000..875e3ef3fb
--- /dev/null
+++ b/apps/parent/release_tests/flank_portrait_interaction_release.yml
@@ -0,0 +1,24 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ../build/intermediates/apk/qa/debug/parent-qa-debug.apk
+ # test: ../build/intermediates/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ app: ../apps/parent/build/outputs/apk/qa/debug/parent-qa-debug.apk
+ test: ../apps/parent/build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ results-bucket: android-parent
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/parent/release_tests/flank_tablet_interaction_release.yml b/apps/parent/release_tests/flank_tablet_interaction_release.yml
new file mode 100644
index 0000000000..d17d16dc90
--- /dev/null
+++ b/apps/parent/release_tests/flank_tablet_interaction_release.yml
@@ -0,0 +1,28 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ../build/outputs/apk/qa/debug/parent-qa-debug.apk
+ # test: ../build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ app: ../apps/parent/build/outputs/apk/qa/debug/parent-qa-debug.apk
+ test: ../apps/parent/build/outputs/apk/androidTest/qa/debug/parent-qa-debug-androidTest.apk
+ results-bucket: android-parent
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.StubTablet, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: MediumTablet.arm
+ version: 29
+ locale: en_US
+ orientation: landscape
+ - model: MediumTablet.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt
index bc59c57012..e1d6c1a0ea 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.StringConstants.HelpMenu
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.parentapp.R
import com.instructure.parentapp.utils.ParentComposeTest
import com.instructure.parentapp.utils.extensions.seedData
@@ -79,7 +79,7 @@ class HelpMenuE2ETest : ParentComposeTest() {
try {
helpPage.assertHelpMenuURL(HelpMenu.SEARCH_GUIDES_TITLE, "https://community.instructure.com/en/all-guides")
- helpPage.assertHelpMenuURL(HelpMenu.SUBMIT_FEATURE_TITLE, "https://community.canvaslms.com/t5/Idea-Conversations/idb-p/ideas")
+ helpPage.assertHelpMenuURL(HelpMenu.SHARE_A_CONTRIBUTION_TITLE, "https://community.instructure.com/en/categories/product-connection")
helpPage.assertHelpMenuURL(HelpMenu.SHARE_LOVE_TITLE, "market://details?id=com.instructure.parentapp")
}
finally {
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt
index fa19e001e0..15ec57c6f3 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt
@@ -22,7 +22,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.models.AlertType
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.SubmissionsApi
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt
index 44392f3d72..efa1f7d6bc 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.GradingType
@@ -132,9 +132,9 @@ class AssignmentDetailsE2ETest : ParentComposeTest() {
assignmentDetailsPage.assertDisplayToolbarTitle()
assignmentDetailsPage.assertDisplayToolbarSubtitle(course.name)
- Log.d(ASSERTION_TAG, "Assert that the assignment status for '${student2.name}' student is 'Not Submitted' and the 'Submission & Rubric' label is displayed and the submission type is 'Text Entry'.")
+ Log.d(ASSERTION_TAG, "Assert that the assignment status for '${student2.name}' student is 'Not Submitted' and the 'Submission & Feedback' label is displayed and the submission type is 'Text Entry'.")
assignmentDetailsPage.assertStatusNotSubmitted()
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
assignmentDetailsPage.assertSubmissionTypeDisplayed("Text Entry")
assignmentDetailsPage.assertReminderViewDisplayed()
assignmentDetailsPage.assertNoDescriptionViewDisplayed()
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt
index 9a62c37a2e..c09800d29d 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.GradingType
import com.instructure.dataseeding.model.SubmissionType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt
index 9f533eef91..680c9e6efe 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.toApiString
import com.instructure.dataseeding.api.CalendarEventApi
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CourseDetailsFrontPageE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CourseDetailsFrontPageE2ETest.kt
index 9bf77bcd40..f99da7f6ec 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CourseDetailsFrontPageE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CourseDetailsFrontPageE2ETest.kt
@@ -16,6 +16,7 @@
package com.instructure.parentapp.ui.e2e.compose
import android.util.Log
+import androidx.test.espresso.Espresso
import com.instructure.canvas.espresso.FeatureCategory
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.SecondaryFeatureCategory
@@ -32,6 +33,7 @@ import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
import com.instructure.parentapp.utils.ParentComposeTest
import com.instructure.parentapp.utils.extensions.seedData
+import com.instructure.parentapp.utils.extensions.seedDataForK5
import com.instructure.parentapp.utils.extensions.tokenLogin
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test
@@ -76,7 +78,7 @@ class CourseDetailsFrontPageE2ETest : ParentComposeTest() {
dashboardPage.waitForRender()
coursesPage.clickCourseItem(course.name)
- Log.d(STEP_TAG, "Navigate to Front Page Page by selecting Summary Tab.")
+ Log.d(STEP_TAG, "Navigate to Front Page Page by selecting Front Page Tab.")
courseDetailsPage.selectTab("FRONT PAGE")
Log.d(ASSERTION_TAG, "Assert that the 'FRONT PAGE' tab has been selected.")
@@ -91,4 +93,58 @@ class CourseDetailsFrontPageE2ETest : ParentComposeTest() {
Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is loaded successfully.")
assignmentDetailsPage.assertAssignmentDetails(assignment)
}
+
+ @E2E
+ @Test
+ @TestMetaData(Priority.COMMON, FeatureCategory.COURSE_DETAILS, TestCategory.E2E, SecondaryFeatureCategory.FRONT_PAGE)
+ fun testFrontPageTabVisibilityForK5ElementaryCoursesE2E() {
+
+ //Bug Ticket: MBL-19842
+ Log.d(PREPARATION_TAG, "Seeding data for K5 sub-account: 2 homeroom courses. The parent observes the K5 elementary student.")
+ val data = seedDataForK5(students = 1, teachers = 1, parents = 1, homeroomCourses = 2)
+ val courseWithFrontPage = data.coursesList[0]
+ val courseWithoutFrontPage = data.coursesList[1]
+ val teacher = data.teachersList[0]
+ val parent = data.parentsList[0]
+
+ val syllabusBody = "This is the syllabus body of the K5 elementary course."
+ val frontPageBody = "This is the front page body of the K5 elementary course."
+
+ Log.d(PREPARATION_TAG, "Seed a front page for '${courseWithFrontPage.name}'.")
+ PagesApi.createCoursePage(courseWithFrontPage.id, teacher.token, frontPage = true, editingRoles = "public", body = frontPageBody)
+
+ Log.d(PREPARATION_TAG, "Add a syllabus body to both courses so that both get SYLLABUS and SUMMARY tabs.")
+ CoursesApi.updateCourse(courseWithFrontPage.id, UpdateCourse(syllabusBody = syllabusBody))
+ CoursesApi.updateCourse(courseWithoutFrontPage.id, UpdateCourse(syllabusBody = syllabusBody))
+
+ Log.d(STEP_TAG, "Login with user: '${parent.name}', login id: '${parent.loginId}'.")
+ tokenLogin(parent)
+
+ Log.d(STEP_TAG, "Wait for the Dashboard Page to be rendered. Select '${courseWithFrontPage.name}' course.")
+ dashboardPage.waitForRender()
+ coursesPage.clickCourseItem(courseWithFrontPage.name)
+
+ Log.d(ASSERTION_TAG, "Assert that '${courseWithFrontPage.name}' has 4 tabs: GRADES, FRONT PAGE, SYLLABUS, SUMMARY.")
+ courseDetailsPage.assertTabCount(4)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'FRONT PAGE' tab IS displayed for the course that has a front page, even though the course home is NOT set to 'wiki'.")
+ courseDetailsPage.assertTabDisplayed("FRONT PAGE")
+
+ Log.d(STEP_TAG, "Navigate to the Front Page tab.")
+ courseDetailsPage.selectTab("FRONT PAGE")
+
+ Log.d(ASSERTION_TAG, "Assert that the 'FRONT PAGE' tab has been selected and the front page body is displayed.")
+ courseDetailsPage.assertTabSelected("FRONT PAGE")
+ frontPagePage.assertFrontPageBody(frontPageBody)
+
+ Log.d(STEP_TAG, "Navigate back to the Dashboard and select '${courseWithoutFrontPage.name}' course.")
+ Espresso.pressBack()
+ coursesPage.clickCourseItem(courseWithoutFrontPage.name)
+
+ Log.d(ASSERTION_TAG, "Assert that '${courseWithoutFrontPage.name}' has 3 tabs: GRADES, SYLLABUS, SUMMARY — no FRONT PAGE tab since no front page was created.")
+ courseDetailsPage.assertTabCount(3)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'FRONT PAGE' tab is NOT displayed for the course that has no front page.")
+ courseDetailsPage.assertTabDoesNotExist("FRONT PAGE")
+ }
}
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CustomStatusesE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CustomStatusesE2ETest.kt
index 037a036bfc..0f1471e770 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CustomStatusesE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CustomStatusesE2ETest.kt
@@ -87,7 +87,7 @@ class CustomStatusesE2ETest: ParentComposeTest() {
Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed with the custom status 'AMAZING'.")
assignmentDetailsPage.assertCustomStatus("AMAZING")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
}
@After
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/DiscussionCheckpointsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/DiscussionCheckpointsE2ETest.kt
index 0263cf2287..715ee09a59 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/DiscussionCheckpointsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/DiscussionCheckpointsE2ETest.kt
@@ -23,8 +23,12 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
+import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.DiscussionTopicsApi
+import com.instructure.dataseeding.api.SubmissionsApi
+import com.instructure.espresso.convertIso8601ToCanvasFormat
import com.instructure.espresso.getCustomDateCalendar
+import com.instructure.espresso.retryWithIncreasingDelay
import com.instructure.pandautils.features.calendar.CalendarPrefs
import com.instructure.parentapp.utils.ParentComposeTest
import com.instructure.parentapp.utils.extensions.seedData
@@ -146,4 +150,99 @@ class DiscussionCheckpointsE2ETest : ParentComposeTest() {
assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Additional replies (2) due", assignmentDetailsReplyToEntryDueDate)
}
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.GRADES, TestCategory.E2E, SecondaryFeatureCategory.DISCUSSION_CHECKPOINTS)
+ fun testDiscussionCheckpointsGradesListE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(students = 1, parents = 1, teachers = 1, courses = 1)
+ val teacher = data.teachersList[0]
+ val parent = data.parentsList[0]
+ val course = data.coursesList[0]
+
+ val discussionWithCheckpointsTitle = "Test Discussion with Checkpoints"
+ val assignmentName = "Test Assignment with Checkpoints"
+
+ Log.d(PREPARATION_TAG, "Convert dates to match with different formats in different screens (Grades list, Assignment Details)")
+ val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US).apply {
+ timeZone = TimeZone.getTimeZone("UTC")
+ }
+ val assignmentDetailsDisplayFormat = SimpleDateFormat("MMM d, yyyy h:mm a", Locale.US)
+ val timeDisplayFormat = SimpleDateFormat("h:mm a", Locale.US)
+ val replyToTopicCalendar = getCustomDateCalendar(2)
+ val replyToEntryCalendar = getCustomDateCalendar(4)
+ val replyToTopicDueDate = dateFormat.format(replyToTopicCalendar.time)
+ val replyToEntryDueDate = dateFormat.format(replyToEntryCalendar.time)
+ val assignmentDetailsReplyToTopicDueDate = assignmentDetailsDisplayFormat.format(replyToTopicCalendar.time)
+ val assignmentDetailsReplyToEntryDueDate = assignmentDetailsDisplayFormat.format(replyToEntryCalendar.time)
+ val convertedReplyToTopicDueDate = "Due " + convertIso8601ToCanvasFormat(replyToTopicDueDate) + " " + timeDisplayFormat.format(replyToTopicCalendar.time)
+ val convertedReplyToEntryDueDate = "Due " + convertIso8601ToCanvasFormat(replyToEntryDueDate) + " " + timeDisplayFormat.format(replyToEntryCalendar.time)
+
+ Log.d(PREPARATION_TAG, "Seed a discussion topic with checkpoints for '${course.name}' course.")
+ DiscussionTopicsApi.createDiscussionTopicWithCheckpoints(course.id, teacher.token, discussionWithCheckpointsTitle, assignmentName, replyToTopicDueDate, replyToEntryDueDate)
+
+ Log.d(STEP_TAG, "Login with user: '${parent.name}', login id: '${parent.loginId}'.")
+ tokenLogin(parent)
+
+ Log.d(ASSERTION_TAG, "Assert that the Dashboard Page is the landing page and it is loaded successfully.")
+ dashboardPage.waitForRender()
+ dashboardPage.assertPageObjects()
+
+ Log.d(STEP_TAG, "Click on the '${course.name}' course.")
+ coursesPage.clickCourseItem(course.name)
+
+ Log.d(ASSERTION_TAG, "Assert that the details of the course has opened.")
+ courseDetailsPage.assertCourseNameDisplayed(course) //Course Details Page is actually the Grades page by default when there are no tabs.
+
+ Log.d(ASSERTION_TAG, "Assert that the Grades Card text is 'Total' by default and the 'Based on graded assignments' label is displayed.")
+ retryWithIncreasingDelay(times = 10, maxDelay = 3000) {
+ gradesPage.assertCardText("Total")
+ gradesPage.assertBasedOnGradedAssignmentsLabel()
+ }
+
+ Log.d(ASSERTION_TAG, "Assert that the '${discussionWithCheckpointsTitle}' discussion is present along with 2 date info (For the 2 checkpoints).")
+ courseDetailsPage.assertHasAssignmentWithCheckpoints(discussionWithCheckpointsTitle, dueAtString = convertedReplyToTopicDueDate, dueAtStringSecondCheckpoint = convertedReplyToEntryDueDate, expectedGrade = "-/15")
+
+ Log.d(STEP_TAG, "Click on the expand icon for the '$discussionWithCheckpointsTitle' discussion to see the individual checkpoint details.")
+ courseDetailsPage.clickDiscussionCheckpointExpandCollapseIcon(discussionWithCheckpointsTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that both checkpoints are displayed with the correct due dates and grades after expanding.")
+ courseDetailsPage.assertDiscussionCheckpointDetails(2, dueAtReplyToTopic = convertedReplyToTopicDueDate, dueAtAdditionalReplies = convertedReplyToEntryDueDate, gradeReplyToTopic = "-/10", gradeAdditionalReplies = "-/5")
+
+ Log.d(STEP_TAG, "Click on the '$discussionWithCheckpointsTitle' discussion item to open the Assignment Details Page.")
+ courseDetailsPage.clickAssignment(discussionWithCheckpointsTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed properly with the correct toolbar title and subtitle.")
+ assignmentDetailsPage.assertDisplayToolbarTitle()
+ assignmentDetailsPage.assertDisplayToolbarSubtitle(course.name)
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoints are displayed properly on the Assignment Details Page.")
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Reply to topic due", assignmentDetailsReplyToTopicDueDate)
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Additional replies (2) due", assignmentDetailsReplyToEntryDueDate)
+
+ Log.d(STEP_TAG, "Navigate back to the Course Details Page.")
+ Espresso.pressBack()
+
+ Log.d(PREPARATION_TAG, "Grade the 'Reply to topic' checkpoint of '$discussionWithCheckpointsTitle' with 1 point via the Teacher API.")
+ val student = data.studentsList[0]
+ val parentAssignment = AssignmentsApi.listAssignments(course.id, teacher.token).first()
+ SubmissionsApi.gradeSubmission(teacher.token, course.id, parentAssignment.id, student.id, postedGrade = "1", subAssignmentTag = "reply_to_topic")
+
+ Log.d(ASSERTION_TAG, "Assert that the total grade of '$discussionWithCheckpointsTitle' is updated to '-/15' after grading the 'Reply to topic' checkpoint.")
+ courseDetailsPage.assertHasAssignmentWithCheckpoints(discussionWithCheckpointsTitle, dueAtString = convertedReplyToTopicDueDate, dueAtStringSecondCheckpoint = convertedReplyToEntryDueDate, expectedGrade = "-/15")
+
+ Log.d(STEP_TAG, "Click on the expand icon for the '$discussionWithCheckpointsTitle' discussion to see the individual checkpoint details.")
+ courseDetailsPage.clickDiscussionCheckpointExpandCollapseIcon(discussionWithCheckpointsTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Reply to topic' grade is '1/10' and the 'Additional replies' grade is '-/5'.")
+ retryWithIncreasingDelay(times = 15, maxDelay = 3000, catchBlock = {
+ courseDetailsPage.refresh()
+ courseDetailsPage.clickDiscussionCheckpointExpandCollapseIcon(discussionWithCheckpointsTitle)
+ })
+ {
+ courseDetailsPage.assertDiscussionCheckpointDetails(2, dueAtReplyToTopic = convertedReplyToTopicDueDate, statusReplyToTopic = "Graded", dueAtAdditionalReplies = convertedReplyToEntryDueDate, gradeReplyToTopic = "1/10", gradeAdditionalReplies = "-/5")
+ }
+ }
+
}
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt
index a3861bc3b4..042b2aeb9c 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt
@@ -30,8 +30,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.annotations.ReleaseExclude
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.toApiString
import com.instructure.dataseeding.api.AssignmentsApi
@@ -60,7 +59,6 @@ class InboxE2ETest: ParentComposeTest() {
@E2E
@Test
@TestMetaData(Priority.MANDATORY, FeatureCategory.INBOX, TestCategory.E2E)
- @ReleaseExclude
fun testInboxSelectedButtonActionsE2E() {
Log.d(PREPARATION_TAG, "Seeding data.")
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/LoginE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/LoginE2ETest.kt
index 9c7bfb61fe..9f10104c60 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/LoginE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/LoginE2ETest.kt
@@ -290,35 +290,6 @@ class LoginE2ETest : ParentComposeTest() {
loginSignInPage.assertLoginEmailErrorMessage(NO_EMAIL_GIVEN_ERROR_MESSAGE) // Invalid credentials error message will be displayed within the email error message holder on the login page.
}
- private fun loginWithUser(user: CanvasUserApiModel, lastSchoolSaved: Boolean = false) {
-
- Thread.sleep(5100) //Need to wait > 5 seconds before each login attempt because of new 'too many attempts' login policy on web.
-
- if (lastSchoolSaved) {
- Log.d(STEP_TAG, "Click 'Find Another School' button.")
- loginLandingPage.clickFindAnotherSchoolButton()
- } else {
- Log.d(STEP_TAG, "Click 'Find My School' button.")
- loginLandingPage.clickFindMySchoolButton()
- }
-
- Log.d(STEP_TAG, "Enter domain: '${user.domain}'.")
- loginFindSchoolPage.enterDomain(user.domain)
-
- Log.d(STEP_TAG, "Click on 'Next' button on the Toolbar.")
- loginFindSchoolPage.clickToolbarNextMenuItem()
- loginSignInPage.loginAs(user)
- }
-
- private fun loginWithLastSavedSchool(user: CanvasUserApiModel) {
-
- Log.d(STEP_TAG, "Click on last saved school's button.")
- loginLandingPage.clickOnLastSavedSchoolButton()
-
- Log.d(STEP_TAG, "Login with '${user.name}' user.")
- loginSignInPage.loginAs(user)
- }
-
@E2E
@Test
@TestMetaData(Priority.IMPORTANT, FeatureCategory.LOGIN, TestCategory.E2E)
@@ -405,7 +376,6 @@ class LoginE2ETest : ParentComposeTest() {
}
@Test
- @Stub("Stubbed because there was some change on 7th or 8th of July, 2025 and on the CI it loads an invalid URL page, however the test runs locally.")
@E2E
@TestMetaData(Priority.IMPORTANT, FeatureCategory.LOGIN, TestCategory.E2E, SecondaryFeatureCategory.CANVAS_NETWORK)
fun testCanvasNetworkSignInPageE2E() {
@@ -486,4 +456,32 @@ class LoginE2ETest : ParentComposeTest() {
}
}
+ private fun loginWithUser(user: CanvasUserApiModel, lastSchoolSaved: Boolean = false) {
+
+ Thread.sleep(5100) //Need to wait > 5 seconds before each login attempt because of new 'too many attempts' login policy on web.
+
+ if (lastSchoolSaved) {
+ Log.d(STEP_TAG, "Click 'Find Another School' button.")
+ loginLandingPage.clickFindAnotherSchoolButton()
+ } else {
+ Log.d(STEP_TAG, "Click 'Find My School' button.")
+ loginLandingPage.clickFindMySchoolButton()
+ }
+
+ Log.d(STEP_TAG, "Enter domain: '${user.domain}'.")
+ loginFindSchoolPage.enterDomain(user.domain)
+
+ Log.d(STEP_TAG, "Click on 'Next' button on the Toolbar.")
+ loginFindSchoolPage.clickToolbarNextMenuItem()
+ loginSignInPage.loginAs(user)
+ }
+
+ private fun loginWithLastSavedSchool(user: CanvasUserApiModel) {
+
+ Log.d(STEP_TAG, "Click on last saved school's button.")
+ loginLandingPage.clickOnLastSavedSchoolButton()
+
+ Log.d(STEP_TAG, "Login with '${user.name}' user.")
+ loginSignInPage.loginAs(user)
+ }
}
\ No newline at end of file
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt
index cc1562470e..c4203963d8 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt
@@ -24,8 +24,8 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.model.GradingType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt
index 58f168b5fc..b2b3cff577 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt
@@ -27,7 +27,6 @@ import com.instructure.canvas.espresso.FeatureCategory
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
-import com.instructure.canvas.espresso.checkToastText
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.addAssignmentsToGroups
@@ -35,6 +34,7 @@ import com.instructure.canvas.espresso.mockcanvas.addObserverAlert
import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
import com.instructure.canvas.espresso.mockcanvas.init
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.AlertType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt
index d1e19afd22..a735975473 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt
@@ -27,7 +27,7 @@ import com.google.android.apps.common.testing.accessibility.framework.Accessibil
import com.google.android.apps.common.testing.accessibility.framework.checks.SpeakableTextPresentCheck
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.utils.Pronouns
import com.instructure.loginapi.login.R
import com.instructure.parentapp.utils.ParentComposeTest
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt
index 2da7ba5fae..6ca653b22c 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt
@@ -29,7 +29,7 @@ import com.instructure.canvas.espresso.mockcanvas.addEnrollment
import com.instructure.canvas.espresso.mockcanvas.addUser
import com.instructure.canvas.espresso.mockcanvas.init
import com.instructure.canvas.espresso.mockcanvas.updateUserEnrollments
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.Enrollment
import com.instructure.loginapi.login.R
import com.instructure.parentapp.utils.ParentComposeTest
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxComposeInteractionTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxComposeInteractionTest.kt
index b498a2e38b..95257f2d1c 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxComposeInteractionTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxComposeInteractionTest.kt
@@ -12,6 +12,7 @@ import com.instructure.canvas.espresso.mockcanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockcanvas.addRecipientsToCourse
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -27,6 +28,7 @@ import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -102,6 +104,10 @@ class ParentInboxComposeInteractionTest: InboxComposeInteractionTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
@Test
fun testParentComposeDefaultValues() {
val data = initData(canSendToAll = true)
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxSignatureInteractionTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxSignatureInteractionTest.kt
index 18a7389f50..7eb4712d3d 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxSignatureInteractionTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxSignatureInteractionTest.kt
@@ -23,6 +23,7 @@ import com.instructure.canvas.espresso.common.interaction.InboxSignatureInteract
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -38,6 +39,7 @@ import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -98,6 +100,10 @@ class ParentInboxSignatureInteractionTest : InboxSignatureInteractionTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
private val dashboardPage = DashboardPage()
private val leftSideNavigationDrawerPage = LeftSideNavigationDrawerPage()
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/FrontPagePage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/FrontPagePage.kt
index 10c3ec2cb0..1253e65122 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/FrontPagePage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/FrontPagePage.kt
@@ -15,6 +15,7 @@
*/
package com.instructure.parentapp.ui.pages.classic
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.web.assertion.WebViewAssertions
import androidx.test.espresso.web.sugar.Web
@@ -27,7 +28,7 @@ import org.hamcrest.Matchers
class FrontPagePage : BasePage() {
fun assertFrontPageBody(body: String) {
- Web.onWebView(withId(R.id.contentWebView))
+ Web.onWebView(Matchers.allOf(withId(R.id.contentWebView), isDisplayed()))
.withElement(DriverAtoms.findElement(Locator.ID, "content"))
.check(
WebViewAssertions.webMatches(
@@ -38,7 +39,7 @@ class FrontPagePage : BasePage() {
}
fun clickLink(linkId: String) {
- Web.onWebView(withId(R.id.contentWebView))
+ Web.onWebView(Matchers.allOf(withId(R.id.contentWebView), isDisplayed()))
.withElement(DriverAtoms.findElement(Locator.ID, linkId))
.perform(DriverAtoms.webClick())
}
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt
index bf8dcdff43..f4cb1fa431 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt
@@ -24,7 +24,7 @@ import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.StringConstants.HelpMenu
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
import com.instructure.espresso.OnViewWithText
import com.instructure.espresso.assertDisplayed
@@ -46,7 +46,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
private val reportProblemLabel by OnViewWithStringTextIgnoreCase("Report a Problem")
- private val submitFeatureLabel by OnViewWithStringTextIgnoreCase("Submit a Feature Idea")
+ private val shareContributionLabel by OnViewWithStringTextIgnoreCase("Share a Contribution")
private val shareLoveLabel by OnViewWithText(R.string.shareYourLove)
@@ -58,8 +58,8 @@ class HelpPage : BasePage(R.id.helpDialog) {
reportProblemLabel.scrollTo().click()
}
- private fun clickSubmitFeatureLabel() {
- submitFeatureLabel.scrollTo().click()
+ private fun clickShareContributionLabel() {
+ shareContributionLabel.scrollTo().click()
}
private fun clickShareLoveLabel() {
@@ -101,8 +101,8 @@ class HelpPage : BasePage(R.id.helpDialog) {
onView(withId(R.id.title) + withText(HelpMenu.REPORT_PROBLEM_TITLE)).assertDisplayed()
onView(withId(R.id.subtitle) + withText(HelpMenu.REPORT_PROBLEM_SUBTITLE)).assertDisplayed()
- onView(withId(R.id.title) + withText(HelpMenu.SUBMIT_FEATURE_TITLE)).assertDisplayed()
- onView(withId(R.id.subtitle) + withText(HelpMenu.SUBMIT_FEATURE_SUBTITLE)).assertDisplayed()
+ onView(withId(R.id.title) + withText(HelpMenu.SHARE_A_CONTRIBUTION_TITLE)).assertDisplayed()
+ onView(withId(R.id.subtitle) + withText(HelpMenu.SHARE_A_CONTRIBUTION_SUBTITLE)).assertDisplayed()
onView(withId(R.id.title) + withText(HelpMenu.SHARE_LOVE_TITLE)).assertDisplayed()
onView(withId(R.id.subtitle) + withText(HelpMenu.SHARE_LOVE_SUBTITLE)).assertDisplayed()
@@ -119,7 +119,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
when (helpMenuText) {
HelpMenu.SEARCH_GUIDES_TITLE -> clickSearchGuidesLabel()
- HelpMenu.SUBMIT_FEATURE_TITLE -> clickSubmitFeatureLabel()
+ HelpMenu.SHARE_A_CONTRIBUTION_TITLE -> clickShareContributionLabel()
HelpMenu.SHARE_LOVE_TITLE -> clickShareLoveLabel()
}
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt
index 4b337d12c8..d87d371dde 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt
@@ -20,7 +20,7 @@ import androidx.test.espresso.Espresso
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt
index 31d32d4e8e..548b68f8d4 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt
@@ -14,7 +14,6 @@
* limitations under the License.
*
*/
-
package com.instructure.parentapp.ui.pages.compose
import androidx.compose.ui.graphics.Color
@@ -24,14 +23,18 @@ import androidx.compose.ui.test.assertIsSelected
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasAnyChild
import androidx.compose.ui.test.hasAnyDescendant
+import androidx.compose.ui.test.hasAnySibling
import androidx.compose.ui.test.hasParent
import androidx.compose.ui.test.hasTestTag
import androidx.compose.ui.test.hasText
+import androidx.compose.ui.test.isSelectable
import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onNodeWithContentDescription
+import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
-import com.instructure.canvas.espresso.refresh
+import androidx.compose.ui.test.performTouchInput
+import androidx.compose.ui.test.swipeDown
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.utils.toDate
import com.instructure.dataseeding.model.CourseApiModel
@@ -61,6 +64,7 @@ class CourseDetailsPage(private val composeTestRule: ComposeTestRule) {
fun selectTab(tabName: String) {
composeTestRule.onNodeWithText(tabName).performClick()
+ composeTestRule.waitForIdle()
}
fun assertTabSelected(tabName: String) {
@@ -80,14 +84,51 @@ class CourseDetailsPage(private val composeTestRule: ComposeTestRule) {
composeTestRule.onNodeWithText(assignmentName).assertTextColor(Color(expectedTextColor))
}
+ fun assertTabDisplayed(tabName: String) {
+ composeTestRule.onNodeWithText(tabName).assertIsDisplayed()
+ }
+
+ fun assertTabDoesNotExist(tabName: String) {
+ composeTestRule.onNodeWithText(tabName).assertDoesNotExist()
+ }
+
+ fun assertTabCount(expectedCount: Int) {
+ composeTestRule.onAllNodes(hasAnyAncestor(hasTestTag("courseDetailsTabRow")) and isSelectable())
+ .assertCountEquals(expectedCount)
+ }
+
fun clickComposeMessageFAB() {
composeTestRule.onNodeWithContentDescription("Send a message about this course").performClick()
+ composeTestRule.waitForIdle()
+ }
+
+ fun clickDiscussionCheckpointExpandCollapseIcon(discussionTitle: String) {
+ composeTestRule.onNode(hasTestTag("expandDiscussionCheckpoints") and hasParent(hasAnyDescendant(hasText(discussionTitle))), useUnmergedTree = true)
+ .performClick()
+ composeTestRule.waitForIdle()
+ }
+
+ fun assertDiscussionCheckpointDetails(additionalRepliesCount: Int, dueAtReplyToTopic: String, gradeReplyToTopic: String, statusReplyToTopic: String = "Not Submitted", dueAtAdditionalReplies: String = dueAtReplyToTopic, gradeAdditionalReplies: String = gradeReplyToTopic, statusAdditionalReplies: String = "Not Submitted") {
+ composeTestRule.onNode(hasTestTag("checkpointName") and hasText("Reply to topic"), useUnmergedTree = true).assertIsDisplayed()
+ composeTestRule.onNode(hasTestTag("checkpointDueDate_Reply to topic") and hasText(dueAtReplyToTopic), true).assertIsDisplayed()
+ composeTestRule.onNode(hasTestTag("checkpointGradeText") and hasText(gradeReplyToTopic), useUnmergedTree = true).assertIsDisplayed()
+ composeTestRule.onNode(hasTestTag("checkpointSubmissionStateLabel") and hasText(statusReplyToTopic) and hasAnySibling(hasTestTag("checkpointDueDate_Reply to topic")), useUnmergedTree = true).assertIsDisplayed()
+
+ composeTestRule.onNode(hasTestTag("checkpointName") and hasText("Additional replies ($additionalRepliesCount)"), useUnmergedTree = true).assertIsDisplayed()
+ composeTestRule.onNode(hasTestTag("checkpointDueDate_Additional replies ($additionalRepliesCount)") and hasText(dueAtAdditionalReplies), true).assertIsDisplayed()
+ composeTestRule.onNode(hasTestTag("checkpointGradeText") and hasText(gradeAdditionalReplies), useUnmergedTree = true).assertIsDisplayed()
+ composeTestRule.onNode(hasTestTag("checkpointSubmissionStateLabel") and hasText(statusAdditionalReplies) and hasAnySibling(hasTestTag("checkpointDueDate_Additional replies ($additionalRepliesCount)")), useUnmergedTree = true).assertIsDisplayed()
}
fun assertHasAssignmentWithCheckpoints(assignmentName: String, dueAtString: String = "No due date", dueAtStringSecondCheckpoint: String? = null, expectedGrade: String? = null) {
assertHasAssignmentCommon(assignmentName, dueAtString, dueAtStringSecondCheckpoint, expectedGrade, hasCheckPoints = true)
}
+ fun refresh() {
+ composeTestRule.onNodeWithTag("gradesList").performTouchInput { swipeDown() }
+ composeTestRule.waitForIdle()
+ }
+
private fun assertHasAssignmentCommon(assignmentName: String, assignmentDueAt: String?, secondCheckpointDueAt: String? = null, expectedGradeLabel: String? = null, assignmentStatus: String? = null, hasCheckPoints : Boolean = false) {
// Check if the assignment is a discussion with checkpoints, if yes, we are expecting 2 due dates for the 2 checkpoints.
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/utils/extensions/ParentTestExtensions.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/utils/extensions/ParentTestExtensions.kt
index 281d6beec0..121f28270a 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/utils/extensions/ParentTestExtensions.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/utils/extensions/ParentTestExtensions.kt
@@ -14,16 +14,19 @@
* along with this program. If not, see .
*
*/
-
package com.instructure.parentapp.utils.extensions
import com.instructure.canvas.espresso.CanvasTest
import com.instructure.canvasapi2.models.User
+import com.instructure.dataseeding.api.EnrollmentsApi
import com.instructure.dataseeding.api.SeedApi
+import com.instructure.dataseeding.api.UserApi
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.parentapp.features.login.LoginActivity
import com.instructure.parentapp.utils.ParentTest
+const val SUB_ACCOUNT_ID = 181364L
+
fun ParentTest.tokenLogin(user: CanvasUserApiModel) {
activityRule.runOnUiThread {
@@ -91,3 +94,36 @@ fun seedData(
)
return SeedApi.seedData(request)
}
+
+fun seedDataForK5(
+ teachers: Int = 0,
+ courses: Int = 0,
+ students: Int = 0,
+ parents: Int = 0,
+ homeroomCourses: Int = 0,
+ announcements: Int = 0
+): SeedApi.SeededDataApiModel {
+
+ val request = SeedApi.SeedDataRequest(
+ teachers = teachers,
+ students = students,
+ courses = courses,
+ homeroomCourses = homeroomCourses,
+ announcements = announcements,
+ accountId = SUB_ACCOUNT_ID
+ )
+ val data = SeedApi.seedDataForSubAccount(request)
+
+ val observedStudents = data.studentsList.take(students)
+ repeat(parents) {
+ val parent = UserApi.createCanvasUser()
+ data.addParents(parent)
+ observedStudents.forEach { student ->
+ data.coursesList.forEach { course ->
+ data.addEnrollments(EnrollmentsApi.enrollUserAsObserver(course.id, parent.id, student.id))
+ }
+ }
+ }
+
+ return data
+}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/di/DefaultBindingsModule.kt b/apps/parent/src/main/java/com/instructure/parentapp/di/DefaultBindingsModule.kt
index 72929c4b05..f32b780950 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/di/DefaultBindingsModule.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/di/DefaultBindingsModule.kt
@@ -22,11 +22,10 @@ import com.instructure.pandautils.features.dashboard.edit.EditDashboardRepositor
import com.instructure.pandautils.features.dashboard.edit.EditDashboardRouter
import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
import com.instructure.pandautils.features.dashboard.widget.conferences.ConferencesWidgetRouter
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetBehavior
import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
import com.instructure.pandautils.features.dashboard.widget.forecast.ForecastWidgetRouter
import com.instructure.pandautils.features.dashboard.widget.progress.ProgressWidgetRouter
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetBehavior
+import com.instructure.pandautils.features.dashboard.widget.todo.TodoHomeScreenWidgetUpdater
import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
import com.instructure.pandautils.features.discussion.details.DiscussionDetailsWebViewFragmentBehavior
import com.instructure.pandautils.features.discussion.router.DiscussionRouteHelperRepository
@@ -141,11 +140,6 @@ class DefaultBindingsModule {
throw NotImplementedError()
}
- @Provides
- fun provideCoursesWidgetBehavior(): CoursesWidgetBehavior {
- throw NotImplementedError()
- }
-
@Provides
fun provideForecastWidgetRouter(): ForecastWidgetRouter {
throw NotImplementedError()
@@ -167,7 +161,7 @@ class DefaultBindingsModule {
}
@Provides
- fun provideTodoWidgetBehavior(): TodoWidgetBehavior {
+ fun provideTodoHomeScreenWidgetUpdater(): TodoHomeScreenWidgetUpdater {
throw NotImplementedError()
}
}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/di/feature/CookieConsentModule.kt b/apps/parent/src/main/java/com/instructure/parentapp/di/feature/CookieConsentModule.kt
new file mode 100644
index 0000000000..8bd22d4b3b
--- /dev/null
+++ b/apps/parent/src/main/java/com/instructure/parentapp/di/feature/CookieConsentModule.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.parentapp.di.feature
+
+import com.instructure.canvasapi2.apis.UserAPI
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
+import com.instructure.pandautils.features.cookieconsent.AnalyticsConsentHandler
+import com.instructure.pandautils.features.cookieconsent.CookieConsentNamespace
+import com.instructure.pandautils.utils.FeatureFlagProvider
+import com.instructure.pandautils.utils.PendoTokenConfig
+import com.instructure.parentapp.BuildConfig
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+class CookieConsentModule {
+
+ @Provides
+ fun provideCookieConsentNamespace(): CookieConsentNamespace {
+ return CookieConsentNamespace.PARENT
+ }
+
+ @Provides
+ @Singleton
+ fun providePendoTokenConfig(): PendoTokenConfig {
+ return PendoTokenConfig(
+ fallbackToken = BuildConfig.PENDO_TOKEN,
+ apiTokenSelector = { it.pendoMobileParentApiKey }
+ )
+ }
+
+ @Provides
+ fun provideAnalyticsConsentHandler(
+ userApi: UserAPI.UsersInterface,
+ featureFlagProvider: FeatureFlagProvider,
+ consentPrefs: ConsentPrefs,
+ apiPrefs: ApiPrefs
+ ): AnalyticsConsentHandler {
+ return object : AnalyticsConsentHandler(userApi, featureFlagProvider, consentPrefs, apiPrefs) {}
+ }
+}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/di/feature/LoginModule.kt b/apps/parent/src/main/java/com/instructure/parentapp/di/feature/LoginModule.kt
index 92b23e3f60..3a16d51efd 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/di/feature/LoginModule.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/di/feature/LoginModule.kt
@@ -26,9 +26,11 @@ import com.instructure.canvasapi2.utils.Analytics
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.loginapi.login.LoginNavigation
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
import com.instructure.loginapi.login.util.LoginPrefs
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.parentapp.features.login.ParentAcceptableUsePolicyRouter
+import com.instructure.parentapp.features.login.ParentCookieConsentRouter
import com.instructure.parentapp.features.login.ParentLoginNavigation
import com.instructure.parentapp.features.login.SignInActivity
import dagger.Module
@@ -59,6 +61,11 @@ class LoginModule {
): LoginNavigation {
return ParentLoginNavigation(activity, alarmScheduler)
}
+
+ @Provides
+ fun provideCookieConsentRouter(activity: FragmentActivity): CookieConsentRouter {
+ return ParentCookieConsentRouter(activity)
+ }
}
@Module
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/di/feature/SplashModule.kt b/apps/parent/src/main/java/com/instructure/parentapp/di/feature/SplashModule.kt
index 9281cef0fb..45ad36c769 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/di/feature/SplashModule.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/di/feature/SplashModule.kt
@@ -36,9 +36,8 @@ class SplashModule {
fun provideSplashRepository(
userApi: UserAPI.UsersInterface,
themeApi: ThemeAPI.ThemeInterface,
- enrollmentApi: EnrollmentAPI.EnrollmentInterface,
- featuresApi: FeaturesAPI.FeaturesInterface
+ enrollmentApi: EnrollmentAPI.EnrollmentInterface
): SplashRepository {
- return SplashRepository(userApi, themeApi, enrollmentApi, featuresApi)
+ return SplashRepository(userApi, themeApi, enrollmentApi)
}
}
\ No newline at end of file
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/inbox/list/ParentInboxRouter.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/inbox/list/ParentInboxRouter.kt
index 6e58aa5199..a7a6f254b4 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/inbox/list/ParentInboxRouter.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/inbox/list/ParentInboxRouter.kt
@@ -22,6 +22,7 @@ import androidx.fragment.app.FragmentActivity
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.models.Attachment
import com.instructure.canvasapi2.models.Conversation
+import com.instructure.canvasapi2.models.MediaComment
import com.instructure.pandautils.features.inbox.list.InboxRouter
import com.instructure.pandautils.features.inbox.utils.InboxComposeOptions
import com.instructure.pandautils.utils.FileDownloader
@@ -63,6 +64,10 @@ class ParentInboxRouter(
fileDownloader.downloadFileToDevice(attachment)
}
+ override fun routeToMediaAttachment(mediaComment: MediaComment) {
+ fileDownloader.downloadFileToDevice(mediaComment.url, mediaComment.displayName, mediaComment.contentType)
+ }
+
override fun popDetailsScreen(activity: FragmentActivity?) {
activity?.onBackPressed()
}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentAcceptableUsePolicyRouter.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentAcceptableUsePolicyRouter.kt
index 20d973531e..403484184c 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentAcceptableUsePolicyRouter.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentAcceptableUsePolicyRouter.kt
@@ -22,10 +22,10 @@ import androidx.fragment.app.FragmentActivity
import com.instructure.canvasapi2.utils.Analytics
import com.instructure.canvasapi2.utils.AnalyticsEventConstants
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentActivity
import com.instructure.loginapi.login.tasks.LogoutTask
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.parentapp.R
-import com.instructure.parentapp.features.main.MainActivity
import com.instructure.parentapp.features.webview.HtmlContentActivity
import com.instructure.parentapp.util.ParentLogoutTask
@@ -42,8 +42,9 @@ class ParentAcceptableUsePolicyRouter(
override fun startApp() {
CookieManager.getInstance().flush()
- val intent = Intent(activity, MainActivity::class.java)
+ val intent = Intent(activity, CookieConsentActivity::class.java)
activity.intent?.extras?.let { intent.putExtras(it) }
+ intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
activity.startActivity(intent)
}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentCookieConsentRouter.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentCookieConsentRouter.kt
new file mode 100644
index 0000000000..98c66750f3
--- /dev/null
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/login/ParentCookieConsentRouter.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.parentapp.features.login
+
+import android.content.Intent
+import androidx.fragment.app.FragmentActivity
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
+import com.instructure.parentapp.features.main.MainActivity
+
+class ParentCookieConsentRouter(
+ private val activity: FragmentActivity
+) : CookieConsentRouter {
+
+ override fun startApp() {
+ val intent = Intent(activity, MainActivity::class.java)
+ activity.intent?.extras?.let { intent.putExtras(it) }
+ intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+ activity.startActivity(intent)
+ }
+}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorAction.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorAction.kt
index 32385dabf0..20d7717bea 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorAction.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorAction.kt
@@ -29,4 +29,5 @@ sealed class RouteValidatorAction {
data class ShowToast(val message: String) : RouteValidatorAction()
data class StartSignInActivity(val accountDomain: AccountDomain) : RouteValidatorAction()
data object StartLoginActivity : RouteValidatorAction()
+ data object StartCookieConsent : RouteValidatorAction()
}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorActivity.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorActivity.kt
index bb7a1081df..5d3f44dd4c 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorActivity.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorActivity.kt
@@ -30,6 +30,7 @@ import com.instructure.pandautils.binding.viewBinding
import com.instructure.pandautils.utils.Const
import com.instructure.pandautils.utils.collectOneOffEvents
import com.instructure.parentapp.databinding.ActivityRouteValidatorBinding
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentActivity
import com.instructure.parentapp.features.login.LoginActivity
import com.instructure.parentapp.features.login.SignInActivity
import com.instructure.parentapp.features.main.MainActivity
@@ -60,6 +61,7 @@ class RouteValidatorActivity : BaseCanvasActivity() {
is RouteValidatorAction.ShowToast -> Toast.makeText(this, action.message, Toast.LENGTH_LONG).show()
is RouteValidatorAction.StartSignInActivity -> startSignInActivity(action.accountDomain)
is RouteValidatorAction.StartLoginActivity -> startLoginActivity()
+ is RouteValidatorAction.StartCookieConsent -> startCookieConsent()
}
}
@@ -92,6 +94,13 @@ class RouteValidatorActivity : BaseCanvasActivity() {
finish()
}
+ private fun startCookieConsent() {
+ val intent = Intent(this, CookieConsentActivity::class.java)
+ intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+ startActivity(intent)
+ finish()
+ }
+
companion object {
fun createIntent(context: Context, uri: Uri): Intent {
val intent = Intent(context, RouteValidatorActivity::class.java)
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorViewModel.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorViewModel.kt
index 63448e453d..51b7c66876 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorViewModel.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/login/routevalidator/RouteValidatorViewModel.kt
@@ -108,7 +108,7 @@ class RouteValidatorViewModel @Inject constructor(
} else {
// Log the analytics - only for real logins, not masquerading
logQREvent(apiPrefs.domain, true)
- postActionWithDelay(RouteValidatorAction.StartMainActivity())
+ postActionWithDelay(RouteValidatorAction.StartCookieConsent)
}
return@tryLaunch
} catch (e: Throwable) {
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviour.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviour.kt
index 16a0c73b6b..cd19f74c9c 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviour.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviour.kt
@@ -26,7 +26,7 @@ class ParentSettingsBehaviour(private val selectedStudentHolder: SelectedStudent
get() = mapOf(
R.string.preferences to listOf(SettingsItem.APP_THEME),
R.string.inboxSettingsTitle to listOf(SettingsItem.INBOX_SIGNATURE),
- R.string.legal to listOf(SettingsItem.ABOUT, SettingsItem.LEGAL)
+ R.string.legal to listOf(SettingsItem.ABOUT, SettingsItem.LEGAL, SettingsItem.PRIVACY)
)
override suspend fun applyAppSpecificColorSettings() {
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsRouter.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsRouter.kt
index 09814a3b77..b8dd82c587 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsRouter.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/settings/ParentSettingsRouter.kt
@@ -24,4 +24,8 @@ class ParentSettingsRouter(private val navigation: Navigation, private val activ
override fun navigateToInboxSignature() {
navigation.navigate(activity, navigation.inboxSignatureSettings)
}
+
+ override fun navigateToPrivacySettings() {
+ navigation.navigate(activity, navigation.privacySettings)
+ }
}
\ No newline at end of file
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashRepository.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashRepository.kt
index 168868afdd..3278ff7ded 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashRepository.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashRepository.kt
@@ -18,23 +18,19 @@
package com.instructure.parentapp.features.splash
import com.instructure.canvasapi2.apis.EnrollmentAPI
-import com.instructure.canvasapi2.apis.FeaturesAPI
import com.instructure.canvasapi2.apis.ThemeAPI
import com.instructure.canvasapi2.apis.UserAPI
import com.instructure.canvasapi2.builders.RestParams
-import com.instructure.canvasapi2.managers.FeaturesManager
import com.instructure.canvasapi2.models.CanvasColor
import com.instructure.canvasapi2.models.CanvasTheme
import com.instructure.canvasapi2.models.User
import com.instructure.canvasapi2.utils.depaginate
-import com.instructure.pandautils.utils.orDefault
class SplashRepository(
private val userApi: UserAPI.UsersInterface,
private val themeApi: ThemeAPI.ThemeInterface,
- private val enrollmentApi: EnrollmentAPI.EnrollmentInterface,
- private val featuresApi: FeaturesAPI.FeaturesInterface
+ private val enrollmentApi: EnrollmentAPI.EnrollmentInterface
) {
suspend fun getSelf(): User? {
@@ -70,9 +66,4 @@ class SplashRepository(
val params = RestParams(isForceReadFromNetwork = true)
return userApi.getBecomeUserPermission(params).dataOrNull?.becomeUser ?: false
}
-
- suspend fun getSendUsageMetrics(): Boolean {
- val params = RestParams(isForceReadFromNetwork = true)
- return featuresApi.getEnvironmentFeatureFlags(params).dataOrNull?.get(FeaturesManager.SEND_USAGE_METRICS).orDefault()
- }
}
\ No newline at end of file
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashViewModel.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashViewModel.kt
index c2ca03f046..f3b26c5365 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashViewModel.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashViewModel.kt
@@ -25,16 +25,15 @@ import com.instructure.canvasapi2.models.User
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.canvasapi2.utils.weave.catch
import com.instructure.canvasapi2.utils.weave.tryLaunch
+import com.instructure.pandautils.domain.usecase.splash.SetupPendoTrackingUseCase
import com.instructure.pandautils.utils.ColorKeeper
import com.instructure.pandautils.utils.Const
import com.instructure.pandautils.utils.FeatureFlagProvider
-import com.instructure.pandautils.utils.SHA256
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
-import sdk.pendo.io.Pendo
import javax.inject.Inject
@@ -45,6 +44,7 @@ class SplashViewModel @Inject constructor(
private val apiPrefs: ApiPrefs,
private val colorKeeper: ColorKeeper,
private val featureFlagProvider: FeatureFlagProvider,
+ private val setupPendoTrackingUseCase: SetupPendoTrackingUseCase,
savedStateHandle: SavedStateHandle
) : ViewModel() {
@@ -83,19 +83,7 @@ class SplashViewModel @Inject constructor(
}
}
- val sendUsageMetrics = repository.getSendUsageMetrics()
- if (sendUsageMetrics) {
- val userWithIds = repository.getSelfWithUuid()
- val visitorData = mapOf(
- "locale" to apiPrefs.effectiveLocale,
- )
- val accountData = mapOf(
- "surveyOptOut" to featureFlagProvider.checkAccountSurveyNotificationsFlag()
- )
- Pendo.startSession(userWithIds?.uuid?.SHA256().orEmpty(), userWithIds?.accountUuid.orEmpty(), visitorData, accountData)
- } else {
- Pendo.endSession()
- }
+ setupPendoTrackingUseCase(Unit)
val students = repository.getStudents()
if (students.isEmpty() && apiPrefs.canBecomeUser == false) {
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/features/webview/SimpleWebViewFragment.kt b/apps/parent/src/main/java/com/instructure/parentapp/features/webview/SimpleWebViewFragment.kt
index b9edc48c44..861a69e8f1 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/features/webview/SimpleWebViewFragment.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/features/webview/SimpleWebViewFragment.kt
@@ -174,6 +174,20 @@ class SimpleWebViewFragment : BaseCanvasFragment(), NavigationCallbacks {
}
}
+ webView.setMediaDownloadCallback(object : CanvasWebView.MediaDownloadCallback {
+ override fun downloadMedia(mime: String?, url: String?, filename: String?) {
+ if (!limitWebAccess) {
+ viewModel.downloadFile(mime.orEmpty(), url.orEmpty(), filename.orEmpty())
+ }
+ }
+
+ override fun downloadInternalMedia(mime: String?, url: String?, filename: String?) {
+ if (!limitWebAccess) {
+ viewModel.downloadFile(mime.orEmpty(), url.orEmpty(), filename.orEmpty())
+ }
+ }
+ })
+
webView.loadUrl(mainUrl)
}
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/util/AppManager.kt b/apps/parent/src/main/java/com/instructure/parentapp/util/AppManager.kt
index 0efb1d3334..d74336b31f 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/util/AppManager.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/util/AppManager.kt
@@ -20,9 +20,7 @@ package com.instructure.parentapp.util
import androidx.hilt.work.HiltWorkerFactory
import com.instructure.loginapi.login.tasks.LogoutTask
import com.instructure.pandautils.features.reminder.AlarmScheduler
-import com.instructure.parentapp.BuildConfig
import dagger.hilt.android.HiltAndroidApp
-import sdk.pendo.io.Pendo
import javax.inject.Inject
@@ -38,11 +36,6 @@ class AppManager : BaseAppManager() {
@Inject
lateinit var flutterAppMigration: FlutterAppMigration
- override fun onCreate() {
- super.onCreate()
- initPendo()
- }
-
override fun performLogoutOnAuthError() {
ParentLogoutTask(LogoutTask.Type.LOGOUT, null, getScheduler()).execute()
}
@@ -57,8 +50,4 @@ class AppManager : BaseAppManager() {
flutterAppMigration.migrateIfNecessary()
}
- private fun initPendo() {
- val options = Pendo.PendoOptions.Builder().setJetpackComposeBeta(true).build()
- Pendo.setup(this, BuildConfig.PENDO_TOKEN, options, null)
- }
}
\ No newline at end of file
diff --git a/apps/parent/src/main/java/com/instructure/parentapp/util/navigation/Navigation.kt b/apps/parent/src/main/java/com/instructure/parentapp/util/navigation/Navigation.kt
index 48429754f4..1f729130b1 100644
--- a/apps/parent/src/main/java/com/instructure/parentapp/util/navigation/Navigation.kt
+++ b/apps/parent/src/main/java/com/instructure/parentapp/util/navigation/Navigation.kt
@@ -28,6 +28,7 @@ import com.instructure.pandautils.features.inbox.utils.InboxComposeOptions
import com.instructure.pandautils.features.lti.LtiLaunchFragment
import com.instructure.pandautils.features.settings.SettingsFragment
import com.instructure.pandautils.features.settings.inboxsignature.InboxSignatureFragment
+import com.instructure.pandautils.features.privacysettings.PrivacySettingsFragment
import com.instructure.pandautils.utils.Const
import com.instructure.pandautils.utils.fromJson
import com.instructure.pandautils.utils.toJson
@@ -80,6 +81,7 @@ class Navigation(apiPrefs: ApiPrefs) {
val qrPairing = "$baseUrl/qr-pairing"
val settings = "$baseUrl/settings"
val inboxSignatureSettings = "$baseUrl/inboxSignatureSettings"
+ val privacySettings = "$baseUrl/privacySettings"
private fun splashRoute(qrCodeMasqueradeId: Long) = "$baseUrl/splash/$qrCodeMasqueradeId"
fun assignmentDetailsRoute(courseId: Long, assignmentId: Long) = "$baseUrl/courses/${courseId}/assignments/${assignmentId}"
@@ -280,6 +282,7 @@ class Navigation(apiPrefs: ApiPrefs) {
}
}
fragment(inboxSignatureSettings)
+ fragment(privacySettings)
}
}
diff --git a/apps/parent/src/test/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviourTest.kt b/apps/parent/src/test/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviourTest.kt
index e471698479..03c0d6e542 100644
--- a/apps/parent/src/test/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviourTest.kt
+++ b/apps/parent/src/test/java/com/instructure/parentapp/features/settings/ParentSettingsBehaviourTest.kt
@@ -38,7 +38,8 @@ class ParentSettingsBehaviourTest {
R.string.inboxSettingsTitle to listOf(SettingsItem.INBOX_SIGNATURE),
R.string.legal to listOf(
SettingsItem.ABOUT,
- SettingsItem.LEGAL
+ SettingsItem.LEGAL,
+ SettingsItem.PRIVACY
)
)
diff --git a/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashRepositoryTest.kt b/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashRepositoryTest.kt
index 978f7c49fb..17b06b9def 100644
--- a/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashRepositoryTest.kt
+++ b/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashRepositoryTest.kt
@@ -18,11 +18,9 @@
package com.instructure.parentapp.features.splash
import com.instructure.canvasapi2.apis.EnrollmentAPI
-import com.instructure.canvasapi2.apis.FeaturesAPI
import com.instructure.canvasapi2.apis.ThemeAPI
import com.instructure.canvasapi2.apis.UserAPI
import com.instructure.canvasapi2.builders.RestParams
-import com.instructure.canvasapi2.managers.FeaturesManager
import com.instructure.canvasapi2.models.BecomeUserPermission
import com.instructure.canvasapi2.models.CanvasColor
import com.instructure.canvasapi2.models.CanvasTheme
@@ -45,9 +43,8 @@ class SplashRepositoryTest {
private val themeApi: ThemeAPI.ThemeInterface = mockk(relaxed = true)
private val userApi: UserAPI.UsersInterface = mockk(relaxed = true)
private val enrollmentApi: EnrollmentAPI.EnrollmentInterface = mockk(relaxed = true)
- private val featuresApi: FeaturesAPI.FeaturesInterface = mockk(relaxed = true)
- private val repository = SplashRepository(userApi, themeApi, enrollmentApi, featuresApi)
+ private val repository = SplashRepository(userApi, themeApi, enrollmentApi)
@Test
fun `Get students successfully returns data`() = runTest {
@@ -155,34 +152,6 @@ class SplashRepositoryTest {
assertFalse(result)
}
- @Test
- fun `Get send usage metrics returns false when feature flag is disabled`() = runTest {
- coEvery { featuresApi.getEnvironmentFeatureFlags(any()) } returns DataResult.Success(
- mapOf(FeaturesManager.SEND_USAGE_METRICS to false)
- )
-
- val result = repository.getSendUsageMetrics()
- assertFalse(result)
- }
-
- @Test
- fun `Get send usage metrics returns true when feature flag is enabled`() = runTest {
- coEvery { featuresApi.getEnvironmentFeatureFlags(any()) } returns DataResult.Success(
- mapOf(FeaturesManager.SEND_USAGE_METRICS to true)
- )
-
- val result = repository.getSendUsageMetrics()
- assertTrue(result)
- }
-
- @Test
- fun `Get send usage metrics returns false when call fails`() = runTest {
- coEvery { featuresApi.getEnvironmentFeatureFlags(any()) } returns DataResult.Fail()
-
- val result = repository.getSendUsageMetrics()
- assertFalse(result)
- }
-
@Test
fun `Get user with UUID successfully returns data`() = runTest {
val expected = User(id = 1L, uuid = "uuid", accountUuid = "accountUuid")
diff --git a/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashViewModelTest.kt b/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashViewModelTest.kt
index c1685dd2ef..f474cb937d 100644
--- a/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashViewModelTest.kt
+++ b/apps/parent/src/test/java/com/instructure/parentapp/features/splash/SplashViewModelTest.kt
@@ -28,6 +28,7 @@ import com.instructure.canvasapi2.models.CanvasTheme
import com.instructure.canvasapi2.models.User
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.canvasapi2.utils.ContextKeeper
+import com.instructure.pandautils.domain.usecase.splash.SetupPendoTrackingUseCase
import com.instructure.pandautils.utils.ColorKeeper
import com.instructure.pandautils.utils.Const
import com.instructure.pandautils.utils.FeatureFlagProvider
@@ -35,7 +36,6 @@ import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.mockk
-import io.mockk.mockkStatic
import io.mockk.unmockkAll
import io.mockk.verify
import kotlinx.coroutines.Dispatchers
@@ -51,7 +51,6 @@ import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Rule
import org.junit.Test
-import sdk.pendo.io.Pendo
@ExperimentalCoroutinesApi
@@ -70,6 +69,7 @@ class SplashViewModelTest {
private val colorKeeper: ColorKeeper = mockk(relaxed = true)
private val savedStateHandle = mockk(relaxed = true)
private val featureFlagProvider = mockk(relaxed = true)
+ private val setupPendoTrackingUseCase = mockk(relaxed = true)
private lateinit var viewModel: SplashViewModel
@@ -80,9 +80,6 @@ class SplashViewModelTest {
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
Dispatchers.setMain(testDispatcher)
ContextKeeper.appContext = context
- mockkStatic(Pendo::class)
- every { Pendo.startSession(any(), any(), any(), any()) } returns Unit
- every { Pendo.endSession() } returns Unit
}
@After
@@ -259,30 +256,14 @@ class SplashViewModelTest {
verify(exactly = 0) { apiPrefs.canBecomeUser = any() }
}
- @Test
- fun `Send usage metrics enabled`() = runTest {
- coEvery { repository.getSendUsageMetrics() } returns true
-
- createViewModel()
-
- backgroundScope.launch(testDispatcher) {
- viewModel.events.toList()
- }
-
- verify { Pendo.startSession(any(), any(), any(), any()) }
- }
-
- @Test
- fun `Send usage metrics disabled`() = runTest {
- coEvery { repository.getSendUsageMetrics() } returns false
-
+ fun `Setup pendo tracking use case is invoked on load`() = runTest {
createViewModel()
backgroundScope.launch(testDispatcher) {
viewModel.events.toList()
}
- verify { Pendo.endSession() }
+ coVerify { setupPendoTrackingUseCase(Unit) }
}
private fun createViewModel() {
@@ -292,6 +273,7 @@ class SplashViewModelTest {
apiPrefs = apiPrefs,
colorKeeper = colorKeeper,
featureFlagProvider = featureFlagProvider,
+ setupPendoTrackingUseCase = setupPendoTrackingUseCase,
savedStateHandle = savedStateHandle
)
}
diff --git a/apps/parent/src/test/java/com/instructure/parentapp/features/webview/SimpleWebViewRepositoryTest.kt b/apps/parent/src/test/java/com/instructure/parentapp/features/webview/SimpleWebViewRepositoryTest.kt
index 75b2aa9f1d..750b05fefe 100644
--- a/apps/parent/src/test/java/com/instructure/parentapp/features/webview/SimpleWebViewRepositoryTest.kt
+++ b/apps/parent/src/test/java/com/instructure/parentapp/features/webview/SimpleWebViewRepositoryTest.kt
@@ -39,7 +39,7 @@ class SimpleWebViewRepositoryTest {
fun `Get authenticated session successfully returns data`() = runTest {
val expected = "sessionUrl"
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Success(AuthenticatedSession(sessionUrl = expected))
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(AuthenticatedSession(sessionUrl = expected))
val result = repository.getAuthenticatedSession("url")
Assert.assertEquals(expected, result)
@@ -47,7 +47,7 @@ class SimpleWebViewRepositoryTest {
@Test(expected = IllegalStateException::class)
fun `Get authenticated session fails throws exception`() = runTest {
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Fail()
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Fail()
repository.getAuthenticatedSession("url")
}
diff --git a/apps/parent/src/test/java/com/instructure/parentapp/login/routevalidator/RouteValidatorViewModelTest.kt b/apps/parent/src/test/java/com/instructure/parentapp/login/routevalidator/RouteValidatorViewModelTest.kt
index 94f0c3003c..91302e5e0f 100644
--- a/apps/parent/src/test/java/com/instructure/parentapp/login/routevalidator/RouteValidatorViewModelTest.kt
+++ b/apps/parent/src/test/java/com/instructure/parentapp/login/routevalidator/RouteValidatorViewModelTest.kt
@@ -153,7 +153,7 @@ class RouteValidatorViewModelTest {
every { apiPrefs.getValidToken() } returns ""
every { qrLogin.verifySSOLoginUri(any()) } returns true
coEvery { qrLogin.performSSOLogin(any(), any(), any()) } returns OAuthTokenResponse()
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Success(AuthenticatedSession("sessionUrl"))
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(AuthenticatedSession("sessionUrl"))
createViewModel()
@@ -166,7 +166,7 @@ class RouteValidatorViewModelTest {
Assert.assertEquals(RouteValidatorAction.LoadWebViewUrl("sessionUrl"), events.last())
delay(800)
- Assert.assertEquals(RouteValidatorAction.StartMainActivity(), events.last())
+ Assert.assertEquals(RouteValidatorAction.StartCookieConsent, events.last())
}
@Test
@@ -177,7 +177,7 @@ class RouteValidatorViewModelTest {
realUser = TokenUser(1, "", ""),
user = TokenUser(1, "", "")
)
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Success(AuthenticatedSession("sessionUrl"))
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(AuthenticatedSession("sessionUrl"))
createViewModel()
diff --git a/apps/settings.gradle b/apps/settings.gradle
index 99bd1d48a7..8c64adf2d4 100644
--- a/apps/settings.gradle
+++ b/apps/settings.gradle
@@ -23,23 +23,25 @@ include ':canvas-api-2'
include ':dataseedingapi'
include ':espresso'
include ':interactions'
-include ":jazzyviewpager"
include ':login-api-2'
include ':pandautils'
include ':rceditor'
include ':recyclerview'
include ':pandares'
include ':horizon'
+include ':ngc'
+include ':instui'
project(':annotations').projectDir = new File(rootProject.projectDir, '/../libs/annotations')
project(':canvas-api-2').projectDir = new File(rootProject.projectDir, '/../libs/canvas-api-2')
project(':dataseedingapi').projectDir = new File(rootProject.projectDir, '/../automation/dataseedingapi')
project(':espresso').projectDir = new File(rootProject.projectDir, '/../automation/espresso')
project(':interactions').projectDir = new File(rootProject.projectDir, '/../libs/interactions')
-project(':jazzyviewpager').projectDir = new File(rootProject.projectDir, '/../libs/jazzyviewpager')
project(':login-api-2').projectDir = new File(rootProject.projectDir, '/../libs/login-api-2')
project(':pandautils').projectDir = new File(rootProject.projectDir, '/../libs/pandautils')
project(':rceditor').projectDir = new File(rootProject.projectDir, '/../libs/rceditor')
project(':recyclerview').projectDir = new File(rootProject.projectDir, '/../libs/recyclerview')
project(':pandares').projectDir = new File(rootProject.projectDir, '/../libs/pandares')
project(':horizon').projectDir = new File(rootProject.projectDir, '/../libs/horizon')
+project(':ngc').projectDir = new File(rootProject.projectDir, '/../libs/ngc')
+project(':instui').projectDir = new File(rootProject.projectDir, '/../libs/instui')
diff --git a/apps/student/build.gradle b/apps/student/build.gradle
index 27bd9e9bf2..ba11bd15a7 100644
--- a/apps/student/build.gradle
+++ b/apps/student/build.gradle
@@ -25,9 +25,9 @@ apply plugin: 'org.jetbrains.kotlin.plugin.compose'
def updatePriority = 2
def coverageEnabled = project.hasProperty('coverage')
-configurations {
- all*.exclude group: 'commons-logging', module: 'commons-logging'
- all*.exclude group: 'org.apache.httpcomponents', module: 'httpclient'
+configurations.configureEach {
+ exclude group: 'commons-logging', module: 'commons-logging'
+ exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
android {
@@ -38,8 +38,8 @@ android {
applicationId "com.instructure.candroid"
minSdkVersion Versions.MIN_SDK
targetSdkVersion Versions.TARGET_SDK
- versionCode = 289
- versionName = '8.6.1'
+ versionCode = 291
+ versionName = '8.7.1'
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner 'com.instructure.student.espresso.StudentHiltTestRunner'
@@ -166,17 +166,19 @@ android {
testOptions.unitTests.includeAndroidResources = true
testOptions.animationsDisabled = true
- configurations.all {
- resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
- /*
- Resolves dependency versions across test and production APKs, specifically, transitive
- dependencies. This is required since Espresso internally has a dependency on support-annotations.
- https://github.com/googlecodelabs/android-testing/blob/57852eaf7df88ddaf828eca879a407f2249d5348/app/build.gradle#L86
- */
- resolutionStrategy.force Libs.ANDROIDX_ANNOTATION
-
- resolutionStrategy.force Libs.KOTLIN_COROUTINES_CORE
- resolutionStrategy.force Libs.KOTLIN_STD_LIB
+ configurations.configureEach {
+ if (canBeResolved) {
+ resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
+ /*
+ Resolves dependency versions across test and production APKs, specifically, transitive
+ dependencies. This is required since Espresso internally has a dependency on support-annotations.
+ https://github.com/googlecodelabs/android-testing/blob/57852eaf7df88ddaf828eca879a407f2249d5348/app/build.gradle#L86
+ */
+ resolutionStrategy.force Libs.ANDROIDX_ANNOTATION
+
+ resolutionStrategy.force Libs.KOTLIN_COROUTINES_CORE
+ resolutionStrategy.force Libs.KOTLIN_STD_LIB
+ }
}
/*
@@ -237,6 +239,7 @@ dependencies {
implementation project(path: ':rceditor')
implementation project(path: ':interactions')
implementation project(path: ':horizon')
+ implementation project(path: ':ngc')
/* Android Test Dependencies */
androidTestImplementation project(path: ':espresso')
diff --git a/apps/student/release_tests/flank_e2e_offline_release.yml b/apps/student/release_tests/flank_e2e_offline_release.yml
new file mode 100644
index 0000000000..5dbbcd188c
--- /dev/null
+++ b/apps/student/release_tests/flank_e2e_offline_release.yml
@@ -0,0 +1,26 @@
+gcloud:
+ project: delta-essence-114723
+# Use the next two lines to run locally
+# app: ../build/outputs/apk/qa/debug/student-qa-debug.apk
+# test: ../build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ app: ../apps/student/build/outputs/apk/qa/debug/student-qa-debug.apk
+ test: ../apps/student/build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ results-bucket: android-student
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - annotation com.instructure.canvas.espresso.annotations.OfflineE2E
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
+
diff --git a/apps/student/release_tests/flank_e2e_release.yml b/apps/student/release_tests/flank_e2e_release.yml
new file mode 100644
index 0000000000..29e6ae0451
--- /dev/null
+++ b/apps/student/release_tests/flank_e2e_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+# Use the next two lines to run locally
+# app: ../build/outputs/apk/qa/debug/student-qa-debug.apk
+# test: ../build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ app: ../apps/student/build/outputs/apk/qa/debug/student-qa-debug.apk
+ test: ../apps/student/build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ results-bucket: android-student
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - annotation com.instructure.canvas.espresso.annotations.E2E
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/student/release_tests/flank_landscape_interaction_release.yml b/apps/student/release_tests/flank_landscape_interaction_release.yml
new file mode 100644
index 0000000000..d71fa6399d
--- /dev/null
+++ b/apps/student/release_tests/flank_landscape_interaction_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+# Use the next two lines to run locally
+# app: ../build/outputs/apk/qa/debug/student-qa-debug.apk
+# test: ../build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ app: ../apps/student/build/outputs/apk/qa/debug/student-qa-debug.apk
+ test: ../apps/student/build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ results-bucket: android-student
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.StubLandscape, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: landscape
+
+flank:
+ testShards: 10
+ testRuns: 1
+
diff --git a/apps/student/release_tests/flank_portrait_interaction_release.yml b/apps/student/release_tests/flank_portrait_interaction_release.yml
new file mode 100644
index 0000000000..af54f37f10
--- /dev/null
+++ b/apps/student/release_tests/flank_portrait_interaction_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+# Use the next two lines to run locally
+# app: ../build/intermediates/apk/qa/debug/student-qa-debug.apk
+# test: ../build/intermediates/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ app: ../apps/student/build/outputs/apk/qa/debug/student-qa-debug.apk
+ test: ../apps/student/build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ results-bucket: android-student
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
+
diff --git a/apps/student/release_tests/flank_tablet_interaction_release.yml b/apps/student/release_tests/flank_tablet_interaction_release.yml
new file mode 100644
index 0000000000..a17ea52dd0
--- /dev/null
+++ b/apps/student/release_tests/flank_tablet_interaction_release.yml
@@ -0,0 +1,29 @@
+gcloud:
+ project: delta-essence-114723
+# Use the next two lines to run locally
+# app: ../build/outputs/apk/qa/debug/student-qa-debug.apk
+# test: ../build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ app: ../apps/student/build/outputs/apk/qa/debug/student-qa-debug.apk
+ test: ../apps/student/build/outputs/apk/androidTest/qa/debug/student-qa-debug-androidTest.apk
+ results-bucket: android-student
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.StubTablet, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: MediumTablet.arm
+ version: 29
+ locale: en_US
+ orientation: landscape
+ - model: MediumTablet.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
+
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt
index eec078207e..9838344829 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt
index bf8ed827c7..a0be1ffab3 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt
@@ -22,7 +22,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.ConferencesApi
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt
index e82d90f94f..d2d2fa6497 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt
@@ -26,7 +26,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.FileFolderApi
import com.instructure.dataseeding.api.FileUploadsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt
index b679ab3742..b9dab39d0d 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt
@@ -28,7 +28,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.managers.DiscussionManager
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.weave.awaitApiResponse
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/GradesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/GradesE2ETest.kt
index 0878f955e8..e0f42a3526 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/GradesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/GradesE2ETest.kt
@@ -24,6 +24,7 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.dataseeding.api.AssignmentsApi
+import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.QuizzesApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.GradingType
@@ -219,6 +220,103 @@ class GradesE2ETest: StudentComposeTest() {
gradesPage.assertAllAssignmentItemCount(3)
}
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.GRADES, TestCategory.E2E)
+ fun testShowOnlyLetterGradeOnGradesPageE2E() {
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(teachers = 1, courses = 1, students = 1)
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
+ val pointsTextAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
+ tokenLogin(student)
+ dashboardPage.waitForRender()
+
+ Log.d(PREPARATION_TAG, "Grade submission: '${pointsTextAssignment.name}' with 12 points.")
+ SubmissionsApi.gradeSubmission(teacher.token, course.id, pointsTextAssignment.id, student.id, postedGrade = "12")
+
+ Log.d(ASSERTION_TAG, "Assert that the grade is not displayed on the course's card by default.")
+ dashboardPage.assertCourseGradeNotDisplayed(course.name, "N/A", false)
+
+ Log.d(STEP_TAG, "Toggle ON 'Show Grades' and navigate back to Dashboard Page.")
+ leftSideNavigationDrawerPage.setShowGrades(true)
+
+ Log.d(ASSERTION_TAG, "Assert that the grade is displayed on the course's card.")
+ dashboardPage.assertCourseGrade(course.name, "N/A")
+
+ Log.d(PREPARATION_TAG, "Update '${course.name}' course's settings: Enable restriction for quantitative data.")
+ val restrictQuantitativeDataMap = mutableMapOf()
+ restrictQuantitativeDataMap["restrict_quantitative_data"] = true
+ CoursesApi.updateCourseSettings(course.id, restrictQuantitativeDataMap)
+
+ Log.d(ASSERTION_TAG, "Refresh the Dashboard page. Assert that the course grade is B-, as it is converted to letter grade because of the restriction.")
+ retryWithIncreasingDelay(times = 15, maxDelay = 5000) {
+ dashboardPage.refresh()
+ dashboardPage.assertCourseGrade(course.name, "B-")
+ }
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
+ val percentageAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.PERCENT, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Grade submission: '${percentageAssignment.name}' with 66% of the maximum points (aka. 10).")
+ SubmissionsApi.gradeSubmission(teacher.token, course.id, percentageAssignment.id, student.id, postedGrade = "10")
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
+ val letterGradeAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Grade submission: '${letterGradeAssignment.name}' with C.")
+ SubmissionsApi.gradeSubmission(teacher.token, course.id, letterGradeAssignment.id, student.id, postedGrade = "C")
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
+ val passFailAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.PASS_FAIL, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Grade submission: '${passFailAssignment.name}' with 'Incomplete'.")
+ SubmissionsApi.gradeSubmission(teacher.token, course.id, passFailAssignment.id, student.id, postedGrade = "Incomplete")
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
+ val gpaScaleAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.GPA_SCALE, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Grade submission: '${gpaScaleAssignment.name}' with 3.7.")
+ SubmissionsApi.gradeSubmission(teacher.token, course.id, gpaScaleAssignment.id, student.id, postedGrade = "3.7")
+
+ Log.d(STEP_TAG, "Refresh the Dashboard page to let the newly added submissions and their grades propagate.")
+ dashboardPage.refresh()
+
+ Log.d(STEP_TAG, "Select course: '${course.name}'. Select 'Grades' menu.")
+ dashboardPage.selectCourse(course)
+ courseBrowserPage.selectGrades()
+
+ Log.d(ASSERTION_TAG, "Assert that the Total Grade is 'F' and all of the assignment grades are displayed properly (so they have been converted to letter grade).")
+ gradesPage.assertTotalGradeText("F")
+ gradesPage.assertAssignmentGradeText(pointsTextAssignment.name, "B-")
+ gradesPage.assertAssignmentGradeText(percentageAssignment.name, "D")
+ gradesPage.assertAssignmentGradeText(letterGradeAssignment.name, "C")
+ gradesPage.assertAssignmentGradeText(passFailAssignment.name, "Incomplete")
+ gradesPage.assertAssignmentGradeText(gpaScaleAssignment.name, "F")
+
+ Log.d(PREPARATION_TAG, "Update '${course.name}' course's settings: Disable restriction for quantitative data.")
+ restrictQuantitativeDataMap["restrict_quantitative_data"] = false
+ CoursesApi.updateCourseSettings(course.id, restrictQuantitativeDataMap)
+
+ Log.d(STEP_TAG, "Swipe to the top of the Course Grades Page and refresh it.")
+ gradesPage.scrollDownScreen() // First go to the top of the recycler view
+ gradesPage.refresh() // Actual refresh
+
+ Log.d(ASSERTION_TAG, "Assert that the Total Grade is '49.47%' and all of the assignment grades are displayed properly. We now show numeric grades because restriction to quantitative data has been disabled.")
+ gradesPage.assertTotalGradeText("49.47%")
+ gradesPage.assertAssignmentGradeText(pointsTextAssignment.name, "12/15")
+ gradesPage.assertAssignmentGradeText(percentageAssignment.name, "66.67%")
+ gradesPage.assertAssignmentGradeText(letterGradeAssignment.name, "11.4/15 (C)")
+ gradesPage.assertAssignmentGradeText(passFailAssignment.name, "Incomplete")
+ gradesPage.scrollDownScreen()
+ gradesPage.assertAssignmentGradeText(gpaScaleAssignment.name, "3.7/15 (F)")
+ }
+
private fun makeQuizQuestions() = listOf(
QuizQuestion(
pointsPossible = 5,
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt
index 315780cb1a..22764d9e0b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.StringConstants.HelpMenu
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.student.R
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
@@ -77,7 +77,7 @@ class HelpMenuE2ETest : StudentTest() {
try {
helpPage.assertHelpMenuURL(HelpMenu.SEARCH_GUIDES_TITLE, "https://community.instructure.com/en/all-guides")
- helpPage.assertHelpMenuURL(HelpMenu.SUBMIT_FEATURE_TITLE, "https://community.canvaslms.com/t5/Idea-Conversations/idb-p/ideas")
+ helpPage.assertHelpMenuURL(HelpMenu.SHARE_A_CONTRIBUTION_TITLE, "https://community.instructure.com/en/categories/product-connection")
helpPage.assertHelpMenuURL(HelpMenu.SHARE_LOVE_TITLE, "market://details?id=com.instructure.candroid")
}
finally {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt
index d083081081..91487b9bc7 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt
@@ -28,7 +28,7 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.EnrollmentsApi
@@ -394,6 +394,7 @@ class LoginE2ETest : StudentTest() {
loginSignInPage.assertPageObjects()
}
+ @E2E
@Test
fun testFindSchoolPageObjects() {
@@ -404,6 +405,7 @@ class LoginE2ETest : StudentTest() {
loginFindSchoolPage.assertPageObjects()
}
+ @E2E
@Test
fun testLoginLandingPageObjects() {
@@ -411,6 +413,7 @@ class LoginE2ETest : StudentTest() {
loginLandingPage.assertPageObjects()
}
+ @E2E
@Test
fun testLoginSignInPageObjects() {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt
index a275e5ade3..cfa4ea14db 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt
@@ -17,15 +17,18 @@
package com.instructure.student.ui.e2e.classic
import android.util.Log
+import androidx.test.espresso.Espresso
import androidx.test.espresso.NoMatchingViewException
import com.instructure.canvas.espresso.FeatureCategory
import com.instructure.canvas.espresso.Priority
+import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.ConversationsApi
+import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.QuizzesApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.GradingType
@@ -35,15 +38,20 @@ import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
-import com.instructure.student.ui.utils.StudentTest
+import com.instructure.espresso.getCustomDateCalendar
+import com.instructure.espresso.retryWithIncreasingDelay
+import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Test
import java.lang.Thread.sleep
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.TimeZone
@HiltAndroidTest
-class NotificationsE2ETest : StudentTest() {
+class NotificationsE2ETest : StudentComposeTest() {
override fun displaysPageObjects() = Unit
@@ -143,6 +151,73 @@ class NotificationsE2ETest : StudentTest() {
}
}
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.NOTIFICATIONS, TestCategory.E2E, SecondaryFeatureCategory.DISCUSSION_CHECKPOINTS)
+ fun testDiscussionCheckpointsNotificationsE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(students = 1, teachers = 1, courses = 1, syllabusBody = "this is the syllabus body")
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ val discussionWithCheckpointsTitle = "Test Discussion with Checkpoints"
+ val assignmentName = "Test Assignment with Checkpoints"
+
+ Log.d(PREPARATION_TAG, "Convert dates to match with different formats in different screens (Assignment Details)")
+ val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US).apply {
+ timeZone = TimeZone.getTimeZone("UTC")
+ }
+ val assignmentDetailsDisplayFormat = SimpleDateFormat("MMM d, yyyy h:mm a", Locale.US)
+ val replyToTopicCalendar = getCustomDateCalendar(2)
+ val replyToEntryCalendar = getCustomDateCalendar(4)
+ val replyToTopicDueTime = dateFormat.format(replyToTopicCalendar.time)
+ val replyToEntryDueTime = dateFormat.format(replyToEntryCalendar.time)
+ val assignmentDetailsReplyToTopicDueDate = assignmentDetailsDisplayFormat.format(replyToTopicCalendar.time)
+ val assignmentDetailsReplyToEntryDueDate = assignmentDetailsDisplayFormat.format(replyToEntryCalendar.time)
+
+ Log.d(PREPARATION_TAG, "Seed a discussion topic with checkpoints for '${course.name}' course.")
+ DiscussionTopicsApi.createDiscussionTopicWithCheckpoints(course.id, teacher.token, discussionWithCheckpointsTitle, assignmentName, replyToTopicDueTime, replyToEntryDueTime)
+
+ Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
+ tokenLogin(student)
+
+ Log.d(STEP_TAG, "Wait for the Dashboard Page to be rendered.")
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Click on the 'Notifications' bottom menu to navigate to the Notifications list page.")
+ dashboardPage.clickNotificationsTab()
+
+ Log.d(ASSERTION_TAG, "Assert that the notification about the discussion itself: '$discussionWithCheckpointsTitle' is displayed, and also the corresponding (parent) assignment: '$assignmentName' is displayed.")
+ retryWithIncreasingDelay(times = 10, maxDelay = 3000, catchBlock = {
+ refresh() })
+ {
+ notificationPage.assertNotificationDisplayed(discussionWithCheckpointsTitle)
+ notificationPage.assertNotificationDisplayed("Assignment Created - $discussionWithCheckpointsTitle", contains = true) // Using contains logic since the assignment name alone is not the notification title, there are additional informations.
+ }
+
+ Log.d(STEP_TAG, "Click on the notification about discussion: '${discussionWithCheckpointsTitle}'.")
+ notificationPage.clickNotification(discussionWithCheckpointsTitle)
+
+ Log.d(ASSERTION_TAG, "Assert if the details webview page is displayed for '$discussionWithCheckpointsTitle' discussion.")
+ discussionDetailsPage.assertToolbarDiscussionTitle(discussionWithCheckpointsTitle)
+
+ Log.d(STEP_TAG, "Navigate back to Notifications list page.")
+ Espresso.pressBack()
+
+ Log.d(STEP_TAG, "Click on the notification about the corresponding (parent) assignment: '${discussionWithCheckpointsTitle}'.")
+ notificationPage.clickNotification("Assignment Created - $discussionWithCheckpointsTitle", contains = true)
+
+ Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed properly with the correct toolbar title and subtitle.")
+ assignmentDetailsPage.assertDisplayToolbarTitle()
+ assignmentDetailsPage.assertDisplayToolbarSubtitle(course.name)
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoints are displayed properly on the Assignment Details Page.")
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Reply to topic due", assignmentDetailsReplyToTopicDueDate)
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Additional replies (2) due", assignmentDetailsReplyToEntryDueDate)
+ }
+
private fun makeQuizQuestions() = listOf(
QuizQuestion(
questionText = "What's your favorite color?",
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt
index c3599f92bc..adce215b1e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt
@@ -29,7 +29,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.QuizzesApi
import com.instructure.dataseeding.model.QuizAnswer
import com.instructure.dataseeding.model.QuizQuestion
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt
index cb94725be3..c1d112aedf 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt
@@ -25,7 +25,7 @@ import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.GradingType
import com.instructure.dataseeding.model.SubmissionType
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt
index adfa998225..16b1297796 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt
@@ -27,7 +27,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.espresso.getVideoPosition
import com.instructure.student.ui.utils.StudentComposeTest
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt
index 57c4832d51..0717d44007 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt
@@ -24,8 +24,8 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentGroupsApi
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.SubmissionsApi
@@ -34,6 +34,7 @@ import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
+import com.instructure.espresso.retryWithIncreasingDelay
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
@@ -188,7 +189,10 @@ class OfflineAssignmentsE2ETest : StudentComposeTest() {
Log.d(ASSERTION_TAG, "Assert that the assignment '${gradedAssignment.name}' is displayed, " +
"while '${notSubmittedAssignment.name}', '${submittedAssignment.name}', and '${otherTypeAssignment.name}' are not displayed on the assignment list.")
- assignmentListPage.assertHasAssignment(gradedAssignment)
+
+ retryWithIncreasingDelay(times = 25, maxDelay = 3000, catchBlock = { refresh() }) { // We need this retry block here because the grading status might not be updated to 'Graded' immediately as grading sometimes slow on beta.
+ assignmentListPage.assertHasAssignment(gradedAssignment)
+ }
assignmentListPage.assertAssignmentNotDisplayed(notSubmittedAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(submittedAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(otherTypeAssignment.name)
@@ -210,7 +214,7 @@ class OfflineAssignmentsE2ETest : StudentComposeTest() {
Log.d(ASSERTION_TAG, "Assert that the corresponding views are displayed on the Assignment Details Page, and there IS a submission for it. Navigate back to Assignment List Page.")
assignmentDetailsPage.assertPageObjects()
assignmentDetailsPage.assertStatusSubmitted()
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
assignmentDetailsPage.assertStatusSubmitted()
Log.d(ASSERTION_TAG, "Assert that the (Re)submit Assignment button is not enabled as submitting assignments is not supported in offline mode.")
@@ -242,8 +246,8 @@ class OfflineAssignmentsE2ETest : StudentComposeTest() {
assignmentDetailsPage.assertPageObjects()
assignmentDetailsPage.assertStatusNotSubmitted()
- Log.d(ASSERTION_TAG, "Assert that 'Submission & Rubric' label is displayed.")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ Log.d(ASSERTION_TAG, "Assert that 'Submission & Feedback' label is displayed.")
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(STEP_TAG, "Navigate to Submission Details Page by clicking on the submission.")
assignmentDetailsPage.goToSubmissionDetails()
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt
index 0242c70521..f7e2dd8c4e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt
@@ -25,9 +25,9 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.FileFolderApi
import com.instructure.dataseeding.api.FileUploadsApi
@@ -309,6 +309,226 @@ class OfflineDiscussionsE2ETest : StudentComposeTest() {
nativeDiscussionDetailsPage.assertTitleText(discussionWithCheckpointsTitle)
}
+ @OfflineE2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.DISCUSSIONS, TestCategory.E2E, SecondaryFeatureCategory.DISCUSSION_CHECKPOINTS)
+ fun testOfflineDiscussionCheckpointsE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(students = 1, teachers = 1, courses = 1, syllabusBody = "Syllabus body")
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ Log.d(PREPARATION_TAG, "Seed a discussion topic with checkpoints for '${course.name}' course.")
+ val discussionTitle = "Test Discussion with Checkpoints"
+ val assignmentName = "Test Assignment with Checkpoints"
+ val replyToTopicDueDate = "2029-11-12T22:59:00Z"
+ val replyToEntryDueDate = "2029-11-19T22:59:00Z"
+ DiscussionTopicsApi.createDiscussionTopicWithCheckpoints(
+ courseId = course.id,
+ token = teacher.token,
+ discussionTitle = discussionTitle,
+ assignmentName = assignmentName,
+ replyToTopicDueDate = replyToTopicDueDate,
+ replyToEntryDueDate = replyToEntryDueDate
+ )
+
+ val checkpointTopicDueDateForList = "Due " + convertIso8601ToCanvasFormat(replyToTopicDueDate) + " 2:59 PM"
+ val checkpointEntryDueDateForList = "Due " + convertIso8601ToCanvasFormat(replyToEntryDueDate) + " 2:59 PM"
+ val checkpointTopicDueDateForDetails = convertIso8601ToCanvasFormat(replyToTopicDueDate) + " 2:59 PM"
+ val checkpointEntryDueDateForDetails = convertIso8601ToCanvasFormat(replyToEntryDueDate) + " 2:59 PM"
+
+ Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
+ tokenLogin(student)
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Open the '${course.name}' course's 'Manage Offline Content' page via the more menu of the Dashboard Page.")
+ dashboardPage.clickCourseOverflowMenu(course.name, "Manage Offline Content")
+
+ Log.d(STEP_TAG, "Expand '${course.name}' course.")
+ manageOfflineContentPage.expandCollapseItem(course.name)
+
+ Log.d(STEP_TAG, "Select 'Assignments', 'Discussions', 'Grades' and 'Syllabus' of '${course.name}' course for sync. Click on the 'Sync' button.")
+ manageOfflineContentPage.changeItemSelectionState("Assignments")
+ manageOfflineContentPage.changeItemSelectionState("Discussions")
+ manageOfflineContentPage.changeItemSelectionState("Grades")
+ manageOfflineContentPage.changeItemSelectionState("Syllabus")
+ manageOfflineContentPage.clickOnSyncButtonAndConfirm()
+
+ Log.d(ASSERTION_TAG, "Assert that the offline sync icon only displayed on the synced course's course card.")
+ dashboardPage.assertCourseOfflineSyncIconVisible(course.name)
+ device.waitForIdle()
+
+ Log.d(PREPARATION_TAG, "Turn off the Wi-Fi and Mobile Data on the device, so it will go offline.")
+ turnOffConnectionViaADB()
+ OfflineTestUtils.waitForNetworkToGoOffline(device)
+
+ Log.d(STEP_TAG, "Wait for the Dashboard Page to be rendered. Refresh the page.")
+ dashboardPage.waitForRender()
+ refresh()
+
+ Log.d(ASSERTION_TAG, "Assert that the Offline Indicator (bottom banner) is displayed on the Dashboard Page.")
+ OfflineTestUtils.assertOfflineIndicator()
+
+ Log.d(STEP_TAG, "Select course: '${course.name}' and navigate to Assignments Page.")
+ dashboardPage.selectCourse(course)
+ courseBrowserPage.selectAssignments()
+
+ Log.d(ASSERTION_TAG, "Assert that the '$discussionTitle' discussion is present with 2 checkpoint due dates in the Assignment List.")
+ assignmentListPage.assertHasAssignmentWithCheckpoints(discussionTitle, dueAtString = checkpointTopicDueDateForList, dueAtStringSecondCheckpoint = checkpointEntryDueDateForList, expectedGrade = "-/15")
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoint sub-items are displayed as separate assignment rows (visible because Syllabus was synced).")
+ assignmentListPage.assertHasAssignment("$discussionTitle Reply to Topic", replyToTopicDueDate, "-/10")
+ assignmentListPage.assertHasAssignment("$discussionTitle Required Replies (2)", replyToEntryDueDate, "-/5")
+
+ Log.d(STEP_TAG, "Click on the expand icon for the '$discussionTitle' discussion to see the checkpoints' details.")
+ assignmentListPage.clickDiscussionCheckpointExpandCollapseIcon(discussionTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoints' details are displayed correctly (titles, due dates, points possible, grades).")
+ assignmentListPage.assertDiscussionCheckpointDetails(2, dueAtReplyToTopic = checkpointTopicDueDateForList, dueAtAdditionalReplies = checkpointEntryDueDateForList, gradeReplyToTopic = "-/10", gradeAdditionalReplies = "-/5")
+
+ Log.d(STEP_TAG, "Collapse the checkpoint details of the '$discussionTitle' discussion before navigating away.")
+ assignmentListPage.clickDiscussionCheckpointExpandCollapseIcon(discussionTitle)
+
+ Log.d(STEP_TAG, "Click on '$discussionTitle Reply to Topic' checkpoint assignment to navigate to its Assignment Details Page.")
+ assignmentListPage.clickAssignment("$discussionTitle Reply to Topic")
+
+ Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed with the correct title for the 'Reply to Topic' checkpoint.")
+ assignmentDetailsPage.assertDisplayToolbarTitle()
+ assignmentDetailsPage.assertAssignmentTitle("$discussionTitle Reply to Topic")
+
+ Log.d(ASSERTION_TAG, "Assert that the due date is '$checkpointTopicDueDateForDetails', the submission status is 'Not Submitted' and the submission type is 'Discussion Topic' for the 'Reply to Topic' checkpoint.")
+ assignmentDetailsPage.assertDisplaysDate(checkpointTopicDueDateForDetails)
+ assignmentDetailsPage.assertStatusNotSubmitted()
+ assignmentDetailsPage.assertSubmissionTypeDisplayed("Discussion Topic")
+
+ Log.d(STEP_TAG, "Navigate back to the Assignment List Page.")
+ Espresso.pressBack()
+
+ Log.d(STEP_TAG, "Click on '$discussionTitle Required Replies (2)' checkpoint assignment to navigate to its Assignment Details Page.")
+ assignmentListPage.clickAssignment("$discussionTitle Required Replies (2)")
+
+ Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed with the correct title for the 'Required Replies (2)' checkpoint.")
+ assignmentDetailsPage.assertDisplayToolbarTitle()
+ assignmentDetailsPage.assertAssignmentTitle("$discussionTitle Required Replies (2)")
+
+ Log.d(ASSERTION_TAG, "Assert that the due date is '$checkpointEntryDueDateForDetails', the submission status is 'Not Submitted' and the submission type is 'Discussion Topic' for the 'Required Replies (2)' checkpoint.")
+ assignmentDetailsPage.assertDisplaysDate(checkpointEntryDueDateForDetails)
+ assignmentDetailsPage.assertStatusNotSubmitted()
+ assignmentDetailsPage.assertSubmissionTypeDisplayed("Discussion Topic")
+
+ Log.d(STEP_TAG, "Navigate back to the Assignment List Page.")
+ Espresso.pressBack()
+
+ Log.d(STEP_TAG, "Click on '$discussionTitle' assignment to navigate to the Assignment Details Page.")
+ assignmentListPage.clickAssignment(discussionTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed properly with the correct toolbar title and subtitle.")
+ assignmentDetailsPage.assertDisplayToolbarTitle()
+ assignmentDetailsPage.assertAssignmentTitle(discussionTitle)
+ assignmentDetailsPage.assertDisplayToolbarSubtitle(course.name)
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoint grades view is displayed correctly on the Assignment Details Page.")
+ assignmentDetailsPage.assertCheckpointGradesView("Reply to topic", "-/10")
+ assignmentDetailsPage.assertCheckpointGradesView("Additional replies (2)", "-/5")
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoint due dates are displayed properly on the Assignment Details Page.")
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Reply to topic due", checkpointTopicDueDateForDetails)
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Additional replies (2) due", checkpointEntryDueDateForDetails)
+
+ Log.d(ASSERTION_TAG, "Assert that the submission type is 'Discussion Topic' for the '$discussionTitle' assignment")
+ assignmentDetailsPage.assertSubmissionTypeDisplayed("Discussion Topic")
+
+ Log.d(STEP_TAG, "Click on the 'View Discussion' button to navigate to the Discussion Details page from the Assignment Details page.")
+ assignmentDetailsPage.clickSubmit()
+
+ Log.d(ASSERTION_TAG, "Assert that the Discussion Details page is displayed with the correct title.")
+ nativeDiscussionDetailsPage.assertTitleText(discussionTitle)
+
+ Log.d(STEP_TAG, "Navigate back to the Assignment Details page.")
+ Espresso.pressBack()
+
+ Log.d(ASSERTION_TAG, "Assert that we are back on the Assignment Details page.")
+ assignmentDetailsPage.assertAssignmentTitle(discussionTitle)
+
+ Log.d(STEP_TAG, "Navigate back to the Course Browser Page.")
+ pressBackButton(2)
+
+ Log.d(STEP_TAG, "Navigate to Discussions Page.")
+ courseBrowserPage.selectDiscussions()
+
+ Log.d(ASSERTION_TAG, "Assert that the '$discussionTitle' discussion is displayed in the Discussion List.")
+ discussionListPage.assertTopicDisplayed(discussionTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoint due dates are displayed for the '$discussionTitle' discussion in the Discussion List.")
+ discussionListPage.assertCheckpointDueDates(discussionTitle, checkpointTopicDueDateForList)
+ discussionListPage.assertCheckpointDueDates(discussionTitle, checkpointEntryDueDateForList)
+
+ Log.d(ASSERTION_TAG, "Assert that the total points (15 pts), 0 replies and 0 unread replies are displayed for the '$discussionTitle' discussion in the Discussion List.")
+ discussionListPage.assertPointsDisplayed(discussionTitle, 15)
+ discussionListPage.assertReplyCount(discussionTitle, 0)
+ discussionListPage.assertUnreadReplyCount(discussionTitle, 0)
+
+ Log.d(STEP_TAG, "Click on '$discussionTitle' discussion to navigate to the Discussion Details page.")
+ discussionListPage.selectTopic(discussionTitle)
+
+ Log.d(ASSERTION_TAG, "Assert that the Discussion Details page is displayed with the correct title, 15 pts and no replies.")
+ nativeDiscussionDetailsPage.assertTitleText(discussionTitle)
+ nativeDiscussionDetailsPage.assertPointsPossibleDisplayed("15 pts")
+ nativeDiscussionDetailsPage.assertNoRepliesDisplayed()
+
+ Log.d(STEP_TAG, "Navigate back to the Course Browser Page.")
+ pressBackButton(2)
+
+ Log.d(STEP_TAG, "Navigate to Grades Page.")
+ courseBrowserPage.selectGrades()
+
+ Log.d(ASSERTION_TAG, "Assert that the '$discussionTitle' main discussion and both checkpoint sub-assignments are displayed on the Grades Page.")
+ gradesPage.assertAssignmentIsDisplayed(discussionTitle)
+ gradesPage.assertAssignmentIsDisplayed("$discussionTitle Reply to Topic")
+ gradesPage.assertAssignmentIsDisplayed("$discussionTitle Required Replies (2)")
+
+ Log.d(ASSERTION_TAG, "Assert that the grades (-/15, -/10, -/5) are displayed correctly for the discussion and its checkpoints on the Grades Page.")
+ gradesPage.assertAssignmentGradeText(discussionTitle, "-/15")
+ gradesPage.assertAssignmentGradeText("$discussionTitle Reply to Topic", "-/10")
+ gradesPage.assertAssignmentGradeText("$discussionTitle Required Replies (2)", "-/5")
+
+ Log.d(ASSERTION_TAG, "Assert that the submission status is 'Not Submitted' for all three discussion assignments.")
+ gradesPage.assertAssignmentStatus(discussionTitle, "Not Submitted")
+ gradesPage.assertAssignmentStatus("$discussionTitle Reply to Topic", "Not Submitted")
+ gradesPage.assertAssignmentStatus("$discussionTitle Required Replies (2)", "Not Submitted")
+
+ Log.d(STEP_TAG, "Navigate back to the Course Browser Page.")
+ Espresso.pressBack()
+
+ Log.d(STEP_TAG, "Navigate to Syllabus Page and the 'Summary' tab within it.")
+ courseBrowserPage.selectSyllabus()
+ syllabusPage.selectSummaryTab()
+
+ Log.d(ASSERTION_TAG, "Assert that the discussion checkpoints are displayed as separate items in the Syllabus Summary.")
+ syllabusPage.assertItemDisplayed("$discussionTitle Reply to Topic")
+ syllabusPage.assertItemDisplayed("$discussionTitle Required Replies (2)")
+
+ Log.d(STEP_TAG, "Select '$discussionTitle Reply to Topic' syllabus summary event.")
+ syllabusPage.selectSummaryEvent("$discussionTitle Reply to Topic")
+
+ Log.d(ASSERTION_TAG, "Assert that the Assignment Details Page is displayed properly.")
+ assignmentDetailsPage.assertPageObjects()
+ assignmentDetailsPage.assertDisplayToolbarTitle()
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoint grades view is displayed correctly on the Assignment Details Page.")
+ assignmentDetailsPage.assertCheckpointGradesView("Reply to topic", "-/10")
+ assignmentDetailsPage.assertCheckpointGradesView("Additional replies (2)", "-/5")
+
+ Log.d(ASSERTION_TAG, "Assert that the checkpoint due dates are displayed properly on the Assignment Details Page.")
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Reply to topic due", checkpointTopicDueDateForDetails)
+ assignmentDetailsPage.assertDiscussionCheckpointDetailsOnDetailsPage("Additional replies (2) due", checkpointEntryDueDateForDetails)
+
+ Log.d(ASSERTION_TAG, "Assert that the submission type is 'Discussion Topic' for the '$discussionTitle' assignment")
+ assignmentDetailsPage.assertSubmissionTypeDisplayed("Discussion Topic")
+ }
+
@After
fun tearDown() {
Log.d(PREPARATION_TAG, "Turn back on the Wi-Fi and Mobile Data on the device, so it will come back online.")
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt
index c48435baa6..59e60f35cd 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt
index 9ac702bffd..4c9f1a65be 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt
index 00754ec014..e4b60abc90 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.ModulesApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt
index 1d7dbfe403..1a21b749ec 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt
@@ -26,7 +26,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.PagesApi
import com.instructure.student.ui.pages.classic.WebViewTextCheck
import com.instructure.student.ui.utils.StudentTest
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt
index 6d6eb60128..5972482033 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt
index 2cab83b195..6b225a0f57 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt
index 8969573d0a..890f2b767f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt
index 0c21032139..07a3cf7d8b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt
@@ -26,7 +26,7 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt
index ccbf589970..5881802cff 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.pandautils.R
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt
index 3d8408657c..883b0110e9 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt
@@ -28,13 +28,14 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentGroupsApi
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.FileUploadsApi
+import com.instructure.dataseeding.api.GradingPeriodsApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.FileUploadType
import com.instructure.dataseeding.model.GradingType
@@ -109,8 +110,8 @@ class AssignmentsE2ETest: StudentComposeTest() {
assignmentDetailsPage.assertPageObjects()
assignmentDetailsPage.assertStatusNotSubmitted()
- Log.d(ASSERTION_TAG, "Assert that 'Submission & Rubric' label is displayed and navigate to Submission Details Page.")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ Log.d(ASSERTION_TAG, "Assert that 'Submission & Feedback' label is displayed and navigate to Submission Details Page.")
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
assignmentDetailsPage.goToSubmissionDetails()
Log.d(ASSERTION_TAG, "Assert that there is no submission yet for the '${pointsTextAssignment.name}' assignment.")
@@ -125,7 +126,7 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(ASSERTION_TAG, "Refresh the Assignment Details Page. Assert that the assignment's status is submitted and the 'Submission and Feedback' label is displayed.")
assignmentDetailsPage.refresh()
assignmentDetailsPage.assertStatusSubmitted()
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(PREPARATION_TAG, "Make another submission for assignment: '${pointsTextAssignment.name}' for student: '${student.name}'.")
val secondSubmissionAttempt = SubmissionsApi.seedAssignmentSubmission(course.id, student.token, pointsTextAssignment.id, submissionSeedsList = listOf(SubmissionsApi.SubmissionSeedInfo(amount = 1, submissionType = SubmissionType.ONLINE_TEXT_ENTRY)))
@@ -133,7 +134,7 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(ASSERTION_TAG, "Refresh the Assignment Details Page. Assert that the assignment's status is submitted and the 'Submission and Feedback' label is displayed.")
assignmentDetailsPage.refresh()
assignmentDetailsPage.assertStatusSubmitted()
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(ASSERTION_TAG, "Assert that the spinner is displayed and the last/newest attempt is selected.")
assignmentDetailsPage.assertAttemptSpinnerDisplayed()
@@ -542,8 +543,8 @@ class AssignmentsE2ETest: StudentComposeTest() {
assignmentDetailsPage.assertPageObjects()
assignmentDetailsPage.assertStatusNotSubmitted()
- Log.d(ASSERTION_TAG, "Assert that 'Submission & Rubric' label is displayed.")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ Log.d(ASSERTION_TAG, "Assert that 'Submission & Feedback' label is displayed.")
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(STEP_TAG, "Navigate to Submission Details Page.")
assignmentDetailsPage.goToSubmissionDetails()
@@ -557,10 +558,10 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(PREPARATION_TAG, "Submit assignment: '${pointsTextAssignment.name}' for student: '${student.name}'.")
SubmissionsApi.seedAssignmentSubmission(course.id, student.token, pointsTextAssignment.id, submissionSeedsList = listOf(SubmissionsApi.SubmissionSeedInfo(amount = 1, submissionType = SubmissionType.ONLINE_TEXT_ENTRY)))
- Log.d(ASSERTION_TAG, "Refresh the page. Assert that the assignment '${pointsTextAssignment.name}' has been submitted and the 'Submission & Rubric' label is displayed.")
+ Log.d(ASSERTION_TAG, "Refresh the page. Assert that the assignment '${pointsTextAssignment.name}' has been submitted and the 'Submission & Feedback' label is displayed.")
assignmentDetailsPage.refresh()
assignmentDetailsPage.assertStatusSubmitted()
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(PREPARATION_TAG, "Grade submission: '${pointsTextAssignment.name}' with 13 points.")
val textGrade = SubmissionsApi.gradeSubmission(teacher.token, course.id, pointsTextAssignment.id, student.id, postedGrade = "13")
@@ -690,7 +691,7 @@ class AssignmentsE2ETest: StudentComposeTest() {
@E2E
@Test
@TestMetaData(Priority.MANDATORY, FeatureCategory.ASSIGNMENTS, TestCategory.E2E)
- fun testMultipleAssignmentsE2E() {
+ fun testMultipleAssignmentsWithSearchE2E() {
Log.d(PREPARATION_TAG, "Seeding data.")
val data = seedData(teachers = 1, courses = 1, students = 1)
@@ -729,6 +730,36 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(ASSERTION_TAG, "Assert that '${letterGradeTextAssignment.name}' assignment is displayed with the corresponding grade: 16.")
assignmentListPage.assertHasAssignment(letterGradeTextAssignment, "16")
+
+ Log.d(STEP_TAG, "Click on the 'Search' (magnifying glass) icon at the toolbar.")
+ assignmentListPage.searchBar.clickOnSearchButton()
+
+ Log.d(STEP_TAG, "Type the name of the '${letterGradeTextAssignment.name}' assignment into the search bar.")
+ assignmentListPage.searchBar.typeToSearchBar(letterGradeTextAssignment.name)
+
+ Log.d(ASSERTION_TAG, "Assert that only '${letterGradeTextAssignment.name}' is displayed and '${pointsTextAssignment.name}' is not.")
+ assignmentListPage.assertHasAssignment(letterGradeTextAssignment)
+ assignmentListPage.assertAssignmentNotDisplayed(pointsTextAssignment.name)
+
+ Log.d(STEP_TAG, "Clear the search input.")
+ assignmentListPage.searchBar.clickOnClearSearchButton()
+
+ Log.d(ASSERTION_TAG, "Assert that both assignments are visible again after clearing the search.")
+ assignmentListPage.assertHasAssignment(pointsTextAssignment, "13")
+ assignmentListPage.assertHasAssignment(letterGradeTextAssignment, "16")
+
+ Log.d(STEP_TAG, "Type a search query that does not match any assignment.")
+ assignmentListPage.searchBar.typeToSearchBar("xxxxxxxxxxx")
+
+ Log.d(ASSERTION_TAG, "Assert that the empty state ('No Assignments') view is displayed when no assignments match the search query.")
+ assignmentListPage.assertDisplaysNoAssignmentsView()
+
+ Log.d(STEP_TAG, "Close the search bar.")
+ assignmentListPage.searchBar.pressSearchBarButton()
+
+ Log.d(ASSERTION_TAG, "Assert that both assignments are displayed again after closing the search bar.")
+ assignmentListPage.assertHasAssignment(pointsTextAssignment, "13")
+ assignmentListPage.assertHasAssignment(letterGradeTextAssignment, "16")
}
@E2E
@@ -741,13 +772,13 @@ class AssignmentsE2ETest: StudentComposeTest() {
val teacher = data.teachersList[0]
val course = data.coursesList[0]
- Log.d(PREPARATION_TAG, "Seeding assignment for '${course.name}' course.")
- val upcomingAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 20.0, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+ Log.d(PREPARATION_TAG, "Seeding an upcoming assignment (future due date) for '${course.name}' course.")
+ val upcomingAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 20.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
- Log.d(PREPARATION_TAG, "Seeding assignment for '${course.name}' course.")
+ Log.d(PREPARATION_TAG, "Seeding an overdue assignment (past due date) for '${course.name}' course.")
val missingAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 20.0, dueAt = 2.days.ago.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
- Log.d(PREPARATION_TAG, "Seeding a GRADED assignment for '${course.name}' course.")
+ Log.d(PREPARATION_TAG, "Seeding a GRADED assignment (no due date) for '${course.name}' course.")
val gradedAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 20.0, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
Log.d(PREPARATION_TAG, "Grade the '${gradedAssignment.name}' with '11' points out of 20.")
@@ -756,7 +787,7 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(PREPARATION_TAG, "Create an Assignment Group for '${course.name}' course.")
val assignmentGroup = AssignmentGroupsApi.createAssignmentGroup(teacher.token, course.id, name = "Discussions")
- Log.d(PREPARATION_TAG, "Seeding assignment for '${course.name}' course.")
+ Log.d(PREPARATION_TAG, "Seeding an assignment in the 'Discussions' group (no due date) for '${course.name}' course.")
val otherTypeAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 20.0, assignmentGroupId = assignmentGroup.id, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
@@ -773,22 +804,22 @@ class AssignmentsE2ETest: StudentComposeTest() {
assignmentListPage.assertHasAssignment(otherTypeAssignment)
assignmentListPage.assertHasAssignment(gradedAssignment)
- Log.d(STEP_TAG, "Filter the 'Not Yet Submitted' assignments.")
+ Log.d(STEP_TAG, "Filter to show only 'Not Yet Submitted' assignments.")
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.ToBeGraded)
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.Graded)
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.Other)
- Log.d(ASSERTION_TAG, "Assert that the '${missingAssignment.name}' 'Not Yet Submitted' assignment is displayed and the others at NOT.")
+ Log.d(ASSERTION_TAG, "Assert that only the '${missingAssignment.name}' 'Not Yet Submitted' assignment is displayed and the others are NOT.")
assignmentListPage.assertHasAssignment(missingAssignment)
assignmentListPage.assertAssignmentNotDisplayed(upcomingAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(otherTypeAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(gradedAssignment.name)
- Log.d(STEP_TAG, "Filter the 'GRADED' assignments.")
+ Log.d(STEP_TAG, "Filter to show only 'Graded' assignments.")
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.NotYetSubmitted)
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.Graded)
- Log.d(ASSERTION_TAG, "Assert that the '${gradedAssignment.name}' GRADED assignment is displayed.")
+ Log.d(ASSERTION_TAG, "Assert that only the '${gradedAssignment.name}' 'Graded' assignment is displayed and the others are NOT.")
assignmentListPage.assertHasAssignment(gradedAssignment)
assignmentListPage.assertAssignmentNotDisplayed(upcomingAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(otherTypeAssignment.name)
@@ -799,8 +830,10 @@ class AssignmentsE2ETest: StudentComposeTest() {
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.ToBeGraded)
assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.Other)
- Log.d(ASSERTION_TAG, "Assert that still all the assignment are displayed and the corresponding groups (Assignments, Discussions) as well.")
+ Log.d(STEP_TAG, "Group assignments by 'Assignment Group'.")
assignmentListPage.groupByAssignments(AssignmentListPage.GroupByOption.AssignmentGroup)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Assignments' and 'Discussions' groups are displayed with all assignments inside.")
assignmentListPage.assertAssignmentGroupDisplayed("Assignments")
assignmentListPage.assertAssignmentGroupDisplayed("Discussions")
assignmentListPage.assertHasAssignment(upcomingAssignment)
@@ -811,31 +844,120 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(STEP_TAG, "Collapse the 'Assignments' assignment group.")
assignmentListPage.expandCollapseAssignmentGroup("Assignments")
- Log.d(ASSERTION_TAG, "Assert that it's items are not displayed when the group is collapsed.")
+ Log.d(ASSERTION_TAG, "Assert that the items inside 'Assignments' group are NOT displayed when collapsed.")
assignmentListPage.assertAssignmentNotDisplayed(upcomingAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(missingAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(gradedAssignment.name)
- Log.d(ASSERTION_TAG, "Assert that the other group's item is still displayed.")
+ Log.d(ASSERTION_TAG, "Assert that the 'Discussions' group item is still displayed.")
assignmentListPage.assertHasAssignment(otherTypeAssignment)
- Log.d(STEP_TAG, "Expand the 'Assignments' assignment group.")
+ Log.d(STEP_TAG, "Expand the 'Assignments' group back.")
assignmentListPage.expandCollapseAssignmentGroup("Assignments")
- Log.d(STEP_TAG, "Click on the 'Search' (magnifying glass) icon at the toolbar.")
- assignmentListPage.searchBar.clickOnSearchButton()
+ Log.d(ASSERTION_TAG, "Assert that all assignments are visible again after expanding.")
+ assignmentListPage.assertHasAssignment(upcomingAssignment)
+ assignmentListPage.assertHasAssignment(missingAssignment)
+ assignmentListPage.assertHasAssignment(gradedAssignment)
+
+ Log.d(STEP_TAG, "Group assignments by 'Due Date'.")
+ assignmentListPage.groupByAssignments(AssignmentListPage.GroupByOption.DueDate)
+
+ Log.d(ASSERTION_TAG, "Assert that the three due date groups are displayed.")
+ assignmentListPage.assertAssignmentGroupDisplayed("Overdue Assignments")
+ assignmentListPage.assertAssignmentGroupDisplayed("Upcoming Assignments")
+ assignmentListPage.assertAssignmentGroupDisplayed("Undated Assignments")
+
+ Log.d(ASSERTION_TAG, "Assert that all assignments are visible in the correct due date groups: '${missingAssignment.name}' overdue, '${upcomingAssignment.name}' upcoming, '${gradedAssignment.name}' and '${otherTypeAssignment.name}' undated.")
+ assignmentListPage.assertHasAssignment(missingAssignment)
+ assignmentListPage.assertHasAssignment(upcomingAssignment)
+ assignmentListPage.assertHasAssignment(gradedAssignment)
+ assignmentListPage.assertHasAssignment(otherTypeAssignment)
+
+ Log.d(STEP_TAG, "Collapse the 'Overdue Assignments' group.")
+ assignmentListPage.expandCollapseAssignmentGroup("Overdue Assignments")
+
+ Log.d(ASSERTION_TAG, "Assert that the '${missingAssignment.name}' overdue assignment is NOT displayed when the group is collapsed.")
+ assignmentListPage.assertAssignmentNotDisplayed(missingAssignment.name)
+
+ Log.d(ASSERTION_TAG, "Assert that assignments in the other groups are still displayed.")
+ assignmentListPage.assertHasAssignment(upcomingAssignment)
+ assignmentListPage.assertHasAssignment(gradedAssignment)
+ assignmentListPage.assertHasAssignment(otherTypeAssignment)
- Log.d(STEP_TAG, "Type the name of the '${missingAssignment.name}' assignment.")
- assignmentListPage.searchBar.typeToSearchBar(missingAssignment.name.drop(5))
+ Log.d(STEP_TAG, "Expand the 'Overdue Assignments' group back.")
+ assignmentListPage.expandCollapseAssignmentGroup("Overdue Assignments")
- Log.d(ASSERTION_TAG, "Assert that the '${missingAssignment.name}' assignment has been found by previously typed search string.")
- sleep(3000) // Allow the search input to propagate
+ Log.d(ASSERTION_TAG, "Assert that the '${missingAssignment.name}' overdue assignment is visible again.")
assignmentListPage.assertHasAssignment(missingAssignment)
+
+ Log.d(STEP_TAG, "Collapse all three due date groups.")
+ assignmentListPage.expandCollapseAssignmentGroup("Overdue Assignments")
+ assignmentListPage.expandCollapseAssignmentGroup("Upcoming Assignments")
+ assignmentListPage.expandCollapseAssignmentGroup("Undated Assignments")
+
+ Log.d(ASSERTION_TAG, "Assert that none of the assignments is displayed when all groups are collapsed.")
+ assignmentListPage.assertAssignmentNotDisplayed(missingAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(upcomingAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(otherTypeAssignment.name)
assignmentListPage.assertAssignmentNotDisplayed(gradedAssignment.name)
}
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.E2E)
+ fun testGradingPeriodFilterE2E() {
+ Log.d(PREPARATION_TAG, "Seeding data with a grading period enabled.")
+ val data = seedData(teachers = 1, courses = 1, students = 1, gradingPeriods = true)
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ Log.d(PREPARATION_TAG, "Fetching the grading period for '${course.name}' course.")
+ val gradingPeriod = GradingPeriodsApi.getGradingPeriodsOfCourse(course.id).gradingPeriods[0]
+
+ Log.d(PREPARATION_TAG, "Seeding an assignment due within the grading period (2 days from now) for '${course.name}' course.")
+ val assignmentInPeriod = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 10.0, dueAt = 2.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Seeding an assignment due outside the grading period (30 days ago) for '${course.name}' course.")
+ val assignmentOutsidePeriod = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 10.0, dueAt = 30.days.ago.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
+ tokenLogin(student)
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Select '${course.name}' course and navigate to its Assignments Page.")
+ dashboardPage.selectCourse(course)
+ courseBrowserPage.selectAssignments()
+
+ Log.d(ASSERTION_TAG, "Assert that the grading period header shows '${gradingPeriod.title}' as the current grading period is pre-selected by default.")
+ assignmentListPage.assertGradingPeriodLabel(gradingPeriod.title)
+
+ Log.d(ASSERTION_TAG, "Assert that only '${assignmentInPeriod.name}' is displayed by default (within the grading period) and '${assignmentOutsidePeriod.name}' is NOT.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+
+ Log.d(STEP_TAG, "Switch the grading period filter to 'All Grading Periods'.")
+ assignmentListPage.filterAssignments("Grading Period", AssignmentListPage.FilterOption.GradingPeriod("All Grading Periods"))
+
+ Log.d(ASSERTION_TAG, "Assert that the grading period header now shows 'All'.")
+ assignmentListPage.assertGradingPeriodLabel()
+
+ Log.d(ASSERTION_TAG, "Assert that both assignments are visible when 'All Grading Periods' is selected.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+
+ Log.d(STEP_TAG, "Switch back to the '${gradingPeriod.title}' grading period.")
+ assignmentListPage.filterAssignments("Grading Period", AssignmentListPage.FilterOption.GradingPeriod(gradingPeriod.title))
+
+ Log.d(ASSERTION_TAG, "Assert that the grading period header shows '${gradingPeriod.title}' again.")
+ assignmentListPage.assertGradingPeriodLabel(gradingPeriod.title)
+
+ Log.d(ASSERTION_TAG, "Assert that only '${assignmentInPeriod.name}' is displayed again and '${assignmentOutsidePeriod.name}' is NOT.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+ }
+
@E2E
@Test
@TestMetaData(Priority.MANDATORY, FeatureCategory.COMMENTS, TestCategory.E2E)
@@ -1112,8 +1234,8 @@ class AssignmentsE2ETest: StudentComposeTest() {
Log.d(STEP_TAG, "Click on assignment '${pointsTextAssignment.name}'.")
assignmentListPage.clickAssignment(pointsTextAssignment)
- Log.d(ASSERTION_TAG, "Assert that 'Submission & Rubric' label is displayed and navigate to Submission Details Page.")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ Log.d(ASSERTION_TAG, "Assert that 'Submission & Feedback' label is displayed and navigate to Submission Details Page.")
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(STEP_TAG, "Click on the 'Submit Assignment' button.")
assignmentDetailsPage.clickSubmit()
@@ -1124,8 +1246,8 @@ class AssignmentsE2ETest: StudentComposeTest() {
textSubmissionUploadPage.clickToolbarBackButton()
textSubmissionUploadPage.clickDontSaveDraft()
- Log.d(ASSERTION_TAG, "Assert that 'Submission & Rubric' label is displayed and navigate to Submission Details Page.")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ Log.d(ASSERTION_TAG, "Assert that 'Submission & Feedback' label is displayed and navigate to Submission Details Page.")
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
Log.d(STEP_TAG, "Click on the 'Submit Assignment' button.")
assignmentDetailsPage.clickSubmit()
@@ -1453,101 +1575,4 @@ class AssignmentsE2ETest: StudentComposeTest() {
"Video position did not change. First: $firstVideoPositionText, Second: $secondVideoPositionText"
}
}
-
- @E2E
- @Test
- @TestMetaData(Priority.IMPORTANT, FeatureCategory.GRADES, TestCategory.E2E)
- fun testShowOnlyLetterGradeOnGradesPageE2E() {
- Log.d(PREPARATION_TAG, "Seeding data.")
- val data = seedData(teachers = 1, courses = 1, students = 1)
- val student = data.studentsList[0]
- val teacher = data.teachersList[0]
- val course = data.coursesList[0]
-
- Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
- val pointsTextAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
-
- Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
- tokenLogin(student)
- dashboardPage.waitForRender()
-
- Log.d(PREPARATION_TAG, "Grade submission: '${pointsTextAssignment.name}' with 12 points.")
- SubmissionsApi.gradeSubmission(teacher.token, course.id, pointsTextAssignment.id, student.id, postedGrade = "12")
-
- Log.d(ASSERTION_TAG, "Assert that the grade is not displayed on the course's card by default.")
- dashboardPage.assertCourseGradeNotDisplayed(course.name, "N/A", false)
-
- Log.d(STEP_TAG, "Toggle ON 'Show Grades' and navigate back to Dashboard Page.")
- leftSideNavigationDrawerPage.setShowGrades(true)
-
- Log.d(ASSERTION_TAG, "Assert that the grade is displayed on the course's card.")
- dashboardPage.assertCourseGrade(course.name, "N/A")
-
- Log.d(PREPARATION_TAG, "Update '${course.name}' course's settings: Enable restriction for quantitative data.")
- val restrictQuantitativeDataMap = mutableMapOf()
- restrictQuantitativeDataMap["restrict_quantitative_data"] = true
- CoursesApi.updateCourseSettings(course.id, restrictQuantitativeDataMap)
-
- Log.d(ASSERTION_TAG, "Refresh the Dashboard page. Assert that the course grade is B-, as it is converted to letter grade because of the restriction.")
- retryWithIncreasingDelay(times = 15, maxDelay = 5000) {
- dashboardPage.refresh()
- dashboardPage.assertCourseGrade(course.name, "B-")
- }
-
- Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
- val percentageAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.PERCENT, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
-
- Log.d(PREPARATION_TAG, "Grade submission: '${percentageAssignment.name}' with 66% of the maximum points (aka. 10).")
- SubmissionsApi.gradeSubmission(teacher.token, course.id, percentageAssignment.id, student.id, postedGrade = "10")
-
- Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
- val letterGradeAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
-
- Log.d(PREPARATION_TAG, "Grade submission: '${letterGradeAssignment.name}' with C.")
- SubmissionsApi.gradeSubmission(teacher.token, course.id, letterGradeAssignment.id, student.id, postedGrade = "C")
-
- Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
- val passFailAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.PASS_FAIL, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
-
- Log.d(PREPARATION_TAG, "Grade submission: '${passFailAssignment.name}' with 'Incomplete'.")
- SubmissionsApi.gradeSubmission(teacher.token, course.id, passFailAssignment.id, student.id, postedGrade = "Incomplete")
-
- Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
- val gpaScaleAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.GPA_SCALE, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
-
- Log.d(PREPARATION_TAG, "Grade submission: '${gpaScaleAssignment.name}' with 3.7.")
- SubmissionsApi.gradeSubmission(teacher.token, course.id, gpaScaleAssignment.id, student.id, postedGrade = "3.7")
-
- Log.d(STEP_TAG, "Refresh the Dashboard page to let the newly added submissions and their grades propagate.")
- dashboardPage.refresh()
-
- Log.d(STEP_TAG, "Select course: '${course.name}'. Select 'Grades' menu.")
- dashboardPage.selectCourse(course)
- courseBrowserPage.selectGrades()
-
- Log.d(ASSERTION_TAG, "Assert that the Total Grade is 'F' and all of the assignment grades are displayed properly (so they have been converted to letter grade).")
- gradesPage.assertTotalGradeText("F")
- gradesPage.assertAssignmentGradeText(pointsTextAssignment.name, "B-")
- gradesPage.assertAssignmentGradeText(percentageAssignment.name, "D")
- gradesPage.assertAssignmentGradeText(letterGradeAssignment.name, "C")
- gradesPage.assertAssignmentGradeText(passFailAssignment.name, "Incomplete")
- gradesPage.assertAssignmentGradeText(gpaScaleAssignment.name, "F")
-
- Log.d(PREPARATION_TAG, "Update '${course.name}' course's settings: Enable restriction for quantitative data.")
- restrictQuantitativeDataMap["restrict_quantitative_data"] = false
- CoursesApi.updateCourseSettings(course.id, restrictQuantitativeDataMap)
-
- Log.d(STEP_TAG, "Swipe to the top of the Course Grades Page and refresh it.")
- gradesPage.scrollDownScreen() // First go to the top of the recycler view
- gradesPage.refresh() // Actual refresh
-
- Log.d(ASSERTION_TAG, "Assert that the Total Grade is '49.47%' and all of the assignment grades are displayed properly. We now show numeric grades because restriction to quantitative data has been disabled.")
- gradesPage.assertTotalGradeText("49.47%")
- gradesPage.assertAssignmentGradeText(pointsTextAssignment.name, "12/15")
- gradesPage.assertAssignmentGradeText(percentageAssignment.name, "66.67%")
- gradesPage.assertAssignmentGradeText(letterGradeAssignment.name, "11.4/15 (C)")
- gradesPage.assertAssignmentGradeText(passFailAssignment.name, "Incomplete")
- gradesPage.scrollDownScreen()
- gradesPage.assertAssignmentGradeText(gpaScaleAssignment.name, "3.7/15 (F)")
- }
}
\ No newline at end of file
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt
index 29a4d9207d..527eca415e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt
@@ -25,7 +25,8 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.PagesApi
@@ -35,6 +36,7 @@ import com.instructure.dataseeding.model.UpdateCourse
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
+import com.instructure.espresso.retryWithIncreasingDelay
import com.instructure.student.ui.pages.classic.WebViewTextCheck
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
@@ -282,11 +284,16 @@ class BookmarksE2ETest : StudentComposeTest() {
Log.d(STEP_TAG, "Navigate to 'Notifications' page.")
dashboardPage.clickNotificationsTab()
- Log.d(ASSERTION_TAG, "Assert that the notification about assignment: '${assignment.name}' is displayed.")
- notificationPage.assertNotificationDisplayed(assignment.name)
+ Log.d(ASSERTION_TAG, "Assert that the notification about the discussion itself: '${assignment.name}' is displayed.")
+ retryWithIncreasingDelay(times = 10, maxDelay = 3000, catchBlock = {
+ refresh() })
+ {
+ Log.d(ASSERTION_TAG, "Assert that the notification about assignment: '${assignment.name}' is displayed.")
+ notificationPage.assertNotificationDisplayed(assignment.name, contains = true)
+ }
Log.d(STEP_TAG, "Click on the notification about assignment: '${assignment.name}'.")
- notificationPage.clickNotification(assignment.name)
+ notificationPage.clickNotification(assignment.name, contains = true)
val notificationBookmarkName = "Second Bookmark"
Log.d(STEP_TAG, "Add a new bookmark with name: '$notificationBookmarkName' from the assignment details page.")
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt
index 3413e11d85..048daa7474 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.espresso.getDateInCanvasCalendarFormat
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CustomStatusesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CustomStatusesE2ETest.kt
index 4872bca225..2a23e1c0b4 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CustomStatusesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CustomStatusesE2ETest.kt
@@ -83,7 +83,7 @@ class CustomStatusesE2ETest: StudentComposeTest() {
assignmentListPage.clickAssignment(testAssignment)
assignmentDetailsPage.assertCustomStatus("AMAZING")
- assignmentDetailsPage.assertSubmissionAndRubricLabel()
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
}
@After
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt
index 1f9626a536..275a562e51 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt
@@ -31,7 +31,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.ConversationsApi
import com.instructure.dataseeding.api.GroupsApi
import com.instructure.espresso.getVideoPosition
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt
index a08306675b..a22f0be4f8 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt
@@ -22,7 +22,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/RubricE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/RubricE2ETest.kt
new file mode 100644
index 0000000000..85f4dd3e63
--- /dev/null
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/RubricE2ETest.kt
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.instructure.student.ui.e2e.compose
+
+import android.util.Log
+import androidx.test.espresso.Espresso
+import com.instructure.canvas.espresso.FeatureCategory
+import com.instructure.canvas.espresso.Priority
+import com.instructure.canvas.espresso.TestCategory
+import com.instructure.canvas.espresso.TestMetaData
+import com.instructure.canvas.espresso.annotations.E2E
+import com.instructure.dataseeding.api.AssignmentsApi
+import com.instructure.dataseeding.api.SubmissionsApi
+import com.instructure.dataseeding.model.GradingType
+import com.instructure.dataseeding.model.RubricAssessmentEntry
+import com.instructure.dataseeding.model.RubricCriterion
+import com.instructure.dataseeding.model.RubricCriterionRating
+import com.instructure.dataseeding.model.SubmissionType
+import com.instructure.dataseeding.util.days
+import com.instructure.dataseeding.util.fromNow
+import com.instructure.dataseeding.util.iso8601
+import com.instructure.student.ui.utils.StudentComposeTest
+import com.instructure.student.ui.utils.extensions.seedAssignmentSubmission
+import com.instructure.student.ui.utils.extensions.seedAssignmentWithRubric
+import com.instructure.student.ui.utils.extensions.seedData
+import com.instructure.student.ui.utils.extensions.tokenLogin
+import dagger.hilt.android.testing.HiltAndroidTest
+import org.junit.Test
+
+@HiltAndroidTest
+class RubricE2ETest : StudentComposeTest() {
+
+ override fun displaysPageObjects() = Unit
+
+ override fun enableAndConfigureAccessibilityChecks() = Unit
+
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.RUBRICS, TestCategory.E2E)
+ fun testRubricDisplayedInSubmissionDetailsE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(teachers = 1, courses = 1, students = 1)
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course with 10 max points.")
+ val assignment = AssignmentsApi.createAssignment(
+ courseId = course.id,
+ teacherToken = teacher.token,
+ gradingType = GradingType.POINTS,
+ pointsPossible = 10.0,
+ dueAt = 1.days.fromNow.iso8601,
+ submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY)
+ )
+
+ val writingQualityCriterion = RubricCriterion(
+ description = "Writing Quality",
+ longDescription = "Evaluates the overall quality of written expression and clarity.",
+ points = 10.0,
+ ratings = listOf(
+ RubricCriterionRating(description = "Excellent", longDescription = "Demonstrates outstanding writing skills with clear and compelling expression.", points = 10.0),
+ RubricCriterionRating(description = "Satisfactory", longDescription = "Meets basic writing requirements with adequate clarity.", points = 5.0),
+ RubricCriterionRating(description = "Poor", longDescription = "Does not meet writing standards; lacks clarity and structure.", points = 0.0)
+ )
+ )
+
+ val researchDepthCriterion = RubricCriterion(
+ description = "Research Depth",
+ longDescription = null,
+ points = 9.0,
+ ratings = listOf(
+ RubricCriterionRating(description = "Exceptional", longDescription = "Thorough and comprehensive research with strong source diversity.", points = 9.0),
+ RubricCriterionRating(description = "Proficient", longDescription = "Well-researched with only minor gaps in coverage.", points = 7.0),
+ RubricCriterionRating(description = "Developing", longDescription = "Adequate research coverage but missing important perspectives.", points = 4.0),
+ RubricCriterionRating(description = "Beginning", longDescription = "Limited research depth with significant gaps.", points = 2.0),
+ RubricCriterionRating(description = "Not good", longDescription = "Insufficient research; sources are missing or unreliable.", points = 1.0)
+ )
+ )
+
+ Log.d(PREPARATION_TAG, "Creating a rubric with 2 criteria and associating it with '${assignment.name}' assignment.")
+ val rubric = seedAssignmentWithRubric(
+ courseId = course.id,
+ assignmentId = assignment.id,
+ teacherToken = teacher.token,
+ title = "Test Rubric",
+ criteria = listOf(writingQualityCriterion, researchDepthCriterion)
+ )
+
+ Log.d(PREPARATION_TAG, "Seeding a submission for '${assignment.name}' assignment with '${student.name}' student.")
+ seedAssignmentSubmission(
+ submissionSeeds = listOf(SubmissionsApi.SubmissionSeedInfo(
+ amount = 1,
+ submissionType = SubmissionType.ONLINE_TEXT_ENTRY
+ )),
+ assignmentId = assignment.id,
+ courseId = course.id,
+ studentToken = student.token
+ )
+
+ Log.d(STEP_TAG, "Login with user: '${student.name}', login id: '${student.loginId}'.")
+ tokenLogin(student)
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Select course: '${course.name}'.")
+ dashboardPage.selectCourse(course)
+
+ Log.d(STEP_TAG, "Navigate to course Assignments Page.")
+ courseBrowserPage.selectAssignments()
+
+ Log.d(STEP_TAG, "Click on assignment '${assignment.name}'.")
+ assignmentListPage.clickAssignment(assignment)
+
+ Log.d(ASSERTION_TAG, "Assert that 'Submission & Feedback' label is displayed on the Assignment Details Page.")
+ assignmentDetailsPage.assertSubmissionAndFeedbackLabel()
+
+ Log.d(STEP_TAG, "Navigate to Submission Details Page.")
+ assignmentDetailsPage.goToSubmissionDetails()
+
+ Log.d(STEP_TAG, "Open the 'Rubric' tab in Submission Details.")
+ submissionDetailsPage.openRubric()
+
+ Log.d(STEP_TAG, "Expand the sliding panel to see all of the Rubric criteria.")
+ submissionDetailsPage.expandSlidingPanel()
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Writing Quality' criterion description button is displayed and opens the long description.")
+ submissionDetailsPage.assertRubricDescriptionDisplays(writingQualityCriterion)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Writing Quality' rubric criterion is displayed with all 3 ratings and their descriptions.")
+ submissionDetailsPage.assertRubricCriterionDisplayed(writingQualityCriterion)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Research Depth' rubric criterion is displayed with all 5 ratings and their descriptions.")
+ submissionDetailsPage.assertRubricCriterionDisplayed(researchDepthCriterion)
+
+ Log.d(STEP_TAG, "Grade the submission with rubric via API: selecting 'Poor' (defined rating, 0 pts) for 'Writing Quality' and a custom score of 3 pts for 'Research Depth'.")
+ val writingQualityCriterionResponse = rubric.criteria.first { it.description == writingQualityCriterion.description }
+ val poorRating = writingQualityCriterionResponse.ratings.first { it.description == "Poor" }
+ val researchDepthCriterionResponse = rubric.criteria.first { it.description == researchDepthCriterion.description }
+ SubmissionsApi.gradeSubmissionWithRubric(
+ teacherToken = teacher.token,
+ courseId = course.id,
+ assignmentId = assignment.id,
+ studentId = student.id,
+ rubricAssessment = mapOf(
+ writingQualityCriterionResponse.id to RubricAssessmentEntry(points = 0.0, ratingId = poorRating.id),
+ researchDepthCriterionResponse.id to RubricAssessmentEntry(points = 3.0)
+ )
+ )
+
+ Log.d(STEP_TAG, "Navigate back to Assignment Details Page and refresh to pick up the new grade.")
+ Espresso.pressBack()
+ assignmentDetailsPage.refresh()
+
+ Log.d(STEP_TAG, "Navigate to Submission Details Page.")
+ assignmentDetailsPage.goToSubmissionDetails()
+
+ Log.d(STEP_TAG, "Open the 'Rubric' tab and expand the sliding panel.")
+ submissionDetailsPage.openRubric()
+ submissionDetailsPage.expandSlidingPanel()
+
+ val writingQualityPoorRating = writingQualityCriterion.ratings.first { it.description == "Poor" }
+ val writingQualitySatisfactoryRating = writingQualityCriterion.ratings.first { it.description == "Satisfactory" }
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Writing Quality' 'Poor' rating is pre-selected as a defined rubric grade.")
+ submissionDetailsPage.assertRubricRatingSelected(writingQualityCriterion, writingQualityPoorRating)
+
+ Log.d(ASSERTION_TAG, "Assert that 'Research Depth' shows a custom score as pre-selected.")
+ submissionDetailsPage.assertRubricCustomScoreSelected(researchDepthCriterion)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Poor' rating is the actually assessed/graded rating (filled indicator).")
+ submissionDetailsPage.assertRubricRatingIsAssessed(writingQualityCriterion, writingQualityPoorRating)
+
+ Log.d(STEP_TAG, "Tap on the 'Satisfactory' rating to preview its description without changing the actual grade.")
+ submissionDetailsPage.clickRubricRating(writingQualityCriterion, writingQualitySatisfactoryRating)
+
+ Log.d(ASSERTION_TAG, "Assert that 'Satisfactory' description is shown after tapping it.")
+ submissionDetailsPage.assertRubricRatingSelected(writingQualityCriterion, writingQualitySatisfactoryRating)
+
+ Log.d(ASSERTION_TAG, "Assert that 'Poor' is still the actual graded rating (filled indicator) even though 'Satisfactory' was tapped.")
+ submissionDetailsPage.assertRubricRatingIsAssessed(writingQualityCriterion, writingQualityPoorRating)
+
+ Log.d(ASSERTION_TAG, "Assert that 'Satisfactory' is only preview selected (outlined indicator), not actually graded.")
+ submissionDetailsPage.assertRubricRatingIsPreviewSelected(writingQualityCriterion, writingQualitySatisfactoryRating)
+ }
+
+}
\ No newline at end of file
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt
index c15553f422..d3fc026873 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt
@@ -22,14 +22,14 @@ import androidx.test.espresso.Espresso
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.Intents.intended
import com.instructure.canvas.espresso.FeatureCategory
-import com.instructure.canvas.espresso.IntentActionMatcher
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.IntentActionMatcher
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.canvasapi2.utils.RemoteConfigUtils
import com.instructure.dataseeding.api.ConversationsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt
index 59f5dd620d..7bf626ea38 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt
@@ -37,14 +37,14 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
-import com.instructure.canvas.espresso.checkToastText
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.addAssignmentsToGroups
import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.Assignment
@@ -668,10 +668,10 @@ class AssignmentDetailsInteractionTest : StudentComposeTest() {
assignmentListPage.clickAssignment(assignment)
assignmentDetailsPage.clickSubmit()
- assignmentDetailsPage.assertSubmissionTypeDisplayed("Text Entry")
- assignmentDetailsPage.assertSubmissionTypeDisplayed("Website URL")
- assignmentDetailsPage.assertSubmissionTypeDisplayed("File Upload")
- assignmentDetailsPage.assertSubmissionTypeDisplayed("Media Recording")
+ assignmentDetailsPage.assertSubmissionOptionDisplayed("Text Entry")
+ assignmentDetailsPage.assertSubmissionOptionDisplayed("Website URL")
+ assignmentDetailsPage.assertSubmissionOptionDisplayed("File Upload")
+ assignmentDetailsPage.assertSubmissionOptionDisplayed("Media Recording")
//Try 1 submission to check if it's possible to submit even when there are multiple submission types available.
assignmentDetailsPage.selectSubmissionType(SubmissionType.ONLINE_URL)
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt
index 0d050ae7b9..40577cf944 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt
@@ -29,7 +29,7 @@ import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.addBookmark
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.Assignment
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt
index 4f5545bb7f..ad74db380d 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt
@@ -30,7 +30,7 @@ import com.instructure.canvas.espresso.mockcanvas.addFolderToCourse
import com.instructure.canvas.espresso.mockcanvas.addGroupToCourse
import com.instructure.canvas.espresso.mockcanvas.addPageToCourse
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.DiscussionTopicHeader
import com.instructure.canvasapi2.models.Group
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/PickerSubmissionUploadInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/PickerSubmissionUploadInteractionTest.kt
index 0620ff5dfa..3918fb7b58 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/PickerSubmissionUploadInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/PickerSubmissionUploadInteractionTest.kt
@@ -42,10 +42,13 @@ import com.instructure.canvas.espresso.annotations.Stub
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDocumentScannerManager
import com.instructure.canvas.espresso.mockcanvas.init
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.Assignment
+import com.instructure.pandautils.di.DocumentScannerModule
+import com.instructure.pandautils.features.file.upload.scanner.DocumentScannerManager
import com.instructure.pandautils.utils.FilePrefs
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.tokenLogin
@@ -61,16 +64,23 @@ import org.junit.Test
import java.io.File
@HiltAndroidTest
-@UninstallModules(CustomGradeStatusModule::class)
+@UninstallModules(CustomGradeStatusModule::class, DocumentScannerModule::class)
class PickerSubmissionUploadInteractionTest : StudentComposeTest() {
@BindValue
@JvmField
val customGradeStatusesManager: CustomGradeStatusesManager = FakeCustomGradeStatusesManager()
+ private val fakeScanner = FakeDocumentScannerManager()
+
+ @BindValue
+ @JvmField
+ val documentScannerManager: DocumentScannerManager = fakeScanner
+
override fun displaysPageObjects() = Unit
private val mockedFileName = "sample.jpg" // A file in our assets area
+ private val scannerFileName = "samplepdf.pdf" // A PDF file in our assets area, because the scanner makes a PDF.
private lateinit var activity : Activity
private lateinit var activityResult: Instrumentation.ActivityResult
@@ -82,12 +92,18 @@ class PickerSubmissionUploadInteractionTest : StudentComposeTest() {
//Clear file upload cache dir.
File(getInstrumentation().targetContext.cacheDir, "file_upload").deleteRecursively()
- // Copy our sample file from the assets area to the external cache dir
+ val dir = activity.externalCacheDir
+
+ // Copy our sample files from the assets area to the external cache dir
copyAssetFileToExternalCache(activity, mockedFileName)
+ copyAssetFileToExternalCache(activity, scannerFileName)
+
+ // Configure the scanner fake with the PDF file URI
+ fakeScanner.scannerSupported = true
+ fakeScanner.scanResultUri = Uri.fromFile(File(dir?.path, scannerFileName))
// Now create an ActivityResult that points to the sample file in the external cache dir
val resultData = Intent()
- val dir = activity.externalCacheDir
val file = File(dir?.path, mockedFileName)
val uri = Uri.fromFile(file)
resultData.data = uri
@@ -257,6 +273,33 @@ class PickerSubmissionUploadInteractionTest : StudentComposeTest() {
// happy with that.
}
+ @Test
+ @TestMetaData(Priority.COMMON, FeatureCategory.SUBMISSIONS, TestCategory.INTERACTION)
+ fun testFab_scanner() {
+ goToSubmissionPicker()
+ pickerSubmissionUploadPage.chooseScanner()
+ pickerSubmissionUploadPage.waitForSubmitButtonToAppear()
+ pickerSubmissionUploadPage.assertFileDisplayed(scannerFileName)
+ }
+
+ @Test
+ @TestMetaData(Priority.COMMON, FeatureCategory.SUBMISSIONS, TestCategory.INTERACTION)
+ fun testFab_scannerNotAvailable() {
+ fakeScanner.scannerSupported = false
+ goToSubmissionPicker()
+ pickerSubmissionUploadPage.assertScannerButtonNotDisplayed()
+ }
+
+ @Test
+ @TestMetaData(Priority.COMMON, FeatureCategory.SUBMISSIONS, TestCategory.INTERACTION)
+ fun testDeleteFileAfterScan() {
+ goToSubmissionPicker()
+ pickerSubmissionUploadPage.chooseScanner()
+ pickerSubmissionUploadPage.waitForSubmitButtonToAppear()
+ pickerSubmissionUploadPage.clickDeleteButton()
+ pickerSubmissionUploadPage.assertEmptyViewDisplayed()
+ }
+
// Seed course, user, assignment and navigate to submission picker for assignment
private fun goToSubmissionPicker() : MockCanvas {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxComposeInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxComposeInteractionTest.kt
index c1aed368ad..e4442667fa 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxComposeInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxComposeInteractionTest.kt
@@ -27,6 +27,7 @@ import com.instructure.canvas.espresso.mockcanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockcanvas.addRecipientsToCourse
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -42,6 +43,7 @@ import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -111,6 +113,10 @@ class StudentInboxComposeInteractionTest: InboxComposeInteractionTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
override fun goToInboxCompose(data: MockCanvas) {
val parent = data.parents.first()
val token = data.tokenFor(parent)!!
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxSignatureInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxSignatureInteractionTest.kt
index 554ab9a98a..156b73fc57 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxSignatureInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/StudentInboxSignatureInteractionTest.kt
@@ -23,6 +23,7 @@ import com.instructure.canvas.espresso.common.interaction.InboxSignatureInteract
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -38,6 +39,7 @@ import com.instructure.canvasapi2.managers.InboxSettingsManager
import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -97,6 +99,10 @@ class StudentInboxSignatureInteractionTest : InboxSignatureInteractionTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
private val leftSideNavigationDrawerPage = LeftSideNavigationDrawerPage()
override val activityRule = StudentActivityTestRule(LoginActivity::class.java)
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/SubmissionDetailsInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/SubmissionDetailsInteractionTest.kt
index eeb180c358..4fd89c0668 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/SubmissionDetailsInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/SubmissionDetailsInteractionTest.kt
@@ -38,9 +38,9 @@ import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.Attachment
import com.instructure.canvasapi2.models.Author
import com.instructure.canvasapi2.models.Course
-import com.instructure.canvasapi2.models.RubricCriterion
-import com.instructure.canvasapi2.models.RubricCriterionRating
import com.instructure.canvasapi2.models.SubmissionComment
+import com.instructure.dataseeding.model.RubricCriterion
+import com.instructure.dataseeding.model.RubricCriterionRating
import com.instructure.espresso.triggerWorkManagerJobs
import com.instructure.student.ui.pages.classic.WebViewTextCheck
import com.instructure.student.ui.utils.StudentComposeTest
@@ -155,7 +155,7 @@ class SubmissionDetailsInteractionTest : StudentComposeTest() {
description = "Description of criterion",
longDescription = "0, 3, 7 or 10 points",
points = 10.0,
- ratings = mutableListOf(
+ ratings = listOf(
RubricCriterionRating(id="1",points=0.0,description="No Marks", longDescription = "Really?"),
RubricCriterionRating(id="2",points=3.0,description="Meh", longDescription = "You're better than this!"),
RubricCriterionRating(id="3",points=7.0,description="Passable", longDescription = "Getting there!"),
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt
index 7ea7db0296..04ec56f09f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt
@@ -17,7 +17,7 @@
package com.instructure.student.ui.pages.classic
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt
index 1aa45b2065..905fbc3807 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt
@@ -27,8 +27,8 @@ import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.clearText
import com.instructure.espresso.click
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt
index a5a9fbf537..f9b1d5198b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt
@@ -31,8 +31,8 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.withChild
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Tab
import com.instructure.dataseeding.model.CourseApiModel
@@ -189,8 +189,8 @@ open class CourseBrowserPage : BasePage(R.id.courseBrowserPage) {
// need either one or two swipe-downs to effect a refresh. We'll go with two to cover
// our bases.
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed()))
- .perform(withCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
- .perform(withCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
}
// When the toolbar is maximized, you can't do any operations with the recyclerView
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt
index de89ebf3fd..3c72d81a04 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt
@@ -37,9 +37,9 @@ import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.waitForViewToDisappear
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.waitForViewToDisappear
import com.instructure.canvasapi2.models.AccountNotification
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Group
@@ -216,12 +216,12 @@ class DashboardPage : BasePage(R.id.dashboardPage) {
fun selectCourse(course: Course) {
assertDisplaysCourse(course)
- onView(withId(R.id.titleTextView) + withText(course.originalName)).perform(withCustomConstraints(click(), isDisplayingAtLeast(10)))
+ onView(withId(R.id.titleTextView) + withText(course.originalName)).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(10)))
}
fun selectCourse(courseName: String) {
assertDisplaysCourse(courseName)
- onView(withId(R.id.titleTextView) + withText(courseName)).perform(withCustomConstraints(click(), isDisplayingAtLeast(10)))
+ onView(withId(R.id.titleTextView) + withText(courseName)).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(10)))
}
fun selectGroup(group: Group) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt
index 159d39ea88..ff398d184e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt
@@ -23,8 +23,8 @@ import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withParent
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.waitForMatcherWithRefreshes
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.waitForMatcherWithRefreshes
import com.instructure.canvasapi2.models.DiscussionTopicHeader
import com.instructure.espresso.DoesNotExistAssertion
import com.instructure.espresso.OnViewWithId
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt
index ccd1da8500..2e125a5a9a 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt
@@ -28,9 +28,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withChild
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.Searchable
import com.instructure.espresso.assertDisplayed
@@ -102,7 +102,7 @@ class FileListPage(val searchable: Searchable) : BasePage(R.id.fileListPage) {
// Doesn't worry about having scrolling to the top of the page first...
fun refresh() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(50)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
fun openOptionMenuFor(itemName: String) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt
index 3913699b3f..9b58c717f0 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt
@@ -26,8 +26,8 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.StringConstants.HelpMenu
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.canvasapi2.models.Course
import com.instructure.dataseeding.model.CourseApiModel
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
@@ -49,13 +49,13 @@ class HelpPage : BasePage(R.id.helpDialog) {
private val askInstructorLabel by OnViewWithText(R.string.askInstructor)
private val searchGuidesLabel by OnViewWithText(R.string.searchGuides)
private val reportProblemLabel by OnViewWithStringTextIgnoreCase("Report a Problem")
- private val submitFeatureLabel by OnViewWithStringTextIgnoreCase("Submit a Feature Idea")
+ private val shareContributionLabel by OnViewWithStringTextIgnoreCase("Share a Contribution")
private val shareLoveLabel by OnViewWithText(R.string.shareYourLove)
fun assertAskYourInstructorDialogDetails(course: Course, question: String) {
askInstructorLabel.scrollTo().click()
waitForView(withText(course.name)).assertDisplayed() // Verify that our course is selected in the spinner
- onView(withId(R.id.message)).scrollTo().perform(withCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
+ onView(withId(R.id.message)).scrollTo().perform(actionWithCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
Espresso.closeSoftKeyboard()
// Let's just make sure that the "Send" button is displayed, rather than actually pressing it
onView(containsTextCaseInsensitive("Send")).assertDisplayed()
@@ -64,7 +64,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
private fun assertAskYourInstructorDialogDetails(course: CourseApiModel, question: String) {
askInstructorLabel.scrollTo().click()
waitForView(withText(course.name)).assertDisplayed() // Verify that our course is selected in the spinner
- onView(withId(R.id.message)).scrollTo().perform(withCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
+ onView(withId(R.id.message)).scrollTo().perform(actionWithCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
Espresso.closeSoftKeyboard()
// Let's just make sure that the "Send" button is displayed, rather than actually pressing it
onView(containsTextCaseInsensitive("Send")).assertDisplayed()
@@ -109,8 +109,8 @@ class HelpPage : BasePage(R.id.helpDialog) {
shareLoveLabel.scrollTo().click()
}
- fun clickSubmitFeatureLabel() {
- submitFeatureLabel.scrollTo().click()
+ fun clickShareContributionLabel() {
+ shareContributionLabel.scrollTo().click()
}
fun assertHelpMenuDisplayed() {
@@ -132,8 +132,8 @@ class HelpPage : BasePage(R.id.helpDialog) {
onView(withId(R.id.title) + withText(HelpMenu.REPORT_PROBLEM_TITLE)).assertDisplayed()
onView(withId(R.id.subtitle) + withText(HelpMenu.REPORT_PROBLEM_SUBTITLE)).assertDisplayed()
- onView(withId(R.id.title) + withText(HelpMenu.SUBMIT_FEATURE_TITLE)).assertDisplayed()
- onView(withId(R.id.subtitle) + withText(HelpMenu.SUBMIT_FEATURE_SUBTITLE)).assertDisplayed()
+ onView(withId(R.id.title) + withText(HelpMenu.SHARE_A_CONTRIBUTION_TITLE)).assertDisplayed()
+ onView(withId(R.id.subtitle) + withText(HelpMenu.SHARE_A_CONTRIBUTION_SUBTITLE)).assertDisplayed()
onView(withId(R.id.title) + withText(HelpMenu.SHARE_LOVE_TITLE)).assertDisplayed()
onView(withId(R.id.subtitle) + withText(HelpMenu.SHARE_LOVE_SUBTITLE)).assertDisplayed()
@@ -157,7 +157,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
when (helpMenuText) {
HelpMenu.SEARCH_GUIDES_TITLE -> clickSearchGuidesLabel()
- HelpMenu.SUBMIT_FEATURE_TITLE -> clickSubmitFeatureLabel()
+ HelpMenu.SHARE_A_CONTRIBUTION_TITLE -> clickShareContributionLabel()
HelpMenu.SHARE_LOVE_TITLE -> clickShareLoveLabel()
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt
index 70745237d8..466e4300b0 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt
@@ -9,7 +9,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.OnViewWithContentDescription
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt
index 3a2f540655..0176440bc4 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt
@@ -26,9 +26,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withChild
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.ImageViewDrawableMatcher
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.ImageViewDrawableMatcher
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.ModuleObject
@@ -183,7 +183,7 @@ class ModulesPage : BasePage(R.id.modulesPage) {
}
fun refresh() {
- onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed())).perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(5)))
+ onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed())).perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(5)))
}
fun clickOnModuleExpandCollapseIcon(moduleName: String) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt
index bdc40097a5..c240353169 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt
@@ -20,9 +20,9 @@ import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.refresh
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.refresh
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.RecyclerViewItemCountGreaterThanAssertion
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
@@ -39,8 +39,12 @@ import org.hamcrest.Matchers
class NotificationPage : BasePage() {
- fun assertNotificationDisplayed(title: String) {
- val matcher = allOf(containsTextCaseInsensitive(title), withId(R.id.title))
+ fun assertNotificationDisplayed(title: String, contains: Boolean = false) {
+ val matcher = if (contains) {
+ allOf(containsTextCaseInsensitive(title), withId(R.id.title))
+ } else {
+ allOf(withText(title), withId(R.id.title))
+ }
scrollRecyclerView(R.id.listView, matcher)
onView(matcher).assertDisplayed()
}
@@ -70,8 +74,12 @@ class NotificationPage : BasePage() {
onView(matcher).scrollTo().assertDisplayed()
}
- fun clickNotification(title: String) {
- val matcher = allOf(containsTextCaseInsensitive(title), withId(R.id.title))
+ fun clickNotification(title: String, contains: Boolean = false) {
+ val matcher = if (contains) {
+ allOf(containsTextCaseInsensitive(title), withId(R.id.title))
+ } else {
+ allOf(withText(title), withId(R.id.title))
+ }
scrollRecyclerView(R.id.listView, matcher)
onView(matcher).click()
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt
index 0424bc4619..d33a9e5ab3 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt
@@ -20,7 +20,7 @@ import android.view.View
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Page
import com.instructure.dataseeding.model.PageApiModel
import com.instructure.espresso.DoesNotExistAssertion
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt
index d692cd4016..1a6313f582 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt
@@ -18,8 +18,8 @@ package com.instructure.student.ui.pages.classic
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.getText
-import com.instructure.canvas.espresso.matchToolbarText
+import com.instructure.canvas.espresso.utils.getText
+import com.instructure.canvas.espresso.utils.matchToolbarText
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.WaitForViewWithId
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt
index 235df4a65d..d777dc428e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt
@@ -2,7 +2,7 @@ package com.instructure.student.ui.pages.classic
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.stringContainsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.stringContainsTextCaseInsensitive
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
import com.instructure.espresso.page.onView
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt
index f8814d9c37..0648a5d49c 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt
@@ -23,7 +23,7 @@ import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import com.instructure.canvas.espresso.getViewChildCountWithoutId
+import com.instructure.canvas.espresso.utils.getViewChildCountWithoutId
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.OnViewWithId
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PickerSubmissionUploadPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PickerSubmissionUploadPage.kt
index 3c96301b25..0eaf1ff798 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PickerSubmissionUploadPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PickerSubmissionUploadPage.kt
@@ -16,12 +16,13 @@
*/
package com.instructure.student.ui.pages.classic
+import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
+import com.instructure.espresso.assertNotDisplayed
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
-import com.instructure.espresso.page.onView
import com.instructure.espresso.page.waitForViewWithText
import com.instructure.espresso.page.withId
import com.instructure.espresso.page.withText
@@ -33,6 +34,7 @@ class PickerSubmissionUploadPage : BasePage(R.id.pickerSubmissionUploadPage) {
private val deviceIcon by OnViewWithId(R.id.sourceDeviceIcon)
private val cameraIcon by OnViewWithId(R.id.sourceCameraIcon)
private val galleryIcon by OnViewWithId(R.id.sourceGalleryIcon)
+ private val scannerIcon by OnViewWithId(R.id.sourceScannerIcon)
private val deleteButton by OnViewWithId(R.id.deleteButton)
fun chooseDevice() {
@@ -47,6 +49,18 @@ class PickerSubmissionUploadPage : BasePage(R.id.pickerSubmissionUploadPage) {
galleryIcon.click()
}
+ fun chooseScanner() {
+ scannerIcon.click()
+ }
+
+ fun assertScannerButtonDisplayed() {
+ onView(withId(R.id.sourceScanner)).assertDisplayed()
+ }
+
+ fun assertScannerButtonNotDisplayed() {
+ onView(withId(R.id.sourceScanner)).assertNotDisplayed()
+ }
+
fun waitForSubmitButtonToAppear() {
waitForViewWithText(R.string.submit)
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt
index 750c32bd45..a4e9a7499d 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt
@@ -8,7 +8,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.withId
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt
index bbe2201c8b..55f7ad2a18 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt
@@ -23,8 +23,8 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Quiz
import com.instructure.dataseeding.model.QuizApiModel
import com.instructure.espresso.RecyclerViewItemCountAssertion
@@ -93,7 +93,7 @@ class QuizListPage(val searchable: Searchable) : BasePage(R.id.quizListPage) {
fun refresh() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed()))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
fun assertPointsDisplayed(points: String?) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt
index 73ea2f4b18..3430b842ef 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt
@@ -21,9 +21,9 @@ import android.widget.EditText
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.clearFocus
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.clearFocus
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt
index a84e6f8708..e5e5816906 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt
@@ -27,7 +27,7 @@ import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import com.instructure.canvas.espresso.CanvasTest
import com.instructure.canvas.espresso.common.pages.AssignmentDetailsPage
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.espresso.ModuleItemInteractions
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt
index ca13645290..4921f25378 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt
@@ -28,21 +28,24 @@ import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
+import androidx.test.espresso.matcher.ViewMatchers.isActivated
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
+import androidx.test.espresso.matcher.ViewMatchers.isSelected
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.espresso.web.assertion.WebViewAssertions.webMatches
import androidx.test.espresso.web.sugar.Web.onWebView
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.clickCoordinates
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
-import com.instructure.canvasapi2.models.RubricCriterion
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.clickCoordinates
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.model.CanvasUserApiModel
+import com.instructure.dataseeding.model.RubricCriterion
+import com.instructure.dataseeding.model.RubricCriterionRating
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
@@ -62,6 +65,7 @@ import com.instructure.student.ui.rendertests.renderpages.SubmissionCommentsRend
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.anyOf
import org.hamcrest.Matchers.containsString
+import org.hamcrest.Matchers.not
import java.lang.Thread.sleep
open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
@@ -228,7 +232,7 @@ open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
if(click) {
//onView(commentMatcher).click()
onView(allOf(withId(R.id.attachmentNameTextView), withText(fileName)))
- .perform(withCustomConstraints(click(), isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(5)))
}
}
@@ -259,6 +263,10 @@ open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
swipeDrawerTo(GeneralLocation.BOTTOM_CENTER)
}
+ fun expandSlidingPanel() {
+ swipeDrawerTo(GeneralLocation.TOP_CENTER)
+ }
+
fun addAndSendComment(comment: String) {
submissionCommentsRenderPage.addAndSendComment(comment)
}
@@ -282,17 +290,14 @@ open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
fun assertRubricCriterionDisplayed(rc: RubricCriterion) {
rc.ratings.forEach { rating ->
val matcher = allOf(withParent(withId(R.id.ratingLayout)), withText(rating.points.toInt().toString()))
- scrollRecyclerView(R.id.recyclerView, matcher)
onView(matcher).assertDisplayed()
onView(matcher).click()
val descriptionMatcher = allOf(withId(R.id.ratingTitle), withText(rating.description))
- scrollRecyclerView(R.id.recyclerView, descriptionMatcher)
onView(descriptionMatcher).check(matches(isDisplayingAtLeast(10)))
if(rating.longDescription != null) {
val longDescriptionMatcher = allOf(withId(R.id.ratingDescription), withText(rating.longDescription))
- scrollRecyclerView(R.id.recyclerView, longDescriptionMatcher)
onView(longDescriptionMatcher).check(matches(isDisplayingAtLeast(10)))
}
}
@@ -302,9 +307,10 @@ open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
* Checks that pressing the "Description" button pops up a webview with the longDescription text
*/
fun assertRubricDescriptionDisplays(rc: RubricCriterion) {
- val matcher = allOf(withId(R.id.descriptionButton), containsTextCaseInsensitive("description"))
- scrollRecyclerView(R.id.recyclerView, matcher)
- onView(matcher).assertDisplayed() // probably unnecessary
+ val matcher = allOf(
+ withId(R.id.descriptionButton),
+ withAncestor(allOf(withId(R.id.rubricCriterion), hasDescendant(allOf(withId(R.id.criterionTitle), withText(rc.description)))))
+ )
onView(matcher).click()
onWebView(withId(R.id.webView))
@@ -315,6 +321,40 @@ open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
}
+ fun assertRubricRatingSelected(rc: RubricCriterion, rating: RubricCriterionRating) {
+ val criterionAncestor = allOf(withId(R.id.rubricCriterion), hasDescendant(allOf(withId(R.id.criterionTitle), withText(rc.description))))
+ onView(allOf(withId(R.id.ratingTitle), withText(rating.description), withAncestor(criterionAncestor)))
+ .check(matches(isDisplayingAtLeast(10)))
+ if (rating.longDescription != null) {
+ onView(allOf(withId(R.id.ratingDescription), withText(rating.longDescription), withAncestor(criterionAncestor)))
+ .check(matches(isDisplayingAtLeast(10)))
+ }
+ }
+
+ fun assertRubricCustomScoreSelected(rc: RubricCriterion) {
+ val criterionAncestor = allOf(withId(R.id.rubricCriterion), hasDescendant(allOf(withId(R.id.criterionTitle), withText(rc.description))))
+ onView(allOf(withId(R.id.ratingTitle), withText(R.string.rubricCustomScore), withAncestor(criterionAncestor)))
+ .check(matches(isDisplayingAtLeast(10)))
+ }
+
+ fun clickRubricRating(rc: RubricCriterion, rating: RubricCriterionRating) {
+ val criterionAncestor = allOf(withId(R.id.rubricCriterion), hasDescendant(allOf(withId(R.id.criterionTitle), withText(rc.description))))
+ onView(allOf(withParent(withId(R.id.ratingLayout)), withText(rating.points.toInt().toString()), withAncestor(criterionAncestor))).click()
+ }
+
+ fun assertRubricRatingIsAssessed(rc: RubricCriterion, rating: RubricCriterionRating) {
+ val criterionAncestor = allOf(withId(R.id.rubricCriterion), hasDescendant(allOf(withId(R.id.criterionTitle), withText(rc.description))))
+ onView(allOf(withParent(withId(R.id.ratingLayout)), withText(rating.points.toInt().toString()), withAncestor(criterionAncestor)))
+ .check(matches(isActivated()))
+ }
+
+ fun assertRubricRatingIsPreviewSelected(rc: RubricCriterion, rating: RubricCriterionRating) {
+ val criterionAncestor = allOf(withId(R.id.rubricCriterion), hasDescendant(allOf(withId(R.id.criterionTitle), withText(rc.description))))
+ val ratingMatcher = allOf(withParent(withId(R.id.ratingLayout)), withText(rating.points.toInt().toString()), withAncestor(criterionAncestor))
+ onView(ratingMatcher).check(matches(isSelected()))
+ onView(ratingMatcher).check(matches(not(isActivated())))
+ }
+
fun assertNoSubmissionEmptyView() {
onView(allOf(withId(R.id.title), withText(R.string.submissionDetailsNoSubmissionYet), withAncestor(withId(R.id.submissionDetailsEmptyContent)))).assertDisplayed()
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt
index 7fc11742d9..7500c55fc0 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt
@@ -24,9 +24,9 @@ import androidx.test.espresso.web.assertion.WebViewAssertions
import androidx.test.espresso.web.sugar.Web
import androidx.test.espresso.web.webdriver.DriverAtoms
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.matchToolbarText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.matchToolbarText
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt
index 6a7e466a4c..444065deaa 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt
@@ -21,7 +21,7 @@ import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.countConstraintLayoutsInRecyclerView
+import com.instructure.canvas.espresso.utils.countConstraintLayoutsInRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertHasChild
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt
index e54b83838d..a0f162c6e5 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt
@@ -24,9 +24,9 @@ import androidx.test.espresso.matcher.ViewMatchers.Visibility
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.hasCheckedState
-import com.instructure.canvas.espresso.withRotation
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.hasCheckedState
+import com.instructure.canvas.espresso.utils.withRotation
import com.instructure.espresso.ConstraintLayoutItemCountAssertion
import com.instructure.espresso.ConstraintLayoutItemCountAssertionWithMatcher
import com.instructure.espresso.DoesNotExistAssertion
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt
index ee17271db8..f5781ea21f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt
@@ -29,10 +29,10 @@ import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.DriverAtoms.webClick
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.isElementDisplayed
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.isElementDisplayed
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvas.espresso.withElementRepeat
import com.instructure.canvasapi2.models.DiscussionEntry
import com.instructure.canvasapi2.models.DiscussionTopicHeader
@@ -86,7 +86,7 @@ class NativeDiscussionDetailsPage(val moduleItemInteractions: ModuleItemInteract
fun refresh() {
scrollToTop()
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(10)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
fun scrollToRepliesWebview() {
@@ -348,6 +348,6 @@ class NativeDiscussionDetailsPage(val moduleItemInteractions: ModuleItemInteract
private fun scrollToTop() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(10)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt
index 35e251c694..5b34077de8 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt
@@ -20,8 +20,8 @@ package com.instructure.student.ui.pages.classic.offline
import android.widget.TextView
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.getView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.getView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertContainsText
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt
index a7f389471c..5663e3288b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt
@@ -17,8 +17,8 @@
package com.instructure.student.ui.pages.compose
import androidx.compose.ui.test.junit4.ComposeTestRule
-import com.instructure.canvas.espresso.TypeInRCETextEditor
-import com.instructure.canvas.espresso.explicitClick
+import com.instructure.canvas.espresso.utils.TypeInRCETextEditor
+import com.instructure.canvas.espresso.utils.explicitClick
import com.instructure.composetest.clickToolbarIconButton
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.OnViewWithText
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/DashboardScreenTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/DashboardScreenTest.kt
index 10db653702..78aa56c021 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/DashboardScreenTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/DashboardScreenTest.kt
@@ -23,11 +23,11 @@ import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.instructure.canvasapi2.models.CanvasContext
-import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
+import com.instructure.pandautils.features.dashboard.DashboardNavigationEvent
+import com.instructure.pandautils.features.dashboard.DashboardNavigationHandler
+import com.instructure.pandautils.features.dashboard.compose.DashboardUiState
import com.instructure.pandautils.features.dashboard.widget.WidgetMetadata
import com.instructure.student.features.dashboard.compose.DashboardScreenContent
-import com.instructure.student.features.dashboard.compose.DashboardUiState
import kotlinx.coroutines.flow.MutableSharedFlow
import org.junit.Assert.assertTrue
import org.junit.Rule
@@ -40,14 +40,13 @@ class DashboardScreenTest {
@get:Rule
val composeTestRule = createComposeRule()
- private val mockRouter = object : DashboardRouter {
- override fun routeToGlobalAnnouncement(subject: String, message: String) {}
- override fun routeToSubmissionDetails(canvasContext: CanvasContext, assignmentId: Long, attemptId: Long) {}
- override fun routeToMyFiles(canvasContext: CanvasContext, folderId: Long) {}
- override fun routeToSyncProgress() {}
- override fun routeToManageOfflineContent() {}
- override fun routeToCustomizeDashboard() {}
- override fun restartApp() {}
+ private val mockNavigationHandler = object : DashboardNavigationHandler {
+ override fun handleCoursesNavigation(event: DashboardNavigationEvent.Courses) {}
+ override fun handleTodoNavigation(event: DashboardNavigationEvent.Todo) {}
+ override fun handleForecastNavigation(event: DashboardNavigationEvent.Forecast) {}
+ override fun handleProgressNavigation(event: DashboardNavigationEvent.Progress) {}
+ override fun handleConferencesNavigation(event: DashboardNavigationEvent.Conferences) {}
+ override fun handleDashboardNavigation(event: DashboardNavigationEvent.Dashboard) {}
}
@Test
@@ -66,7 +65,7 @@ class DashboardScreenTest {
refreshSignal = MutableSharedFlow(),
snackbarMessageFlow = MutableSharedFlow(),
onShowSnackbar = { _, _, _ -> },
- router = mockRouter
+ navigationHandler = mockNavigationHandler
)
}
@@ -90,7 +89,7 @@ class DashboardScreenTest {
refreshSignal = MutableSharedFlow(),
snackbarMessageFlow = MutableSharedFlow(),
onShowSnackbar = { _, _, _ -> },
- router = mockRouter
+ navigationHandler = mockNavigationHandler
)
}
@@ -114,7 +113,7 @@ class DashboardScreenTest {
refreshSignal = MutableSharedFlow(),
snackbarMessageFlow = MutableSharedFlow(),
onShowSnackbar = { _, _, _ -> },
- router = mockRouter
+ navigationHandler = mockNavigationHandler
)
}
@@ -138,7 +137,7 @@ class DashboardScreenTest {
refreshSignal = MutableSharedFlow(),
snackbarMessageFlow = MutableSharedFlow(),
onShowSnackbar = { _, _, _ -> },
- router = mockRouter
+ navigationHandler = mockNavigationHandler
)
}
@@ -167,7 +166,7 @@ class DashboardScreenTest {
refreshSignal = MutableSharedFlow(),
snackbarMessageFlow = MutableSharedFlow(),
onShowSnackbar = { _, _, _ -> },
- router = mockRouter
+ navigationHandler = mockNavigationHandler
)
}
@@ -176,18 +175,19 @@ class DashboardScreenTest {
}
@Test
- fun testCustomizeDashboardButtonCallsRouter() {
- var routerCalled = false
- val testRouter = object : DashboardRouter {
- override fun routeToGlobalAnnouncement(subject: String, message: String) {}
- override fun routeToSubmissionDetails(canvasContext: CanvasContext, assignmentId: Long, attemptId: Long) {}
- override fun routeToMyFiles(canvasContext: CanvasContext, folderId: Long) {}
- override fun routeToSyncProgress() {}
- override fun routeToManageOfflineContent() {}
- override fun routeToCustomizeDashboard() {
- routerCalled = true
+ fun testCustomizeDashboardButtonCallsNavigationHandler() {
+ var navigationCalled = false
+ val testNavigationHandler = object : DashboardNavigationHandler {
+ override fun handleCoursesNavigation(event: DashboardNavigationEvent.Courses) {}
+ override fun handleTodoNavigation(event: DashboardNavigationEvent.Todo) {}
+ override fun handleForecastNavigation(event: DashboardNavigationEvent.Forecast) {}
+ override fun handleProgressNavigation(event: DashboardNavigationEvent.Progress) {}
+ override fun handleConferencesNavigation(event: DashboardNavigationEvent.Conferences) {}
+ override fun handleDashboardNavigation(event: DashboardNavigationEvent.Dashboard) {
+ if (event is DashboardNavigationEvent.Dashboard.NavigateToCustomizeDashboard) {
+ navigationCalled = true
+ }
}
- override fun restartApp() {}
}
val mockWidgets = listOf(
@@ -208,13 +208,13 @@ class DashboardScreenTest {
refreshSignal = MutableSharedFlow(),
snackbarMessageFlow = MutableSharedFlow(),
onShowSnackbar = { _, _, _ -> },
- router = testRouter
+ navigationHandler = testNavigationHandler
)
}
composeTestRule.waitForIdle()
composeTestRule.onNodeWithText("Customize Dashboard").performClick()
- assertTrue("Router's routeToCustomizeDashboard should be called", routerCalled)
+ assertTrue("NavigationHandler's handleDashboardNavigation should be called", navigationCalled)
}
-}
\ No newline at end of file
+}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt
index e9c3e63113..96887e33d3 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt
@@ -22,7 +22,7 @@ import androidx.test.espresso.matcher.RootMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasChildCount
import androidx.test.espresso.matcher.ViewMatchers.isSelected
import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.instructure.canvas.espresso.assertFontSizeSP
+import com.instructure.canvas.espresso.utils.assertFontSizeSP
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.RubricCriterion
import com.instructure.canvasapi2.models.RubricCriterionRating
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt
index 4a58351281..6ad7cb93ae 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt
@@ -18,7 +18,7 @@ package com.instructure.student.ui.rendertests.renderpages
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withAlpha
-import com.instructure.canvas.espresso.assertIsRefreshing
+import com.instructure.canvas.espresso.utils.assertIsRefreshing
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertGone
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt
index afe553df23..403a323975 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt
@@ -17,8 +17,8 @@
package com.instructure.student.ui.rendertests.renderpages
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
-import com.instructure.canvas.espresso.assertIsRefreshing
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.assertIsRefreshing
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertGone
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt
index c08fb787ce..64a52656dd 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt
@@ -16,7 +16,7 @@
*/
package com.instructure.student.ui.rendertests.renderpages
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertGone
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt
index bca33cea82..0e2f6f62be 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt
@@ -23,8 +23,8 @@ import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.DirectlyPopulateEditText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.DirectlyPopulateEditText
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.utils.Pronouns
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt
index 1f74691925..7aa6f0d5dd 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt
@@ -24,19 +24,18 @@ import android.net.Uri
import android.os.Environment
import androidx.fragment.app.FragmentActivity
import androidx.test.espresso.Espresso
-import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.assertion.ViewAssertions.matches
-import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.platform.app.InstrumentationRegistry
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.EnrollmentsApi
import com.instructure.dataseeding.api.FileUploadsApi
+import com.instructure.dataseeding.api.RubricsApi
import com.instructure.dataseeding.api.SeedApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.api.UserApi
@@ -46,6 +45,8 @@ import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.dataseeding.model.EnrollmentTypes
import com.instructure.dataseeding.model.FileType
import com.instructure.dataseeding.model.FileUploadType
+import com.instructure.dataseeding.model.RubricApiModel
+import com.instructure.dataseeding.model.RubricCriterion
import com.instructure.dataseeding.model.SubmissionApiModel
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.CanvasNetworkAdapter
@@ -207,9 +208,9 @@ fun CanvasTest.tokenLogin(domain: String, token: String, user: User) {
}
// Sometimes, especially on slow FTL emulators, it can take a bit for the dashboard to show
// up after a token login. Add some tolerance for that.
- waitForMatcherWithSleeps(ViewMatchers.withId(R.id.dashboardPage), 20000).check(
- ViewAssertions.matches(
- ViewMatchers.isDisplayed()
+ waitForMatcherWithSleeps(withId(R.id.dashboardPage), 20000).check(
+ matches(
+ isDisplayed()
)
)
}
@@ -343,4 +344,22 @@ fun uploadTextFile(
token,
fileUploadType
)
+}
+
+fun seedAssignmentWithRubric(
+ courseId: Long,
+ assignmentId: Long,
+ teacherToken: String,
+ title: String = "Test Rubric",
+ criteria: List
+): RubricApiModel {
+ val created = RubricsApi.createAssignmentWithRubric(
+ courseId = courseId,
+ assignmentId = assignmentId,
+ teacherToken = teacherToken,
+ title = title,
+ criteria = criteria
+ )
+ val assignment = AssignmentsApi.getAssignment(courseId, assignmentId, teacherToken)
+ return created.copy(criteria = assignment.rubric ?: emptyList())
}
\ No newline at end of file
diff --git a/apps/student/src/main/AndroidManifest.xml b/apps/student/src/main/AndroidManifest.xml
index eb4b93f739..33cb243a4e 100644
--- a/apps/student/src/main/AndroidManifest.xml
+++ b/apps/student/src/main/AndroidManifest.xml
@@ -280,6 +280,14 @@
+
+
{
+ view.updateLayoutParams {
this.leftMargin = leftInset
this.rightMargin = rightInset
- this.bottomMargin = navigationBars.bottom
+ this.bottomMargin = 0
+ height = view.minimumHeight + navigationBars.bottom
}
} else {
- // In portrait, only apply display cutout and bottom navigation bar
+ // In portrait, extend the height to draw behind the Android navigation bar (edge-to-edge)
view.setPadding(
displayCutout.left,
view.paddingTop,
@@ -530,10 +551,11 @@ class NavigationActivity : BaseRouterActivity(), Navigation, MasqueradingDialog.
view.paddingBottom
)
- view.updateLayoutParams {
+ view.updateLayoutParams {
this.leftMargin = 0
this.rightMargin = 0
- this.bottomMargin = navigationBars.bottom
+ this.bottomMargin = 0
+ height = view.minimumHeight + navigationBars.bottom
}
}
@@ -547,14 +569,6 @@ class NavigationActivity : BaseRouterActivity(), Navigation, MasqueradingDialog.
insets
}
- ViewCompat.setOnApplyWindowInsetsListener(bottomBarContainer) { view, insets ->
- val navigationBars = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
- bottomBarContainer.updateLayoutParams {
- height = 56.toPx + navigationBars.bottom
- }
- insets
- }
-
ViewCompat.setOnApplyWindowInsetsListener(binding.bottomBarDivider) { view, insets ->
val navigationBars = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
val displayCutout = insets.getInsets(WindowInsetsCompat.Type.displayCutout())
diff --git a/apps/student/src/main/java/com/instructure/student/di/LoginModule.kt b/apps/student/src/main/java/com/instructure/student/di/LoginModule.kt
index 8d6aa90753..b5db9d71a2 100644
--- a/apps/student/src/main/java/com/instructure/student/di/LoginModule.kt
+++ b/apps/student/src/main/java/com/instructure/student/di/LoginModule.kt
@@ -24,11 +24,13 @@ import com.instructure.canvasapi2.models.AccountDomain
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.loginapi.login.LoginNavigation
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
import com.instructure.loginapi.login.util.LoginPrefs
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.pandautils.room.offline.DatabaseProvider
import com.instructure.student.activity.SignInActivity
import com.instructure.student.features.login.StudentAcceptableUsePolicyRouter
+import com.instructure.student.features.login.StudentCookieConsentRouter
import com.instructure.student.features.login.StudentLoginNavigation
import dagger.Module
import dagger.Provides
@@ -59,6 +61,13 @@ class LoginModule {
): LoginNavigation {
return StudentLoginNavigation(activity, databaseProvider, alarmScheduler)
}
+
+ @Provides
+ fun provideCookieConsentRouter(
+ activity: FragmentActivity
+ ): CookieConsentRouter {
+ return StudentCookieConsentRouter(activity)
+ }
}
@Module
diff --git a/apps/student/src/main/java/com/instructure/student/di/WidgetModule.kt b/apps/student/src/main/java/com/instructure/student/di/WidgetModule.kt
index b95ef2992b..738eeff78f 100644
--- a/apps/student/src/main/java/com/instructure/student/di/WidgetModule.kt
+++ b/apps/student/src/main/java/com/instructure/student/di/WidgetModule.kt
@@ -26,6 +26,7 @@ import com.instructure.canvasapi2.apis.UserAPI
import com.instructure.canvasapi2.managers.FeaturesManager
import com.instructure.canvasapi2.utils.Analytics
import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.pandautils.room.appdatabase.daos.ToDoFilterDao
import com.instructure.pandautils.utils.FeatureFlagProvider
import com.instructure.student.widget.WidgetLogger
@@ -114,13 +115,15 @@ class WidgetModule {
userApi: UserAPI.UsersInterface,
featureFlagProvider: FeatureFlagProvider,
featuresManager: FeaturesManager,
- analytics: Analytics
+ analytics: Analytics,
+ consentPrefs: ConsentPrefs
): WidgetLogger {
return WidgetLogger(
userApi = userApi,
featureFlagProvider = featureFlagProvider,
featuresManager = featuresManager,
- analytics = analytics
+ analytics = analytics,
+ consentPrefs = consentPrefs
)
}
}
diff --git a/apps/student/src/main/java/com/instructure/student/di/feature/ConferencesWidgetModule.kt b/apps/student/src/main/java/com/instructure/student/di/feature/ConferencesWidgetModule.kt
deleted file mode 100644
index 076ac8d225..0000000000
--- a/apps/student/src/main/java/com/instructure/student/di/feature/ConferencesWidgetModule.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.di.feature
-
-import com.instructure.pandautils.features.dashboard.widget.conferences.ConferencesWidgetRouter
-import com.instructure.student.features.dashboard.widget.conferences.StudentConferencesWidgetRouter
-import dagger.Module
-import dagger.Provides
-import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
-
-@Module
-@InstallIn(ViewModelComponent::class)
-class ConferencesWidgetModule {
-
- @Provides
- fun provideConferencesWidgetRouter(): ConferencesWidgetRouter {
- return StudentConferencesWidgetRouter()
- }
-}
diff --git a/apps/student/src/main/java/com/instructure/student/di/feature/CookieConsentModule.kt b/apps/student/src/main/java/com/instructure/student/di/feature/CookieConsentModule.kt
new file mode 100644
index 0000000000..bfe1fa35ef
--- /dev/null
+++ b/apps/student/src/main/java/com/instructure/student/di/feature/CookieConsentModule.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.student.di.feature
+
+import com.instructure.canvasapi2.apis.UserAPI
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
+import com.instructure.pandautils.features.cookieconsent.AnalyticsConsentHandler
+import com.instructure.pandautils.features.cookieconsent.CookieConsentNamespace
+import com.instructure.pandautils.utils.FeatureFlagProvider
+import com.instructure.pandautils.utils.PendoTokenConfig
+import com.instructure.student.BuildConfig
+import com.instructure.student.widget.WidgetLogger
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+class CookieConsentModule {
+
+ @Provides
+ fun provideCookieConsentNamespace(): CookieConsentNamespace {
+ return CookieConsentNamespace.STUDENT
+ }
+
+ @Provides
+ @Singleton
+ fun providePendoTokenConfig(): PendoTokenConfig {
+ return PendoTokenConfig(
+ fallbackToken = BuildConfig.PENDO_TOKEN,
+ apiTokenSelector = { it.pendoMobileStudentApiKey }
+ )
+ }
+
+ @Provides
+ fun provideAnalyticsConsentHandler(
+ userApi: UserAPI.UsersInterface,
+ featureFlagProvider: FeatureFlagProvider,
+ consentPrefs: ConsentPrefs,
+ apiPrefs: ApiPrefs,
+ widgetLogger: WidgetLogger
+ ): AnalyticsConsentHandler {
+ return object : AnalyticsConsentHandler(userApi, featureFlagProvider, consentPrefs, apiPrefs) {
+ override suspend fun beforeStartPendoSession() {
+ widgetLogger.cancelLogging()
+ }
+ }
+ }
+}
diff --git a/apps/student/src/main/java/com/instructure/student/di/feature/CoursesWidgetModule.kt b/apps/student/src/main/java/com/instructure/student/di/feature/CoursesWidgetModule.kt
deleted file mode 100644
index 2c926ac29b..0000000000
--- a/apps/student/src/main/java/com/instructure/student/di/feature/CoursesWidgetModule.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.di.feature
-
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetBehavior
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import com.instructure.student.features.dashboard.widget.courses.StudentCoursesWidgetBehavior
-import com.instructure.student.features.dashboard.widget.courses.StudentCoursesWidgetRouter
-import dagger.Module
-import dagger.Provides
-import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
-
-@Module
-@InstallIn(ViewModelComponent::class)
-class CoursesWidgetModule {
-
- @Provides
- fun provideCoursesWidgetRouter(): CoursesWidgetRouter {
- return StudentCoursesWidgetRouter()
- }
-
- @Provides
- fun provideCoursesWidgetBehavior(
- studentCoursesWidgetBehavior: StudentCoursesWidgetBehavior
- ): CoursesWidgetBehavior {
- return studentCoursesWidgetBehavior
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/di/feature/ForecastWidgetModule.kt b/apps/student/src/main/java/com/instructure/student/di/feature/ForecastWidgetModule.kt
deleted file mode 100644
index f4a0724688..0000000000
--- a/apps/student/src/main/java/com/instructure/student/di/feature/ForecastWidgetModule.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.di.feature
-
-import com.instructure.pandautils.features.dashboard.widget.forecast.ForecastWidgetRouter
-import com.instructure.student.features.dashboard.widget.forecast.StudentForecastWidgetRouter
-import dagger.Module
-import dagger.Provides
-import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
-
-@Module
-@InstallIn(ViewModelComponent::class)
-class ForecastWidgetModule {
-
- @Provides
- fun provideForecastWidgetRouter(): ForecastWidgetRouter {
- return StudentForecastWidgetRouter()
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/di/feature/ProgressWidgetModule.kt b/apps/student/src/main/java/com/instructure/student/di/feature/ProgressWidgetModule.kt
deleted file mode 100644
index 079da55aca..0000000000
--- a/apps/student/src/main/java/com/instructure/student/di/feature/ProgressWidgetModule.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.di.feature
-
-import com.instructure.pandautils.features.dashboard.widget.progress.ProgressWidgetRouter
-import com.instructure.student.features.dashboard.widget.progress.StudentProgressWidgetRouter
-import dagger.Module
-import dagger.Provides
-import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
-
-@Module
-@InstallIn(ViewModelComponent::class)
-class ProgressWidgetModule {
-
- @Provides
- fun provideProgressWidgetRouter(): ProgressWidgetRouter {
- return StudentProgressWidgetRouter()
- }
-}
diff --git a/apps/student/src/main/java/com/instructure/student/di/feature/TodoWidgetModule.kt b/apps/student/src/main/java/com/instructure/student/di/feature/TodoWidgetModule.kt
index 285a7658a3..7a4318577e 100644
--- a/apps/student/src/main/java/com/instructure/student/di/feature/TodoWidgetModule.kt
+++ b/apps/student/src/main/java/com/instructure/student/di/feature/TodoWidgetModule.kt
@@ -16,10 +16,8 @@
package com.instructure.student.di.feature
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetBehavior
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
-import com.instructure.student.features.dashboard.widget.todo.StudentTodoWidgetBehavior
-import com.instructure.student.features.dashboard.widget.todo.StudentTodoWidgetRouter
+import com.instructure.pandautils.features.dashboard.widget.todo.TodoHomeScreenWidgetUpdater
+import com.instructure.student.features.dashboard.widget.todo.StudentTodoHomeScreenWidgetUpdater
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -30,14 +28,9 @@ import dagger.hilt.android.components.ViewModelComponent
class TodoWidgetModule {
@Provides
- fun provideTodoWidgetRouter(): TodoWidgetRouter {
- return StudentTodoWidgetRouter()
+ fun provideTodoHomeScreenWidgetUpdater(
+ studentTodoHomeScreenWidgetUpdater: StudentTodoHomeScreenWidgetUpdater
+ ): TodoHomeScreenWidgetUpdater {
+ return studentTodoHomeScreenWidgetUpdater
}
-
- @Provides
- fun provideTodoWidgetBehavior(
- studentTodoWidgetBehavior: StudentTodoWidgetBehavior
- ): TodoWidgetBehavior {
- return studentTodoWidgetBehavior
- }
-}
\ No newline at end of file
+}
diff --git a/apps/student/src/main/java/com/instructure/student/features/coursebrowser/CourseBrowserFragment.kt b/apps/student/src/main/java/com/instructure/student/features/coursebrowser/CourseBrowserFragment.kt
index 77b398e065..637ccc2c45 100644
--- a/apps/student/src/main/java/com/instructure/student/features/coursebrowser/CourseBrowserFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/coursebrowser/CourseBrowserFragment.kt
@@ -313,6 +313,7 @@ class CourseBrowserFragment : BaseCanvasFragment(), FragmentInteractions,
noOverlayToolbar.setVisible(!useOverlay)
overlayToolbar.setVisible(useOverlay)
courseHeader.setVisible(useOverlay)
+ ViewCompat.requestApplyInsets(appBarLayout)
}
private var statusBarBackgroundView: View? = null
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/RouteMatcherNavigationHandler.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/RouteMatcherNavigationHandler.kt
new file mode 100644
index 0000000000..1470eb022d
--- /dev/null
+++ b/apps/student/src/main/java/com/instructure/student/features/dashboard/RouteMatcherNavigationHandler.kt
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.instructure.student.features.dashboard
+
+import android.content.Intent
+import androidx.browser.customtabs.CustomTabColorSchemeParams
+import androidx.browser.customtabs.CustomTabsIntent
+import androidx.core.net.toUri
+import androidx.fragment.app.FragmentActivity
+import com.instructure.canvasapi2.models.Course
+import com.instructure.canvasapi2.models.Recipient
+import com.instructure.pandares.R
+import com.instructure.pandautils.features.assignments.details.AssignmentDetailsFragment
+import com.instructure.pandautils.features.calendartodo.createupdate.CreateUpdateToDoFragment
+import com.instructure.pandautils.features.dashboard.DashboardNavigationEvent
+import com.instructure.pandautils.features.dashboard.DashboardNavigationHandler
+import com.instructure.pandautils.features.dashboard.customize.CustomizeDashboardFragment
+import com.instructure.pandautils.features.dashboard.edit.EditDashboardFragment
+import com.instructure.pandautils.features.dashboard.widget.courses.customize.CustomizeCourseFragment
+import com.instructure.pandautils.features.discussion.router.DiscussionRouterFragment
+import com.instructure.pandautils.features.inbox.compose.InboxComposeFragment
+import com.instructure.pandautils.features.inbox.utils.InboxComposeOptions
+import com.instructure.pandautils.features.inbox.utils.InboxComposeOptionsDefaultValues
+import com.instructure.pandautils.features.inbox.utils.InboxComposeOptionsMode
+import com.instructure.pandautils.features.offline.offlinecontent.OfflineContentFragment
+import com.instructure.pandautils.features.offline.sync.progress.SyncProgressFragment
+import com.instructure.pandautils.features.shareextension.WORKER_ID
+import com.instructure.pandautils.utils.color
+import com.instructure.student.features.coursebrowser.CourseBrowserFragment
+import com.instructure.student.features.files.list.FileListFragment
+import com.instructure.student.features.shareextension.StudentShareExtensionActivity
+import com.instructure.student.fragment.AnnouncementListFragment
+import com.instructure.student.fragment.InternalWebviewFragment
+import com.instructure.student.mobius.assignmentDetails.submissionDetails.ui.SubmissionDetailsRepositoryFragment
+import com.instructure.student.router.RouteMatcher
+
+class RouteMatcherNavigationHandler(
+ private val activity: FragmentActivity
+) : DashboardNavigationHandler {
+
+ override fun handleCoursesNavigation(event: DashboardNavigationEvent.Courses) {
+ when (event) {
+ is DashboardNavigationEvent.Courses.NavigateToCourse -> {
+ RouteMatcher.route(activity, CourseBrowserFragment.makeRoute(event.course))
+ }
+ is DashboardNavigationEvent.Courses.NavigateToGroup -> {
+ RouteMatcher.route(activity, CourseBrowserFragment.makeRoute(event.group))
+ }
+ is DashboardNavigationEvent.Courses.ManageOfflineContent -> {
+ RouteMatcher.route(activity, OfflineContentFragment.makeRoute(event.course))
+ }
+ is DashboardNavigationEvent.Courses.CustomizeCourse -> {
+ RouteMatcher.route(activity, CustomizeCourseFragment.makeRoute(event.course))
+ }
+ DashboardNavigationEvent.Courses.NavigateToAllCourses -> {
+ RouteMatcher.route(activity, EditDashboardFragment.makeRoute())
+ }
+ is DashboardNavigationEvent.Courses.NavigateToAnnouncement -> {
+ RouteMatcher.route(
+ activity,
+ DiscussionRouterFragment.makeRoute(event.course, event.announcement, isAnnouncement = true)
+ )
+ }
+ is DashboardNavigationEvent.Courses.NavigateToAnnouncementList -> {
+ RouteMatcher.route(activity, AnnouncementListFragment.makeRoute(event.course))
+ }
+ is DashboardNavigationEvent.Courses.NavigateToGroupMessage -> {
+ val group = event.group
+ val allInGroupRecipient = Recipient(
+ stringId = group.contextId,
+ name = activity.getString(R.string.all_recipients_in_selected_context, group.name),
+ userCount = group.users.size
+ )
+
+ val options = InboxComposeOptions(
+ mode = InboxComposeOptionsMode.NEW_MESSAGE,
+ defaultValues = InboxComposeOptionsDefaultValues(
+ contextCode = group.contextId,
+ contextName = group.name,
+ recipients = listOf(allInGroupRecipient)
+ )
+ )
+ RouteMatcher.route(activity, InboxComposeFragment.makeRoute(options))
+ }
+ }
+ }
+
+ override fun handleTodoNavigation(event: DashboardNavigationEvent.Todo) {
+ when (event) {
+ is DashboardNavigationEvent.Todo.NavigateToTodo -> {
+ RouteMatcher.routeUrl(activity, event.htmlUrl)
+ }
+ is DashboardNavigationEvent.Todo.CreateTodo -> {
+ val route = CreateUpdateToDoFragment.makeRoute(event.initialDateString)
+ RouteMatcher.route(activity, route)
+ }
+ }
+ }
+
+ override fun handleForecastNavigation(event: DashboardNavigationEvent.Forecast) {
+ when (event) {
+ is DashboardNavigationEvent.Forecast.NavigateToAssignment -> {
+ val canvasContext = Course(id = event.courseId)
+ val route = AssignmentDetailsFragment.makeRoute(canvasContext, event.assignmentId)
+ RouteMatcher.route(activity, route)
+ }
+ is DashboardNavigationEvent.Forecast.NavigateToPlannerItem -> {
+ RouteMatcher.routeUrl(activity, event.htmlUrl)
+ }
+ }
+ }
+
+ override fun handleProgressNavigation(event: DashboardNavigationEvent.Progress) {
+ when (event) {
+ is DashboardNavigationEvent.Progress.OpenProgressDialog -> {
+ val intent = Intent(activity, StudentShareExtensionActivity::class.java)
+ intent.putExtra(WORKER_ID, event.workerId)
+ activity.startActivity(intent)
+ }
+ is DashboardNavigationEvent.Progress.NavigateToSubmissionDetails -> {
+ RouteMatcher.route(
+ activity,
+ SubmissionDetailsRepositoryFragment.makeRoute(
+ event.course,
+ event.assignmentId,
+ initialSelectedSubmissionAttempt = event.attemptId
+ )
+ )
+ }
+ is DashboardNavigationEvent.Progress.NavigateToMyFiles -> {
+ RouteMatcher.route(
+ activity,
+ FileListFragment.makeRoute(event.user, event.folderId)
+ )
+ }
+ DashboardNavigationEvent.Progress.OpenSyncProgress -> {
+ RouteMatcher.route(activity, SyncProgressFragment.makeRoute())
+ }
+ }
+ }
+
+ override fun handleConferencesNavigation(event: DashboardNavigationEvent.Conferences) {
+ when (event) {
+ is DashboardNavigationEvent.Conferences.LaunchConference -> {
+ val colorScheme = CustomTabColorSchemeParams.Builder()
+ .setToolbarColor(event.canvasContext.color)
+ .build()
+ CustomTabsIntent.Builder()
+ .setDefaultColorSchemeParams(colorScheme)
+ .setShowTitle(true)
+ .build()
+ .launchUrl(activity, event.url.toUri())
+ }
+ }
+ }
+
+ override fun handleDashboardNavigation(event: DashboardNavigationEvent.Dashboard) {
+ when (event) {
+ is DashboardNavigationEvent.Dashboard.NavigateToGlobalAnnouncement -> {
+ RouteMatcher.route(
+ activity,
+ InternalWebviewFragment.makeRoute(
+ "",
+ event.subject,
+ false,
+ event.message,
+ allowUnsupportedRouting = false
+ )
+ )
+ }
+ DashboardNavigationEvent.Dashboard.NavigateToManageOfflineContent -> {
+ RouteMatcher.route(activity, OfflineContentFragment.makeRoute())
+ }
+ DashboardNavigationEvent.Dashboard.NavigateToCustomizeDashboard -> {
+ RouteMatcher.route(activity, CustomizeDashboardFragment.makeRoute())
+ }
+ }
+ }
+}
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardScreen.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardScreen.kt
index 7c8ab93853..b4a3480ddf 100644
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardScreen.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardScreen.kt
@@ -17,29 +17,11 @@
package com.instructure.student.features.dashboard.compose
import androidx.activity.compose.LocalActivity
-import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.items
-import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.ExperimentalMaterialApi
-import androidx.compose.material.pullrefresh.PullRefreshIndicator
-import androidx.compose.material.pullrefresh.pullRefresh
import androidx.compose.material.pullrefresh.rememberPullRefreshState
-import androidx.compose.material3.ButtonDefaults
-import androidx.compose.material3.Icon
-import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Snackbar
import androidx.compose.material3.SnackbarDuration
@@ -47,9 +29,6 @@ import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
import androidx.compose.material3.Text
-import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
-import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
-import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
@@ -57,40 +36,29 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.colorResource
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import com.instructure.pandautils.compose.SnackbarMessage
import com.instructure.pandautils.compose.composables.CanvasThemedAppBar
-import com.instructure.pandautils.compose.composables.EmptyContent
-import com.instructure.pandautils.compose.composables.ErrorContent
-import com.instructure.pandautils.compose.composables.Loading
import com.instructure.pandautils.compose.composables.OverflowMenu
import com.instructure.pandautils.compose.composables.rememberWithRequireNetwork
-import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
-import com.instructure.pandautils.features.dashboard.widget.WidgetMetadata
-import com.instructure.pandautils.features.dashboard.widget.conferences.ConferencesWidget
-import com.instructure.pandautils.features.dashboard.widget.courseinvitation.CourseInvitationsWidget
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidget
-import com.instructure.pandautils.features.dashboard.widget.forecast.ForecastWidget
-import com.instructure.pandautils.features.dashboard.widget.institutionalannouncements.InstitutionalAnnouncementsWidget
-import com.instructure.pandautils.features.dashboard.widget.progress.ProgressWidget
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidget
-import com.instructure.pandautils.features.dashboard.widget.welcome.WelcomeWidget
+import com.instructure.pandautils.features.dashboard.DashboardNavigationEvent
+import com.instructure.pandautils.features.dashboard.DashboardNavigationHandler
+import com.instructure.pandautils.features.dashboard.compose.DashboardBody
+import com.instructure.pandautils.features.dashboard.compose.DashboardUiState
+import com.instructure.pandautils.features.dashboard.compose.DashboardViewModel
import com.instructure.pandautils.utils.ThemePrefs
-import com.instructure.pandautils.utils.ThemedColor
import com.instructure.student.R
import com.instructure.student.activity.NavigationActivity
import kotlinx.coroutines.flow.SharedFlow
@Composable
-fun DashboardScreen(router: DashboardRouter) {
+fun DashboardScreen(
+ navigationHandler: DashboardNavigationHandler
+) {
val viewModel: DashboardViewModel = hiltViewModel()
val uiState by viewModel.uiState.collectAsState()
@@ -99,7 +67,7 @@ fun DashboardScreen(router: DashboardRouter) {
refreshSignal = viewModel.refreshSignal,
snackbarMessageFlow = viewModel.snackbarMessage,
onShowSnackbar = viewModel::showSnackbar,
- router = router
+ navigationHandler = navigationHandler
)
}
@@ -110,7 +78,7 @@ fun DashboardScreenContent(
refreshSignal: SharedFlow,
snackbarMessageFlow: SharedFlow,
onShowSnackbar: (String, String?, (() -> Unit)?) -> Unit,
- router: DashboardRouter
+ navigationHandler: DashboardNavigationHandler
) {
val activity = LocalActivity.current
val pullRefreshState = rememberPullRefreshState(
@@ -137,7 +105,7 @@ fun DashboardScreenContent(
var showMenu by remember { mutableStateOf(false) }
val manageOfflineContentClick = rememberWithRequireNetwork {
- router.routeToManageOfflineContent()
+ navigationHandler.handleDashboardNavigation(DashboardNavigationEvent.Dashboard.NavigateToManageOfflineContent)
}
Scaffold(
@@ -168,7 +136,7 @@ fun DashboardScreenContent(
}
DropdownMenuItem(onClick = {
showMenu = !showMenu
- router.routeToCustomizeDashboard()
+ navigationHandler.handleDashboardNavigation(DashboardNavigationEvent.Dashboard.NavigateToCustomizeDashboard)
}) {
Text(
stringResource(R.string.customize_dashboard),
@@ -188,183 +156,6 @@ fun DashboardScreenContent(
}
}
) { paddingValues ->
- Box(
- modifier = Modifier
- .background(colorResource(R.color.backgroundLight))
- .padding(paddingValues)
- .pullRefresh(pullRefreshState)
- .fillMaxSize()
- ) {
- when {
- uiState.error != null -> {
- ErrorContent(
- errorMessage = uiState.error,
- retryClick = uiState.onRetry,
- modifier = Modifier
- .fillMaxSize()
- .testTag("errorContent")
- )
- }
-
- uiState.loading -> {
- Loading(
- modifier = Modifier
- .fillMaxSize()
- .testTag("loading")
- )
- }
-
- uiState.widgets.isEmpty() -> {
- EmptyContent(
- emptyMessage = stringResource(id = R.string.noCoursesSubtext),
- imageRes = R.drawable.ic_panda_nocourses,
- modifier = Modifier
- .fillMaxSize()
- .testTag("emptyContent")
- )
- }
-
- else -> {
- WidgetList(
- widgets = uiState.widgets,
- refreshSignal = refreshSignal,
- onShowSnackbar = onShowSnackbar,
- router = router,
- color = uiState.color,
- modifier = Modifier.fillMaxSize()
- )
- }
- }
-
- PullRefreshIndicator(
- refreshing = uiState.refreshing,
- state = pullRefreshState,
- modifier = Modifier
- .align(Alignment.TopCenter)
- .testTag("dashboardPullRefreshIndicator")
- )
- }
- }
-}
-
-@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
-@Composable
-private fun WidgetList(
- widgets: List,
- refreshSignal: SharedFlow,
- onShowSnackbar: (String, String?, (() -> Unit)?) -> Unit,
- router: DashboardRouter,
- color: ThemedColor,
- modifier: Modifier = Modifier
-) {
- val activity = LocalActivity.current ?: return
- val windowSizeClass = calculateWindowSizeClass(activity = activity)
-
- val columns = when (windowSizeClass.widthSizeClass) {
- WindowWidthSizeClass.Compact -> 1
- WindowWidthSizeClass.Medium -> 2
- WindowWidthSizeClass.Expanded -> 3
- else -> 1
- }
-
- LazyColumn(modifier = modifier, contentPadding = PaddingValues(bottom = 16.dp)) {
- items(
- items = widgets,
- key = { it.id }
- ) { metadata ->
- GetWidgetComposable(metadata.id, refreshSignal, columns, onShowSnackbar, router, modifier = Modifier.padding(top = 16.dp))
- }
-
- item {
- CustomizeDashboardButton(
- onClick = { router.routeToCustomizeDashboard() },
- color = Color(color.color()),
- modifier = Modifier
- .fillMaxWidth()
- .padding(start = 16.dp, end = 16.dp, top = 16.dp)
- )
- }
- }
-}
-
-@Composable
-private fun GetWidgetComposable(
- widgetId: String,
- refreshSignal: SharedFlow,
- columns: Int,
- onShowSnackbar: (String, String?, (() -> Unit)?) -> Unit,
- router: DashboardRouter,
- modifier: Modifier = Modifier
-) {
- return when (widgetId) {
- WidgetMetadata.WIDGET_ID_PROGRESS -> ProgressWidget(
- refreshSignal = refreshSignal,
- columns = columns,
- onShowSnackbar = onShowSnackbar,
- modifier = modifier
- )
-
- WidgetMetadata.WIDGET_ID_CONFERENCES -> ConferencesWidget(
- refreshSignal = refreshSignal,
- columns = columns,
- onShowSnackbar = onShowSnackbar,
- modifier = modifier
- )
-
- WidgetMetadata.WIDGET_ID_WELCOME -> WelcomeWidget(refreshSignal = refreshSignal, modifier = modifier)
- WidgetMetadata.WIDGET_ID_COURSES -> CoursesWidget(refreshSignal = refreshSignal, columns = columns, modifier = modifier)
- WidgetMetadata.WIDGET_ID_COURSE_INVITATIONS -> CourseInvitationsWidget(
- refreshSignal = refreshSignal,
- columns = columns,
- onShowSnackbar = onShowSnackbar,
- modifier = modifier
- )
-
- WidgetMetadata.WIDGET_ID_INSTITUTIONAL_ANNOUNCEMENTS -> InstitutionalAnnouncementsWidget(
- refreshSignal = refreshSignal,
- columns = columns,
- onAnnouncementClick = router::routeToGlobalAnnouncement,
- modifier = modifier
- )
-
- WidgetMetadata.WIDGET_ID_FORECAST -> ForecastWidget(refreshSignal = refreshSignal, modifier = modifier)
- WidgetMetadata.WIDGET_ID_TODO -> TodoWidget(refreshSignal = refreshSignal, onShowSnackbar = onShowSnackbar, modifier = modifier)
-
- else -> {}
- }
-}
-
-@Composable
-private fun CustomizeDashboardButton(
- onClick: () -> Unit,
- color: Color,
- modifier: Modifier = Modifier
-) {
- Row(
- modifier = modifier,
- horizontalArrangement = Arrangement.Center
- ) {
- OutlinedButton(
- onClick = onClick,
- shape = RoundedCornerShape(24.dp),
- colors = ButtonDefaults.outlinedButtonColors(
- containerColor = Color.Transparent,
- contentColor = color
- ),
- border = BorderStroke(1.dp, color),
- contentPadding = PaddingValues(start = 8.dp, end = 12.dp, top = 0.dp, bottom = 0.dp),
- modifier = Modifier.height(30.dp)
- ) {
- Icon(
- painter = painterResource(R.drawable.ic_edit_new),
- contentDescription = null,
- modifier = Modifier.padding(end = 6.dp).size(16.dp),
- tint = color
- )
- Text(
- text = stringResource(R.string.customize_dashboard),
- color = color
- )
- }
+ DashboardBody(paddingValues, pullRefreshState, uiState, refreshSignal, onShowSnackbar, navigationHandler)
}
}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardUiState.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardUiState.kt
deleted file mode 100644
index 8054dcc271..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/DashboardUiState.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2024 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.compose
-
-import com.instructure.pandautils.features.dashboard.widget.GlobalConfig
-import com.instructure.pandautils.features.dashboard.widget.WidgetMetadata
-import com.instructure.pandautils.utils.ThemedColor
-
-data class DashboardUiState(
- val loading: Boolean = true,
- val error: String? = null,
- val refreshing: Boolean = false,
- val isOnline: Boolean = true,
- val widgets: List = emptyList(),
- val onRefresh: () -> Unit = {},
- val onRetry: () -> Unit = {},
- val color: ThemedColor = ThemedColor(GlobalConfig.DEFAULT_COLOR)
-)
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/NewDashboardFragment.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/NewDashboardFragment.kt
index 0ca0681284..5a20e7af34 100644
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/NewDashboardFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/dashboard/compose/NewDashboardFragment.kt
@@ -20,24 +20,23 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.compose.runtime.remember
import androidx.compose.ui.platform.ComposeView
import com.instructure.canvasapi2.models.CanvasContext
+import com.instructure.canvasapi2.utils.pageview.PageView
import com.instructure.interactions.router.Route
import com.instructure.pandautils.compose.CanvasTheme
-import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
import com.instructure.pandautils.utils.ThemePrefs
import com.instructure.pandautils.utils.ViewStyler
+import com.instructure.student.features.dashboard.RouteMatcherNavigationHandler
import com.instructure.student.fragment.ParentFragment
import dagger.hilt.android.AndroidEntryPoint
-import javax.inject.Inject
//This needed to be named NewDashboardFragment because Pendo tracking would break otherwise.
+@PageView
@AndroidEntryPoint
class NewDashboardFragment : ParentFragment() {
- @Inject
- lateinit var router: DashboardRouter
-
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -45,8 +44,9 @@ class NewDashboardFragment : ParentFragment() {
): View {
return ComposeView(requireContext()).apply {
setContent {
+ val navigationHandler = remember { RouteMatcherNavigationHandler(requireActivity()) }
CanvasTheme {
- DashboardScreen(router = router)
+ DashboardScreen(navigationHandler = navigationHandler)
}
}
}
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/edit/StudentEditDashboardRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/edit/StudentEditDashboardRouter.kt
index e8cddb81d0..f819f5c504 100644
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/edit/StudentEditDashboardRouter.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/dashboard/edit/StudentEditDashboardRouter.kt
@@ -16,9 +16,14 @@
package com.instructure.student.features.dashboard.edit
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
+import com.google.android.material.snackbar.Snackbar
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.pandautils.features.dashboard.edit.EditDashboardRouter
+import com.instructure.pandautils.utils.EdgeToEdgeHelper
import com.instructure.student.features.coursebrowser.CourseBrowserFragment
import com.instructure.student.router.RouteMatcher
@@ -26,4 +31,17 @@ class StudentEditDashboardRouter(private val activity: FragmentActivity) : EditD
override fun routeCourse(canvasContext: CanvasContext?) {
RouteMatcher.route(activity, CourseBrowserFragment.makeRoute(canvasContext))
}
+
+ override fun showSnackbar(fragment: Fragment, resId: Int) {
+ val view = fragment.view ?: return
+ val snackbar = Snackbar.make(view, resId, Snackbar.LENGTH_LONG)
+ if (EdgeToEdgeHelper.isEdgeToEdgeEnforced()) {
+ // In Student app the Snackbar anchors to fullScreenCoordinatorLayout, which is already
+ // positioned above the bottom bar. Consuming the navigation bar insets prevents the
+ // Snackbar from adding an extra bottom margin that would double-count the nav bar space.
+ ViewCompat.setOnApplyWindowInsetsListener(snackbar.view) { _, _ -> WindowInsetsCompat.CONSUMED }
+ }
+ snackbar.show()
+ view.announceForAccessibility(fragment.requireContext().getString(resId))
+ }
}
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/notifications/StudentDashboardRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/notifications/StudentDashboardRouter.kt
index 8517c75bec..96c248aba1 100644
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/notifications/StudentDashboardRouter.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/dashboard/notifications/StudentDashboardRouter.kt
@@ -22,8 +22,6 @@ import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.ContextKeeper
import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
import com.instructure.pandautils.features.offline.sync.progress.SyncProgressFragment
-import com.instructure.pandautils.features.dashboard.customize.CustomizeDashboardFragment
-import com.instructure.pandautils.features.offline.offlinecontent.OfflineContentFragment
import com.instructure.student.activity.LoginActivity
import com.instructure.student.features.files.list.FileListFragment
import com.instructure.student.fragment.InternalWebviewFragment
@@ -67,20 +65,6 @@ class StudentDashboardRouter(private val activity: FragmentActivity) : Dashboard
)
}
- override fun routeToManageOfflineContent() {
- RouteMatcher.route(
- activity,
- OfflineContentFragment.makeRoute()
- )
- }
-
- override fun routeToCustomizeDashboard() {
- RouteMatcher.route(
- activity,
- CustomizeDashboardFragment.makeRoute()
- )
- }
-
override fun restartApp() {
val startupIntent = Intent(ContextKeeper.appContext, LoginActivity::class.java)
startupIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/conferences/StudentConferencesWidgetRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/conferences/StudentConferencesWidgetRouter.kt
deleted file mode 100644
index 84f3d2b7d3..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/conferences/StudentConferencesWidgetRouter.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.conferences
-
-import androidx.browser.customtabs.CustomTabColorSchemeParams
-import androidx.browser.customtabs.CustomTabsIntent
-import androidx.core.net.toUri
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.CanvasContext
-import com.instructure.pandautils.features.dashboard.widget.conferences.ConferencesWidgetRouter
-import com.instructure.pandautils.utils.color
-
-class StudentConferencesWidgetRouter : ConferencesWidgetRouter {
-
- override fun launchConference(activity: FragmentActivity, canvasContext: CanvasContext, url: String) {
- val colorScheme = CustomTabColorSchemeParams.Builder()
- .setToolbarColor(canvasContext.color)
- .build()
- CustomTabsIntent.Builder()
- .setDefaultColorSchemeParams(colorScheme)
- .setShowTitle(true)
- .build()
- .launchUrl(activity, url.toUri())
- }
-}
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/courses/StudentCoursesWidgetBehavior.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/courses/StudentCoursesWidgetBehavior.kt
deleted file mode 100644
index 644f1c4044..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/courses/StudentCoursesWidgetBehavior.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.courses
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.Course
-import com.instructure.canvasapi2.models.DiscussionTopicHeader
-import com.instructure.canvasapi2.models.Group
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetBehavior
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import javax.inject.Inject
-
-class StudentCoursesWidgetBehavior @Inject constructor(
- private val router: CoursesWidgetRouter
-) : CoursesWidgetBehavior {
-
- override fun onCourseClick(activity: FragmentActivity, course: Course) {
- router.routeToCourse(activity, course)
- }
-
- override fun onGroupClick(activity: FragmentActivity, group: Group) {
- router.routeToGroup(activity, group)
- }
-
- override fun onManageOfflineContent(activity: FragmentActivity, course: Course) {
- router.routeToManageOfflineContent(activity, course)
- }
-
- override fun onCustomizeCourse(activity: FragmentActivity, course: Course) {
- router.routeToCustomizeCourse(activity, course)
- }
-
- override fun onAllCoursesClicked(activity: FragmentActivity) {
- router.routeToAllCourses(activity)
- }
-
- override fun onAnnouncementClick(activity: FragmentActivity, course: Course, announcements: List) {
- when (announcements.size) {
- 1 -> router.routeToAnnouncement(activity, course, announcements.first())
- else -> router.routeToAnnouncementList(activity, course)
- }
- }
-
- override fun onGroupMessageClick(activity: FragmentActivity, group: Group) {
- router.routeToGroupMessage(activity, group)
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/courses/StudentCoursesWidgetRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/courses/StudentCoursesWidgetRouter.kt
deleted file mode 100644
index 102c48b3fa..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/courses/StudentCoursesWidgetRouter.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.courses
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.Course
-import com.instructure.canvasapi2.models.DiscussionTopicHeader
-import com.instructure.canvasapi2.models.Group
-import com.instructure.canvasapi2.models.Recipient
-import com.instructure.pandares.R
-import com.instructure.pandautils.features.dashboard.edit.EditDashboardFragment
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import com.instructure.pandautils.features.dashboard.widget.courses.customize.CustomizeCourseFragment
-import com.instructure.pandautils.features.discussion.router.DiscussionRouterFragment
-import com.instructure.pandautils.features.inbox.compose.InboxComposeFragment
-import com.instructure.pandautils.features.inbox.utils.InboxComposeOptions
-import com.instructure.pandautils.features.inbox.utils.InboxComposeOptionsDefaultValues
-import com.instructure.pandautils.features.inbox.utils.InboxComposeOptionsMode
-import com.instructure.pandautils.features.offline.offlinecontent.OfflineContentFragment
-import com.instructure.student.features.coursebrowser.CourseBrowserFragment
-import com.instructure.student.fragment.AnnouncementListFragment
-import com.instructure.student.router.RouteMatcher
-
-class StudentCoursesWidgetRouter : CoursesWidgetRouter {
-
- override fun routeToCourse(activity: FragmentActivity, course: Course) {
- RouteMatcher.route(activity, CourseBrowserFragment.makeRoute(course))
- }
-
- override fun routeToGroup(activity: FragmentActivity, group: Group) {
- RouteMatcher.route(activity, CourseBrowserFragment.makeRoute(group))
- }
-
- override fun routeToManageOfflineContent(activity: FragmentActivity, course: Course) {
- RouteMatcher.route(activity, OfflineContentFragment.makeRoute(course))
- }
-
- override fun routeToCustomizeCourse(activity: FragmentActivity, course: Course) {
- RouteMatcher.route(activity, CustomizeCourseFragment.makeRoute(course))
- }
-
- override fun routeToAllCourses(activity: FragmentActivity) {
- RouteMatcher.route(activity, EditDashboardFragment.makeRoute())
- }
-
- override fun routeToAnnouncement(activity: FragmentActivity, course: Course, announcement: DiscussionTopicHeader) {
- RouteMatcher.route(activity, DiscussionRouterFragment.makeRoute(course, announcement, isAnnouncement = true))
- }
-
- override fun routeToAnnouncementList(activity: FragmentActivity, course: Course) {
- RouteMatcher.route(activity, AnnouncementListFragment.makeRoute(course))
- }
-
- override fun routeToGroupMessage(activity: FragmentActivity, group: Group) {
- val allInGroupRecipient = Recipient(
- stringId = group.contextId,
- name = activity.getString(R.string.all_recipients_in_selected_context, group.name),
- userCount = group.users.size
- )
-
- val options = InboxComposeOptions(
- mode = InboxComposeOptionsMode.NEW_MESSAGE,
- defaultValues = InboxComposeOptionsDefaultValues(
- contextCode = group.contextId,
- contextName = group.name,
- recipients = listOf(allInGroupRecipient)
- )
- )
- RouteMatcher.route(activity, InboxComposeFragment.makeRoute(options))
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/forecast/ForecastWidgetRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/forecast/ForecastWidgetRouter.kt
deleted file mode 100644
index 80779ee4ee..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/forecast/ForecastWidgetRouter.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.forecast
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.Course
-import com.instructure.pandautils.features.assignments.details.AssignmentDetailsFragment
-import com.instructure.pandautils.features.dashboard.widget.forecast.ForecastWidgetRouter
-import com.instructure.student.router.RouteMatcher
-
-class StudentForecastWidgetRouter : ForecastWidgetRouter {
-
- override fun routeToAssignmentDetails(activity: FragmentActivity, assignmentId: Long, courseId: Long) {
- val canvasContext = Course(id = courseId)
- val route = AssignmentDetailsFragment.makeRoute(canvasContext, assignmentId)
- RouteMatcher.route(activity, route)
- }
-
- override fun routeToPlannerItem(activity: FragmentActivity, htmlUrl: String) {
- RouteMatcher.routeUrl(activity, htmlUrl)
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/progress/StudentProgressWidgetRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/progress/StudentProgressWidgetRouter.kt
deleted file mode 100644
index fcb3fa15cf..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/progress/StudentProgressWidgetRouter.kt
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.progress
-
-import android.content.Intent
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.CanvasContext
-import com.instructure.pandautils.features.dashboard.widget.progress.ProgressWidgetRouter
-import com.instructure.pandautils.features.offline.sync.progress.SyncProgressFragment
-import com.instructure.pandautils.features.shareextension.WORKER_ID
-import com.instructure.student.features.files.list.FileListFragment
-import com.instructure.student.features.shareextension.StudentShareExtensionActivity
-import com.instructure.student.mobius.assignmentDetails.submissionDetails.ui.SubmissionDetailsRepositoryFragment
-import com.instructure.student.router.RouteMatcher
-import java.util.UUID
-
-class StudentProgressWidgetRouter : ProgressWidgetRouter {
-
- override fun openProgressDialog(activity: FragmentActivity, workerId: UUID) {
- val intent = Intent(activity, StudentShareExtensionActivity::class.java)
- intent.putExtra(WORKER_ID, workerId)
- activity.startActivity(intent)
- }
-
- override fun navigateToSubmissionDetails(
- activity: FragmentActivity,
- canvasContext: CanvasContext,
- assignmentId: Long,
- attemptId: Long
- ) {
- RouteMatcher.route(
- activity,
- SubmissionDetailsRepositoryFragment.makeRoute(
- canvasContext,
- assignmentId,
- initialSelectedSubmissionAttempt = attemptId
- )
- )
- }
-
- override fun navigateToMyFiles(
- activity: FragmentActivity,
- canvasContext: CanvasContext,
- folderId: Long
- ) {
- RouteMatcher.route(
- activity,
- FileListFragment.makeRoute(canvasContext, folderId)
- )
- }
-
- override fun openSyncProgress(activity: FragmentActivity) {
- RouteMatcher.route(
- activity,
- SyncProgressFragment.makeRoute()
- )
- }
-}
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetBehavior.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoHomeScreenWidgetUpdater.kt
similarity index 67%
rename from apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetBehavior.kt
rename to apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoHomeScreenWidgetUpdater.kt
index 8aaabea7fc..3d345b2347 100644
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetBehavior.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoHomeScreenWidgetUpdater.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2025 - present Instructure, Inc.
+ * Copyright (C) 2026 - present Instructure, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,29 +18,18 @@ package com.instructure.student.features.dashboard.widget.todo
import android.appwidget.AppWidgetManager
import android.content.Context
-import androidx.fragment.app.FragmentActivity
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetBehavior
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
+import com.instructure.pandautils.features.dashboard.widget.todo.TodoHomeScreenWidgetUpdater
import com.instructure.student.widget.WidgetUpdater
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
-class StudentTodoWidgetBehavior @Inject constructor(
- private val router: TodoWidgetRouter,
+class StudentTodoHomeScreenWidgetUpdater @Inject constructor(
@ApplicationContext private val context: Context,
private val widgetUpdater: WidgetUpdater,
private val appWidgetManager: AppWidgetManager
-) : TodoWidgetBehavior {
-
- override fun onTodoClick(activity: FragmentActivity, htmlUrl: String) {
- router.routeToTodo(activity, htmlUrl)
- }
-
- override fun onAddTodoClick(activity: FragmentActivity, initialDateString: String?) {
- router.routeToCreateTodo(activity, initialDateString)
- }
+) : TodoHomeScreenWidgetUpdater {
override fun updateWidget(forceRefresh: Boolean) {
context.sendBroadcast(widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = forceRefresh))
}
-}
\ No newline at end of file
+}
diff --git a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetRouter.kt b/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetRouter.kt
deleted file mode 100644
index f5f4cf7b89..0000000000
--- a/apps/student/src/main/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetRouter.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.todo
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.pandautils.features.calendartodo.createupdate.CreateUpdateToDoFragment
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
-import com.instructure.student.router.RouteMatcher
-import javax.inject.Inject
-
-class StudentTodoWidgetRouter @Inject constructor() : TodoWidgetRouter {
-
- override fun routeToTodo(activity: FragmentActivity, htmlUrl: String) {
- RouteMatcher.routeUrl(activity, htmlUrl)
- }
-
- override fun routeToCreateTodo(activity: FragmentActivity, initialDateString: String?) {
- val route = CreateUpdateToDoFragment.makeRoute(initialDateString)
- RouteMatcher.route(activity, route)
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/features/discussion/list/adapter/DiscussionListHolder.kt b/apps/student/src/main/java/com/instructure/student/features/discussion/list/adapter/DiscussionListHolder.kt
index 60616980af..0ba43e6a65 100644
--- a/apps/student/src/main/java/com/instructure/student/features/discussion/list/adapter/DiscussionListHolder.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/discussion/list/adapter/DiscussionListHolder.kt
@@ -106,7 +106,7 @@ class DiscussionListHolder(view: View) : RecyclerView.ViewHolder(view) {
val unreadDisplayCount = if (discussionTopicHeader.unreadCount > 99) context.getString(R.string.max_count)
else discussionTopicHeader.unreadCount.localized
- if (discussionTopicHeader.unreadCount != 0) {
+ if (discussionTopicHeader.unreadCount != 0 || discussionTopicHeader.status == DiscussionTopicHeader.ReadState.UNREAD) {
statusIndicator.setVisible()
} else {
statusIndicator.setInvisible()
diff --git a/apps/student/src/main/java/com/instructure/student/features/inbox/list/StudentInboxRouter.kt b/apps/student/src/main/java/com/instructure/student/features/inbox/list/StudentInboxRouter.kt
index 7f3aba89c4..17371a4014 100644
--- a/apps/student/src/main/java/com/instructure/student/features/inbox/list/StudentInboxRouter.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/inbox/list/StudentInboxRouter.kt
@@ -22,6 +22,7 @@ import androidx.fragment.app.FragmentActivity
import com.instructure.canvasapi2.apis.InboxApi
import com.instructure.canvasapi2.models.Attachment
import com.instructure.canvasapi2.models.Conversation
+import com.instructure.canvasapi2.models.MediaComment
import com.instructure.pandautils.features.inbox.compose.InboxComposeFragment
import com.instructure.pandautils.features.inbox.details.InboxDetailsFragment
import com.instructure.pandautils.features.inbox.list.InboxFragment
@@ -62,6 +63,10 @@ class StudentInboxRouter(private val activity: FragmentActivity, private val fra
openMedia(activity, attachment.url)
}
+ override fun routeToMediaAttachment(mediaComment: MediaComment) {
+ openMedia(activity, mediaComment.url)
+ }
+
override fun popDetailsScreen(activity: FragmentActivity?) {
activity?.onBackPressed()
}
diff --git a/apps/student/src/main/java/com/instructure/student/features/login/StudentAcceptableUsePolicyRouter.kt b/apps/student/src/main/java/com/instructure/student/features/login/StudentAcceptableUsePolicyRouter.kt
index dfcde7d815..558a66ff72 100644
--- a/apps/student/src/main/java/com/instructure/student/features/login/StudentAcceptableUsePolicyRouter.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/login/StudentAcceptableUsePolicyRouter.kt
@@ -20,16 +20,14 @@ import android.content.Intent
import android.webkit.CookieManager
import androidx.fragment.app.FragmentActivity
import com.instructure.canvasapi2.utils.ApiPrefs
-import com.instructure.horizon.HorizonActivity
-import com.instructure.loginapi.login.CANVAS_CAREER
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentActivity
import com.instructure.loginapi.login.tasks.LogoutTask
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.pandautils.room.offline.DatabaseProvider
import com.instructure.pandautils.services.PushNotificationRegistrationWorker
import com.instructure.student.R
import com.instructure.student.activity.InternalWebViewActivity
-import com.instructure.student.activity.NavigationActivity
import com.instructure.student.tasks.StudentLogoutTask
class StudentAcceptableUsePolicyRouter(
@@ -48,17 +46,10 @@ class StudentAcceptableUsePolicyRouter(
CookieManager.getInstance().flush()
- val isCanvasCareer = activity.intent?.getBooleanExtra(CANVAS_CAREER, false) ?: false
- val intent = if (isCanvasCareer) {
- Intent(activity, HorizonActivity::class.java)
- } else {
- Intent(activity, NavigationActivity.startActivityClass)
- }
-
+ val intent = Intent(activity, CookieConsentActivity::class.java)
activity.intent?.extras?.let { extras ->
intent.putExtras(extras)
}
-
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
activity.startActivity(intent)
}
diff --git a/apps/student/src/main/java/com/instructure/student/features/login/StudentCookieConsentRouter.kt b/apps/student/src/main/java/com/instructure/student/features/login/StudentCookieConsentRouter.kt
new file mode 100644
index 0000000000..f160ac3549
--- /dev/null
+++ b/apps/student/src/main/java/com/instructure/student/features/login/StudentCookieConsentRouter.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.student.features.login
+
+import android.content.Intent
+import androidx.fragment.app.FragmentActivity
+import com.instructure.horizon.HorizonActivity
+import com.instructure.loginapi.login.CANVAS_CAREER
+import com.instructure.loginapi.login.NEXT_GEN_CANVAS
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
+import com.instructure.ngc.NGCActivity
+import com.instructure.student.activity.NavigationActivity
+
+class StudentCookieConsentRouter(
+ private val activity: FragmentActivity
+) : CookieConsentRouter {
+
+ override fun startApp() {
+ val isCanvasCareer = activity.intent?.getBooleanExtra(CANVAS_CAREER, false) ?: false
+ val isNextGenCanvas = activity.intent?.getBooleanExtra(NEXT_GEN_CANVAS, false) ?: false
+ val intent = when {
+ isCanvasCareer -> Intent(activity, HorizonActivity::class.java)
+ isNextGenCanvas -> Intent(activity, NGCActivity::class.java)
+ else -> Intent(activity, NavigationActivity.startActivityClass)
+ }
+
+ activity.intent?.extras?.let { extras ->
+ intent.putExtras(extras)
+ }
+
+ intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+ activity.startActivity(intent)
+ }
+}
diff --git a/apps/student/src/main/java/com/instructure/student/features/login/StudentLoginNavigation.kt b/apps/student/src/main/java/com/instructure/student/features/login/StudentLoginNavigation.kt
index 4ff77c332c..a9ab2ac93e 100644
--- a/apps/student/src/main/java/com/instructure/student/features/login/StudentLoginNavigation.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/login/StudentLoginNavigation.kt
@@ -31,6 +31,7 @@ import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.pandautils.room.offline.DatabaseProvider
import com.instructure.pandautils.services.PushNotificationRegistrationWorker
import com.instructure.student.activity.NavigationActivity
+import com.instructure.ngc.NGCActivity
import com.instructure.student.tasks.StudentLogoutTask
import com.instructure.student.widget.NotificationWidgetProvider
import com.instructure.student.widget.grades.list.GradesWidgetReceiver
@@ -62,6 +63,14 @@ class StudentLoginNavigation(
}
intent
}
+ Experience.NextGenCanvas -> {
+ disableWidgets(activity)
+ val intent = Intent(activity, NGCActivity::class.java)
+ activity.intent?.extras?.let { extras ->
+ intent.putExtras(extras)
+ }
+ intent
+ }
is Experience.Academic -> {
enableWidgets(activity)
val intent = Intent(activity, NavigationActivity.startActivityClass)
diff --git a/apps/student/src/main/java/com/instructure/student/features/modules/progression/StudioVideoFragment.kt b/apps/student/src/main/java/com/instructure/student/features/modules/progression/StudioVideoFragment.kt
index f5acdb1a3a..1fa79ed691 100644
--- a/apps/student/src/main/java/com/instructure/student/features/modules/progression/StudioVideoFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/modules/progression/StudioVideoFragment.kt
@@ -24,6 +24,8 @@ import android.view.ViewGroup
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.ComposeView
import com.instructure.canvasapi2.models.CanvasContext
+import com.instructure.canvasapi2.utils.pageview.PageView
+import com.instructure.canvasapi2.utils.pageview.PageViewUrl
import com.instructure.interactions.router.Route
import com.instructure.pandautils.compose.CanvasTheme
import com.instructure.pandautils.utils.LongArg
@@ -39,6 +41,7 @@ private const val VIDEO_URI = "video_uri"
private const val VIDEO_TITLE = "video_title"
private const val POSTER_URI = "poster_uri"
+@PageView
@AndroidEntryPoint
class StudioVideoFragment : ParentFragment() {
@@ -47,6 +50,9 @@ class StudioVideoFragment : ParentFragment() {
private var videoTitle: String by StringArg(key = VIDEO_TITLE)
private var posterUri: String? by NullableStringArg(key = POSTER_URI)
+ @PageViewUrl
+ fun makePageViewUrl() = videoUri
+
override fun title(): String = videoTitle
override fun applyTheme() {}
diff --git a/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsBehaviour.kt b/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsBehaviour.kt
index f735e4312f..c832a895ce 100644
--- a/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsBehaviour.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsBehaviour.kt
@@ -55,7 +55,7 @@ class StudentSettingsBehaviour(
R.string.preferences to preferencesList,
R.string.inboxSettingsTitle to listOf(SettingsItem.INBOX_SIGNATURE),
R.string.offlineContent to listOf(SettingsItem.OFFLINE_SYNCHRONIZATION),
- R.string.legal to listOf(SettingsItem.ABOUT, SettingsItem.LEGAL)
+ R.string.legal to listOf(SettingsItem.ABOUT, SettingsItem.LEGAL, SettingsItem.PRIVACY)
)
}
diff --git a/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsRouter.kt b/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsRouter.kt
index e121505a6f..ef06b46066 100644
--- a/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsRouter.kt
+++ b/apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsRouter.kt
@@ -22,6 +22,7 @@ import com.instructure.pandautils.features.notification.preferences.EmailNotific
import com.instructure.pandautils.features.notification.preferences.PushNotificationPreferencesFragment
import com.instructure.pandautils.features.offline.sync.settings.SyncSettingsFragment
import com.instructure.pandautils.features.settings.SettingsRouter
+import com.instructure.pandautils.features.privacysettings.PrivacySettingsFragment
import com.instructure.pandautils.features.settings.inboxsignature.InboxSignatureFragment
import com.instructure.pandautils.fragments.RemoteConfigParamsFragment
import com.instructure.student.activity.NothingToSeeHereFragment
@@ -102,4 +103,11 @@ class StudentSettingsRouter(
Route(null, InboxSignatureFragment::class.java)
)
}
+
+ override fun navigateToPrivacySettings() {
+ RouteMatcher.route(
+ activity,
+ Route(null, PrivacySettingsFragment::class.java)
+ )
+ }
}
\ No newline at end of file
diff --git a/apps/student/src/main/java/com/instructure/student/fragment/AssignmentBasicFragment.kt b/apps/student/src/main/java/com/instructure/student/fragment/AssignmentBasicFragment.kt
index f290ee843f..37c9b47301 100644
--- a/apps/student/src/main/java/com/instructure/student/fragment/AssignmentBasicFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/fragment/AssignmentBasicFragment.kt
@@ -17,6 +17,7 @@
package com.instructure.student.fragment
import android.os.Bundle
+import java.text.DateFormat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -26,6 +27,9 @@ import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.models.LockInfo
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.canvasapi2.utils.DateHelper
+import com.instructure.canvasapi2.utils.pageview.PageView
+import com.instructure.canvasapi2.utils.pageview.PageViewUrl
+import com.instructure.canvasapi2.utils.pageview.PageViewUrlParam
import com.instructure.interactions.router.Route
import com.instructure.pandautils.analytics.SCREEN_VIEW_ASSIGNMENT_BASIC
import com.instructure.pandautils.analytics.ScreenView
@@ -57,6 +61,7 @@ import java.util.Locale
import javax.inject.Inject
@AndroidEntryPoint
+@PageView
@ScreenView(SCREEN_VIEW_ASSIGNMENT_BASIC)
class AssignmentBasicFragment : ParentFragment() {
@@ -69,6 +74,9 @@ class AssignmentBasicFragment : ParentFragment() {
private var assignment: Assignment by ParcelableArg()
private var loadHtmlJob: Job? = null
+ @PageViewUrl
+ fun makePageViewUrl() = assignment.htmlUrl.orEmpty()
+
//region Fragment Lifecycle Overrides
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? =
layoutInflater.inflate(R.layout.fragment_assignment_basic, container, false)
@@ -147,10 +155,13 @@ class AssignmentBasicFragment : ParentFragment() {
// Assignment description can be null
var description = when {
assignment.isLocked -> getLockedInfoHTML(assignment.lockInfo!!, R.string.lockedAssignmentDesc)
- assignment.lockDate?.before(Calendar.getInstance(Locale.getDefault()).time) == true ->
+ assignment.lockDate?.before(Calendar.getInstance(Locale.getDefault()).time) == true -> {
// If an assignment has an available from and until field and it has expired (the current date is after "until" it will have a lock explanation,
// but no lock info because it isn't Locked as part of a module
- assignment.lockExplanation
+ val dateString = DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault()).format(assignment.lockDate!!)
+ val timeString = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()).format(assignment.lockDate!!)
+ getString(com.instructure.pandautils.R.string.closedSubtext, dateString, timeString)
+ }
else -> assignment.description
}
diff --git a/apps/student/src/main/java/com/instructure/student/fragment/EditPageDetailsFragment.kt b/apps/student/src/main/java/com/instructure/student/fragment/EditPageDetailsFragment.kt
index 9632031bf1..b838d6ab39 100644
--- a/apps/student/src/main/java/com/instructure/student/fragment/EditPageDetailsFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/fragment/EditPageDetailsFragment.kt
@@ -90,7 +90,7 @@ class EditPageDetailsFragment : ParentFragment() {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
- ViewStyler.setStatusBarLightDelayed(requireActivity())
+ ViewStyler.themeStatusBarDelayed(requireActivity())
}
//region Fragment Lifecycle Overrides
diff --git a/apps/student/src/main/java/com/instructure/student/fragment/ViewImageFragment.kt b/apps/student/src/main/java/com/instructure/student/fragment/ViewImageFragment.kt
index a51f8d859d..a907c7700a 100644
--- a/apps/student/src/main/java/com/instructure/student/fragment/ViewImageFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/fragment/ViewImageFragment.kt
@@ -82,7 +82,7 @@ class ViewImageFragment : BaseCanvasFragment(), ShareableFile {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
- ViewStyler.setStatusBarLightDelayed(requireActivity())
+ ViewStyler.themeStatusBarDelayed(requireActivity())
}
private fun setupToolbar() = with(binding) {
diff --git a/apps/student/src/main/java/com/instructure/student/fragment/ViewUnsupportedFileFragment.kt b/apps/student/src/main/java/com/instructure/student/fragment/ViewUnsupportedFileFragment.kt
index 9fb72bef72..176fc78966 100644
--- a/apps/student/src/main/java/com/instructure/student/fragment/ViewUnsupportedFileFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/fragment/ViewUnsupportedFileFragment.kt
@@ -63,7 +63,7 @@ class ViewUnsupportedFileFragment : BaseCanvasFragment() {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
- ViewStyler.setStatusBarLightDelayed(requireActivity())
+ ViewStyler.themeStatusBarDelayed(requireActivity())
}
private fun setupToolbar() = with(binding) {
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/annnotation/AnnotationSubmissionUploadFragment.kt b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/annnotation/AnnotationSubmissionUploadFragment.kt
index d8f8c4c383..fa6d7671de 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/annnotation/AnnotationSubmissionUploadFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/annnotation/AnnotationSubmissionUploadFragment.kt
@@ -104,7 +104,7 @@ class AnnotationSubmissionUploadFragment : BaseCanvasFragment() {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
- ViewStyler.setStatusBarLightDelayed(requireActivity())
+ ViewStyler.themeStatusBarDelayed(requireActivity())
}
companion object {
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/file/ui/UploadStatusSubmissionView.kt b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/file/ui/UploadStatusSubmissionView.kt
index 6d57dcfbe4..22b8d8cf90 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/file/ui/UploadStatusSubmissionView.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/file/ui/UploadStatusSubmissionView.kt
@@ -75,7 +75,7 @@ class UploadStatusSubmissionView(inflater: LayoutInflater, parent: ViewGroup) :
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
context.getActivityOrNull()?.let {
- ViewStyler.setStatusBarLightDelayed(it)
+ ViewStyler.themeStatusBarDelayed(it)
}
}
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/picker/ui/PickerSubmissionUploadView.kt b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/picker/ui/PickerSubmissionUploadView.kt
index 0dd557ea9f..19d96b2770 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/picker/ui/PickerSubmissionUploadView.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/picker/ui/PickerSubmissionUploadView.kt
@@ -87,7 +87,7 @@ class PickerSubmissionUploadView(inflater: LayoutInflater, parent: ViewGroup, va
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
context.getActivityOrNull()?.let {
- ViewStyler.setStatusBarLightDelayed(it)
+ ViewStyler.themeStatusBarDelayed(it)
}
}
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/text/ui/TextSubmissionUploadView.kt b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/text/ui/TextSubmissionUploadView.kt
index 7151471815..a93067cf5b 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/text/ui/TextSubmissionUploadView.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/text/ui/TextSubmissionUploadView.kt
@@ -111,7 +111,7 @@ class TextSubmissionUploadView(inflater: LayoutInflater, parent: ViewGroup) :
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
context.getActivityOrNull()?.let {
- ViewStyler.setStatusBarLightDelayed(it)
+ ViewStyler.themeStatusBarDelayed(it)
}
}
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/url/ui/UrlSubmissionUploadView.kt b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/url/ui/UrlSubmissionUploadView.kt
index e31a5aae66..909b2863e0 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/url/ui/UrlSubmissionUploadView.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submission/url/ui/UrlSubmissionUploadView.kt
@@ -83,7 +83,7 @@ class UrlSubmissionUploadView(inflater: LayoutInflater, parent: ViewGroup) : Mob
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
context.getActivityOrNull()?.let {
- ViewStyler.setStatusBarLightDelayed(it)
+ ViewStyler.themeStatusBarDelayed(it)
}
}
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submissionDetails/drawer/rubric/ui/SubmissionRubricDescriptionFragment.kt b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submissionDetails/drawer/rubric/ui/SubmissionRubricDescriptionFragment.kt
index 0c6f4c85a2..a7582d4c5d 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submissionDetails/drawer/rubric/ui/SubmissionRubricDescriptionFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/assignmentDetails/submissionDetails/drawer/rubric/ui/SubmissionRubricDescriptionFragment.kt
@@ -111,7 +111,7 @@ class SubmissionRubricDescriptionFragment : BaseCanvasDialogFragment() {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
- ViewStyler.setStatusBarLightDelayed(requireActivity())
+ ViewStyler.themeStatusBarDelayed(requireActivity())
}
companion object {
diff --git a/apps/student/src/main/java/com/instructure/student/mobius/elementary/ElementaryDashboardFragment.kt b/apps/student/src/main/java/com/instructure/student/mobius/elementary/ElementaryDashboardFragment.kt
index 95c167dd8c..20dbe95969 100644
--- a/apps/student/src/main/java/com/instructure/student/mobius/elementary/ElementaryDashboardFragment.kt
+++ b/apps/student/src/main/java/com/instructure/student/mobius/elementary/ElementaryDashboardFragment.kt
@@ -24,6 +24,7 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.google.android.material.tabs.TabLayout
import com.instructure.canvasapi2.models.CanvasContext
+import com.instructure.canvasapi2.utils.pageview.PageView
import com.instructure.interactions.router.Route
import com.instructure.pandautils.analytics.SCREEN_VIEW_ELEMENTARY_DASHBOARD
import com.instructure.pandautils.analytics.ScreenView
@@ -42,6 +43,7 @@ import com.instructure.student.R
import com.instructure.student.databinding.FragmentElementaryDashboardBinding
import com.instructure.student.fragment.ParentFragment
+@PageView
@ScreenView(SCREEN_VIEW_ELEMENTARY_DASHBOARD)
class ElementaryDashboardFragment : ParentFragment() {
diff --git a/apps/student/src/main/java/com/instructure/student/router/RouteResolver.kt b/apps/student/src/main/java/com/instructure/student/router/RouteResolver.kt
index fa402a630b..f1da0ee3e3 100644
--- a/apps/student/src/main/java/com/instructure/student/router/RouteResolver.kt
+++ b/apps/student/src/main/java/com/instructure/student/router/RouteResolver.kt
@@ -25,6 +25,7 @@ import com.instructure.pandautils.features.notification.preferences.PushNotifica
import com.instructure.pandautils.features.offline.offlinecontent.OfflineContentFragment
import com.instructure.pandautils.features.offline.sync.progress.SyncProgressFragment
import com.instructure.pandautils.features.offline.sync.settings.SyncSettingsFragment
+import com.instructure.pandautils.features.privacysettings.PrivacySettingsFragment
import com.instructure.pandautils.features.settings.inboxsignature.InboxSignatureFragment
import com.instructure.pandautils.features.smartsearch.SmartSearchFragment
import com.instructure.pandautils.fragments.RemoteConfigParamsFragment
@@ -189,6 +190,7 @@ object RouteResolver {
cls.isA() -> RemoteConfigParamsFragment()
cls.isA() -> SmartSearchFragment.newInstance(route)
cls.isA() -> InboxSignatureFragment()
+ cls.isA() -> PrivacySettingsFragment.newInstance(route)
cls.isA() -> CustomizeDashboardFragment.newInstance(route)
cls.isA() -> CustomizeCourseFragment.newInstance(route)
cls.isA() -> InternalWebviewFragment.newInstance(route) // Keep this at the end
diff --git a/apps/student/src/main/java/com/instructure/student/util/AppManager.kt b/apps/student/src/main/java/com/instructure/student/util/AppManager.kt
index 2ef7fd5d13..7d41330e63 100644
--- a/apps/student/src/main/java/com/instructure/student/util/AppManager.kt
+++ b/apps/student/src/main/java/com/instructure/student/util/AppManager.kt
@@ -24,17 +24,15 @@ import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkerFactory
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.canvasapi2.utils.MasqueradeHelper
-import com.instructure.canvasapi2.utils.PendoInitCallbackHandler
import com.instructure.loginapi.login.tasks.LogoutTask
import com.instructure.pandautils.analytics.pageview.PageViewUploadWorker
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.pandautils.room.offline.DatabaseProvider
import com.instructure.pandautils.typeface.TypefaceBehavior
-import com.instructure.student.BuildConfig
import com.instructure.student.tasks.StudentLogoutTask
import dagger.hilt.android.HiltAndroidApp
-import sdk.pendo.io.Pendo
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@@ -67,13 +65,9 @@ class AppManager : BaseAppManager() {
).execute()
}
- schedulePandataUpload()
- initPendo()
- }
-
- private fun initPendo() {
- val options = Pendo.PendoOptions.Builder().setJetpackComposeBeta(true).build()
- Pendo.setup(this, BuildConfig.PENDO_TOKEN, options, PendoInitCallbackHandler)
+ if (ConsentPrefs.currentUserConsent == true) {
+ schedulePandataUpload()
+ }
}
override fun performLogoutOnAuthError() {
diff --git a/apps/student/src/main/java/com/instructure/student/widget/WidgetLogger.kt b/apps/student/src/main/java/com/instructure/student/widget/WidgetLogger.kt
index 50cc0b1f11..7bb1e794f8 100644
--- a/apps/student/src/main/java/com/instructure/student/widget/WidgetLogger.kt
+++ b/apps/student/src/main/java/com/instructure/student/widget/WidgetLogger.kt
@@ -19,8 +19,11 @@ import android.content.Context
import com.instructure.canvasapi2.apis.UserAPI
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.managers.FeaturesManager
+import com.instructure.canvasapi2.models.UserSettings
import com.instructure.canvasapi2.utils.Analytics
import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
+import com.instructure.canvasapi2.utils.DataResult
import com.instructure.canvasapi2.utils.PendoInitCallbackHandler
import com.instructure.canvasapi2.utils.PendoInitListener
import com.instructure.pandautils.utils.FeatureFlagProvider
@@ -38,7 +41,8 @@ class WidgetLogger @Inject constructor(
private val userApi: UserAPI.UsersInterface,
private val featureFlagProvider: FeatureFlagProvider,
private val featuresManager: FeaturesManager,
- private val analytics: Analytics
+ private val analytics: Analytics,
+ private val consentPrefs: ConsentPrefs
): PendoInitListener {
private val coroutineScope = MainScope()
@@ -48,13 +52,12 @@ class WidgetLogger @Inject constructor(
loggingJob = coroutineScope.launch(Dispatchers.IO) {
if (!analytics.isSessionActive()) {
PendoInitCallbackHandler.addEvent(event)
- val featureFlagsResult =
- featuresManager.getEnvironmentFeatureFlagsAsync(true).await().dataOrNull
- val sendUsageMetrics =
- featureFlagsResult?.get(FeaturesManager.SEND_USAGE_METRICS) ?: false
- if (sendUsageMetrics) {
+ val settings = (userApi.getSelfMobileSettings(RestParams(isForceReadFromNetwork = true)) as? DataResult.Success)?.data
+ if (shouldTrack(settings)) {
PendoInitCallbackHandler.addListener(this@WidgetLogger)
- setupPendo(context)
+ val token = settings?.pendoMobileStudentApiKey?.takeIf { it.isNotEmpty() }
+ ?: BuildConfig.PENDO_TOKEN
+ setupPendo(context, token)
}
} else {
analytics.logEvent(event)
@@ -62,9 +65,21 @@ class WidgetLogger @Inject constructor(
}
}
- private suspend fun setupPendo(context: Context) {
+ private suspend fun shouldTrack(settings: UserSettings?): Boolean {
+ return when (settings?.usageMetrics) {
+ UserSettings.USAGE_METRICS_TRACK -> true
+ UserSettings.USAGE_METRICS_NO_TRACK -> false
+ UserSettings.USAGE_METRICS_ASK_FOR_CONSENT -> consentPrefs.currentUserConsent == true
+ else -> {
+ val featureFlagsResult = featuresManager.getEnvironmentFeatureFlagsAsync(true).await().dataOrNull
+ featureFlagsResult?.get(FeaturesManager.SEND_USAGE_METRICS) ?: false
+ }
+ }
+ }
+
+ private suspend fun setupPendo(context: Context, token: String) {
val options = Pendo.PendoOptions.Builder().setJetpackComposeBeta(true).build()
- Pendo.setup(context, BuildConfig.PENDO_TOKEN, options, PendoInitCallbackHandler)
+ Pendo.setup(context, token, options, PendoInitCallbackHandler)
val visitorData = mapOf("locale" to ApiPrefs.effectiveLocale)
val accountData =
mapOf("surveyOptOut" to featureFlagProvider.checkAccountSurveyNotificationsFlag())
diff --git a/apps/student/src/main/res/layout/activity_navigation.xml b/apps/student/src/main/res/layout/activity_navigation.xml
index 0c007a90f3..7c171bd74a 100644
--- a/apps/student/src/main/res/layout/activity_navigation.xml
+++ b/apps/student/src/main/res/layout/activity_navigation.xml
@@ -61,6 +61,7 @@
android:id="@+id/bottomBarContainer"
android:layout_width="match_parent"
android:layout_height="56dp"
+ android:minHeight="56dp"
android:background="@color/backgroundLightestElevated">
.
- */
-
-package com.instructure.student.features.dashboard.widget.courses
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.Course
-import com.instructure.canvasapi2.models.DiscussionTopicHeader
-import com.instructure.canvasapi2.models.Group
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import io.mockk.mockk
-import io.mockk.unmockkAll
-import io.mockk.verify
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-
-class StudentCoursesWidgetBehaviorTest {
-
- private val router: CoursesWidgetRouter = mockk(relaxed = true)
-
- private lateinit var behavior: StudentCoursesWidgetBehavior
-
- @Before
- fun setup() {
- behavior = StudentCoursesWidgetBehavior(
- router = router
- )
- }
-
- @After
- fun teardown() {
- unmockkAll()
- }
-
- @Test
- fun `onCourseClick delegates to router`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
-
- behavior.onCourseClick(activity, course)
-
- verify { router.routeToCourse(activity, course) }
- }
-
- @Test
- fun `onGroupClick delegates to router`() {
- val activity: FragmentActivity = mockk()
- val group = Group(id = 1, name = "Test Group")
-
- behavior.onGroupClick(activity, group)
-
- verify { router.routeToGroup(activity, group) }
- }
-
- @Test
- fun `onManageOfflineContent delegates to router`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
-
- behavior.onManageOfflineContent(activity, course)
-
- verify { router.routeToManageOfflineContent(activity, course) }
- }
-
- @Test
- fun `onCustomizeCourse delegates to router`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
-
- behavior.onCustomizeCourse(activity, course)
-
- verify { router.routeToCustomizeCourse(activity, course) }
- }
-
- @Test
- fun `onAllCoursesClicked delegates to router`() {
- val activity: FragmentActivity = mockk()
-
- behavior.onAllCoursesClicked(activity)
-
- verify { router.routeToAllCourses(activity) }
- }
-
- @Test
- fun `onAnnouncementClick with single announcement routes to announcement details`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
- val announcement = DiscussionTopicHeader(id = 1, title = "Test Announcement")
- val announcements = listOf(announcement)
-
- behavior.onAnnouncementClick(activity, course, announcements)
-
- verify { router.routeToAnnouncement(activity, course, announcement) }
- }
-
- @Test
- fun `onAnnouncementClick with multiple announcements routes to announcement list`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
- val announcements = listOf(
- DiscussionTopicHeader(id = 1, title = "Announcement 1"),
- DiscussionTopicHeader(id = 2, title = "Announcement 2")
- )
-
- behavior.onAnnouncementClick(activity, course, announcements)
-
- verify { router.routeToAnnouncementList(activity, course) }
- }
-
- @Test
- fun `onAnnouncementClick with empty list routes to announcement list`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
- val announcements = emptyList()
-
- behavior.onAnnouncementClick(activity, course, announcements)
-
- verify { router.routeToAnnouncementList(activity, course) }
- }
-
- @Test
- fun `onGroupMessageClick delegates to router`() {
- val activity: FragmentActivity = mockk()
- val group = Group(id = 1, name = "Test Group")
-
- behavior.onGroupMessageClick(activity, group)
-
- verify { router.routeToGroupMessage(activity, group) }
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/test/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetBehaviorTest.kt b/apps/student/src/test/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetBehaviorTest.kt
deleted file mode 100644
index c43a4add50..0000000000
--- a/apps/student/src/test/java/com/instructure/student/features/dashboard/widget/todo/StudentTodoWidgetBehaviorTest.kt
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.student.features.dashboard.widget.todo
-
-import android.appwidget.AppWidgetManager
-import android.content.Context
-import android.content.Intent
-import androidx.fragment.app.FragmentActivity
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
-import com.instructure.student.widget.WidgetUpdater
-import io.mockk.every
-import io.mockk.mockk
-import io.mockk.slot
-import io.mockk.unmockkAll
-import io.mockk.verify
-import org.junit.After
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Test
-
-class StudentTodoWidgetBehaviorTest {
-
- private val router: TodoWidgetRouter = mockk(relaxed = true)
- private val context: Context = mockk(relaxed = true)
- private val widgetUpdater: WidgetUpdater = mockk(relaxed = true)
- private val appWidgetManager: AppWidgetManager = mockk(relaxed = true)
-
- private lateinit var behavior: StudentTodoWidgetBehavior
-
- @Before
- fun setup() {
- behavior = StudentTodoWidgetBehavior(
- router = router,
- context = context,
- widgetUpdater = widgetUpdater,
- appWidgetManager = appWidgetManager
- )
- }
-
- @After
- fun teardown() {
- unmockkAll()
- }
-
- @Test
- fun `onTodoClick routes to todo with correct URL`() {
- val activity = mockk()
- val htmlUrl = "https://instructure.com/courses/123/assignments/456"
-
- behavior.onTodoClick(activity, htmlUrl)
-
- verify { router.routeToTodo(activity, htmlUrl) }
- }
-
- @Test
- fun `onTodoClick routes to todo with different URLs`() {
- val activity = mockk()
- val url1 = "https://instructure.com/courses/111/quizzes/222"
- val url2 = "https://instructure.com/courses/333/discussion_topics/444"
-
- behavior.onTodoClick(activity, url1)
- behavior.onTodoClick(activity, url2)
-
- verify { router.routeToTodo(activity, url1) }
- verify { router.routeToTodo(activity, url2) }
- }
-
- @Test
- fun `onAddTodoClick routes to create todo with initial date`() {
- val activity = mockk()
- val initialDateString = "2025-02-15"
-
- behavior.onAddTodoClick(activity, initialDateString)
-
- verify { router.routeToCreateTodo(activity, initialDateString) }
- }
-
- @Test
- fun `onAddTodoClick routes to create todo without initial date`() {
- val activity = mockk()
-
- behavior.onAddTodoClick(activity, null)
-
- verify { router.routeToCreateTodo(activity, null) }
- }
-
- @Test
- fun `onAddTodoClick routes to create todo with different dates`() {
- val activity = mockk()
- val date1 = "2025-01-01"
- val date2 = "2025-12-31"
-
- behavior.onAddTodoClick(activity, date1)
- behavior.onAddTodoClick(activity, date2)
-
- verify { router.routeToCreateTodo(activity, date1) }
- verify { router.routeToCreateTodo(activity, date2) }
- }
-
- @Test
- fun `updateWidget sends broadcast with forceRefresh true`() {
- val intent = mockk()
- every { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) } returns intent
-
- behavior.updateWidget(forceRefresh = true)
-
- verify { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) }
- verify { context.sendBroadcast(intent) }
- }
-
- @Test
- fun `updateWidget sends broadcast with forceRefresh false`() {
- val intent = mockk()
- every { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = false) } returns intent
-
- behavior.updateWidget(forceRefresh = false)
-
- verify { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = false) }
- verify { context.sendBroadcast(intent) }
- }
-
- @Test
- fun `updateWidget defaults to forceRefresh true`() {
- val intent = mockk()
- every { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) } returns intent
-
- behavior.updateWidget()
-
- verify { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) }
- verify { context.sendBroadcast(intent) }
- }
-
- @Test
- fun `updateWidget sends correct intent to context`() {
- val intent = mockk()
- val intentSlot = slot()
- every { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) } returns intent
- every { context.sendBroadcast(capture(intentSlot)) } returns Unit
-
- behavior.updateWidget(forceRefresh = true)
-
- assertEquals(intent, intentSlot.captured)
- }
-
- @Test
- fun `updateWidget can be called multiple times`() {
- val intent1 = mockk()
- val intent2 = mockk()
- every { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) } returns intent1
- every { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = false) } returns intent2
-
- behavior.updateWidget(forceRefresh = true)
- behavior.updateWidget(forceRefresh = false)
-
- verify(exactly = 1) { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = true) }
- verify(exactly = 1) { widgetUpdater.getTodoWidgetUpdateIntent(appWidgetManager, forceRefresh = false) }
- verify(exactly = 1) { context.sendBroadcast(intent1) }
- verify(exactly = 1) { context.sendBroadcast(intent2) }
- }
-}
\ No newline at end of file
diff --git a/apps/student/src/test/java/com/instructure/student/features/discussion/details/datasource/DiscussionDetailsNetworkDataSourceTest.kt b/apps/student/src/test/java/com/instructure/student/features/discussion/details/datasource/DiscussionDetailsNetworkDataSourceTest.kt
index 37ac897a8b..451cb04388 100644
--- a/apps/student/src/test/java/com/instructure/student/features/discussion/details/datasource/DiscussionDetailsNetworkDataSourceTest.kt
+++ b/apps/student/src/test/java/com/instructure/student/features/discussion/details/datasource/DiscussionDetailsNetworkDataSourceTest.kt
@@ -56,7 +56,7 @@ class DiscussionDetailsNetworkDataSourceTest {
fun `Get authenticatedSession on successful call`() = runTest {
val expectedUrl = AuthenticatedSession("testUrl")
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Success(expectedUrl)
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(expectedUrl)
val result = dataSource.getAuthenticatedSession("").dataOrNull
@@ -65,7 +65,7 @@ class DiscussionDetailsNetworkDataSourceTest {
@Test
fun `Get authenticatedSession on failed call`() = runTest {
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Fail(null, null)
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Fail(null, null)
val result = dataSource.getAuthenticatedSession("").dataOrNull
diff --git a/apps/student/src/test/java/com/instructure/student/test/conferences/conference_details/ConferenceDetailsNetworkDataSourceTest.kt b/apps/student/src/test/java/com/instructure/student/test/conferences/conference_details/ConferenceDetailsNetworkDataSourceTest.kt
index 3caf97e37a..b7d4eddc52 100644
--- a/apps/student/src/test/java/com/instructure/student/test/conferences/conference_details/ConferenceDetailsNetworkDataSourceTest.kt
+++ b/apps/student/src/test/java/com/instructure/student/test/conferences/conference_details/ConferenceDetailsNetworkDataSourceTest.kt
@@ -112,17 +112,17 @@ class ConferenceDetailsNetworkDataSourceTest {
@Test
fun `Return authenticated session api model`() = runTest {
val expected = AuthenticatedSession("url")
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Success(expected)
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(expected)
val result = networkDataSource.getAuthenticatedSession("targetUrl")
TestCase.assertEquals(expected, result)
- coVerify(exactly = 1) { oAuthApi.getAuthenticatedSession("targetUrl", RestParams(isForceReadFromNetwork = true)) }
+ coVerify(exactly = 1) { oAuthApi.getAuthenticatedSession("targetUrl", RestParams(isForceReadFromNetwork = true), any()) }
}
@Test(expected = IllegalStateException::class)
fun `Throws exception if authenticated session call fails`() = runTest {
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Fail()
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Fail()
networkDataSource.getAuthenticatedSession("targetUrl")
}
diff --git a/apps/student/src/test/java/com/instructure/student/test/conferences/conference_list/ConferenceListNetworkDataSourceTest.kt b/apps/student/src/test/java/com/instructure/student/test/conferences/conference_list/ConferenceListNetworkDataSourceTest.kt
index 68b99272a7..1be7cd4f75 100644
--- a/apps/student/src/test/java/com/instructure/student/test/conferences/conference_list/ConferenceListNetworkDataSourceTest.kt
+++ b/apps/student/src/test/java/com/instructure/student/test/conferences/conference_list/ConferenceListNetworkDataSourceTest.kt
@@ -24,14 +24,20 @@ import com.instructure.canvasapi2.models.AuthenticatedSession
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.models.Conference
import com.instructure.canvasapi2.models.ConferenceList
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.canvasapi2.utils.DataResult
import com.instructure.canvasapi2.utils.LinkHeaders
import com.instructure.student.mobius.conferences.conference_list.datasource.ConferenceListNetworkDataSource
import io.mockk.coEvery
import io.mockk.coVerify
+import io.mockk.every
import io.mockk.mockk
+import io.mockk.mockkObject
+import io.mockk.unmockkAll
import junit.framework.TestCase
import kotlinx.coroutines.test.runTest
+import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -43,9 +49,17 @@ class ConferenceListNetworkDataSourceTest {
@Before
fun setup() {
+ mockkObject(ApiPrefs)
+ mockkObject(ConsentPrefs)
+ every { ConsentPrefs.currentUserConsent } returns true
networkDataSource = ConferenceListNetworkDataSource(conferencesApi, oAuthApi)
}
+ @After
+ fun tearDown() {
+ unmockkAll()
+ }
+
@Test
fun `Return conferences list api model`() = runTest {
val expected = listOf(Conference(1), Conference(2))
@@ -112,17 +126,17 @@ class ConferenceListNetworkDataSourceTest {
@Test
fun `Return authenticated session api model`() = runTest {
val expected = AuthenticatedSession("url")
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Success(expected)
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(expected)
val result = networkDataSource.getAuthenticatedSession("targetUrl")
TestCase.assertEquals(expected, result)
- coVerify(exactly = 1) { oAuthApi.getAuthenticatedSession("targetUrl", RestParams(isForceReadFromNetwork = true)) }
+ coVerify(exactly = 1) { oAuthApi.getAuthenticatedSession("targetUrl", RestParams(isForceReadFromNetwork = true), any()) }
}
@Test(expected = IllegalStateException::class)
fun `Throws exception if authenticated session call fails`() = runTest {
- coEvery { oAuthApi.getAuthenticatedSession(any(), any()) } returns DataResult.Fail()
+ coEvery { oAuthApi.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Fail()
networkDataSource.getAuthenticatedSession("targetUrl")
}
diff --git a/apps/teacher/build.gradle b/apps/teacher/build.gradle
index 18779dc1ec..b03083e33e 100644
--- a/apps/teacher/build.gradle
+++ b/apps/teacher/build.gradle
@@ -51,8 +51,8 @@ android {
defaultConfig {
minSdkVersion Versions.MIN_SDK
targetSdkVersion Versions.TARGET_SDK
- versionCode = 92
- versionName = '2.6.1'
+ versionCode = 93
+ versionName = '2.7.0'
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner 'com.instructure.teacher.espresso.TeacherHiltTestRunner'
testInstrumentationRunnerArguments disableAnalytics: 'true'
@@ -156,13 +156,15 @@ android {
}
}
- configurations.all {
- resolutionStrategy {
- force 'android.arch.lifecycle:runtime:1.0.3'
+ configurations.configureEach {
+ if (canBeResolved) {
+ resolutionStrategy {
+ force 'android.arch.lifecycle:runtime:1.0.3'
- force Libs.KOTLIN_COROUTINES_CORE
+ force Libs.KOTLIN_COROUTINES_CORE
- force Libs.KOTLIN_STD_LIB
+ force Libs.KOTLIN_STD_LIB
+ }
}
}
diff --git a/apps/teacher/release_tests/flank_e2e_release.yml b/apps/teacher/release_tests/flank_e2e_release.yml
new file mode 100644
index 0000000000..0b4ffbfd27
--- /dev/null
+++ b/apps/teacher/release_tests/flank_e2e_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ./build/outputs/apk/qa/debug/teacher-qa-debug.apk
+ # test: ./build/outputs/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ app: ./apps/teacher/build/outputs/apk/qa/debug/teacher-qa-debug.apk
+ test: ./apps/teacher/build/outputs/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ results-bucket: android-teacher
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - annotation com.instructure.canvas.espresso.annotations.E2E
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/teacher/release_tests/flank_landscape_interaction_release.yml b/apps/teacher/release_tests/flank_landscape_interaction_release.yml
new file mode 100644
index 0000000000..0e1a93b934
--- /dev/null
+++ b/apps/teacher/release_tests/flank_landscape_interaction_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ./build/outputs/apk/qa/debug/teacher-qa-debug.apk
+ # test: ./build/outputs/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ app: ./apps/teacher/build/outputs/apk/qa/debug/teacher-qa-debug.apk
+ test: ./apps/teacher/build/outputs/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ results-bucket: android-teacher
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.StubLandscape, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: landscape
+
+flank:
+ testShards: 10
+ testRuns: 1
+
diff --git a/apps/teacher/release_tests/flank_portrait_interaction_release.yml b/apps/teacher/release_tests/flank_portrait_interaction_release.yml
new file mode 100644
index 0000000000..013d5f0166
--- /dev/null
+++ b/apps/teacher/release_tests/flank_portrait_interaction_release.yml
@@ -0,0 +1,25 @@
+gcloud:
+ project: delta-essence-114723
+# Use the next two lines to run locally
+# app: ./build/intermediates/apk/qa/debug/teacher-qa-debug.apk
+# test: ./build/intermediates/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ app: ./apps/teacher/build/outputs/apk/qa/debug/teacher-qa-debug.apk
+ test: ./apps/teacher/build/outputs/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ results-bucket: android-teacher
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.FlakyE2E, com.instructure.canvas.espresso.annotations.KnownBug, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: Pixel2.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
+
diff --git a/apps/teacher/release_tests/flank_tablet_interaction_release.yml b/apps/teacher/release_tests/flank_tablet_interaction_release.yml
new file mode 100644
index 0000000000..195d260d9d
--- /dev/null
+++ b/apps/teacher/release_tests/flank_tablet_interaction_release.yml
@@ -0,0 +1,28 @@
+gcloud:
+ project: delta-essence-114723
+ # Use the next two lines to run locally
+ # app: ./build/intermediates/apk/qa/debug/teacher-qa-debug.apk
+ # test: ./build/intermediates/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ app: ./apps/teacher/build/outputs/apk/qa/debug/teacher-qa-debug.apk
+ test: ./apps/teacher/build/outputs/apk/androidTest/qa/debug/teacher-qa-debug-androidTest.apk
+ results-bucket: android-teacher
+ auto-google-login: true
+ use-orchestrator: true
+ performance-metrics: false
+ record-video: true
+ timeout: 60m
+ test-targets:
+ - notAnnotation com.instructure.canvas.espresso.annotations.ReleaseExclude, com.instructure.canvas.espresso.annotations.E2E, com.instructure.canvas.espresso.annotations.Stub, com.instructure.canvas.espresso.annotations.StubTablet, com.instructure.canvas.espresso.annotations.OfflineE2E
+ device:
+ - model: MediumTablet.arm
+ version: 29
+ locale: en_US
+ orientation: landscape
+ - model: MediumTablet.arm
+ version: 29
+ locale: en_US
+ orientation: portrait
+
+flank:
+ testShards: 10
+ testRuns: 1
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt
index fe902958b3..f9c62a23ab 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.PagesApi
import com.instructure.teacher.ui.utils.TeacherTest
import com.instructure.teacher.ui.utils.extensions.seedData
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt
index ff63057fcd..ad0f9e7394 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.espresso.getCustomDateCalendar
import com.instructure.teacher.ui.utils.TeacherComposeTest
@@ -105,8 +105,8 @@ class DiscussionsE2ETest : TeacherComposeTest() {
Log.d(ASSERTION_TAG, "Assert that the '$discussionEntryMessage' discussion entry message is displayed.")
discussionDetailsPage.assertDiscussionEntryMessageDisplayed(discussionEntryMessage)
- Log.d(ASSERTION_TAG, "Assert that there is 1 reply and that is unread.")
- discussionDetailsPage.assertReplyCounter(1, 1)
+ Log.d(ASSERTION_TAG, "Assert that there is '1 Reply' for the opened discussion'.")
+ discussionDetailsPage.assertReplyCounter(1)
Log.d(STEP_TAG, "Expand the replies and wait for the reply to be displayed.")
discussionDetailsPage.clickOnExpandRepliesButton()
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt
index 0e6e422a88..017fe41694 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt
@@ -31,7 +31,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.managers.DiscussionManager
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.weave.awaitApiResponse
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt
index ab06c7897f..106e1e5336 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.StringConstants.HelpMenu
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.teacher.R
import com.instructure.teacher.ui.utils.TeacherTest
import com.instructure.teacher.ui.utils.extensions.seedData
@@ -77,7 +77,7 @@ class HelpMenuE2ETest: TeacherTest() {
try {
helpPage.assertHelpMenuURL(HelpMenu.SEARCH_GUIDES_TITLE, "https://community.instructure.com/en/all-guides")
- helpPage.assertHelpMenuURL(HelpMenu.SUBMIT_FEATURE_TITLE, "https://community.canvaslms.com/t5/Idea-Conversations/idb-p/ideas")
+ helpPage.assertHelpMenuURL(HelpMenu.SHARE_A_CONTRIBUTION_TITLE, "https://community.instructure.com/en/categories/product-connection")
helpPage.assertHelpMenuURL(HelpMenu.Teacher.ASK_COMMUNITY_TITLE, "https://community.instructure.com")
helpPage.assertHelpMenuURL(HelpMenu.Teacher.CONFERENCE_GUIDES_TITLE, "https://community.canvaslms.com/docs/DOC-18572-conferences-resources")
helpPage.assertHelpMenuURL(HelpMenu.SHARE_LOVE_TITLE, "market://details?id=com.instructure.teacher")
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt
index 21dd394d53..7bb77b66a1 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt
@@ -27,9 +27,8 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.annotations.ReleaseExclude
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.dataseeding.api.SeedApi
import com.instructure.dataseeding.api.UserApi
@@ -50,7 +49,6 @@ class LoginE2ETest : TeacherTest() {
@E2E
@Test
- @ReleaseExclude
@TestMetaData(Priority.MANDATORY, FeatureCategory.LOGIN, TestCategory.E2E)
fun testLoginE2E() {
@@ -145,7 +143,6 @@ class LoginE2ETest : TeacherTest() {
@E2E
@Test
- @ReleaseExclude
@TestMetaData(Priority.MANDATORY, FeatureCategory.LOGIN, TestCategory.E2E)
fun testLoginE2EWithLastSavedSchool() {
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt
index 90b94db5ec..a9f712333a 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.GroupsApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.SubmissionType
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt
index 18c6f89f08..6ce29caa54 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt
index a63fd69d55..a56d4b74f8 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt
@@ -26,8 +26,8 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.canvasapi2.utils.RemoteConfigUtils
import com.instructure.dataseeding.api.ConversationsApi
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt
index 5cec37a8e2..3564023c5b 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt
@@ -17,17 +17,17 @@
package com.instructure.teacher.ui.e2e.classic
import android.util.Log
-import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.FeatureCategory
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
+import com.instructure.canvas.espresso.annotations.E2E
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
-import com.instructure.canvas.espresso.pressBackButton
import com.instructure.teacher.ui.utils.TeacherTest
import com.instructure.teacher.ui.utils.extensions.seedAssignmentSubmission
import com.instructure.teacher.ui.utils.extensions.seedAssignments
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt
index 3a2b100dab..d8f019cbd5 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt
@@ -28,14 +28,18 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
+import com.instructure.dataseeding.api.AssignmentGroupsApi
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.FileUploadsApi
+import com.instructure.dataseeding.api.GradingPeriodsApi
import com.instructure.dataseeding.api.SectionsApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.FileUploadType
import com.instructure.dataseeding.model.GradingType
import com.instructure.dataseeding.model.SubmissionType
+import com.instructure.dataseeding.util.ago
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
@@ -51,6 +55,9 @@ import com.instructure.teacher.ui.utils.extensions.uploadTextFile
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Rule
import org.junit.Test
+import java.text.SimpleDateFormat
+import java.util.Locale
+import com.instructure.teacher.R as TeacherR
@HiltAndroidTest
class AssignmentE2ETest : TeacherComposeTest() {
@@ -92,9 +99,10 @@ class AssignmentE2ETest : TeacherComposeTest() {
assignmentListPage.assertDisplaysNoAssignmentsView()
Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course.")
+ val assignmentDueCal = 1.days.fromNow
val assignment = seedAssignments(
courseId = course.id,
- dueAt = 1.days.fromNow.iso8601,
+ dueAt = assignmentDueCal.iso8601,
submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY),
teacherToken = teacher.token,
pointsPossible = 15.0
@@ -304,16 +312,14 @@ class AssignmentE2ETest : TeacherComposeTest() {
editAssignmentDetailsPage.clickOnDisplayGradeAsSpinner()
editAssignmentDetailsPage.selectGradeType("Percentage")
- // TODO: Fix this - MBL-19110
- /*
- Log.d(STEP_TAG, "Click on the 'Due Time' section and edit the hour and minutes to 1:30 PM.")
+ Log.d(STEP_TAG, "Edit the due date to Dec 12, 2030 and the due time to 1:30 AM.")
editAssignmentDetailsPage.clickEditDueDate()
- editAssignmentDetailsPage.editDate(2022,12,12)
+ editAssignmentDetailsPage.editDate(2030, 12, 12)
editAssignmentDetailsPage.clickEditDueTime()
editAssignmentDetailsPage.editTime(1, 30)
- Log.d(ASSERTION_TAG, "Assert that the changes have been applied on Edit Assignment Details page.")
- editAssignmentDetailsPage.assertTimeChanged(1, 30, R.id.dueTime)
+ Log.d(ASSERTION_TAG, "Assert that the due time change has been applied on the Edit Assignment Details page.")
+ editAssignmentDetailsPage.assertTimeChanged(1, 30, TeacherR.id.dueTime)
Log.d(STEP_TAG, "Click on 'Assigned To' spinner and select '${student.name}' besides 'Everyone'.")
editAssignmentDetailsPage.editAssignees()
@@ -321,43 +327,41 @@ class AssignmentE2ETest : TeacherComposeTest() {
assigneeListPage.toggleAssignees(listOf(student.name))
val expectedAssignees = listOf(student.name, "Everyone else")
- Log.d(ASSERTION_TAG, "Assert that '${student.name}' and 'Everyone else' is selected as well.")
+ Log.d(ASSERTION_TAG, "Assert that '${student.name}' and 'Everyone else' are selected.")
assigneeListPage.assertAssigneesSelected(expectedAssignees)
Log.d(STEP_TAG, "Save and close the assignee list.")
assigneeListPage.saveAndClose()
- val assignText = editAssignmentDetailsPage.onViewWithId(R.id.assignTo)
- Log.d(ASSERTION_TAG, "Assert that on the Assignment Details Page both the '${student.name}' and the 'Everyone else' values are set.")
- for (assignee in expectedAssignees) assignText.assertContainsText(assignee)
+ Log.d(ASSERTION_TAG, "Assert that on the Edit Assignment Details Page both '${student.name}' and 'Everyone else' are set as assignees.")
+ expectedAssignees.forEach { editAssignmentDetailsPage.assertContainsAssignee(it) }
- Log.d(STEP_TAG, "Save the assignment.")
+ Log.d(STEP_TAG, "Save the assignment and refresh the page.")
editAssignmentDetailsPage.saveAssignment()
-
- Log.d(ASSERTION_TAG, "Refresh the page. Assert that the points of '$newAssignmentName' assignment has been changed to 20.")
assignmentDetailsPage.refresh()
assignmentDetailsPage.waitForRender()
+
+ Log.d(ASSERTION_TAG, "Assert that the points of '$newAssignmentName' assignment has been changed to 20.")
assignmentDetailsPage.assertAssignmentPointsChanged("20")
Log.d(ASSERTION_TAG, "Assert that there are multiple due dates set, so the 'Multiple Due Dates' string is displayed on the 'Due Dates' section.")
assignmentDetailsPage.assertMultipleDueDates()
- Log.d(STEP_TAG, "Open Due Dates Page.")
- assignmentDetailsPage.openAllDatesPage()
+ Log.d(STEP_TAG, "Open the Due Dates Page.")
+ assignmentDetailsPage.openDueDatesPage()
Log.d(ASSERTION_TAG, "Assert that there are 2 different due dates set.")
assignmentDueDatesPage.assertDueDatesCount(2)
- Log.d(ASSERTION_TAG, "Assert that there is a due date set for '${student.name}' student especially and another one for everyone else.")
+ Log.d(ASSERTION_TAG, "Assert that there is a due date set for '${student.name}' specifically and another one for 'Everyone else'.")
assignmentDueDatesPage.assertDueFor(student.name)
- assignmentDueDatesPage.assertDueFor(R.string.everyone_else)
-
- val dueDateForEveryoneElse = "Dec 12 at 1:30 AM"
- val dueDateForStudentSpecially = "Dec 12 at 9:30 AM"
- Log.d(ASSERTION_TAG, "Assert that the there is a due date with '$dueDateForEveryoneElse' value and another one with '$dueDateForStudentSpecially'.")
- assignmentDueDatesPage.assertDueDateTime("Due $dueDateForEveryoneElse")
- assignmentDueDatesPage.assertDueDateTime("Due $dueDateForStudentSpecially")
- */
+ assignmentDueDatesPage.assertDueFor(TeacherR.string.everyone_else)
+
+ val dueDateForEveryoneElse = "Dec 12, 2030 at 1:30 AM"
+ val dueDateForStudentSpecially = SimpleDateFormat("MMM d, yyyy 'at' h:mm a", Locale.getDefault()).format(assignmentDueCal.time)
+ Log.d(ASSERTION_TAG, "Assert that the due date for 'Everyone else' is '$dueDateForEveryoneElse' and for '${student.name}' is '$dueDateForStudentSpecially'.")
+ assignmentDueDatesPage.assertDueDateTime(dueDateForEveryoneElse)
+ assignmentDueDatesPage.assertDueDateTime(dueDateForStudentSpecially)
}
@E2E
@@ -633,7 +637,6 @@ class AssignmentE2ETest : TeacherComposeTest() {
assignmentDetailsPage.assertDueForString("1 student")
Log.d(ASSERTION_TAG, "Assert that the 'Not Submitted' section counter is 1 (out of 1).")
- refresh() // This should be removed once MBL-18991 bug will be fixed (because this should be refreshed automatically after saving the assignment)
assignmentDetailsPage.assertNotSubmitted(1,1)
Log.d(STEP_TAG, "Open the 'All Submissions' page.")
@@ -676,8 +679,7 @@ class AssignmentE2ETest : TeacherComposeTest() {
assignmentDetailsPage.assertMultipleDueDates()
Log.d(ASSERTION_TAG, "Assert that the 'Not Submitted' section counter is 1 (out of 1).")
- refresh() // This should be removed once MBL-18991 bug will be fixed (because this should be refreshed automatically after saving the assignment)
- retryWithIncreasingDelay(times = 25, maxDelay = 3000, catchBlock = { refresh() }) { // We need this retry logic here because sometimes the 'Assign To' update on an assignment needs some time to propagate.
+ retryWithIncreasingDelay(times = 50, maxDelay = 6000, catchBlock = { refresh() }) { // We need this retry logic here because sometimes the 'Assign To' update on an assignment needs some time to propagate.
assignmentDetailsPage.assertNotSubmitted(2, 2)
}
@@ -819,4 +821,245 @@ class AssignmentE2ETest : TeacherComposeTest() {
}
}
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.E2E)
+ fun testGradingPeriodFiltersAndGroupByAssignmentsE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data with a grading period enabled.")
+ val data = seedData(teachers = 1, courses = 1, students = 1, gradingPeriods = true)
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ Log.d(PREPARATION_TAG, "Fetching the grading period for '${course.name}' course.")
+ val gradingPeriod = GradingPeriodsApi.getGradingPeriodsOfCourse(course.id).gradingPeriods.last()
+
+ Log.d(PREPARATION_TAG, "Seeding an assignment due within the grading period (2 days from now) for '${course.name}' course.")
+ val assignmentInPeriod = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 10.0, dueAt = 2.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Submit '${assignmentInPeriod.name}' assignment for '${student.name}' student.")
+ SubmissionsApi.seedAssignmentSubmission(course.id, student.token, assignmentInPeriod.id, submissionSeedsList = listOf(SubmissionsApi.SubmissionSeedInfo(amount = 1, submissionType = SubmissionType.ONLINE_TEXT_ENTRY)))
+
+ Log.d(PREPARATION_TAG, "Creating a custom assignment group 'Custom Group' for '${course.name}' course.")
+ val customGroup = AssignmentGroupsApi.createAssignmentGroup(teacher.token, course.id, name = "Custom Group")
+
+ Log.d(PREPARATION_TAG, "Seeding an assignment due outside the grading period (30 days ago) in the 'Custom Group' assignment group for '${course.name}' course.")
+ val assignmentOutsidePeriod = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 10.0, dueAt = 30.days.ago.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY), assignmentGroupId = customGroup.id)
+
+ Log.d(PREPARATION_TAG, "Seeding a quiz assignment due within the grading period (2 days from now) for '${course.name}' course.")
+ val quizAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 10.0, dueAt = 2.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_QUIZ))
+
+ Log.d(STEP_TAG, "Login with user: '${teacher.name}', login id: '${teacher.loginId}'.")
+ tokenLogin(teacher)
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Open '${course.name}' course and navigate to its Assignments Tab.")
+ dashboardPage.openCourse(course.name)
+ courseBrowserPage.openAssignmentsTab()
+
+ Log.d(ASSERTION_TAG, "Assert that the grading period header shows '${gradingPeriod.title}' as the current grading period is pre-selected by default.")
+ assignmentListPage.assertGradingPeriodLabel(gradingPeriod.title)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentInPeriod.name}' and '${quizAssignment.name}' are displayed by default (within the grading period) and '${assignmentOutsidePeriod.name}' is NOT.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod, needsGradingCount = 1)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+
+ Log.d(STEP_TAG, "Switch the grading period filter to 'All Grading Periods'.")
+ assignmentListPage.filterAssignments("Grading Period", AssignmentListPage.FilterOption.GradingPeriod("All Grading Periods"))
+
+ Log.d(ASSERTION_TAG, "Assert that the grading period header now shows 'All'.")
+ assignmentListPage.assertGradingPeriodLabel()
+
+ Log.d(ASSERTION_TAG, "Assert that all assignments are visible when 'All Grading Periods' is selected.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+
+ Log.d(STEP_TAG, "Filter the Assignment Filter to 'Needs Grading'.")
+ assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.NeedsGrading)
+
+ Log.d(ASSERTION_TAG, "Assert that only '${assignmentInPeriod.name}' is displayed (it has an ungraded submission) and '${assignmentOutsidePeriod.name}' and '${quizAssignment.name}' are NOT.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod, needsGradingCount = 1)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+ assignmentListPage.assertAssignmentNotDisplayed(quizAssignment.name)
+
+ Log.d(STEP_TAG, "Filter the Assignment Filter to 'Not Submitted'.")
+ assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.NoSubmission)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentOutsidePeriod.name}' and '${quizAssignment.name}' are displayed (no submission) and '${assignmentInPeriod.name}' is NOT.")
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentInPeriod.name)
+
+ Log.d(STEP_TAG, "Reset the Assignment Filter back to 'All Assignments'.")
+ assignmentListPage.filterAssignments("Assignment Filter", AssignmentListPage.FilterOption.All)
+
+ Log.d(STEP_TAG, "Click on '${quizAssignment.name}' assignment to navigate to its details page.")
+ assignmentListPage.clickAssignment(quizAssignment)
+ quizDetailsPage.waitForRender()
+
+ Log.d(STEP_TAG, "Open the Edit Page and unpublish '${quizAssignment.name}' by toggling the publish switch.")
+ quizDetailsPage.openEditPage()
+ editAssignmentDetailsPage.clickPublishSwitch()
+ editAssignmentDetailsPage.saveAssignment()
+ quizDetailsPage.assertQuizUnpublished()
+
+ Log.d(STEP_TAG, "Navigate back to the Assignment List Page.")
+ Espresso.pressBack()
+ composeTestRule.waitForIdle()
+
+ Log.d(ASSERTION_TAG, "Assert that '${quizAssignment.name}' is now shown as 'Unpublished' on the assignment list.")
+ assignmentListPage.refreshAssignmentList()
+ assignmentListPage.assertPublishedState(quizAssignment.name, false)
+
+ Log.d(STEP_TAG, "Filter the Status Filter to 'Unpublished'.")
+ assignmentListPage.filterAssignments("Status Filter", AssignmentListPage.FilterOption.Unpublished)
+
+ Log.d(ASSERTION_TAG, "Assert that only '${quizAssignment.name}' is displayed (it is unpublished) and the published assignments are NOT.")
+ assignmentListPage.assertHasAssignment(quizAssignment)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentInPeriod.name)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+
+ Log.d(STEP_TAG, "Filter the Status Filter to 'Published'.")
+ assignmentListPage.filterAssignments("Status Filter", AssignmentListPage.FilterOption.Published)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentInPeriod.name}' and '${assignmentOutsidePeriod.name}' are displayed (published) and '${quizAssignment.name}' is NOT (unpublished).")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+ assignmentListPage.assertAssignmentNotDisplayed(quizAssignment.name)
+
+ Log.d(STEP_TAG, "Reset the Status Filter back to 'All Assignments'.")
+ assignmentListPage.filterAssignments("Status Filter", AssignmentListPage.FilterOption.All)
+
+ Log.d(STEP_TAG, "Group assignments by 'Assignment Group'.")
+ assignmentListPage.groupByAssignments(AssignmentListPage.GroupByOption.AssignmentGroup)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Assignments' and '${customGroup.name}' groups are displayed with the corresponding assignments inside.")
+ assignmentListPage.assertAssignmentGroupDisplayed("Assignments")
+ assignmentListPage.assertAssignmentGroupDisplayed(customGroup.name)
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+
+ Log.d(STEP_TAG, "Collapse the '${customGroup.name}' assignment group.")
+ assignmentListPage.expandCollapseAssignmentGroup(customGroup.name)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentOutsidePeriod.name}' is NOT displayed when its group is collapsed.")
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentInPeriod.name}' and '${quizAssignment.name}' in the 'Assignments' group are still displayed.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+
+ Log.d(STEP_TAG, "Expand the '${customGroup.name}' group back.")
+ assignmentListPage.expandCollapseAssignmentGroup(customGroup.name)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentOutsidePeriod.name}' is visible again.")
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+
+ Log.d(STEP_TAG, "Group assignments by 'Assignment Type'.")
+ assignmentListPage.groupByAssignments(AssignmentListPage.GroupByOption.AssignmentType)
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Assignments' and 'Quizzes' type groups are displayed with the corresponding assignments inside.")
+ assignmentListPage.assertAssignmentGroupDisplayed("Assignments")
+ assignmentListPage.assertAssignmentGroupDisplayed("Quizzes")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+
+ Log.d(STEP_TAG, "Collapse the 'Quizzes' type group.")
+ assignmentListPage.expandCollapseAssignmentGroup("Quizzes")
+
+ Log.d(ASSERTION_TAG, "Assert that '${quizAssignment.name}' is NOT displayed when the 'Quizzes' type group is collapsed.")
+ assignmentListPage.assertAssignmentNotDisplayed(quizAssignment.name)
+
+ Log.d(ASSERTION_TAG, "Assert that the text entry assignments in the 'Assignments' group are still displayed.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod)
+ assignmentListPage.assertHasAssignment(assignmentOutsidePeriod)
+
+ Log.d(STEP_TAG, "Expand the 'Quizzes' type group back.")
+ assignmentListPage.expandCollapseAssignmentGroup("Quizzes")
+
+ Log.d(ASSERTION_TAG, "Assert that '${quizAssignment.name}' is visible again.")
+ assignmentListPage.assertHasAssignment(quizAssignment)
+
+ Log.d(STEP_TAG, "Switch back to the '${gradingPeriod.title}' grading period.")
+ assignmentListPage.filterAssignments("Grading Period", AssignmentListPage.FilterOption.GradingPeriod(gradingPeriod.title))
+
+ Log.d(ASSERTION_TAG, "Assert that the grading period header shows '${gradingPeriod.title}' again.")
+ assignmentListPage.assertGradingPeriodLabel(gradingPeriod.title)
+
+ Log.d(ASSERTION_TAG, "Assert that '${assignmentInPeriod.name}' and '${quizAssignment.name}' are displayed (within the period) and '${assignmentOutsidePeriod.name}' is NOT.")
+ assignmentListPage.assertHasAssignment(assignmentInPeriod, needsGradingCount = 1)
+ assignmentListPage.assertHasAssignment(quizAssignment)
+ assignmentListPage.assertAssignmentNotDisplayed(assignmentOutsidePeriod.name)
+ }
+
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.ASSIGNMENTS, TestCategory.E2E)
+ fun testMultipleAssignmentsWithSearchE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(teachers = 1, courses = 1, students = 1)
+ val student = data.studentsList[0]
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+
+ Log.d(PREPARATION_TAG, "Seeding a 'Letter Grade' assignment for '${course.name}' course.")
+ val letterGradeAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.LETTER_GRADE, pointsPossible = 20.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Submit '${letterGradeAssignment.name}' assignment for '${student.name}' student.")
+ SubmissionsApi.seedAssignmentSubmission(course.id, student.token, letterGradeAssignment.id, submissionSeedsList = listOf(SubmissionsApi.SubmissionSeedInfo(amount = 1, submissionType = SubmissionType.ONLINE_TEXT_ENTRY)))
+
+ Log.d(PREPARATION_TAG, "Seeding a 'Points' assignment for '${course.name}' course.")
+ val pointsAssignment = AssignmentsApi.createAssignment(course.id, teacher.token, gradingType = GradingType.POINTS, pointsPossible = 15.0, dueAt = 1.days.fromNow.iso8601, submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY))
+
+ Log.d(PREPARATION_TAG, "Submit '${pointsAssignment.name}' assignment for '${student.name}' student.")
+ SubmissionsApi.seedAssignmentSubmission(course.id, student.token, pointsAssignment.id, submissionSeedsList = listOf(SubmissionsApi.SubmissionSeedInfo(amount = 1, submissionType = SubmissionType.ONLINE_TEXT_ENTRY)))
+
+ Log.d(STEP_TAG, "Login with user: '${teacher.name}', login id: '${teacher.loginId}'.")
+ tokenLogin(teacher)
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Open '${course.name}' course and navigate to its Assignments Tab.")
+ dashboardPage.openCourse(course.name)
+ courseBrowserPage.openAssignmentsTab()
+
+ Log.d(ASSERTION_TAG, "Assert that both '${letterGradeAssignment.name}' and '${pointsAssignment.name}' assignments are displayed, each with 1 submission needing grading.")
+ assignmentListPage.assertHasAssignment(letterGradeAssignment, needsGradingCount = 1)
+ assignmentListPage.assertHasAssignment(pointsAssignment, needsGradingCount = 1)
+
+ Log.d(STEP_TAG, "Click on the 'Search' (magnifying glass) icon at the toolbar.")
+ assignmentListPage.searchBar.clickOnSearchButton()
+
+ Log.d(STEP_TAG, "Type the name of the '${letterGradeAssignment.name}' assignment into the search bar.")
+ assignmentListPage.searchBar.typeToSearchBar(letterGradeAssignment.name)
+
+ Log.d(ASSERTION_TAG, "Assert that only '${letterGradeAssignment.name}' is displayed and '${pointsAssignment.name}' is not.")
+ assignmentListPage.assertHasAssignment(letterGradeAssignment)
+ assignmentListPage.assertAssignmentNotDisplayed(pointsAssignment.name)
+
+ Log.d(STEP_TAG, "Clear the search input.")
+ assignmentListPage.searchBar.clickOnClearSearchButton()
+
+ Log.d(ASSERTION_TAG, "Assert that both assignments are visible again after clearing the search.")
+ assignmentListPage.assertHasAssignment(letterGradeAssignment, needsGradingCount = 1)
+ assignmentListPage.assertHasAssignment(pointsAssignment, needsGradingCount = 1)
+
+ Log.d(STEP_TAG, "Type a search query that does not match any assignment.")
+ assignmentListPage.searchBar.typeToSearchBar("xxxxxxxxxxx")
+
+ Log.d(ASSERTION_TAG, "Assert that the empty state ('No Assignments') view is displayed when no assignments match the search query.")
+ assignmentListPage.assertDisplaysNoAssignmentsView()
+
+ Log.d(STEP_TAG, "Close the search bar.")
+ assignmentListPage.searchBar.pressSearchBarButton()
+
+ Log.d(ASSERTION_TAG, "Assert that both assignments are displayed again after closing the search bar.")
+ assignmentListPage.assertHasAssignment(letterGradeAssignment, needsGradingCount = 1)
+ assignmentListPage.assertHasAssignment(pointsAssignment, needsGradingCount = 1)
+ }
}
\ No newline at end of file
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt
index 9c6a40d819..dd5bf37673 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.espresso.getDateInCanvasCalendarFormat
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt
index e66e78c29e..4476447de8 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt
@@ -6,7 +6,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CustomStatusApi
import com.instructure.dataseeding.api.DifferentiationTagsApi
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt
index 7bc32ffde6..ccee5a3cb4 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt
@@ -31,8 +31,8 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.ConversationsApi
import com.instructure.dataseeding.api.GroupsApi
import com.instructure.dataseeding.model.CanvasUserApiModel
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt
index 51c4577218..0272312f7a 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt
@@ -23,11 +23,13 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.LatePolicyApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.LatePolicy
+import com.instructure.dataseeding.model.RubricCriterion
+import com.instructure.dataseeding.model.RubricCriterionRating
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.ago
import com.instructure.dataseeding.util.days
@@ -41,6 +43,7 @@ import com.instructure.teacher.R
import com.instructure.teacher.ui.pages.classic.PersonContextPage
import com.instructure.teacher.ui.utils.TeacherComposeTest
import com.instructure.teacher.ui.utils.extensions.seedAssignmentSubmission
+import com.instructure.teacher.ui.utils.extensions.seedAssignmentWithRubric
import com.instructure.teacher.ui.utils.extensions.seedAssignments
import com.instructure.teacher.ui.utils.extensions.seedData
import com.instructure.teacher.ui.utils.extensions.tokenLogin
@@ -505,4 +508,130 @@ class SpeedGraderE2ETest : TeacherComposeTest() {
speedGraderGradePage.assertFinalGradeIsDisplayed("15 / 10 pts")
}
+ @E2E
+ @Test
+ @TestMetaData(Priority.IMPORTANT, FeatureCategory.RUBRICS, TestCategory.E2E)
+ fun testSpeedGraderRubricGradingE2E() {
+
+ Log.d(PREPARATION_TAG, "Seeding data.")
+ val data = seedData(teachers = 1, courses = 1, students = 1, favoriteCourses = 1)
+ val teacher = data.teachersList[0]
+ val course = data.coursesList[0]
+ val student = data.studentsList[0]
+
+ Log.d(PREPARATION_TAG, "Seeding 'Text Entry' assignment for '${course.name}' course with 10 max points.")
+ val assignment = seedAssignments(
+ courseId = course.id,
+ dueAt = 1.days.fromNow.iso8601,
+ submissionTypes = listOf(SubmissionType.ONLINE_TEXT_ENTRY),
+ teacherToken = teacher.token,
+ pointsPossible = 10.0
+ )
+
+ val writingQualityCriterion = RubricCriterion(
+ description = "Writing Quality",
+ longDescription = "Evaluates the overall quality of written expression and clarity.",
+ points = 10.0,
+ ratings = listOf(
+ RubricCriterionRating(description = "Excellent", longDescription = "Demonstrates outstanding writing skills with clear and compelling expression.", points = 10.0),
+ RubricCriterionRating(description = "Satisfactory", longDescription = "Meets basic writing requirements with adequate clarity.", points = 5.0),
+ RubricCriterionRating(description = "Poor", longDescription = "Does not meet writing standards; lacks clarity and structure.", points = 0.0)
+ )
+ )
+
+ val researchDepthCriterion = RubricCriterion(
+ description = "Research Depth",
+ longDescription = null,
+ points = 9.0,
+ ratings = listOf(
+ RubricCriterionRating(description = "Exceptional", longDescription = "Thorough and comprehensive research with strong source diversity.", points = 9.0),
+ RubricCriterionRating(description = "Proficient", longDescription = "Well-researched with only minor gaps in coverage.", points = 7.0),
+ RubricCriterionRating(description = "Developing", longDescription = "Adequate research coverage but missing important perspectives.", points = 4.0),
+ RubricCriterionRating(description = "Beginning", longDescription = "Limited research depth with significant gaps.", points = 2.0),
+ RubricCriterionRating(description = "Not good", longDescription = "Insufficient research; sources are missing or unreliable.", points = 1.0)
+ )
+ )
+
+ Log.d(PREPARATION_TAG, "Creating a rubric with 2 criteria and associating it with '${assignment[0].name}' assignment. " +
+ "Criterion 1 ('Writing Quality') has a criterion description and 3 ratings. " +
+ "Criterion 2 ('Research Depth') has no criterion description and 5 ratings.")
+ val rubric = seedAssignmentWithRubric(
+ courseId = course.id,
+ assignmentId = assignment[0].id,
+ teacherToken = teacher.token,
+ title = "Test Rubric",
+ criteria = listOf(writingQualityCriterion, researchDepthCriterion)
+ )
+
+ Log.d(PREPARATION_TAG, "Seeding a submission for '${assignment[0].name}' assignment with '${student.name}' student.")
+ seedAssignmentSubmission(
+ submissionSeeds = listOf(SubmissionsApi.SubmissionSeedInfo(
+ amount = 1,
+ submissionType = SubmissionType.ONLINE_TEXT_ENTRY
+ )),
+ assignmentId = assignment[0].id,
+ courseId = course.id,
+ studentToken = student.token
+ )
+
+ Log.d(STEP_TAG, "Login with user: '${teacher.name}', login id: '${teacher.loginId}'.")
+ tokenLogin(teacher)
+ dashboardPage.waitForRender()
+
+ Log.d(STEP_TAG, "Open '${course.name}' course and navigate to Assignments Page.")
+ dashboardPage.openCourse(course)
+ courseBrowserPage.openAssignmentsTab()
+
+ Log.d(STEP_TAG, "Click on '${assignment[0].name}' assignment.")
+ assignmentListPage.clickAssignment(assignment[0])
+
+ Log.d(STEP_TAG, "Open (all) submissions and click on '${student.name}' student's submission.")
+ assignmentDetailsPage.clickAllSubmissions()
+ assignmentSubmissionListPage.clickSubmission(student)
+
+ Log.d(ASSERTION_TAG, "Assert that the submission of '${student.name}' student is displayed in SpeedGrader.")
+ speedGraderPage.assertDisplaysTextSubmissionViewWithStudentName(student.name)
+
+ Log.d(STEP_TAG, "Click on the 'Expand Panel Button' to show the grade panel and navigate to the 'Grade & Rubric' tab.")
+ speedGraderPage.clickExpandPanelButton()
+ speedGraderPage.selectTab("Grade & Rubric")
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Rubrics' label is displayed and both criteria are shown.")
+ speedGraderGradePage.assertRubricsLabelDisplayed()
+ speedGraderGradePage.assertRubricCriterionDisplayed(writingQualityCriterion.description)
+ speedGraderGradePage.assertRubricCriterionDisplayed(researchDepthCriterion.description)
+
+ Log.d(STEP_TAG, "Select the 'Poor' (0 pts) defined rating for the '${writingQualityCriterion.description}' criterion by tapping the point box.")
+ speedGraderGradePage.clickRubricRatingPointBox("0")
+
+ Log.d(ASSERTION_TAG, "Assert that the 'Poor' rating description is displayed after selecting it.")
+ speedGraderGradePage.assertRubricRatingDescriptionDisplayed("Poor")
+
+ val writingQualityNote = "Keep working on clarity and structure."
+ val writingQualityCriterionResponse = rubric.criteria.first { it.description == writingQualityCriterion.description }
+ Log.d(STEP_TAG, "Enter a rubric note '$writingQualityNote' for '${writingQualityCriterion.description}' and submit it.")
+ speedGraderGradePage.enterRubricNote(writingQualityNote, writingQualityCriterionResponse.id)
+ speedGraderGradePage.clickSendRubricNoteButton(writingQualityCriterionResponse.id)
+
+ Log.d(ASSERTION_TAG, "Assert that the rubric note '$writingQualityNote' is displayed with an edit button.")
+ speedGraderGradePage.assertRubricNoteDisplayedWithEditButton(writingQualityNote)
+
+ val editedWritingQualityNote = "Revised: Good effort, keep improving!"
+ Log.d(STEP_TAG, "Click the edit button on the rubric note and change it to '$editedWritingQualityNote'.")
+ speedGraderGradePage.clickEditRubricNoteButton(writingQualityCriterionResponse.id)
+ speedGraderGradePage.enterRubricNote(editedWritingQualityNote, writingQualityCriterionResponse.id)
+ speedGraderGradePage.clickSendRubricNoteButton(writingQualityCriterionResponse.id)
+
+ Log.d(ASSERTION_TAG, "Assert that the edited rubric note '$editedWritingQualityNote' is displayed with an edit button.")
+ speedGraderGradePage.assertRubricNoteDisplayedWithEditButton(editedWritingQualityNote)
+
+ Log.d(STEP_TAG, "Enter a custom score of 3 pts for the '${researchDepthCriterion.description}' criterion via the score input field.")
+ val researchDepthCriterionResponse = rubric.criteria.first { it.description == researchDepthCriterion.description }
+ speedGraderGradePage.enterRubricScore(researchDepthCriterionResponse.id, "3")
+
+ Log.d(ASSERTION_TAG, "Assert that no defined rating description is shown for '${researchDepthCriterion.description}' since a custom score was entered.")
+ speedGraderGradePage.assertRubricRatingDescriptionNotDisplayed("Exceptional")
+ speedGraderGradePage.assertRubricRatingDescriptionNotDisplayed("Proficient")
+ }
+
}
\ No newline at end of file
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CommentLibraryInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CommentLibraryInteractionTest.kt
index f3ed287b2e..ad597fd816 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CommentLibraryInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/CommentLibraryInteractionTest.kt
@@ -28,6 +28,7 @@ import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDifferentiationTagsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
@@ -48,6 +49,7 @@ import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.DifferentiationTagsManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -122,6 +124,10 @@ class CommentLibraryInteractionTest : TeacherComposeTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
@Test
@TestMetaData(Priority.IMPORTANT, FeatureCategory.SPEED_GRADER, TestCategory.INTERACTION)
fun showAllItemsWhenCommentFieldIsClicked() {
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/PersonContextInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/PersonContextInteractionTest.kt
index 780e4d3d6d..4b7998c82b 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/PersonContextInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/PersonContextInteractionTest.kt
@@ -21,6 +21,7 @@ import com.instructure.canvas.espresso.mockcanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockcanvas.addSubmissionsForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -38,6 +39,7 @@ import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -104,6 +106,10 @@ class PersonContextInteractionTest : TeacherTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
@Test
override fun displaysPageObjects() {
getToPersonContextPage(PersonContextPage.UserRole.TEACHER)
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderCommentsInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderCommentsInteractionTest.kt
index e71ddd2612..4d7832efe9 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderCommentsInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderCommentsInteractionTest.kt
@@ -22,6 +22,7 @@ import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDifferentiationTagsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
@@ -42,6 +43,7 @@ import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.DifferentiationTagsManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -124,6 +126,10 @@ class SpeedGraderCommentsInteractionTest : TeacherComposeTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
// Just good enough to mock the *representation* of a file, not to mock the file itself.
val attachment = Attachment(
id = 131313,
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderFilesInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderFilesInteractionTest.kt
index b2dff8a5b3..4b283bf145 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderFilesInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderFilesInteractionTest.kt
@@ -22,6 +22,7 @@ import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDifferentiationTagsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
@@ -42,6 +43,7 @@ import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.DifferentiationTagsManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -121,6 +123,10 @@ class SpeedGraderFilesInteractionTest : TeacherComposeTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
// Just good enough to mock the *representation* of a file, not to mock the file itself.
val attachment = Attachment(
id = 131313,
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderGradeInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderGradeInteractionTest.kt
index 84c04529f3..c5ce8b9034 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderGradeInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderGradeInteractionTest.kt
@@ -25,6 +25,7 @@ import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDifferentiationTagsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
@@ -45,6 +46,7 @@ import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.DifferentiationTagsManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -53,10 +55,10 @@ import com.instructure.canvasapi2.managers.graphql.SubmissionDetailsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionGradeManager
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.CanvasContextPermission
-import com.instructure.canvasapi2.models.RubricCriterion
-import com.instructure.canvasapi2.models.RubricCriterionRating
import com.instructure.canvasapi2.models.Submission
import com.instructure.canvasapi2.type.GradingType
+import com.instructure.dataseeding.model.RubricCriterion
+import com.instructure.dataseeding.model.RubricCriterionRating
import com.instructure.dataseeding.util.ago
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.iso8601
@@ -130,6 +132,10 @@ class SpeedGraderGradeInteractionTest : TeacherComposeTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
@Test
fun correctViewsForPointGradedWithoutRubric() {
goToSpeedGraderGradePage(gradingType = GradingType.points, score = 10.0, grade = "10")
@@ -323,12 +329,12 @@ class SpeedGraderGradeInteractionTest : TeacherComposeTest() {
speedGraderGradePage.clickRubricRatingPointBox("10")
speedGraderGradePage.assertRubricRatingDescriptionDisplayed("Full Marks")
- speedGraderGradePage.enterRubricScore(rubricCriterion.id.orEmpty(), "8.5")
+ speedGraderGradePage.enterRubricScore(rubricCriterion.id, "8.5")
speedGraderGradePage.assertRubricRatingDescriptionNotDisplayed("Full Marks")
val noteText = "Great work on this criterion!"
- speedGraderGradePage.enterRubricNote(noteText)
- speedGraderGradePage.clickSendRubricNoteButton()
+ speedGraderGradePage.enterRubricNote(noteText, rubricCriterion.id)
+ speedGraderGradePage.clickSendRubricNoteButton(rubricCriterion.id)
speedGraderGradePage.assertRubricNoteDisplayedWithEditButton(noteText)
}
@@ -345,12 +351,12 @@ class SpeedGraderGradeInteractionTest : TeacherComposeTest() {
speedGraderGradePage.clickRubricRatingPointBox("7")
speedGraderGradePage.assertRubricRatingDescriptionDisplayed("Passable")
- speedGraderGradePage.enterRubricScore(rubricCriterion.id.orEmpty(), "100")
+ speedGraderGradePage.enterRubricScore(rubricCriterion.id, "100")
speedGraderGradePage.assertRubricRatingDescriptionNotDisplayed("Passable")
val noteText = "Great work on this criterion!"
- speedGraderGradePage.enterRubricNote(noteText)
- speedGraderGradePage.clickSendRubricNoteButton()
+ speedGraderGradePage.enterRubricNote(noteText, rubricCriterion.id)
+ speedGraderGradePage.clickSendRubricNoteButton(rubricCriterion.id)
speedGraderGradePage.assertRubricNoteDisplayedWithEditButton(noteText)
}
@@ -386,7 +392,7 @@ class SpeedGraderGradeInteractionTest : TeacherComposeTest() {
description = "Description of criterion",
longDescription = "0, 3, 7 or 10 points",
points = 10.0,
- ratings = mutableListOf(
+ ratings = listOf(
RubricCriterionRating(id = "1", points = 0.0, description = "No Marks", longDescription = "Really?"),
RubricCriterionRating(
id = "2",
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderInteractionTest.kt
index 914815b787..b5ebf3240c 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderInteractionTest.kt
@@ -22,6 +22,7 @@ import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDifferentiationTagsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
@@ -42,6 +43,7 @@ import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.DifferentiationTagsManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -130,6 +132,10 @@ class SpeedGraderInteractionTest : TeacherComposeTest() {
@JvmField
val customGradeStatusesManager: CustomGradeStatusesManager = FakeCustomGradeStatusesManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
@Test
fun displaysSubmissionDropDown() {
goToSpeedGraderPage(attempts = 2)
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderQuizSubmissionInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderQuizSubmissionInteractionTest.kt
index 36428da5b9..cbcd913e54 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderQuizSubmissionInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/SpeedGraderQuizSubmissionInteractionTest.kt
@@ -23,6 +23,7 @@ import com.instructure.canvas.espresso.mockcanvas.addQuizToCourse
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDifferentiationTagsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
@@ -43,6 +44,7 @@ import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.DifferentiationTagsManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -122,6 +124,10 @@ class SpeedGraderQuizSubmissionInteractionTest : TeacherComposeTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
@Test
fun displaysNoSubmission() {
getToQuizSubmissionPage(submitQuiz = false)
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxComposeInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxComposeInteractionTest.kt
index b7c62d8a0e..597510f5ad 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxComposeInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxComposeInteractionTest.kt
@@ -27,6 +27,7 @@ import com.instructure.canvas.espresso.mockcanvas.addCoursePermissions
import com.instructure.canvas.espresso.mockcanvas.addRecipientsToCourse
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -44,6 +45,7 @@ import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -116,6 +118,10 @@ class TeacherInboxComposeInteractionTest: InboxComposeInteractionTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
override fun goToInboxCompose(data: MockCanvas) {
val parent = data.parents.first()
val token = data.tokenFor(parent)!!
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxSignatureInteractionTest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxSignatureInteractionTest.kt
index bc312f70a3..df844521fb 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxSignatureInteractionTest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/interaction/TeacherInboxSignatureInteractionTest.kt
@@ -19,6 +19,7 @@ import com.instructure.canvas.espresso.common.interaction.InboxSignatureInteract
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeAssignmentDetailsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCommentLibraryManager
+import com.instructure.canvas.espresso.mockcanvas.fakes.FakeDashboardCoursesManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeInboxSettingsManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakePostPolicyManager
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeRecentGradedSubmissionsManager
@@ -36,6 +37,7 @@ import com.instructure.canvasapi2.managers.PostPolicyManager
import com.instructure.canvasapi2.managers.StudentContextManager
import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
import com.instructure.canvasapi2.managers.graphql.RecentGradedSubmissionsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -100,6 +102,10 @@ class TeacherInboxSignatureInteractionTest : InboxSignatureInteractionTest() {
@JvmField
val recentGradedSubmissionsManager: RecentGradedSubmissionsManager = FakeRecentGradedSubmissionsManager()
+ @BindValue
+ @JvmField
+ val dashboardCoursesManager: DashboardCoursesManager = FakeDashboardCoursesManager()
+
private val dashboardPage = DashboardPage()
private val leftSideNavigationDrawerPage = LeftSideNavigationDrawerPage()
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt
index e8f754dbdd..7f826618e2 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt
@@ -24,7 +24,7 @@ import androidx.test.espresso.contrib.RecyclerViewActions.scrollToHolder
import androidx.test.espresso.matcher.BoundedMatcher
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithContentDescription
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.OnViewWithText
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt
index f9e3b19bdd..6b3f2034a2 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt
@@ -25,7 +25,7 @@ import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.TextViewColorAssertion
import com.instructure.espresso.WaitForViewWithId
@@ -167,12 +167,12 @@ class CourseBrowserPage : BasePage() {
private fun scrollOpen(textName: String, scrollPosition: Int) {
try {
- waitForViewWithText(textName).perform(withCustomConstraints(click(), isDisplayingAtLeast(50)))
+ waitForViewWithText(textName).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(50)))
} catch (e: Exception) {
when(e) {
is NoMatchingViewException, is PerformException -> {
scrollDownToCourseBrowser(scrollPosition)
- waitForViewWithText(textName).perform(withCustomConstraints(click(), isDisplayingAtLeast(50)))
+ waitForViewWithText(textName).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(50)))
}
else -> throw e
}
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt
index 2d1fef16b3..367625a472 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt
@@ -18,8 +18,8 @@ package com.instructure.teacher.ui.pages.classic
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
-import com.instructure.canvas.espresso.checked
-import com.instructure.canvas.espresso.matchToolbarText
+import com.instructure.canvas.espresso.utils.isRadioButtonChecked
+import com.instructure.canvas.espresso.utils.matchToolbarText
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisabled
import com.instructure.espresso.assertEnabled
@@ -87,7 +87,7 @@ class CourseSettingsPage : BasePage() {
fun selectNewHomePage(): String {
var newHomePageString = ""
val unselectedRadioButton =
- onView(checked(false) { newHomePageString = it })
+ onView(isRadioButtonChecked(false) { newHomePageString = it })
val dialogOkButton = onViewWithText(android.R.string.ok)
unselectedRadioButton.click()
dialogOkButton.click()
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/DiscussionsDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/DiscussionsDetailsPage.kt
index 3cfebae854..58e2db1604 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/DiscussionsDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/DiscussionsDetailsPage.kt
@@ -64,9 +64,9 @@ class DiscussionsDetailsPage(val moduleItemInteractions: ModuleItemInteractions)
.check(WebViewAssertions.webContent(DomMatchers.hasElementWithXpath("//span[text()='$entryMessage']")))
}
- fun assertReplyCounter(replyCount: Int, unreadCount: Int) {
+ fun assertReplyCounter(replyCount: Int) {
Web.onWebView()
- .check(WebViewAssertions.webContent(DomMatchers.hasElementWithXpath("//div[@data-testid='replies-counter' and .='$replyCount Reply ($unreadCount)']/ancestor::button[@data-testid='expand-button']")))
+ .check(WebViewAssertions.webContent(DomMatchers.hasElementWithXpath("//div[@data-testid='replies-counter' and .='$replyCount Reply']/ancestor::button[@data-testid='expand-button']")))
}
fun clickOnExpandRepliesButton() {
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt
index 686284c2b3..aaa84dca74 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt
@@ -23,12 +23,13 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.PickerActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import com.instructure.canvas.espresso.has
-import com.instructure.canvas.espresso.hasTextInputLayoutErrorText
-import com.instructure.canvas.espresso.withIndex
+import com.instructure.canvas.espresso.utils.has
+import com.instructure.canvas.espresso.utils.hasTextInputLayoutErrorText
+import com.instructure.canvas.espresso.utils.withIndex
import com.instructure.canvasapi2.utils.DateHelper
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.WaitForViewWithId
+import com.instructure.espresso.assertContainsText
import com.instructure.espresso.assertHasText
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
@@ -116,6 +117,13 @@ class EditAssignmentDetailsPage : BasePage() {
*/
fun editAssignees() = waitScrollClick(R.id.assignTo)
+ /**
+ * Asserts that the assignee field contains the specified [assignee] text.
+ */
+ fun assertContainsAssignee(assignee: String) {
+ onViewWithId(R.id.assignTo).assertContainsText(assignee)
+ }
+
/**
* Clicks on the edit due date field.
*/
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt
index 126611630d..ea2dcaa2e2 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt
@@ -7,7 +7,7 @@ import androidx.test.espresso.web.sugar.Web.onWebView
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.canvas.espresso.withElementRepeat
import com.instructure.dataseeding.model.PageApiModel
import com.instructure.espresso.ActivityHelper
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt
index 3ca19651cb..dd27e90a39 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt
@@ -25,9 +25,9 @@ import androidx.test.espresso.contrib.PickerActions
import androidx.test.espresso.matcher.ViewMatchers.Visibility
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import com.instructure.canvas.espresso.has
-import com.instructure.canvas.espresso.hasTextInputLayoutErrorText
-import com.instructure.canvas.espresso.withIndex
+import com.instructure.canvas.espresso.utils.has
+import com.instructure.canvas.espresso.utils.hasTextInputLayoutErrorText
+import com.instructure.canvas.espresso.utils.withIndex
import com.instructure.canvasapi2.utils.DateHelper
import com.instructure.espresso.ClickUntilMethod
import com.instructure.espresso.OnViewWithId
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt
index 67203f5c21..b7eff413fa 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt
@@ -18,7 +18,7 @@ package com.instructure.teacher.ui.pages.classic
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.OnViewWithText
import com.instructure.espresso.WaitForViewWithId
@@ -81,6 +81,6 @@ class EditSyllabusPage : BasePage(R.id.editSyllabusPage) {
*/
fun editSyllabusToggleShowSummary() {
editSyllabusShowCourseSummaryLabel.scrollTo()
- onView(withId(R.id.showSummarySwitch)).perform(withCustomConstraints(click(), isDisplayingAtLeast(50)))
+ onView(withId(R.id.showSummarySwitch)).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(50)))
}
}
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt
index 475e1925f0..5931b08bcf 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt
@@ -28,9 +28,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.Searchable
import com.instructure.espresso.assertDisplayed
@@ -114,7 +114,7 @@ class FileListPage(val searchable: Searchable) : BasePage(R.id.fileListPage) {
*/
fun refresh() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(50)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
/**
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt
index ac7606f125..ae3701e3bd 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt
@@ -24,7 +24,7 @@ import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.StringConstants.HelpMenu
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
import com.instructure.espresso.OnViewWithText
import com.instructure.espresso.assertDisplayed
@@ -55,9 +55,9 @@ class HelpPage : BasePage(R.id.helpDialog) {
private val reportProblemLabel by OnViewWithText(R.string.report_problem)
/**
- * The label for submitting a feature idea.
+ * The label for sharing a contribution.
*/
- private val submitFeatureLabel by OnViewWithStringTextIgnoreCase("Submit a Feature Idea")
+ private val shareContributionLabel by OnViewWithStringTextIgnoreCase("Share a Contribution")
/**
* The label for sharing your love.
@@ -136,10 +136,10 @@ class HelpPage : BasePage(R.id.helpDialog) {
}
/**
- * Clicks on the 'Submit a Feature Idea' help menu.
+ * Clicks on the 'Share a Contribution' help menu.
*/
- private fun clickSubmitFeatureLabel() {
- submitFeatureLabel.scrollTo().click()
+ private fun clickShareContributionLabel() {
+ shareContributionLabel.scrollTo().click()
}
/**
@@ -170,8 +170,8 @@ class HelpPage : BasePage(R.id.helpDialog) {
onView(withId(R.id.title) + withText(HelpMenu.Teacher.ASK_COMMUNITY_TITLE)).assertDisplayed()
onView(withId(R.id.subtitle) + withText(HelpMenu.Teacher.ASK_COMMUNITY_SUBTITLE)).assertDisplayed()
- onView(withId(R.id.title) + withText(HelpMenu.SUBMIT_FEATURE_TITLE)).assertDisplayed()
- onView(withId(R.id.subtitle) + withText(HelpMenu.SUBMIT_FEATURE_SUBTITLE)).assertDisplayed()
+ onView(withId(R.id.title) + withText(HelpMenu.SHARE_A_CONTRIBUTION_TITLE)).assertDisplayed()
+ onView(withId(R.id.subtitle) + withText(HelpMenu.SHARE_A_CONTRIBUTION_SUBTITLE)).assertDisplayed()
onView(withId(R.id.title) + withText(HelpMenu.Teacher.TRAINING_PORTAL_TITLE)).assertDisplayed()
onView(withId(R.id.subtitle) + withText(HelpMenu.Teacher.TRAINING_PORTAL_SUBTITLE)).assertDisplayed()
@@ -197,7 +197,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
when (helpMenuText) {
HelpMenu.SEARCH_GUIDES_TITLE -> clickSearchGuidesLabel()
- HelpMenu.SUBMIT_FEATURE_TITLE -> clickSubmitFeatureLabel()
+ HelpMenu.SHARE_A_CONTRIBUTION_TITLE -> clickShareContributionLabel()
HelpMenu.SHARE_LOVE_TITLE -> clickShareLoveLabel()
HelpMenu.Teacher.CONFERENCE_GUIDES_TITLE -> clickConferenceGuidesForRemoteClassroomsLabel()
HelpMenu.Teacher.ASK_COMMUNITY_TITLE -> clickAskTheCommunityLabel()
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt
index 6c0d83251a..6857e2e9c7 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt
@@ -7,7 +7,7 @@ import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.OnViewWithContentDescription
import com.instructure.espresso.OnViewWithId
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt
index 77abf532fd..5814919e66 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt
@@ -3,7 +3,7 @@ package com.instructure.teacher.ui.pages.classic
import androidx.annotation.StringRes
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withChild
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.RecyclerViewItemCountAssertion
import com.instructure.espresso.ViewAlphaAssertion
import com.instructure.espresso.assertDisplayed
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt
index e9578656ae..56029ca89e 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt
@@ -19,7 +19,7 @@ import android.view.View
import androidx.test.espresso.Espresso
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Page
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.RecyclerViewItemCountAssertion
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt
index dc4ced74c7..3a87bcd5b9 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt
@@ -18,7 +18,7 @@
package com.instructure.teacher.ui.pages.classic
import androidx.test.espresso.assertion.ViewAssertions.matches
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.dataseeding.model.CourseApiModel
import com.instructure.espresso.WaitForViewWithId
import com.instructure.espresso.assertContainsText
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt
index c94595441f..cf9d3f03ac 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt
@@ -21,9 +21,9 @@ import android.widget.EditText
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.clearFocus
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.clearFocus
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt
index 5351c68628..d57be70dda 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt
@@ -23,11 +23,21 @@ import androidx.test.espresso.web.sugar.Web
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.espresso.*
-import com.instructure.espresso.page.*
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.espresso.OnViewWithId
+import com.instructure.espresso.assertDisplayed
+import com.instructure.espresso.assertNotDisplayed
+import com.instructure.espresso.click
+import com.instructure.espresso.page.BasePage
+import com.instructure.espresso.page.onView
+import com.instructure.espresso.page.onViewWithId
+import com.instructure.espresso.page.plus
+import com.instructure.espresso.page.waitForView
+import com.instructure.espresso.page.withAncestor
+import com.instructure.espresso.page.withId
+import com.instructure.espresso.swipeDown
import com.instructure.teacher.R
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.comparesEqualTo
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderGradePage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderGradePage.kt
index 69186366e9..ed282f098f 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderGradePage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderGradePage.kt
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.instructure.teacher.ui.pages.compose
import androidx.compose.ui.semantics.getOrNull
@@ -28,6 +27,8 @@ import androidx.compose.ui.test.assertTextContains
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasAnyDescendant
import androidx.compose.ui.test.hasContentDescription
+import androidx.compose.ui.test.hasParent
+import androidx.compose.ui.test.hasSetTextAction
import androidx.compose.ui.test.hasTestTag
import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.junit4.ComposeTestRule
@@ -120,8 +121,13 @@ class SpeedGraderGradePage(private val composeTestRule: ComposeTestRule) : BaseP
* @param criterionId The ID of the rubric criterion.
* @param score The score value to enter.
*/
- fun enterRubricScore(criterionId: String, score: String) {
- composeTestRule.onNode(hasTestTag("rubricCriterionScoreInput-$criterionId"), useUnmergedTree = true)
+ fun enterRubricScore(criterionId: String? = null, score: String) {
+ val selector = if (criterionId != null) {
+ hasTestTag("rubricCriterionScoreInput-$criterionId")
+ } else {
+ hasParent(hasTestTag("rubricCriterionScoreInput")) and hasSetTextAction()
+ }
+ composeTestRule.onNode(selector, useUnmergedTree = true)
.performScrollTo()
.performTextReplacement(score)
composeTestRule.waitForIdle()
@@ -129,12 +135,19 @@ class SpeedGraderGradePage(private val composeTestRule: ComposeTestRule) : BaseP
}
/**
- * Enters a note in the rubric note input field.
+ * Enters a note in the rubric note input field for the given criterion.
+ * Scrolls via the note container (outside AnimatedContent) so the scroll chain is not broken.
*
+ * @param criterionId The ID of the criterion whose note field should be targeted.
* @param note The note text to enter.
*/
- fun enterRubricNote(note: String) {
- composeTestRule.onNode(hasTestTag("rubricNoteInput"), useUnmergedTree = true)
+ fun enterRubricNote(note: String, criterionId: String? = null) {
+ val selector = if (criterionId != null) {
+ hasTestTag("rubricNoteInput") and hasAnyAncestor(hasTestTag("rubricNoteInput-$criterionId"))
+ } else {
+ hasTestTag("rubricNoteInput")
+ }
+ composeTestRule.onNode(selector, useUnmergedTree = true)
.performScrollTo()
.performTextReplacement(note)
composeTestRule.waitForIdle()
@@ -163,14 +176,37 @@ class SpeedGraderGradePage(private val composeTestRule: ComposeTestRule) : BaseP
}
/**
- * Clicks the send button to submit the rubric note.
+ * Clicks the send button to submit the rubric note for the given criterion.
+ *
+ * @param criterionId The ID of the criterion whose note send button should be clicked.
*/
- fun clickSendRubricNoteButton() {
- composeTestRule.onNode((hasContentDescription(getStringFromResource(R.string.a11y_sendRubricNoteContentDescription))), useUnmergedTree = true)
+ fun clickSendRubricNoteButton(criterionId: String? = null) {
+ val selector = if (criterionId != null) {
+ hasContentDescription(getStringFromResource(R.string.a11y_sendRubricNoteContentDescription)) and hasAnyAncestor(hasTestTag("rubricNoteInput-$criterionId"))
+ } else {
+ hasContentDescription(getStringFromResource(R.string.a11y_sendRubricNoteContentDescription))
+ }
+ composeTestRule.onNode(selector, useUnmergedTree = true)
.performClick()
composeTestRule.waitForIdle()
}
+ /**
+ * Clicks the edit button on a submitted rubric note for the given criterion.
+ *
+ * @param criterionId The ID of the criterion whose note edit button should be clicked.
+ */
+ fun clickEditRubricNoteButton(criterionId: String? = null) {
+ val selector = if (criterionId != null) {
+ hasContentDescription(getStringFromResource(R.string.content_description_edit_rubric_comment)) and
+ hasAnyAncestor(hasTestTag("rubricNoteInput-$criterionId"))
+ } else {
+ hasContentDescription(getStringFromResource(R.string.content_description_edit_rubric_comment))
+ }
+ composeTestRule.onNode(selector, useUnmergedTree = true).performClick()
+ composeTestRule.waitForIdle()
+ }
+
/**
* Asserts that the rubric note is displayed with the edit button.
*
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt
index 1fec868ba4..cdbe72ed4e 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt
@@ -48,7 +48,7 @@ import androidx.test.espresso.web.sugar.Web.onWebView
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.canvasapi2.models.Submission
import com.instructure.canvasapi2.models.User
import com.instructure.composetest.hasTestTagThatContains
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt
index d448abd6f3..4a3013849b 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt
@@ -21,8 +21,8 @@ import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
-import com.instructure.canvas.espresso.SwipeRefreshLayoutMatchers
-import com.instructure.canvas.espresso.ViewSizeMatcher
+import com.instructure.canvas.espresso.utils.SwipeRefreshLayoutMatchers
+import com.instructure.canvas.espresso.utils.ViewSizeMatcher
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.RecyclerViewItemCountAssertion
import com.instructure.espresso.assertDisplayed
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt
index 1e4de4c00e..ce3896fcfa 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt
@@ -14,7 +14,6 @@
* limitations under the License.
*
*/
-
package com.instructure.teacher.ui.utils.extensions
import android.app.Activity
@@ -28,7 +27,7 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.platform.app.InstrumentationRegistry
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.ConversationsApi
@@ -37,6 +36,7 @@ import com.instructure.dataseeding.api.EnrollmentsApi
import com.instructure.dataseeding.api.FileUploadsApi
import com.instructure.dataseeding.api.PagesApi
import com.instructure.dataseeding.api.QuizzesApi
+import com.instructure.dataseeding.api.RubricsApi
import com.instructure.dataseeding.api.SeedApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.api.UserApi
@@ -51,6 +51,8 @@ import com.instructure.dataseeding.model.FileUploadType
import com.instructure.dataseeding.model.PageApiModel
import com.instructure.dataseeding.model.QuizListApiModel
import com.instructure.dataseeding.model.QuizSubmissionApiModel
+import com.instructure.dataseeding.model.RubricApiModel
+import com.instructure.dataseeding.model.RubricCriterion
import com.instructure.dataseeding.model.SubmissionApiModel
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.CanvasNetworkAdapter
@@ -430,3 +432,21 @@ fun TeacherTest.routeTo(route: String) {
fun TeacherTest.routeTo(route: Route, activity: FragmentActivity) {
RouteMatcher.route(activity, route)
}
+
+fun seedAssignmentWithRubric(
+ courseId: Long,
+ assignmentId: Long,
+ teacherToken: String,
+ title: String = "Test Rubric",
+ criteria: List
+): RubricApiModel {
+ val created = RubricsApi.createAssignmentWithRubric(
+ courseId = courseId,
+ assignmentId = assignmentId,
+ teacherToken = teacherToken,
+ title = title,
+ criteria = criteria
+ )
+ val assignment = AssignmentsApi.getAssignment(courseId, assignmentId, teacherToken)
+ return created.copy(criteria = assignment.rubric ?: emptyList())
+}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/activities/RouteValidatorActivity.kt b/apps/teacher/src/main/java/com/instructure/teacher/activities/RouteValidatorActivity.kt
index 1d662d7c8c..99ad1786d3 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/activities/RouteValidatorActivity.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/activities/RouteValidatorActivity.kt
@@ -35,6 +35,7 @@ import com.instructure.canvasapi2.utils.weave.catch
import com.instructure.canvasapi2.utils.weave.tryWeave
import com.instructure.interactions.router.RouteContext
import com.instructure.interactions.router.RouterParams
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentActivity
import com.instructure.loginapi.login.tasks.LogoutTask
import com.instructure.loginapi.login.util.QRLogin
import com.instructure.loginapi.login.util.QRLogin.verifySSOLoginUri
@@ -124,7 +125,7 @@ class RouteValidatorActivity : BaseCanvasActivity() {
LoginActivity.createLaunchApplicationMainActivityIntent(this@RouteValidatorActivity, extras)
} else {
logQREvent(ApiPrefs.domain, true)
- LoginActivity.createLaunchApplicationMainActivityIntent(this@RouteValidatorActivity, null)
+ Intent(this@RouteValidatorActivity, CookieConsentActivity::class.java)
}
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/activities/SplashActivity.kt b/apps/teacher/src/main/java/com/instructure/teacher/activities/SplashActivity.kt
index e600699ad2..b29cb73b01 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/activities/SplashActivity.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/activities/SplashActivity.kt
@@ -24,7 +24,6 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.instructure.canvasapi2.apis.UserAPI
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.managers.CourseManager
-import com.instructure.canvasapi2.managers.FeaturesManager
import com.instructure.canvasapi2.managers.ThemeManager
import com.instructure.canvasapi2.managers.UserManager
import com.instructure.canvasapi2.models.Account
@@ -40,11 +39,11 @@ import com.instructure.canvasapi2.utils.weave.awaitOrThrow
import com.instructure.canvasapi2.utils.weave.weave
import com.instructure.pandautils.base.BaseCanvasActivity
import com.instructure.pandautils.binding.viewBinding
+import com.instructure.pandautils.domain.usecase.splash.SetupPendoTrackingUseCase
import com.instructure.pandautils.utils.ColorKeeper
import com.instructure.pandautils.utils.Const
import com.instructure.pandautils.utils.FeatureFlagProvider
import com.instructure.pandautils.utils.LocaleUtils
-import com.instructure.pandautils.utils.SHA256
import com.instructure.pandautils.utils.ThemePrefs
import com.instructure.pandautils.utils.setGone
import com.instructure.pandautils.utils.toast
@@ -59,7 +58,6 @@ import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
-import sdk.pendo.io.Pendo
import javax.inject.Inject
@AndroidEntryPoint
@@ -71,6 +69,9 @@ class SplashActivity : BaseCanvasActivity() {
@Inject
lateinit var userApi: UserAPI.UsersInterface
+ @Inject
+ lateinit var setupPendoTrackingUseCase: SetupPendoTrackingUseCase
+
private val binding by viewBinding(ActivitySplashBinding::inflate)
private var startUp: Job? = null
@@ -97,7 +98,6 @@ class SplashActivity : BaseCanvasActivity() {
// Grab user teacher status
try {
val user = userApi.getSelf(RestParams(isForceReadFromNetwork = true)).dataOrThrow
- val userWithIds = userApi.getSelfWithUUID(RestParams(isForceReadFromNetwork = true)).dataOrThrow
val shouldRestartForLocaleChange = setupUser(user)
if (shouldRestartForLocaleChange) {
if (BuildConfig.DEBUG) toast(R.string.localeRestartMessage)
@@ -105,7 +105,7 @@ class SplashActivity : BaseCanvasActivity() {
return@weave
}
- setupPendoTracking(userWithIds)
+ setupPendoTracking()
// Determine if user is a Teacher, Ta, or Designer
// Use GlobalScope since this can continue executing after SplashActivity is destroyed
@@ -232,20 +232,8 @@ class SplashActivity : BaseCanvasActivity() {
return ApiPrefs.effectiveLocale != oldLocale
}
- private suspend fun setupPendoTracking(user: User) {
- val featureFlagsResult = FeaturesManager.getEnvironmentFeatureFlagsAsync(true).await().dataOrNull
- val sendUsageMetrics = featureFlagsResult?.get(FeaturesManager.SEND_USAGE_METRICS) ?: false
- if (sendUsageMetrics) {
- val visitorData = mapOf(
- "locale" to ApiPrefs.effectiveLocale,
- )
- val accountData = mapOf(
- "surveyOptOut" to featureFlagProvider.checkAccountSurveyNotificationsFlag()
- )
- Pendo.startSession(user.uuid?.SHA256().orEmpty(), user.accountUuid.orEmpty(), visitorData, accountData)
- } else {
- Pendo.endSession()
- }
+ private suspend fun setupPendoTracking() {
+ setupPendoTrackingUseCase(Unit)
}
override fun onStop() {
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/adapters/StudentContextFragment.kt b/apps/teacher/src/main/java/com/instructure/teacher/adapters/StudentContextFragment.kt
index 32e6ea5ca0..8d54f1b8e4 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/adapters/StudentContextFragment.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/adapters/StudentContextFragment.kt
@@ -35,6 +35,8 @@ import com.instructure.canvasapi2.type.EnrollmentType
import com.instructure.canvasapi2.utils.DateHelper
import com.instructure.canvasapi2.utils.Pronouns
import com.instructure.canvasapi2.utils.isValid
+import com.instructure.canvasapi2.utils.pageview.PageView
+import com.instructure.canvasapi2.utils.pageview.PageViewUrlParam
import com.instructure.interactions.MasterDetailInteractions
import com.instructure.interactions.router.Route
import com.instructure.interactions.router.RouteContext
@@ -80,6 +82,7 @@ import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import javax.inject.Inject
+@PageView(url = "courses/{courseId}/users/{userId}")
@AndroidEntryPoint
class StudentContextFragment : PresenterFragment(), StudentContextView {
@@ -88,8 +91,11 @@ class StudentContextFragment : PresenterFragment.
+ */
+package com.instructure.teacher.di
+
+import com.instructure.canvasapi2.apis.UserAPI
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
+import com.instructure.pandautils.features.cookieconsent.AnalyticsConsentHandler
+import com.instructure.pandautils.features.cookieconsent.CookieConsentNamespace
+import com.instructure.pandautils.utils.FeatureFlagProvider
+import com.instructure.pandautils.utils.PendoTokenConfig
+import com.instructure.teacher.BuildConfig
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+class CookieConsentModule {
+
+ @Provides
+ fun provideCookieConsentNamespace(): CookieConsentNamespace {
+ return CookieConsentNamespace.TEACHER
+ }
+
+ @Provides
+ @Singleton
+ fun providePendoTokenConfig(): PendoTokenConfig {
+ return PendoTokenConfig(
+ fallbackToken = BuildConfig.PENDO_TOKEN,
+ apiTokenSelector = { it.pendoMobileTeacherApiKey }
+ )
+ }
+
+ @Provides
+ fun provideAnalyticsConsentHandler(
+ userApi: UserAPI.UsersInterface,
+ featureFlagProvider: FeatureFlagProvider,
+ consentPrefs: ConsentPrefs,
+ apiPrefs: ApiPrefs
+ ): AnalyticsConsentHandler {
+ return object : AnalyticsConsentHandler(userApi, featureFlagProvider, consentPrefs, apiPrefs) {}
+ }
+}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/di/CoursesWidgetModule.kt b/apps/teacher/src/main/java/com/instructure/teacher/di/CoursesWidgetModule.kt
index 2d7ebf6f2b..b3125ba32f 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/di/CoursesWidgetModule.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/di/CoursesWidgetModule.kt
@@ -16,9 +16,7 @@
package com.instructure.teacher.di
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetBehavior
import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import com.instructure.teacher.features.dashboard.widget.courses.TeacherCoursesWidgetBehavior
import com.instructure.teacher.features.dashboard.widget.courses.TeacherCoursesWidgetRouter
import dagger.Module
import dagger.Provides
@@ -33,11 +31,4 @@ class CoursesWidgetModule {
fun provideCoursesWidgetRouter(): CoursesWidgetRouter {
return TeacherCoursesWidgetRouter()
}
-
- @Provides
- fun provideCoursesWidgetBehavior(
- teacherCoursesWidgetBehavior: TeacherCoursesWidgetBehavior
- ): CoursesWidgetBehavior {
- return teacherCoursesWidgetBehavior
- }
}
\ No newline at end of file
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/di/LoginModule.kt b/apps/teacher/src/main/java/com/instructure/teacher/di/LoginModule.kt
index a95c94075b..32f598caaf 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/di/LoginModule.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/di/LoginModule.kt
@@ -24,10 +24,12 @@ import com.instructure.canvasapi2.models.AccountDomain
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.loginapi.login.LoginNavigation
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
import com.instructure.loginapi.login.util.LoginPrefs
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.teacher.activities.SignInActivity
import com.instructure.teacher.features.login.TeacherAcceptableUsePolicyRouter
+import com.instructure.teacher.features.login.TeacherCookieConsentRouter
import com.instructure.teacher.features.login.TeacherLoginNavigation
import dagger.Module
import dagger.Provides
@@ -50,6 +52,11 @@ class LoginModule {
fun provideLoginNavigation(activity: FragmentActivity, alarmScheduler: AlarmScheduler): LoginNavigation {
return TeacherLoginNavigation(activity, alarmScheduler)
}
+
+ @Provides
+ fun provideCookieConsentRouter(activity: FragmentActivity): CookieConsentRouter {
+ return TeacherCookieConsentRouter(activity)
+ }
}
@Module
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/di/feature/TodoWidgetModule.kt b/apps/teacher/src/main/java/com/instructure/teacher/di/feature/TodoWidgetModule.kt
index 693e01e19b..b6054a802a 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/di/feature/TodoWidgetModule.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/di/feature/TodoWidgetModule.kt
@@ -16,9 +16,9 @@
package com.instructure.teacher.di.feature
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetBehavior
+import com.instructure.pandautils.features.dashboard.widget.todo.DefaultTodoHomeScreenWidgetUpdater
+import com.instructure.pandautils.features.dashboard.widget.todo.TodoHomeScreenWidgetUpdater
import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
-import com.instructure.teacher.features.dashboard.widget.todo.TeacherTodoWidgetBehavior
import com.instructure.teacher.features.dashboard.widget.todo.TeacherTodoWidgetRouter
import dagger.Binds
import dagger.Module
@@ -33,5 +33,5 @@ abstract class TodoWidgetModule {
abstract fun bindTodoWidgetRouter(impl: TeacherTodoWidgetRouter): TodoWidgetRouter
@Binds
- abstract fun bindTodoWidgetBehavior(impl: TeacherTodoWidgetBehavior): TodoWidgetBehavior
+ abstract fun bindTodoHomeScreenWidgetUpdater(impl: DefaultTodoHomeScreenWidgetUpdater): TodoHomeScreenWidgetUpdater
}
\ No newline at end of file
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/notifications/TeacherDashboardRouter.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/notifications/TeacherDashboardRouter.kt
index 11c6f5cbd7..75f836bbe0 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/notifications/TeacherDashboardRouter.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/notifications/TeacherDashboardRouter.kt
@@ -21,7 +21,6 @@ import androidx.fragment.app.FragmentActivity
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.ContextKeeper
import com.instructure.interactions.router.Route
-import com.instructure.pandautils.features.dashboard.customize.CustomizeDashboardFragment
import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
import com.instructure.pandautils.fragments.HtmlContentFragment
import com.instructure.teacher.activities.LoginActivity
@@ -48,12 +47,6 @@ class TeacherDashboardRouter(private val activity: FragmentActivity) : Dashboard
override fun routeToSyncProgress() = Unit
- override fun routeToManageOfflineContent() = Unit
-
- override fun routeToCustomizeDashboard() {
- RouteMatcher.route(activity, CustomizeDashboardFragment.makeRoute(), )
- }
-
override fun restartApp() {
val startupIntent = Intent(ContextKeeper.appContext, LoginActivity::class.java)
startupIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/widget/courses/TeacherCoursesWidgetBehavior.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/widget/courses/TeacherCoursesWidgetBehavior.kt
deleted file mode 100644
index fdb715cfd5..0000000000
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/widget/courses/TeacherCoursesWidgetBehavior.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.teacher.features.dashboard.widget.courses
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.Course
-import com.instructure.canvasapi2.models.DiscussionTopicHeader
-import com.instructure.canvasapi2.models.Group
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetBehavior
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import javax.inject.Inject
-
-class TeacherCoursesWidgetBehavior @Inject constructor(
- private val router: CoursesWidgetRouter
-) : CoursesWidgetBehavior {
-
- override fun onCourseClick(activity: FragmentActivity, course: Course) {
- router.routeToCourse(activity, course)
- }
-
- override fun onGroupClick(activity: FragmentActivity, group: Group) {
- router.routeToGroup(activity, group)
- }
-
- override fun onManageOfflineContent(activity: FragmentActivity, course: Course) {
- throw NotImplementedError()
- }
-
- override fun onCustomizeCourse(activity: FragmentActivity, course: Course) {
- throw NotImplementedError()
- }
-
- override fun onAllCoursesClicked(activity: FragmentActivity) {
- router.routeToAllCourses(activity)
- }
-
- override fun onAnnouncementClick(activity: FragmentActivity, course: Course, announcements: List) {
- throw NotImplementedError()
- }
-
- override fun onGroupMessageClick(activity: FragmentActivity, group: Group) {
- throw NotImplementedError()
- }
-}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/widget/todo/TeacherTodoWidgetBehavior.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/widget/todo/TeacherTodoWidgetBehavior.kt
deleted file mode 100644
index 262daad4eb..0000000000
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/dashboard/widget/todo/TeacherTodoWidgetBehavior.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.teacher.features.dashboard.widget.todo
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetBehavior
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
-import javax.inject.Inject
-
-class TeacherTodoWidgetBehavior @Inject constructor(
- private val router: TodoWidgetRouter
-) : TodoWidgetBehavior {
-
- override fun onTodoClick(activity: FragmentActivity, htmlUrl: String) {
- router.routeToTodo(activity, htmlUrl)
- }
-
- override fun onAddTodoClick(activity: FragmentActivity, initialDateString: String?) {
- router.routeToCreateTodo(activity, initialDateString)
- }
-
- override fun updateWidget(forceRefresh: Boolean) {
- // TODO: Implement widget update for Teacher app when widget support is added
- }
-}
\ No newline at end of file
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/files/details/FileDetailsFragment.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/files/details/FileDetailsFragment.kt
index c7807e0b92..bfd0179504 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/files/details/FileDetailsFragment.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/files/details/FileDetailsFragment.kt
@@ -26,6 +26,8 @@ import androidx.fragment.app.Fragment
import com.instructure.pandautils.base.BaseCanvasFragment
import androidx.fragment.app.viewModels
import com.instructure.canvasapi2.models.CanvasContext
+import com.instructure.canvasapi2.utils.pageview.PageView
+import com.instructure.canvasapi2.utils.pageview.PageViewUrl
import com.instructure.canvasapi2.utils.tryOrNull
import com.instructure.pandautils.binding.viewBinding
import com.instructure.pandautils.utils.BooleanArg
@@ -43,12 +45,25 @@ import com.instructure.teacher.fragments.ViewUnsupportedFileFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
+@PageView
class FileDetailsFragment : BaseCanvasFragment() {
private val viewModel: FileDetailsViewModel by viewModels()
private val binding by viewBinding(FragmentFileDetailsBinding::bind)
private var isInModulesPager: Boolean by BooleanArg(key = IS_IN_MODULES_PAGER, default = false)
+ @PageViewUrl
+ fun makePageViewUrl(): String {
+ val fileData = viewModel.data.value?.fileData ?: return ""
+ return when (fileData) {
+ is FileViewData.Pdf -> fileData.url
+ is FileViewData.Media -> fileData.url
+ is FileViewData.Image -> fileData.url
+ is FileViewData.Html -> fileData.url
+ is FileViewData.Other -> fileData.url
+ }
+ }
+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return inflater.inflate(R.layout.fragment_file_details, container, false)
}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/inbox/list/TeacherInboxRouter.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/inbox/list/TeacherInboxRouter.kt
index 267d810abc..b44552fea0 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/inbox/list/TeacherInboxRouter.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/inbox/list/TeacherInboxRouter.kt
@@ -24,6 +24,7 @@ import com.instructure.canvasapi2.models.Attachment
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
+import com.instructure.canvasapi2.models.MediaComment
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.interactions.router.Route
import com.instructure.pandautils.features.inbox.compose.InboxComposeFragment
@@ -86,6 +87,10 @@ class TeacherInboxRouter(private val activity: FragmentActivity, private val fra
openMedia(activity, attachment.url)
}
+ override fun routeToMediaAttachment(mediaComment: MediaComment) {
+ openMedia(activity, mediaComment.url)
+ }
+
override fun popDetailsScreen(activity: FragmentActivity?) {
if (activity == null) return
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherAcceptableUsePolicyRouter.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherAcceptableUsePolicyRouter.kt
index 18c5402a4e..77d9ea74cf 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherAcceptableUsePolicyRouter.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherAcceptableUsePolicyRouter.kt
@@ -20,12 +20,12 @@ import android.content.Intent
import androidx.fragment.app.FragmentActivity
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentActivity
import com.instructure.loginapi.login.tasks.LogoutTask
import com.instructure.pandautils.features.reminder.AlarmScheduler
import com.instructure.pandautils.services.PushNotificationRegistrationWorker
import com.instructure.teacher.R
import com.instructure.teacher.activities.InternalWebViewActivity
-import com.instructure.teacher.activities.SplashActivity
import com.instructure.teacher.tasks.TeacherLogoutTask
class TeacherAcceptableUsePolicyRouter(
@@ -41,8 +41,8 @@ class TeacherAcceptableUsePolicyRouter(
override fun startApp() {
PushNotificationRegistrationWorker.scheduleJob(activity, ApiPrefs.isMasquerading)
- val intent = SplashActivity.createIntent(activity, activity.intent?.extras)
-
+ val intent = Intent(activity, CookieConsentActivity::class.java)
+ activity.intent?.extras?.let { intent.putExtras(it) }
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
activity.startActivity(intent)
}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherCookieConsentRouter.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherCookieConsentRouter.kt
new file mode 100644
index 0000000000..c82e265bfe
--- /dev/null
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/login/TeacherCookieConsentRouter.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.teacher.features.login
+
+import androidx.fragment.app.FragmentActivity
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
+import com.instructure.pandautils.services.PushNotificationRegistrationWorker
+import com.instructure.teacher.activities.SplashActivity
+
+class TeacherCookieConsentRouter(
+ private val activity: FragmentActivity
+) : CookieConsentRouter {
+
+ override fun startApp() {
+ PushNotificationRegistrationWorker.scheduleJob(activity, ApiPrefs.isMasquerading)
+ val intent = SplashActivity.createIntent(activity, activity.intent?.extras)
+ intent.flags = android.content.Intent.FLAG_ACTIVITY_NEW_TASK or android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK
+ activity.startActivity(intent)
+ }
+}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/modules/list/ui/ModuleListFragment.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/modules/list/ui/ModuleListFragment.kt
index 7c43150dbb..992707b40a 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/modules/list/ui/ModuleListFragment.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/modules/list/ui/ModuleListFragment.kt
@@ -24,6 +24,7 @@ import androidx.lifecycle.lifecycleScope
import com.instructure.canvasapi2.apis.ModuleAPI
import com.instructure.canvasapi2.apis.ProgressAPI
import com.instructure.canvasapi2.models.CanvasContext
+import com.instructure.canvasapi2.utils.pageview.PageView
import com.instructure.pandautils.features.progress.ProgressPreferences
import com.instructure.pandautils.room.appdatabase.daos.ModuleBulkProgressDao
import com.instructure.pandautils.utils.Const
@@ -33,6 +34,7 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
+@PageView(url = "modules")
@AndroidEntryPoint
class ModuleListFragment : ModuleListMobiusFragment() {
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/modules/progression/ModuleProgressionFragment.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/modules/progression/ModuleProgressionFragment.kt
index 6ec7802cb2..9ee69d8d0a 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/modules/progression/ModuleProgressionFragment.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/modules/progression/ModuleProgressionFragment.kt
@@ -26,6 +26,8 @@ import androidx.fragment.app.viewModels
import androidx.viewpager.widget.ViewPager.SimpleOnPageChangeListener
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.models.Course
+import com.instructure.canvasapi2.utils.pageview.PageView
+import com.instructure.canvasapi2.utils.pageview.PageViewUrlParam
import com.instructure.interactions.router.Route
import com.instructure.interactions.router.RouterParams
import com.instructure.pandautils.binding.viewBinding
@@ -48,13 +50,15 @@ import com.instructure.teacher.router.RouteMatcher
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
+@PageView("modules/{moduleItemId}")
class ModuleProgressionFragment : BaseCanvasFragment() {
private val viewModel: ModuleProgressionViewModel by viewModels()
private val binding by viewBinding(FragmentModuleProgressionBinding::bind)
private val canvasContext: CanvasContext by ParcelableArg(key = Const.CANVAS_CONTEXT)
- private val moduleItemId by LongArg(key = RouterParams.MODULE_ITEM_ID, default = -1L)
+ @get:PageViewUrlParam("moduleItemId")
+ val moduleItemId by LongArg(key = RouterParams.MODULE_ITEM_ID, default = -1L)
private val assetType by StringArg(key = ASSET_TYPE)
private val assetId by StringArg(key = ASSET_ID)
private val route: Route by ParcelableArg(key = ROUTE)
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsBehaviour.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsBehaviour.kt
index 780a1c344d..cc3eb6e8bd 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsBehaviour.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsBehaviour.kt
@@ -40,7 +40,8 @@ class TeacherSettingsBehaviour : SettingsBehaviour {
R.string.inboxSettingsTitle to listOf(SettingsItem.INBOX_SIGNATURE),
R.string.legal to listOf(
SettingsItem.ABOUT,
- SettingsItem.LEGAL
+ SettingsItem.LEGAL,
+ SettingsItem.PRIVACY
)
)
}
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsRouter.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsRouter.kt
index ae072849b8..8e3e801368 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsRouter.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/settings/TeacherSettingsRouter.kt
@@ -22,6 +22,7 @@ import com.instructure.pandautils.dialogs.RatingDialog
import com.instructure.pandautils.features.notification.preferences.EmailNotificationPreferencesFragment
import com.instructure.pandautils.features.notification.preferences.PushNotificationPreferencesFragment
import com.instructure.pandautils.features.settings.SettingsRouter
+import com.instructure.pandautils.features.privacysettings.PrivacySettingsFragment
import com.instructure.pandautils.features.settings.inboxsignature.InboxSignatureFragment
import com.instructure.pandautils.fragments.RemoteConfigParamsFragment
import com.instructure.pandautils.utils.AppType
@@ -76,4 +77,11 @@ class TeacherSettingsRouter(private val activity: FragmentActivity) : SettingsRo
Route(null, InboxSignatureFragment::class.java)
)
}
+
+ override fun navigateToPrivacySettings() {
+ RouteMatcher.route(
+ activity,
+ Route(null, PrivacySettingsFragment::class.java)
+ )
+ }
}
\ No newline at end of file
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/edit/EditSyllabusFragment.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/edit/EditSyllabusFragment.kt
index adfeebf597..0aa50243b3 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/edit/EditSyllabusFragment.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/edit/EditSyllabusFragment.kt
@@ -22,6 +22,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import com.instructure.canvasapi2.models.Course
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.pageview.PageView
+import com.instructure.canvasapi2.utils.pageview.PageViewUrl
+import com.instructure.canvasapi2.utils.pageview.PageViewUrlParam
import com.instructure.pandautils.analytics.SCREEN_VIEW_EDIT_SYLLABUS
import com.instructure.pandautils.analytics.ScreenView
import com.instructure.pandautils.interfaces.NavigationCallbacks
@@ -34,6 +38,7 @@ import com.instructure.teacher.mobius.common.ui.UpdateInit
private const val SUMMARY_ALLOWED = "summaryAllowed"
+@PageView
@ScreenView(SCREEN_VIEW_EDIT_SYLLABUS)
class EditSyllabusFragment : MobiusFragment(), NavigationCallbacks {
@@ -41,6 +46,9 @@ class EditSyllabusFragment : MobiusFragment()
private val summaryAllowed: Boolean by BooleanArg(key = SUMMARY_ALLOWED)
+ @PageViewUrl
+ fun makePageViewUrl(): String = "${ApiPrefs.fullDomain}/courses/${course.id}/syllabus/edit"
+
override fun makeEffectHandler(): EffectHandler = EditSyllabusEffectHandler()
override fun makeUpdate(): UpdateInit = EditSyllabusUpdate()
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/ui/SyllabusRepositoryFragment.kt b/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/ui/SyllabusRepositoryFragment.kt
index ca6fca3fd8..52e35e3029 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/ui/SyllabusRepositoryFragment.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/features/syllabus/ui/SyllabusRepositoryFragment.kt
@@ -20,12 +20,14 @@ package com.instructure.teacher.features.syllabus.ui
import android.os.Bundle
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.models.Course
+import com.instructure.canvasapi2.utils.pageview.PageView
import com.instructure.pandautils.utils.Const
import com.instructure.pandautils.utils.withArgs
import com.instructure.teacher.features.syllabus.SyllabusRepository
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
+@PageView(url = "assignments/syllabus")
@AndroidEntryPoint
class SyllabusRepositoryFragment : SyllabusFragment() {
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/presenters/ToDoPresenter.kt b/apps/teacher/src/main/java/com/instructure/teacher/presenters/ToDoPresenter.kt
index 49057cb999..3ad0311985 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/presenters/ToDoPresenter.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/presenters/ToDoPresenter.kt
@@ -43,6 +43,7 @@ import com.instructure.canvasapi2.utils.weave.inParallel
import com.instructure.canvasapi2.utils.weave.tryWeave
import com.instructure.pandautils.blueprint.SyncPresenter
import com.instructure.pandautils.utils.AssignmentUtils2
+import com.instructure.pandautils.utils.Const
import com.instructure.teacher.events.ToDoListUpdatedEvent
import com.instructure.teacher.utils.getState
import com.instructure.teacher.viewinterface.ToDoView
@@ -111,19 +112,22 @@ class ToDoPresenter : SyncPresenter(ToDo::class.java) {
routeCalls = tryWeave {
viewCallback?.onRefreshStarted()
+ val parentAssignmentId = assignment.discussionTopicHeader?.assignmentId?.takeIf { it != 0L }
+ val effectiveAssignment = if (parentAssignmentId != null) assignment.copy(id = parentAssignmentId) else assignment
+
val unfilteredSubmissions: List
// Get the course
- val course = awaitApi { CourseManager.getCourse(courseId, it, true) }
+ val course = awaitApi { CourseManager.getCourse(courseId, it, true) }
val (gradeableStudents, enrollments, submissions) = awaitApis, List, List>(
- { AssignmentManager.getAllGradeableStudentsForAssignment(assignment.courseId, assignment.id, true, it) },
- { EnrollmentManager.getAllEnrollmentsForCourse(assignment.courseId, null, true, it) },
- { AssignmentManager.getAllSubmissionsForAssignment(assignment.courseId, assignment.id, true, it) }
+ { AssignmentManager.getAllGradeableStudentsForAssignment(effectiveAssignment.courseId, effectiveAssignment.id, true, it) },
+ { EnrollmentManager.getAllEnrollmentsForCourse(effectiveAssignment.courseId, null, true, it) },
+ { AssignmentManager.getAllSubmissionsForAssignment(effectiveAssignment.courseId, effectiveAssignment.id, true, it) }
)
val enrollmentMap = enrollments.associateBy { it.user?.id }
- val students = gradeableStudents.distinctBy { it.id }.map { enrollmentMap[it.id]?.user }.filterNotNull()
- if (assignment.groupCategoryId > 0 && !assignment.isGradeGroupsIndividually) {
- val groups = awaitApi> { CourseManager.getGroupsForCourse(assignment.courseId, it, false) }
- .filter { it.groupCategoryId == assignment.groupCategoryId }
+ val students = gradeableStudents.distinctBy { it.id }.mapNotNull { enrollmentMap[it.id]?.user }
+ if (effectiveAssignment.groupCategoryId > 0 && !effectiveAssignment.isGradeGroupsIndividually) {
+ val groups = awaitApi { CourseManager.getGroupsForCourse(effectiveAssignment.courseId, it, false) }
+ .filter { it.groupCategoryId == effectiveAssignment.groupCategoryId }
unfilteredSubmissions = makeGroupSubmissions(students, groups, submissions)
} else {
val submissionMap = submissions.associateBy { it.userId }
@@ -135,15 +139,16 @@ class ToDoPresenter : SyncPresenter(ToDo::class.java) {
// filter the submissions to just the ones that need grading
val filteredSubmissions = unfilteredSubmissions.filter {
it.submission?.let { submission ->
- assignment.getState(submission, true) in listOf(
+ effectiveAssignment.getState(submission, true) in listOf(
AssignmentUtils2.ASSIGNMENT_STATE_SUBMITTED,
AssignmentUtils2.ASSIGNMENT_STATE_SUBMITTED_LATE
) || !submission.isGradeMatchesCurrentSubmission
+ || submission.workflowState == Const.PENDING_REVIEW
} ?: false
}
viewCallback?.onRefreshFinished()
- viewCallback?.onRouteSuccessfully(course, assignment, filteredSubmissions)
+ viewCallback?.onRouteSuccessfully(course, effectiveAssignment, filteredSubmissions)
} catch {
viewCallback?.onRefreshFinished()
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/router/RouteResolver.kt b/apps/teacher/src/main/java/com/instructure/teacher/router/RouteResolver.kt
index 4c516842e7..9188b0745e 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/router/RouteResolver.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/router/RouteResolver.kt
@@ -23,6 +23,7 @@ import com.instructure.pandautils.features.lti.LtiLaunchFragment
import com.instructure.pandautils.features.notification.preferences.EmailNotificationPreferencesFragment
import com.instructure.pandautils.features.notification.preferences.PushNotificationPreferencesFragment
import com.instructure.pandautils.features.settings.SettingsFragment
+import com.instructure.pandautils.features.privacysettings.PrivacySettingsFragment
import com.instructure.pandautils.features.settings.inboxsignature.InboxSignatureFragment
import com.instructure.pandautils.features.speedgrader.SpeedGraderFragment
import com.instructure.pandautils.fragments.HtmlContentFragment
@@ -234,6 +235,8 @@ object RouteResolver {
fragment = CreateUpdateEventFragment.newInstance(route)
} else if (InboxSignatureFragment::class.java.isAssignableFrom(cls)) {
fragment = InboxSignatureFragment()
+ } else if (PrivacySettingsFragment::class.java.isAssignableFrom(cls)) {
+ fragment = PrivacySettingsFragment.newInstance(route)
} else if (ModuleProgressionFragment::class.java.isAssignableFrom(cls)) {
fragment = ModuleProgressionFragment.newInstance(route.copy(canvasContext = canvasContext))
} else if (CustomizeDashboardFragment::class.java.isAssignableFrom(cls)) {
diff --git a/apps/teacher/src/main/java/com/instructure/teacher/utils/AppManager.kt b/apps/teacher/src/main/java/com/instructure/teacher/utils/AppManager.kt
index a368901231..ffd0766b97 100644
--- a/apps/teacher/src/main/java/com/instructure/teacher/utils/AppManager.kt
+++ b/apps/teacher/src/main/java/com/instructure/teacher/utils/AppManager.kt
@@ -21,11 +21,10 @@ import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkerFactory
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.pandautils.analytics.pageview.PageViewUploadWorker
import com.instructure.pandautils.features.reminder.AlarmScheduler
-import com.instructure.teacher.BuildConfig
import dagger.hilt.android.HiltAndroidApp
-import sdk.pendo.io.Pendo
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@@ -47,8 +46,9 @@ class AppManager : BaseAppManager() {
override fun onCreate() {
super.onCreate()
- schedulePandataUpload()
- initPendo()
+ if (ConsentPrefs.currentUserConsent == true) {
+ schedulePandataUpload()
+ }
}
private fun schedulePandataUpload() {
@@ -57,8 +57,4 @@ class AppManager : BaseAppManager() {
workManager.enqueueUniquePeriodicWork("pageView-teacher", ExistingPeriodicWorkPolicy.KEEP, workRequest)
}
- private fun initPendo() {
- val options = Pendo.PendoOptions.Builder().setJetpackComposeBeta(true).build()
- Pendo.setup(this, BuildConfig.PENDO_TOKEN, options, null)
- }
}
diff --git a/apps/teacher/src/main/res/values-fr-rCA/strings.xml b/apps/teacher/src/main/res/values-fr-rCA/strings.xml
index 73ce00652c..e677e38f61 100644
--- a/apps/teacher/src/main/res/values-fr-rCA/strings.xml
+++ b/apps/teacher/src/main/res/values-fr-rCA/strings.xml
@@ -31,6 +31,7 @@
Participation
Pages
À faire
+ À faire
Logo de l\'école
Chercher les guides de Canvas
Guides de Canvas
@@ -842,6 +843,7 @@
Rien de plus à faire!\n Profitez de votre journée.
Il n\'y a aucun envoi à noter pour ce travail.
Une erreur s\'est produite en essayant de voir cet élément À faire.
+ Une erreur s’est produite lors de la tentative d’affichage de cette tâche à faire.
L’inscription du concepteur ne peut pas voir ceci.
Sections
diff --git a/apps/teacher/src/test/java/com/instructure/teacher/features/dashboard/widget/courses/TeacherCoursesWidgetBehaviorTest.kt b/apps/teacher/src/test/java/com/instructure/teacher/features/dashboard/widget/courses/TeacherCoursesWidgetBehaviorTest.kt
deleted file mode 100644
index f09b0e8cef..0000000000
--- a/apps/teacher/src/test/java/com/instructure/teacher/features/dashboard/widget/courses/TeacherCoursesWidgetBehaviorTest.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.teacher.features.dashboard.widget.courses
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.canvasapi2.models.Course
-import com.instructure.canvasapi2.models.Group
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetRouter
-import io.mockk.mockk
-import io.mockk.unmockkAll
-import io.mockk.verify
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-
-class TeacherCoursesWidgetBehaviorTest {
-
- private val router: CoursesWidgetRouter = mockk(relaxed = true)
-
- private lateinit var behavior: TeacherCoursesWidgetBehavior
-
- @Before
- fun setup() {
- behavior = TeacherCoursesWidgetBehavior(router = router)
- }
-
- @After
- fun teardown() {
- unmockkAll()
- }
-
- @Test
- fun `onCourseClick delegates to router`() {
- val activity: FragmentActivity = mockk()
- val course = Course(id = 1, name = "Test Course")
-
- behavior.onCourseClick(activity, course)
-
- verify { router.routeToCourse(activity, course) }
- }
-
- @Test
- fun `onGroupClick delegates to router`() {
- val activity: FragmentActivity = mockk()
- val group = Group(id = 1, name = "Test Group")
-
- behavior.onGroupClick(activity, group)
-
- verify { router.routeToGroup(activity, group) }
- }
-
- @Test
- fun `onAllCoursesClicked delegates to router`() {
- val activity: FragmentActivity = mockk()
-
- behavior.onAllCoursesClicked(activity)
-
- verify { router.routeToAllCourses(activity) }
- }
-}
\ No newline at end of file
diff --git a/apps/teacher/src/test/java/com/instructure/teacher/features/dashboard/widget/todo/TeacherTodoWidgetBehaviorTest.kt b/apps/teacher/src/test/java/com/instructure/teacher/features/dashboard/widget/todo/TeacherTodoWidgetBehaviorTest.kt
deleted file mode 100644
index 7a6c304f7d..0000000000
--- a/apps/teacher/src/test/java/com/instructure/teacher/features/dashboard/widget/todo/TeacherTodoWidgetBehaviorTest.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2025 - present Instructure, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.instructure.teacher.features.dashboard.widget.todo
-
-import androidx.fragment.app.FragmentActivity
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
-import io.mockk.mockk
-import io.mockk.unmockkAll
-import io.mockk.verify
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-
-class TeacherTodoWidgetBehaviorTest {
-
- private val router: TodoWidgetRouter = mockk(relaxed = true)
- private lateinit var behavior: TeacherTodoWidgetBehavior
-
- @Before
- fun setup() {
- behavior = TeacherTodoWidgetBehavior(router)
- }
-
- @After
- fun teardown() {
- unmockkAll()
- }
-
- @Test
- fun `onTodoClick routes to todo with correct URL`() {
- val activity = mockk()
- val htmlUrl = "https://instructure.com/courses/123/assignments/456"
-
- behavior.onTodoClick(activity, htmlUrl)
-
- verify { router.routeToTodo(activity, htmlUrl) }
- }
-
- @Test
- fun `onTodoClick routes to todo with different URLs`() {
- val activity = mockk()
- val url1 = "https://instructure.com/courses/111/quizzes/222"
- val url2 = "https://instructure.com/courses/333/discussion_topics/444"
-
- behavior.onTodoClick(activity, url1)
- behavior.onTodoClick(activity, url2)
-
- verify { router.routeToTodo(activity, url1) }
- verify { router.routeToTodo(activity, url2) }
- }
-
- @Test
- fun `onAddTodoClick routes to create todo with initial date`() {
- val activity = mockk()
- val initialDateString = "2025-02-15"
-
- behavior.onAddTodoClick(activity, initialDateString)
-
- verify { router.routeToCreateTodo(activity, initialDateString) }
- }
-
- @Test
- fun `onAddTodoClick routes to create todo without initial date`() {
- val activity = mockk()
-
- behavior.onAddTodoClick(activity, null)
-
- verify { router.routeToCreateTodo(activity, null) }
- }
-
- @Test
- fun `onAddTodoClick routes to create todo with different dates`() {
- val activity = mockk()
- val date1 = "2025-01-01"
- val date2 = "2025-12-31"
-
- behavior.onAddTodoClick(activity, date1)
- behavior.onAddTodoClick(activity, date2)
-
- verify { router.routeToCreateTodo(activity, date1) }
- verify { router.routeToCreateTodo(activity, date2) }
- }
-
- @Test
- fun `updateWidget does not throw exception`() {
- // The method is not yet implemented but should not throw
- behavior.updateWidget(forceRefresh = true)
- behavior.updateWidget(forceRefresh = false)
- behavior.updateWidget()
- }
-}
\ No newline at end of file
diff --git a/automation/dataseedingapi/build.gradle b/automation/dataseedingapi/build.gradle
index dac54400d7..d224a0a432 100644
--- a/automation/dataseedingapi/build.gradle
+++ b/automation/dataseedingapi/build.gradle
@@ -2,8 +2,10 @@ apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'com.apollographql.apollo'
-sourceCompatibility = JavaVersion.VERSION_17
-targetCompatibility = JavaVersion.VERSION_17
+java {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+}
buildscript {
repositories {
diff --git a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/AssignmentsApi.kt b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/AssignmentsApi.kt
index ce3e036a2d..d2c53ef441 100644
--- a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/AssignmentsApi.kt
+++ b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/AssignmentsApi.kt
@@ -1,20 +1,18 @@
-//
-// Copyright (C) 2018-present Instructure, Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-
+/*
+ * Copyright (C) 2018 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.instructure.dataseeding.api
import com.instructure.dataseeding.model.AssignmentApiModel
@@ -28,6 +26,7 @@ import com.instructure.dataseeding.util.CanvasNetworkAdapter
import com.instructure.dataseeding.util.Randomizer
import retrofit2.Call
import retrofit2.http.Body
+import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
@@ -39,11 +38,31 @@ object AssignmentsApi {
@POST("courses/{courseId}/assignments/{assignmentId}/overrides")
fun createAssignmentOverride(@Path("courseId") courseId: Long, @Path("assignmentId") assignmentId: Long, @Body createAssignmentOverride: CreateAssignmentOverrideForStudentsWrapper): Call
+
+ @GET("courses/{courseId}/assignments/{assignmentId}")
+ fun getAssignment(@Path("courseId") courseId: Long, @Path("assignmentId") assignmentId: Long): Call
+
+ @GET("courses/{courseId}/assignments?include[]=sub_assignments")
+ fun listAssignments(@Path("courseId") courseId: Long): Call>
}
private fun assignmentsService(token: String): AssignmentsService
= CanvasNetworkAdapter.retrofitWithToken(token).create(AssignmentsService::class.java)
+ fun listAssignments(courseId: Long, teacherToken: String): List {
+ return assignmentsService(teacherToken)
+ .listAssignments(courseId)
+ .execute()
+ .body()!!
+ }
+
+ fun getAssignment(courseId: Long, assignmentId: Long, teacherToken: String): AssignmentApiModel {
+ return assignmentsService(teacherToken)
+ .getAssignment(courseId, assignmentId)
+ .execute()
+ .body()!!
+ }
+
data class CreateAssignmentRequest(
val courseId: Long,
val withDescription: Boolean = false,
diff --git a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/RubricsApi.kt b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/RubricsApi.kt
new file mode 100644
index 0000000000..03909c919f
--- /dev/null
+++ b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/RubricsApi.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.instructure.dataseeding.api
+
+import com.instructure.dataseeding.model.CreateRubricModel
+import com.instructure.dataseeding.model.CreateRubricWrapper
+import com.instructure.dataseeding.model.RubricApiModel
+import com.instructure.dataseeding.model.RubricAssociationModel
+import com.instructure.dataseeding.model.RubricCriterion
+import com.instructure.dataseeding.model.RubricCriterionApiModel
+import com.instructure.dataseeding.model.RubricCriterionRatingApiModel
+import com.instructure.dataseeding.util.CanvasNetworkAdapter
+import retrofit2.Call
+import retrofit2.http.Body
+import retrofit2.http.POST
+import retrofit2.http.Path
+
+object RubricsApi {
+
+ interface RubricsService {
+ @POST("courses/{courseId}/rubrics")
+ fun createRubric(
+ @Path("courseId") courseId: Long,
+ @Body createRubricWrapper: CreateRubricWrapper
+ ): Call
+ }
+
+ private fun rubricsService(token: String): RubricsService =
+ CanvasNetworkAdapter.retrofitWithToken(token).create(RubricsService::class.java)
+
+ fun createAssignmentWithRubric(
+ courseId: Long,
+ assignmentId: Long,
+ teacherToken: String,
+ title: String = "Test Rubric",
+ criteria: List
+ ): RubricApiModel {
+ val criteriaMap = criteria.mapIndexed { index, criterion ->
+ index.toString() to RubricCriterionApiModel(
+ description = criterion.description,
+ points = criterion.points,
+ longDescription = criterion.longDescription,
+ ratings = criterion.ratings.mapIndexed { ratingIndex, rating ->
+ ratingIndex.toString() to RubricCriterionRatingApiModel(
+ description = rating.description,
+ points = rating.points,
+ longDescription = rating.longDescription
+ )
+ }.toMap()
+ )
+ }.toMap()
+
+ val wrapper = CreateRubricWrapper(
+ rubric = CreateRubricModel(title = title, criteria = criteriaMap),
+ rubricAssociation = RubricAssociationModel(associationId = assignmentId)
+ )
+
+ return rubricsService(teacherToken)
+ .createRubric(courseId, wrapper)
+ .execute()
+ .body()!!
+ }
+}
\ No newline at end of file
diff --git a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/SubmissionsApi.kt b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/SubmissionsApi.kt
index 67066c6ab8..6ddb3b1ac2 100644
--- a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/SubmissionsApi.kt
+++ b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/api/SubmissionsApi.kt
@@ -1,20 +1,18 @@
-//
-// Copyright (C) 2018-present Instructure, Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-
+/*
+ * Copyright (C) 2018 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.instructure.dataseeding.api
import com.instructure.dataseeding.model.AssignmentApiModel
@@ -23,6 +21,7 @@ import com.instructure.dataseeding.model.CreateSubmissionCommentWrapper
import com.instructure.dataseeding.model.FileType
import com.instructure.dataseeding.model.GradeSubmission
import com.instructure.dataseeding.model.GradeSubmissionWrapper
+import com.instructure.dataseeding.model.RubricAssessmentEntry
import com.instructure.dataseeding.model.SubmissionApiModel
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.model.SubmitCourseAssignmentSubmissionWrapper
@@ -35,6 +34,7 @@ import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Path
+import retrofit2.http.Query
object SubmissionsApi {
interface SubmissionsService {
@@ -63,7 +63,8 @@ object SubmissionsApi {
@Path("courseId") courseId: Long,
@Path("assignmentId") assignmentId: Long,
@Path("studentId") studentId: Long,
- @Body gradeSubmission: GradeSubmissionWrapper
+ @Body gradeSubmission: GradeSubmissionWrapper,
+ @Query("sub_assignment_tag") subAssignmentTag: String? = null
): Call
}
@@ -116,14 +117,33 @@ object SubmissionsApi {
studentId: Long,
excused: Boolean = false,
postedGrade: String? = null,
- customGradeStatusId: String? = null): SubmissionApiModel {
+ customGradeStatusId: String? = null,
+ subAssignmentTag: String? = null): SubmissionApiModel {
return submissionsService(teacherToken)
- .gradeSubmission(courseId, assignmentId, studentId, GradeSubmissionWrapper(GradeSubmission(postedGrade, excused, customGradeStatusId)))
+ .gradeSubmission(courseId, assignmentId, studentId, GradeSubmissionWrapper(GradeSubmission(postedGrade, excused, customGradeStatusId)), subAssignmentTag)
.execute()
.body()!!
}
+ fun gradeSubmissionWithRubric(
+ teacherToken: String,
+ courseId: Long,
+ assignmentId: Long,
+ studentId: Long,
+ rubricAssessment: Map
+ ): SubmissionApiModel {
+ return submissionsService(teacherToken)
+ .gradeSubmission(courseId, assignmentId, studentId,
+ GradeSubmissionWrapper(
+ submission = GradeSubmission(excused = false),
+ rubricAssessment = rubricAssessment
+ )
+ )
+ .execute()
+ .body()!!
+ }
+
//
//
// Seeding support
diff --git a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/AssignmentApiModel.kt b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/AssignmentApiModel.kt
index c15bce1dea..ca1b72b13f 100644
--- a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/AssignmentApiModel.kt
+++ b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/AssignmentApiModel.kt
@@ -1,21 +1,18 @@
-//
-// Copyright (C) 2018-present Instructure, Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-
-
+/*
+ * Copyright (C) 2018 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.instructure.dataseeding.model
import com.google.gson.annotations.SerializedName
@@ -76,7 +73,10 @@ data class AssignmentApiModel (
@SerializedName("allowed_extensions")
val allowedExtensions: List? = null,
@SerializedName("attempt")
- val attempt: Int? = null
+ val attempt: Int? = null,
+ val rubric: List? = null,
+ @SerializedName("sub_assignment_tag")
+ val subAssignmentTag: String? = null
)
// region AssignmentOverrides
diff --git a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/RubricApiModel.kt b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/RubricApiModel.kt
new file mode 100644
index 0000000000..ef67e76e98
--- /dev/null
+++ b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/RubricApiModel.kt
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.instructure.dataseeding.model
+
+import com.google.gson.annotations.SerializedName
+
+data class RubricCriterionRating(
+ val id: String? = null,
+ val description: String,
+ val points: Double,
+ val longDescription: String? = null
+)
+
+data class RubricCriterion(
+ val id: String? = null,
+ val description: String,
+ val points: Double,
+ val ratings: List,
+ val longDescription: String? = null
+)
+
+data class RubricCriterionRatingApiModel(
+ val description: String,
+ val points: Double,
+ @SerializedName("long_description")
+ val longDescription: String? = null
+)
+
+data class RubricCriterionApiModel(
+ val description: String,
+ val points: Double,
+ val ratings: Map,
+ @SerializedName("long_description")
+ val longDescription: String? = null
+)
+
+data class CreateRubricModel(
+ val title: String,
+ val criteria: Map
+)
+
+data class RubricAssociationModel(
+ @SerializedName("association_id")
+ val associationId: Long,
+ @SerializedName("association_type")
+ val associationType: String = "Assignment",
+ val purpose: String = "grading"
+)
+
+data class CreateRubricWrapper(
+ val rubric: CreateRubricModel,
+ @SerializedName("rubric_association")
+ val rubricAssociation: RubricAssociationModel
+)
+
+data class RubricRatingResponseModel(
+ val id: String,
+ val description: String,
+ val points: Double
+)
+
+data class RubricCriterionResponseModel(
+ val id: String,
+ val description: String,
+ val ratings: List = emptyList()
+)
+
+data class RubricApiModel(
+ val id: Long,
+ val title: String? = null,
+ @SerializedName("rubric_id")
+ val rubricId: Long? = null,
+ @SerializedName("data")
+ val criteria: List = emptyList()
+)
\ No newline at end of file
diff --git a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/SubmissionApiModel.kt b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/SubmissionApiModel.kt
index ee2272ad31..3734370d26 100644
--- a/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/SubmissionApiModel.kt
+++ b/automation/dataseedingapi/src/main/kotlin/com/instructure/dataseeding/model/SubmissionApiModel.kt
@@ -85,5 +85,13 @@ data class GradeSubmission(
)
data class GradeSubmissionWrapper(
- val submission: GradeSubmission
+ val submission: GradeSubmission,
+ @SerializedName("rubric_assessment")
+ val rubricAssessment: Map? = null
+)
+
+data class RubricAssessmentEntry(
+ val points: Double,
+ @SerializedName("rating_id")
+ val ratingId: String? = null
)
diff --git a/automation/espresso/build.gradle b/automation/espresso/build.gradle
index fa52d7bd6a..09d9be4a49 100644
--- a/automation/espresso/build.gradle
+++ b/automation/espresso/build.gradle
@@ -187,6 +187,8 @@ dependencies {
implementation Libs.ANDROIDX_WORK_MANAGER
implementation Libs.ANDROIDX_WORK_MANAGER_KTX
+
+ implementation Libs.MLKIT_DOCUMENT_SCANNER
}
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/StringConstants.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/StringConstants.kt
index c1796aa75c..6bbe193e8f 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/StringConstants.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/StringConstants.kt
@@ -36,8 +36,8 @@ object StringConstants {
const val REPORT_PROBLEM_TITLE = "Report a Problem"
const val REPORT_PROBLEM_SUBTITLE = "If Canvas misbehaves, tell us about it."
- const val SUBMIT_FEATURE_TITLE = "Submit a Feature Idea"
- const val SUBMIT_FEATURE_SUBTITLE = "Have an idea to improve Canvas?"
+ const val SHARE_A_CONTRIBUTION_TITLE = "Share a Contribution"
+ const val SHARE_A_CONTRIBUTION_SUBTITLE = "Have a suggestion for Instructure's product roadmap?"
const val SHARE_LOVE_TITLE = "Share Your Love for the App"
const val SHARE_LOVE_SUBTITLE = "Tell us about your favorite parts of the app"
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/TestMetaData.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/TestMetaData.kt
index f0243b3ee6..ee262559cc 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/TestMetaData.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/TestMetaData.kt
@@ -34,7 +34,7 @@ enum class FeatureCategory {
ASSIGNMENTS, SUBMISSIONS, LOGIN, COURSE, DASHBOARD, GROUPS, SETTINGS, PAGES, DISCUSSIONS, MODULES, CALENDAR,
INBOX, GRADES, FILES, EVENTS, PEOPLE, CONFERENCES, COLLABORATIONS, SYLLABUS, TODOS, QUIZZES, NOTIFICATIONS,
ANNOTATIONS, ANNOUNCEMENTS, COMMENTS, BOOKMARKS, NONE, CANVAS_FOR_ELEMENTARY, SPEED_GRADER, SYNC_SETTINGS, SYNC_PROGRESS, OFFLINE_CONTENT, LEFT_SIDE_MENU,
- COURSE_LIST, MANAGE_STUDENTS, COURSE_BROWSER, ALERTS, ACCOUNT_CREATION, COURSE_DETAILS, CUSTOM_STATUSES, DIFFERENTIATION_TAGS
+ COURSE_LIST, MANAGE_STUDENTS, COURSE_BROWSER, ALERTS, ACCOUNT_CREATION, COURSE_DETAILS, CUSTOM_STATUSES, DIFFERENTIATION_TAGS, RUBRICS
}
enum class SecondaryFeatureCategory {
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt
index 806f1af8c7..99e7b61a25 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt
@@ -27,7 +27,7 @@ import com.instructure.canvas.espresso.mockcanvas.addConversation
import com.instructure.canvas.espresso.mockcanvas.addConversations
import com.instructure.canvas.espresso.mockcanvas.addConversationsToCourseMap
import com.instructure.canvas.espresso.mockcanvas.createBasicConversation
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.User
import org.junit.Test
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt
index 7dad3c720a..d25ade5efb 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt
@@ -41,10 +41,10 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.stringContainsTextCaseInsensitive
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
-import com.instructure.canvas.espresso.withResourceIdContaining
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.stringContainsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.withResourceIdContaining
import com.instructure.canvasapi2.models.Assignment
import com.instructure.dataseeding.model.AssignmentApiModel
import com.instructure.espresso.ModuleItemInteractions
@@ -175,7 +175,7 @@ open class AssignmentDetailsPage(val moduleItemInteractions: ModuleItemInteracti
onView(withId(R.id.gradeCell)).scrollTo().click()
}
- fun assertSubmissionAndRubricLabel() {
+ fun assertSubmissionAndFeedbackLabel() {
onView(allOf(withId(R.id.submissionAndRubricLabel), withText(R.string.submissionAndFeedback))).assertDisplayed()
}
@@ -266,6 +266,10 @@ open class AssignmentDetailsPage(val moduleItemInteractions: ModuleItemInteracti
}
fun assertSubmissionTypeDisplayed(submissionType: String) {
+ onView(anyOf(withText(submissionType) + withAncestor(R.id.customPanel), withId(R.id.submissionTypesTextView) + withText(submissionType))).scrollTo().assertDisplayed()
+ }
+
+ fun assertSubmissionOptionDisplayed(submissionType: String) {
onView(anyOf(withText(submissionType) + withAncestor(R.id.customPanel), withId(R.id.submissionTypesTextView) + withText(submissionType))).assertDisplayed()
}
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt
index 9867a17115..960b225de4 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt
@@ -43,7 +43,7 @@ import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.espresso.matcher.ViewMatchers.withClassName
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.withIndex
+import com.instructure.canvas.espresso.utils.withIndex
import com.instructure.espresso.click
import com.instructure.espresso.matchers.WaitForViewMatcher.waitForView
import com.instructure.espresso.scrollTo
@@ -80,6 +80,7 @@ class AssignmentReminderPage(private val composeTestRule: ComposeTestRule) {
fun clickAddReminder() {
composeTestRule.onNodeWithContentDescription(reminderAdd).performClick()
+ composeTestRule.waitForIdle()
}
fun assertReminderDisplayedWithText(text: String) {
@@ -92,6 +93,7 @@ class AssignmentReminderPage(private val composeTestRule: ComposeTestRule) {
hasAnySibling(hasText(text))
)
).performClick()
+ composeTestRule.waitForIdle()
Thread.sleep(1000)
onView(withText(R.string.yes)).scrollTo().click()
}
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt
index 23a00caede..3c54dcf371 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt
@@ -22,7 +22,7 @@ import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withChild
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.WaitForViewWithId
import com.instructure.espresso.assertDisplayed
@@ -43,6 +43,7 @@ class FileChooserPage : BasePage() {
private val cameraButton by OnViewWithId(R.id.fromCamera)
private val galleryButton by OnViewWithId(R.id.fromGallery)
private val deviceButton by OnViewWithId(R.id.fromDevice)
+ private val scannerButton by OnViewWithId(R.id.fromScanner)
private val chooseFileTitle by OnViewWithId(R.id.chooseFileTitle)
private val chooseFileSubtitle by OnViewWithId(R.id.chooseFileSubtitle)
private val fileChooserTitle by WaitForViewWithId(R.id.alertTitle)
@@ -67,6 +68,10 @@ class FileChooserPage : BasePage() {
deviceButton.scrollTo().click()
}
+ fun chooseScanner() {
+ scannerButton.scrollTo().click()
+ }
+
fun clickOkay() {
onView(withText(R.string.okay)).click()
triggerWorkManagerJobs("FileUploadWorker")
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt
index 7b991c195e..5a1e01466e 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt
@@ -26,9 +26,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
-import com.instructure.canvas.espresso.refresh
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.waitForMatcherWithRefreshes
+import com.instructure.canvas.espresso.utils.refresh
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.waitForMatcherWithRefreshes
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
import com.instructure.espresso.OnViewWithId
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt
index abf0a235ee..9fb5fbb27d 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt
@@ -19,12 +19,12 @@ package com.instructure.canvas.espresso.common.pages
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withParent
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithId
-import com.instructure.pandautils.R
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
+import com.instructure.pandautils.R
import org.hamcrest.Matchers.allOf
/**
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt
index fe63eb0241..37a9057f2d 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt
@@ -16,7 +16,7 @@
*/
package com.instructure.canvas.espresso.common.pages
-import com.instructure.canvas.espresso.getHintText
+import com.instructure.canvas.espresso.utils.getHintText
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt
index 6669521d8f..f353118269 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt
@@ -41,7 +41,7 @@ import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Assignment
import com.instructure.dataseeding.model.AssignmentApiModel
import com.instructure.dataseeding.model.QuizApiModel
@@ -63,6 +63,7 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
composeTestRule.onNodeWithText(assignment.name)
.performClick()
+ composeTestRule.waitForIdle()
}
fun clickAssignment(assignment: Assignment) {
@@ -91,6 +92,7 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
composeTestRule.onNodeWithText(quiz.title)
.performClick()
+ composeTestRule.waitForIdle()
}
fun assertDisplaysNoAssignmentsView() {
@@ -119,6 +121,10 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
assertHasAssignmentCommon(assignmentName, dueAtString, dueAtStringSecondCheckpoint, expectedGrade, hasCheckPoints = true)
}
+ fun assertHasAssignment(assignmentName: String, dueAtString: String, expectedGrade: String? = null) {
+ assertHasAssignmentCommon(assignmentName, dueAtString, expectedGradeLabel = expectedGrade)
+ }
+
fun assertAssignmentNotDisplayed(assignmentName: String) {
onView(withText(assignmentName) + withId(R.id.title) + hasSibling(withId(R.id.description))).check(
doesNotExist()
@@ -143,6 +149,7 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
)
.performScrollTo()
.performClick()
+ composeTestRule.waitForIdle()
}
fun clickDiscussionCheckpointExpandCollapseIcon(discussionTitle: String) {
@@ -264,32 +271,35 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
fun assertGradingPeriodLabel(gradingPeriodName: String? = null) {
composeTestRule.onNode(
- hasText("Grading Period:").and(hasParent(hasAnyDescendant(hasText(gradingPeriodName ?: "All"))))
+ hasContentDescription("Grading Period: ${gradingPeriodName ?: "All"}")
)
.assertIsDisplayed()
}
fun assertGradingPeriodLabelDoesNotExist(gradingPeriodName: String? = null) {
composeTestRule.onNode(
- hasText("Grading Period:").and(hasParent(hasAnyDescendant(hasText(gradingPeriodName ?: "All"))))
+ hasContentDescription("Grading Period: ${gradingPeriodName ?: "All"}")
)
.assertDoesNotExistWithTimeout(5)
}
private fun clickFilterMenu() {
composeTestRule.onNodeWithContentDescription("Filter Assignments").performClick()
+ composeTestRule.waitForIdle()
}
fun filterAssignments(groupName: String, option: FilterOption) {
clickFilterMenu()
selectFilterOption(groupName, option)
composeTestRule.onNodeWithText("Done").performClick()
+ composeTestRule.waitForIdle()
}
fun groupByAssignments(option: GroupByOption) {
clickFilterMenu()
selectGroupByOption("Grouped By", option)
composeTestRule.onNodeWithText("Done").performClick()
+ composeTestRule.waitForIdle()
}
fun assertPublishedState(assignmentName: String, published: Boolean) {
@@ -322,7 +332,9 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
hasText(filterText).and(hasParent(hasParent(hasAnyDescendant(hasText(groupName))))),
useUnmergedTree = true
)
- .performClick()
+ .performScrollTo()
+ .performClick()
+ composeTestRule.waitForIdle()
}
private fun selectGroupByOption(groupName: String, option: GroupByOption) {
@@ -336,6 +348,7 @@ class AssignmentListPage(private val composeTestRule: ComposeTestRule) {
useUnmergedTree = true
)
.performClick()
+ composeTestRule.waitForIdle()
}
private fun String?.toDate(): Date? {
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/GradesPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/GradesPage.kt
index 0bb16d3be5..1c406acc7d 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/GradesPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/GradesPage.kt
@@ -14,7 +14,6 @@
* along with this program. If not, see .
*
*/
-
package com.instructure.canvas.espresso.common.pages.compose
import androidx.compose.ui.test.assertCountEquals
@@ -55,6 +54,7 @@ class GradesPage(private val composeTestRule: ComposeTestRule) {
.performScrollToNode(hasText(name))
composeTestRule.onNodeWithText(name)
.performClick()
+ composeTestRule.waitForIdle()
}
fun assertAssignmentIsDisplayed(name: String) {
@@ -93,6 +93,7 @@ class GradesPage(private val composeTestRule: ComposeTestRule) {
fun clickFilterButton() {
composeTestRule.onNodeWithContentDescription("Filter")
.performClick()
+ composeTestRule.waitForIdle()
}
fun assertFilterNotApplied() {
@@ -106,11 +107,13 @@ class GradesPage(private val composeTestRule: ComposeTestRule) {
fun clickFilterOption(option: String) {
composeTestRule.onNodeWithText(option)
.performClick()
+ composeTestRule.waitForIdle()
}
fun clickSaveButton() {
composeTestRule.onNodeWithText("Save")
.performClick()
+ composeTestRule.waitForIdle()
}
fun clickAssignment(name: String) {
@@ -118,6 +121,7 @@ class GradesPage(private val composeTestRule: ComposeTestRule) {
.performScrollToNode(hasText(name))
composeTestRule.onNodeWithText(name)
.performClick()
+ composeTestRule.waitForIdle()
}
fun assertEmptyStateIsDisplayed() {
@@ -129,11 +133,13 @@ class GradesPage(private val composeTestRule: ComposeTestRule) {
fun scrollDownScreen() {
composeTestRule.onNodeWithTag("gradesList")
.performTouchInput { swipeUp() }
+ composeTestRule.waitForIdle()
}
fun scrollUpScreen() {
composeTestRule.onNodeWithTag("gradesList")
.performTouchInput { swipeDown() }
+ composeTestRule.waitForIdle()
}
fun assertCardText(text: String) {
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt
index 3883e73d2d..f8f3d22416 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt
@@ -35,7 +35,7 @@ import androidx.compose.ui.test.onParent
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo
import androidx.test.espresso.Espresso.onView
-import com.instructure.canvas.espresso.withResourceIdContaining
+import com.instructure.canvas.espresso.utils.withResourceIdContaining
import com.instructure.canvasapi2.models.Conversation
import com.instructure.espresso.assertDisplayed
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/SearchableToolbar.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/SearchableToolbar.kt
index 4db918aeda..59cd8d1c0a 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/SearchableToolbar.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/SearchableToolbar.kt
@@ -18,29 +18,33 @@ package com.instructure.canvas.espresso.common.pages.compose
import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onAllNodesWithTag
-import androidx.compose.ui.test.onFirst
+import androidx.compose.ui.test.onLast
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextReplacement
class SearchableToolbar(private val composeTestRule: ComposeTestRule) {
fun clickOnSearchButton() {
- composeTestRule.onAllNodesWithTag("searchButton").onFirst()
+ composeTestRule.onAllNodesWithTag("searchButton").onLast()
.performClick()
+ composeTestRule.waitForIdle()
}
fun typeToSearchBar(textToType: String) {
- composeTestRule.onAllNodesWithTag("searchField").onFirst()
+ composeTestRule.onAllNodesWithTag("searchField").onLast()
.performClick()
.performTextReplacement(textToType)
+ composeTestRule.waitForIdle()
}
fun clickOnClearSearchButton() {
- composeTestRule.onAllNodesWithTag("clearButton").onFirst()
+ composeTestRule.onAllNodesWithTag("clearButton").onLast()
.performClick()
+ composeTestRule.waitForIdle()
}
fun pressSearchBarButton() {
- composeTestRule.onAllNodesWithTag("closeButton").onFirst()
+ composeTestRule.onAllNodesWithTag("closeButton").onLast()
.performClick()
+ composeTestRule.waitForIdle()
}
}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/MockCanvas.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/MockCanvas.kt
index a6fab26a07..8dd5d0db76 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/MockCanvas.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/MockCanvas.kt
@@ -74,7 +74,6 @@ import com.instructure.canvasapi2.models.QuizSubmissionAnswer
import com.instructure.canvasapi2.models.QuizSubmissionQuestion
import com.instructure.canvasapi2.models.Recipient
import com.instructure.canvasapi2.models.RemoteFile
-import com.instructure.canvasapi2.models.RubricCriterion
import com.instructure.canvasapi2.models.ScheduleItem
import com.instructure.canvasapi2.models.Section
import com.instructure.canvasapi2.models.StreamItem
@@ -93,6 +92,7 @@ import com.instructure.canvasapi2.type.EnrollmentType
import com.instructure.canvasapi2.utils.APIHelper
import com.instructure.canvasapi2.utils.toApiString
import com.instructure.canvasapi2.utils.toDate
+import com.instructure.dataseeding.model.RubricCriterion
import okhttp3.mockwebserver.Dispatcher
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
@@ -103,6 +103,8 @@ import java.util.Date
import java.util.GregorianCalendar
import java.util.UUID
import kotlin.random.Random
+import com.instructure.canvasapi2.models.RubricCriterion as CanvasRubricCriterion
+import com.instructure.canvasapi2.models.RubricCriterionRating as CanvasRubricCriterionRating
class MockCanvas {
/** Fake domain */
@@ -2061,8 +2063,20 @@ fun MockCanvas.addRubricToAssignment(assignmentId: Long, criteria : List
+ CanvasRubricCriterion(
+ id = criterion.id,
+ description = criterion.description,
+ longDescription = criterion.longDescription,
+ points = criterion.points,
+ ratings = criterion.ratings.map { rating ->
+ CanvasRubricCriterionRating(id = rating.id, description = rating.description, longDescription = rating.longDescription, points = rating.points)
+ }.toMutableList()
+ )
+ }
+
// Create a modified assignment with rubric info
- val newAssignment = assignment.copy(rubric = criteria, isUseRubricForGrading = true)
+ val newAssignment = assignment.copy(rubric = canvasCriteria, isUseRubricForGrading = true)
// Replace the old assignment with the modified assignment in assignments hash
assignments[assignmentId] = newAssignment
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeDashboardCoursesManager.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeDashboardCoursesManager.kt
new file mode 100644
index 0000000000..b328166280
--- /dev/null
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeDashboardCoursesManager.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.canvas.espresso.mockcanvas.fakes
+
+import com.instructure.canvasapi2.CourseAnnouncementsQuery
+import com.instructure.canvasapi2.DashboardCoursesQuery
+import com.instructure.canvasapi2.DashboardSingleCourseQuery
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
+
+class FakeDashboardCoursesManager : DashboardCoursesManager {
+
+ override suspend fun getDashboardCourses(
+ forceNetwork: Boolean
+ ): DashboardCoursesQuery.Data {
+ return DashboardCoursesQuery.Data(allCourses = emptyList())
+ }
+
+ override suspend fun getSingleCourse(
+ courseId: Long,
+ forceNetwork: Boolean
+ ): DashboardSingleCourseQuery.Data {
+ return DashboardSingleCourseQuery.Data(course = null)
+ }
+
+ override suspend fun getCourseAnnouncements(
+ courseId: Long,
+ cursor: String?,
+ forceNetwork: Boolean
+ ): CourseAnnouncementsQuery.Data {
+ return CourseAnnouncementsQuery.Data(course = null)
+ }
+}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeDocumentScannerManager.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeDocumentScannerManager.kt
new file mode 100644
index 0000000000..c876bf9d06
--- /dev/null
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeDocumentScannerManager.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.canvas.espresso.mockcanvas.fakes
+
+import android.app.Activity
+import android.content.Intent
+import android.content.IntentSender
+import android.net.Uri
+import com.google.android.gms.tasks.Task
+import com.google.android.gms.tasks.TaskCompletionSource
+import com.instructure.pandautils.features.file.upload.scanner.DocumentScanResult
+import com.instructure.pandautils.features.file.upload.scanner.DocumentScannerManager
+import com.instructure.pandautils.utils.ActivityResult
+import com.instructure.pandautils.utils.OnActivityResults
+import com.instructure.pandautils.utils.postSticky
+
+
+class FakeDocumentScannerManager(
+ private val requestCode: Int = REQUEST_DOCUMENT_SCANNING
+) : DocumentScannerManager {
+
+ var scannerSupported: Boolean = true
+ var scanResultUri: Uri? = null
+
+ override fun isDeviceSupported(): Boolean = scannerSupported
+
+ override fun getStartScanIntent(activity: Activity, pageLimit: Int): Task {
+ val fakeResultIntent = Intent()
+ OnActivityResults(ActivityResult(requestCode, Activity.RESULT_OK, fakeResultIntent)).postSticky()
+ return TaskCompletionSource().task
+ }
+
+ override fun handleScanResultFromIntent(intent: Intent?): DocumentScanResult {
+ return DocumentScanResult(scanResultUri, emptyList())
+ }
+
+ override fun generateFileName(): String = "Scanned_Document_test.pdf"
+
+ companion object {
+ const val REQUEST_DOCUMENT_SCANNING = 5103 //Matches PickerSubmissionUploadEffectHandler.REQUEST_DOCUMENT_SCANNING
+ }
+}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeSubmissionContentManager.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeSubmissionContentManager.kt
index a8b094a86f..13318d44e7 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeSubmissionContentManager.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/mockcanvas/fakes/FakeSubmissionContentManager.kt
@@ -136,7 +136,8 @@ class FakeSubmissionContentManager : SubmissionContentManager {
mediaObject = mediaObject,
user = user,
assignment = fragmentAssignment,
- customGradeStatus = null
+ customGradeStatus = null,
+ grade = submission?.grade
)
val edges = if (submissionHistory.isNotEmpty()) {
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomActions.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomActions.kt
similarity index 58%
rename from automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomActions.kt
rename to automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomActions.kt
index d7800b70ed..0d52718251 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomActions.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomActions.kt
@@ -14,59 +14,42 @@
* along with this program. If not, see .
*
*/
-package com.instructure.canvas.espresso
+package com.instructure.canvas.espresso.utils
-import android.app.Activity
import android.os.SystemClock
-import android.os.SystemClock.sleep
import android.view.InputDevice
import android.view.MotionEvent
import android.view.View
import android.widget.EditText
-import androidx.annotation.StringRes
import androidx.recyclerview.widget.RecyclerView
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import androidx.test.espresso.Espresso
import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.PerformException
import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
-import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.action.CoordinatesProvider
import androidx.test.espresso.action.GeneralClickAction
import androidx.test.espresso.action.Press
import androidx.test.espresso.action.Tap
import androidx.test.espresso.action.ViewActions
-import androidx.test.espresso.assertion.ViewAssertions
-import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
-import androidx.test.espresso.matcher.RootMatchers.withDecorView
import androidx.test.espresso.matcher.ViewMatchers
-import androidx.test.espresso.matcher.ViewMatchers.Visibility
-import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.espresso.util.HumanReadables
import androidx.viewpager.widget.ViewPager
import com.instructure.espresso.assertDisplayed
-import com.instructure.espresso.retryWithIncreasingDelay
import com.instructure.espresso.swipeUp
import instructure.rceditor.RCETextEditor
import org.hamcrest.Matcher
import org.hamcrest.Matchers
-import org.hamcrest.Matchers.allOf
-import org.hamcrest.Matchers.`is`
-import org.hamcrest.Matchers.not
-
-//
-// This is a repo for generally useful Espresso actions
-//
-
-// Copied from https://stackoverflow.com/questions/33505953/espresso-how-to-test-swiperefreshlayout
-// Allows you to perform an action with custom constraints. This is especially useful for
-// being able to perform a swipe on a view that is not quite 90% displayed.
-fun withCustomConstraints(action: ViewAction, constraints: Matcher): ViewAction {
+
+// This file is for generally useful Espresso and/or Compose UI actions
+
+/**
+ * Allows you to perform an action with custom constraints. This is especially useful for
+ * being able to perform a swipe on a view that is not quite 90% displayed.
+ * Source: https://stackoverflow.com/questions/33505953/espresso-how-to-test-swiperefreshlayout
+ */
+fun actionWithCustomConstraints(action: ViewAction, constraints: Matcher): ViewAction {
return object : ViewAction {
override fun getConstraints(): Matcher {
return constraints
@@ -96,7 +79,6 @@ fun scrollRecyclerView(recyclerViewId: Int, target: String) {
fun scrollRecyclerView(recyclerViewId: Int, target: Matcher) {
val recyclerViewMatcher = Matchers.allOf(ViewMatchers.withId(recyclerViewId), ViewMatchers.isDisplayed())
- // Grab the SwipeRefreshLayout, if one is available
val swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
// If a SwipeRefreshLayout is available, then allow a couple of swipe-refreshes if the list/recycler
@@ -112,7 +94,7 @@ fun scrollRecyclerView(recyclerViewId: Int, target: Matcher) {
catch(t: Throwable) {
refreshesLeft -= 1
onView(swipeRefreshLayoutMatcher)
- .perform(withCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
SystemClock.sleep(1000) // Allow some time to react to the update.
}
}
@@ -132,56 +114,6 @@ fun scrollRecyclerView(recyclerViewId: Int, target: Matcher) {
}
-/**
- * Returns a matcher for the SwipeRefreshLayout if one is available, otherwise null.
- */
-private fun getSwipeRefreshLayoutMatcher(): Matcher? {
- val swipeRefreshLayoutMatcher = allOf(ViewMatchers.isAssignableFrom(SwipeRefreshLayout::class.java), isDisplayed())
- try {
- onView(swipeRefreshLayoutMatcher).check(matches(isDisplayed()));
- return swipeRefreshLayoutMatcher
- }
- catch(e: Exception) {
- return null
- }
-}
-
-
-// Custom action to directly populate an EditText, bypassing the normal espresso actions
-// of clicking on the EditText, typing into it, and then dismissing the soft keyboard.
-class DirectlyPopulateEditText(val text: String) : ViewAction {
- override fun getDescription(): String {
- return "Populate EditText with $text"
- }
-
- override fun getConstraints(): Matcher {
- return ViewMatchers.isAssignableFrom(EditText::class.java)
- }
-
- override fun perform(uiController: UiController?, view: View?) {
- when(view) {
- is EditText -> {
- view.text.clear()
- view.text.append(text)
- }
- }
- }
-
-}
-
-/**
- * Convenience method to see whether (and by how much) a view is displayed on the screen.
- */
-private fun isDisplayedAtLeast(target: Matcher, displayPercentage: Int) : Boolean {
- try {
- onView(target).check(matches(ViewMatchers.isDisplayingAtLeast(displayPercentage)))
- return true
- }
- catch(t: Throwable) {
- return false
- }
-}
-
/**
* Send an explicit performClick() to a view, instead of using Espresso's click(), which
* can sometimes be interpreted as a long-click.
@@ -249,31 +181,6 @@ fun clickCoordinates(percentX: Float, percentY: Float) : ViewAction {
)
}
-/**
- * Wait for a specified matcher to appear, trying a couple of pull-to-refreshes before giving up.
- * This is one way to combat the "late delayed job" problem.
- */
-fun waitForMatcherWithRefreshes(target: Matcher) {
- val swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
-
- if(swipeRefreshLayoutMatcher != null) {
- var refreshesLeft = 2;
- while(refreshesLeft > 0) {
- try {
- onView(target).assertDisplayed()
- return
- }
- catch(t: Throwable) {
- refreshesLeft -= 1
- onView(swipeRefreshLayoutMatcher)
- .perform(withCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
- SystemClock.sleep(1000) // Allow some time to react to the update.
-
- }
- }
- }
-}
-
/**
* Refresh the current screen via pull-to-refresh.
* Assumes that a SwipeRefreshLayout element is visible.
@@ -285,36 +192,51 @@ fun refresh() {
swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
}
onView(swipeRefreshLayoutMatcher)
- .perform(withCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
}
-/** A better version of the shared espresso lib's WaitForViewMatcher.waitForView()
- * for a couple of reasons:
- * (1) It allows the caller to specify the wait time
- * (2) It uses sleeps to avoid monopolizing the CPU and spamming our log files.
- *
- * Waits for [target] to become visible for up to [waitMs] milliseconds,
- * sleeping [sleepMs] milliseconds after every attempt.
+/**
+ * Helper method to press the Espresso back button for the given number of times.
*/
-fun waitForMatcherWithSleeps(target: Matcher, timeout: Long = 10000, pollInterval: Long = 100) : ViewInteraction {
- val endTime = System.currentTimeMillis() + timeout
- do {
- try {
- return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
- } catch (ignored: Exception) {
- println("There is an exception occurred. Stacktrace: " + ignored.stackTrace)
- } catch (ignored: Error) {
- println("There is an error occurred. Stacktrace: " + ignored.stackTrace)
- }
+fun pressBackButton(times: Int) {
+ for(i in 1..times) {
+ Espresso.pressBack()
+ }
+}
- sleep(pollInterval) // re-check every 100 ms
- } while(System.currentTimeMillis() < endTime)
+/**
+ * Helper method to create a View's String representation.
+ */
+fun toString(view: View): String {
+ return HumanReadables.getViewHierarchyErrorMessage(view, null, "", null)
+}
- // If we aren't successful by now, make one more unprotected attempt to throw
- // the correct error.
- return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+/**
+ * Custom action to directly populate an EditText, bypassing the normal espresso actions
+ * of clicking on the EditText, typing into it, and then dismissing the soft keyboard.
+ */
+class DirectlyPopulateEditText(val text: String) : ViewAction {
+ override fun getDescription(): String {
+ return "Populate EditText with $text"
+ }
+
+ override fun getConstraints(): Matcher {
+ return ViewMatchers.isAssignableFrom(EditText::class.java)
+ }
+
+ override fun perform(uiController: UiController?, view: View?) {
+ when(view) {
+ is EditText -> {
+ view.text.clear()
+ view.text.append(text)
+ }
+ }
+ }
}
+/**
+ * Custom action to set the current item of a ViewPager.
+ */
class SetViewPagerCurrentItemAction(private val pageNumber: Int) : ViewAction {
override fun getDescription() = "set ViewPager current item to $pageNumber"
@@ -340,56 +262,11 @@ class SetViewPagerCurrentItemAction(private val pageNumber: Int) : ViewAction {
uiController.loopMainThreadUntilIdle()
}
-
-}
-
-fun checkToastText(text: String, activity: Activity) {
- onView(withText(text)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
-}
-
-fun checkToastText(@StringRes stringRes: Int, activity: Activity) {
- retryWithIncreasingDelay(times = 3, initialDelay = 500, maxDelay = 5000) {
- try {
- onView(withText(stringRes)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
- } catch (e: NoMatchingViewException) {
- // Toast did not appear yet, so try to check it again.
- }
- }
-
- retryWithIncreasingDelay(times = 5, initialDelay = 500, maxDelay = 15500) {
- try {
- onView(withText(stringRes)).check(matches(withEffectiveVisibility(Visibility.GONE)))
- } catch (e: NoMatchingViewException) {
- //Intentionally empty as we would like to wait for the toast to disappear. Somehow doesNotExist() doesn't work because it passes even if the toast is still there and visible.
- }
- }
-}
-
-fun pressBackButton(times: Int) {
- for(i in 1..times) {
- Espresso.pressBack()
- }
-}
-
-fun waitForViewToDisappear(viewMatcher: Matcher, timeoutInSeconds: Long) {
- val startTime = System.currentTimeMillis()
-
- while (System.currentTimeMillis() - startTime < (timeoutInSeconds * 1000)) {
- try {
- onView(viewMatcher)
- .check(ViewAssertions.doesNotExist())
- return
- } catch (e: AssertionError) {
- Thread.sleep(200)
- }
- }
- throw AssertionError("The view has not been displayed within $timeoutInSeconds seconds.")
-}
-
-fun toString(view: View): String {
- return HumanReadables.getViewHierarchyErrorMessage(view, null, "", null)
}
+/**
+ * Custom action to set (aka. "write") the html inner text of the current item.
+ */
class TypeInRCETextEditor(val text: String) : ViewAction {
override fun getDescription(): String {
return "Enters text into an RCETextEditor"
@@ -404,5 +281,4 @@ class TypeInRCETextEditor(val text: String) : ViewAction {
is RCETextEditor -> view.applyHtml(text)
}
}
-
}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomAssertions.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomAssertions.kt
new file mode 100644
index 0000000000..ba41881e10
--- /dev/null
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomAssertions.kt
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.instructure.canvas.espresso.utils
+
+import android.app.Activity
+import android.os.SystemClock.sleep
+import android.view.View
+import android.widget.TextView
+import androidx.annotation.StringRes
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.NoMatchingViewException
+import androidx.test.espresso.ViewInteraction
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.assertion.ViewAssertions
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.BoundedMatcher
+import androidx.test.espresso.matcher.RootMatchers.withDecorView
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.espresso.matcher.ViewMatchers.Visibility
+import androidx.test.espresso.matcher.ViewMatchers.assertThat
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import com.instructure.espresso.assertDisplayed
+import com.instructure.espresso.retryWithIncreasingDelay
+import org.hamcrest.CoreMatchers
+import org.hamcrest.Description
+import org.hamcrest.Matcher
+import org.hamcrest.Matchers.`is`
+import org.hamcrest.Matchers.not
+import org.hamcrest.TypeSafeMatcher
+
+// This file is for generally useful Espresso and/or Compose UI assertions.
+
+/**
+ * Check the toast text if it's displayed.
+ * @param text The string of the toast text.
+ * @param activity The activity to get the decor view from.
+ */
+fun checkToastText(text: String, activity: Activity) {
+ onView(withText(text)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
+}
+
+/**
+ * Check the toast text if it's displayed.
+ * @param stringRes The string resource ID of the toast text.
+ * @param activity The activity to get the decor view from.
+ */
+fun checkToastText(@StringRes stringRes: Int, activity: Activity) {
+ retryWithIncreasingDelay(times = 3, initialDelay = 500, maxDelay = 5000) {
+ try {
+ onView(withText(stringRes)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
+ } catch (e: NoMatchingViewException) {
+ // Intentionally empty: Toast did not appear yet, so try to check it again.
+ }
+ }
+
+ retryWithIncreasingDelay(times = 5, initialDelay = 500, maxDelay = 15500) {
+ try {
+ onView(withText(stringRes)).check(matches(withEffectiveVisibility(Visibility.GONE)))
+ } catch (e: NoMatchingViewException) {
+ //Intentionally empty as we would like to wait for the toast to disappear. Somehow doesNotExist() doesn't work because it passes even if the toast is still there and visible.
+ }
+ }
+}
+
+/**
+ * Asserts that the SwipeRefreshLayout is refreshing or not.
+ */
+fun ViewInteraction.assertIsRefreshing(isRefreshing: Boolean) {
+ val matcher = object : BoundedMatcher(SwipeRefreshLayout::class.java) {
+
+ override fun describeTo(description: Description) {
+ description.appendText(if (isRefreshing) "is refreshing" else "is not refreshing")
+ }
+
+ override fun matchesSafely(view: SwipeRefreshLayout): Boolean {
+ return view.isRefreshing == isRefreshing
+ }
+ }
+ check(matches(matcher))
+}
+
+/**
+ * Asserts that the TextView uses the specified font size in scaled pixels.
+ * @param expectedSP The expected font size in scaled pixels.
+ */
+fun ViewInteraction.assertFontSizeSP(expectedSP: Float) {
+ val matcher = object : TypeSafeMatcher(View::class.java) {
+
+ override fun matchesSafely(target: View): Boolean {
+ if (target !is TextView) return false
+ val actualSP = target.textSize / target.getResources().displayMetrics.scaledDensity
+ return actualSP.compareTo(expectedSP) == 0
+ }
+
+ override fun describeTo(description: Description) {
+ description.appendText("with fontSize: ${expectedSP}px")
+ }
+ }
+ check(matches(matcher))
+}
+
+/**
+ * Asserts that a view is completely above of another view.
+ * @param other The other view to compare against.
+ */
+fun ViewInteraction.assertCompletelyAbove(other: ViewInteraction) {
+ val view1 = getView()
+ val view2 = other.getView()
+ val location1 = view1.locationOnScreen
+ val location2 = view2.locationOnScreen
+ val isAbove = location1[1] + view1.height <= location2[1]
+ assertThat("completely above", isAbove, CoreMatchers.`is`(true))
+}
+
+/**
+ * Asserts that a view is completely below of another view.
+ * @param other The other view to compare against.
+ */
+fun ViewInteraction.assertCompletelyBelow(other: ViewInteraction) {
+ val view1 = getView()
+ val view2 = other.getView()
+ val location1 = view1.locationOnScreen
+ val location2 = view2.locationOnScreen
+ val isAbove = location2[1] + view2.height <= location1[1]
+ assertThat("completely below", isAbove, CoreMatchers.`is`(true))
+}
+
+/**
+ * Get the location of the view on the screen.
+ */
+val View.locationOnScreen get() = IntArray(2).apply { getLocationOnScreen(this) }
+
+/**
+ * Assert that a TextView has the specified number of lines.
+ * @param lineCount The number of the expected lines.
+ */
+fun ViewInteraction.assertLineCount(lineCount: Int) {
+ val matcher = object : TypeSafeMatcher() {
+ override fun matchesSafely(item: View): Boolean {
+ return (item as TextView).lineCount == lineCount
+ }
+
+ override fun describeTo(description: Description) {
+ description.appendText("isTextInLines")
+ }
+ }
+ check(matches(matcher))
+}
+
+/**
+ * Waits for a view to disappear.
+ * @param viewMatcher The matcher for the view to wait for.
+ * @param timeoutInSeconds The timeout in seconds.
+ */
+fun waitForViewToDisappear(viewMatcher: Matcher, timeoutInSeconds: Long) {
+ val startTime = System.currentTimeMillis()
+
+ while (System.currentTimeMillis() - startTime < (timeoutInSeconds * 1000)) {
+ try {
+ onView(viewMatcher)
+ .check(ViewAssertions.doesNotExist())
+ return
+ } catch (e: AssertionError) {
+ Thread.sleep(200)
+ }
+ }
+ throw AssertionError("The view has not been displayed within $timeoutInSeconds seconds.")
+}
+
+/**
+ * Wait for a specified matcher to appear, trying a couple of pull-to-refreshes before giving up.
+ * This is one way to combat the "late delayed job" problem.
+ */
+fun waitForMatcherWithRefreshes(target: Matcher) {
+ val swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
+
+ if(swipeRefreshLayoutMatcher != null) {
+ var refreshesLeft = 2;
+ while(refreshesLeft > 0) {
+ try {
+ onView(target).assertDisplayed()
+ return
+ }
+ catch(t: Throwable) {
+ refreshesLeft -= 1
+ onView(swipeRefreshLayoutMatcher)
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
+ sleep(1000) // Allow some time to react to the update.
+
+ }
+ }
+ }
+}
+
+/** A better version of the shared espresso lib's WaitForViewMatcher.waitForView()
+ * for a couple of reasons:
+ * (1) It allows the caller to specify the wait time
+ * (2) It uses sleeps to avoid monopolizing the CPU and spamming our log files.
+ *
+ * Waits for [target] to become visible for up to [waitMs] milliseconds,
+ * sleeping [sleepMs] milliseconds after every attempt.
+ */
+fun waitForMatcherWithSleeps(target: Matcher, timeout: Long = 10000, pollInterval: Long = 100) : ViewInteraction {
+ val endTime = System.currentTimeMillis() + timeout
+ do {
+ try {
+ return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+ } catch (ignored: Exception) {
+ println("There is an exception occurred. Stacktrace: " + ignored.stackTrace)
+ } catch (ignored: Error) {
+ println("There is an error occurred. Stacktrace: " + ignored.stackTrace)
+ }
+
+ sleep(pollInterval) // re-check every 100 ms
+ } while(System.currentTimeMillis() < endTime)
+
+ // If we aren't successful by now, make one more unprotected attempt to throw
+ // the correct error.
+ return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+}
+
+/**
+ * Convenience method to see whether (and by how much) a view is displayed on the screen.
+ */
+fun isDisplayedAtLeast(target: Matcher, displayPercentage: Int) : Boolean {
+ try {
+ onView(target).check(matches(ViewMatchers.isDisplayingAtLeast(displayPercentage)))
+ return true
+ }
+ catch(t: Throwable) {
+ return false
+ }
+}
+
+/**
+ * Returns true if the element with the given resource id is currently displayed, false otherwise.
+ */
+fun isElementDisplayed(resourceId: Int) : Boolean {
+ try {
+ onView(withId(resourceId)).check(matches(isDisplayed()))
+ return true
+ }
+ catch(t: Throwable) {
+ return false
+ }
+}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomMatchers.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomMatchers.kt
similarity index 81%
rename from automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomMatchers.kt
rename to automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomMatchers.kt
index e3f610772e..ad587ecb7e 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomMatchers.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomMatchers.kt
@@ -15,7 +15,7 @@
*
*/
-package com.instructure.canvas.espresso
+package com.instructure.canvas.espresso.utils
import android.content.Intent
import android.content.res.Resources
@@ -41,10 +41,8 @@ import androidx.test.espresso.ViewAssertion
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.BoundedMatcher
-import androidx.test.espresso.matcher.ViewMatchers.assertThat
import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.util.HumanReadables
import androidx.test.espresso.util.TreeIterables
import com.google.android.apps.common.testing.accessibility.framework.AccessibilityViewCheckResult
@@ -54,14 +52,12 @@ import com.instructure.espresso.ActivityHelper
import com.instructure.pandautils.utils.ColorUtils
import junit.framework.AssertionFailedError
import org.hamcrest.BaseMatcher
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.Description
import org.hamcrest.Matcher
+import org.hamcrest.Matchers.allOf
import org.hamcrest.TypeSafeMatcher
-//
-// This is a repo for useful custom matchers
-//
+// This is file is for Espresso and/or Compose UI matchers.
/**
* Matches if the view is a TextView and its text contains [textToMatch], case insensitive
@@ -83,8 +79,10 @@ fun containsTextCaseInsensitive(textToMatch: String) : Matcher {
}
}
-// Similar to containsTextCaseInsensitive(), but operates on a String rather than a TextView.
-// Originally created to combat situations where a content description contains garbage characters.
+/**
+ * Similar to containsTextCaseInsensitive(), but operates on a String rather than a TextView.
+ * Originally created to combat situations where a content description contains garbage characters.
+ */
fun stringContainsTextCaseInsensitive(textToMatch: String) : Matcher {
return object: BaseMatcher() {
override fun matches(item: Any?): Boolean {
@@ -103,28 +101,12 @@ fun stringContainsTextCaseInsensitive(textToMatch: String) : Matcher {
}
/**
- * Returns true if the element with the given resource id is currently displayed, false otherwise.
+ * Returns if the radio button is checked or not.
+ * @param checked True if the radio button should be checked, false otherwise.
+ * @param index The index of the radio button to check.
+ * @param getText A function to get the text of the checked radio button.
*/
-fun isElementDisplayed(resourceId: Int) : Boolean {
- try {
- onView(withId(resourceId)).check(matches(isDisplayed()))
- return true
- }
- catch(t: Throwable) {
- return false
- }
-}
-
-inline fun typedViewCondition(crossinline onCheckCondition: (T) -> Boolean): Matcher {
- return object : BaseMatcher() {
- override fun matches(item: Any?): Boolean = (item as? T)?.let(onCheckCondition) ?: false
- override fun describeTo(description: Description?) {
- description?.appendText("matches view type '${T::class.java.simpleName}' and fulfills the given condition")
- }
- }
-}
-
-fun checked(checked: Boolean = true, index: Int = 0, getText: (String) -> Unit = {}): BoundedMatcher {
+fun isRadioButtonChecked(checked: Boolean = true, index: Int = 0, getText: (String) -> Unit = {}): BoundedMatcher {
return object : BoundedMatcher(RadioButton::class.java) {
var currentIndex = 0
override fun describeTo(description: Description) {
@@ -378,54 +360,9 @@ object SwipeRefreshLayoutMatchers {
}
}
-object ViewSizeMatcher {
- fun hasWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a width of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.width == pixels
- }
-
- fun hasHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a height of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.height == pixels
- }
-
- fun hasMinWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a minimum width of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.width >= pixels
- }
-
- fun hasMinHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a minimum height of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.height >= pixels
- }
-}
-
-fun ViewInteraction.assertLineCount(lineCount: Int) {
- val matcher = object : TypeSafeMatcher() {
- override fun matchesSafely(item: View): Boolean {
- return (item as TextView).lineCount == lineCount
- }
-
- override fun describeTo(description: Description) {
- description.appendText("isTextInLines")
- }
- }
- check(matches(matcher))
-}
-
-
+/**
+ * Get the view reference from a ViewInteraction
+ */
fun ViewInteraction.getView(): View {
lateinit var matchingView: View
perform(object : ViewAction {
@@ -442,60 +379,11 @@ fun ViewInteraction.getView(): View {
return matchingView
}
-fun ViewInteraction.assertCompletelyAbove(other: ViewInteraction) {
- val view1 = getView()
- val view2 = other.getView()
- val location1 = view1.locationOnScreen
- val location2 = view2.locationOnScreen
- val isAbove = location1[1] + view1.height <= location2[1]
- assertThat("completely above", isAbove, `is`(true))
-}
-
-fun ViewInteraction.assertCompletelyBelow(other: ViewInteraction) {
- val view1 = getView()
- val view2 = other.getView()
- val location1 = view1.locationOnScreen
- val location2 = view2.locationOnScreen
- val isAbove = location2[1] + view2.height <= location1[1]
- assertThat("completely below", isAbove, `is`(true))
-}
-
-val View.locationOnScreen get() = IntArray(2).apply { getLocationOnScreen(this) }
-
-
/**
- * Asserts that the TextView uses the specified font size in scaled pixels
+ * Custom matcher for intent and their data
+ * @param intentType The type of the specific intent
+ * @param dataMatcher The data to match in the intent
*/
-fun ViewInteraction.assertFontSizeSP(expectedSP: Float) {
- val matcher = object : TypeSafeMatcher(View::class.java) {
-
- override fun matchesSafely(target: View): Boolean {
- if (target !is TextView) return false
- val actualSP = target.textSize / target.getResources().displayMetrics.scaledDensity
- return actualSP.compareTo(expectedSP) == 0
- }
-
- override fun describeTo(description: Description) {
- description.appendText("with fontSize: ${expectedSP}px")
- }
- }
- check(matches(matcher))
-}
-
-fun ViewInteraction.assertIsRefreshing(isRefreshing: Boolean) {
- val matcher = object : BoundedMatcher(SwipeRefreshLayout::class.java) {
-
- override fun describeTo(description: Description) {
- description.appendText(if (isRefreshing) "is refreshing" else "is not refreshing")
- }
-
- override fun matchesSafely(view: SwipeRefreshLayout): Boolean {
- return view.isRefreshing == isRefreshing
- }
- }
- check(matches(matcher))
-}
-
class IntentActionMatcher(private val intentType: String, private val dataMatcher: String) : TypeSafeMatcher() {
override fun describeTo(description: Description?) {
@@ -507,13 +395,13 @@ class IntentActionMatcher(private val intentType: String, private val dataMatche
}
}
-// Adapted from https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f
/**
* Matches ImageView (or ImageButton) with the drawable associated with [resourceId]. If [resourceId] < 0, will
* match against "no drawable" / "drawable is null".
*
- * If the [color] param is non-null, then the drawable associated with [resourceId] will be colored
- * prior to matching.
+ * Source: https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f
+ *
+ * If the [color] param is non-null, then the drawable associated with [resourceId] will be colored prior to matching.
*/
class ImageViewDrawableMatcher(val resourceId: Int, val color: Int? = null) : TypeSafeMatcher(
ImageView::class.java) {
@@ -552,7 +440,7 @@ class ImageViewDrawableMatcher(val resourceId: Int, val color: Int? = null) : Ty
/**
* Matches views whose resource ID contains the specified substring.
- * Useful for matching PSPDFKit or other third-party library views with dynamic resource IDs.
+ * Useful for matching PSPDFKit (aka. Nutrient) or other third-party library views with dynamic resource IDs.
*/
fun withResourceIdContaining(substring: String) = object : TypeSafeMatcher() {
override fun describeTo(description: Description) {
@@ -568,3 +456,54 @@ fun withResourceIdContaining(substring: String) = object : TypeSafeMatcher
return resourceId.contains(substring, ignoreCase = true)
}
}
+
+/**
+ * Returns a matcher for the SwipeRefreshLayout if one is available, otherwise null.
+ */
+fun getSwipeRefreshLayoutMatcher(): Matcher? {
+ val swipeRefreshLayoutMatcher = allOf(isAssignableFrom(SwipeRefreshLayout::class.java), isDisplayed())
+ try {
+ onView(swipeRefreshLayoutMatcher).check(matches(isDisplayed()));
+ return swipeRefreshLayoutMatcher
+ }
+ catch(e: Exception) {
+ return null
+ }
+}
+
+/**
+ * This object collects the different view size matchers.
+ */
+object ViewSizeMatcher {
+ fun hasWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a width of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.width == pixels
+ }
+
+ fun hasHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a height of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.height == pixels
+ }
+
+ fun hasMinWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a minimum width of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.width >= pixels
+ }
+
+ fun hasMinHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a minimum height of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.height >= pixels
+ }
+}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt b/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt
index f6e0332e27..c830389292 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt
@@ -22,13 +22,19 @@ import android.view.View
import androidx.test.espresso.ViewAction
import androidx.test.espresso.ViewAssertion
import androidx.test.espresso.ViewInteraction
-import androidx.test.espresso.action.*
+import androidx.test.espresso.action.CoordinatesProvider
+import androidx.test.espresso.action.EspressoKey
+import androidx.test.espresso.action.GeneralLocation
+import androidx.test.espresso.action.GeneralSwipeAction
+import androidx.test.espresso.action.Press
+import androidx.test.espresso.action.Swipe
+import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.SetViewPagerCurrentItemAction
+import com.instructure.canvas.espresso.utils.SetViewPagerCurrentItemAction
import org.hamcrest.Matcher
import org.hamcrest.Matchers
-import java.util.concurrent.*
+import java.util.concurrent.TimeUnit
fun ViewInteraction.assertVisible(): ViewInteraction
diff --git a/gradle/jacoco.gradle b/gradle/jacoco.gradle
index ca8edd7eba..df0a1549f4 100644
--- a/gradle/jacoco.gradle
+++ b/gradle/jacoco.gradle
@@ -186,11 +186,11 @@ task jacocoFullReport(type: JacocoReport, group: 'Coverage reports') {
reports {
html {
required = true
- destination file('build/reports/jacoco/html')
+ outputLocation = file('build/reports/jacoco/html')
}
csv {
required = true
- destination file('build/reports/jacoco/jacocoFullReport.csv')
+ outputLocation = file('build/reports/jacoco/jacocoFullReport.csv')
}
}
}
@@ -218,11 +218,11 @@ task jacocoFullCombinedReport(type: JacocoReport, group: 'Coverage reports') {
reports {
html {
required = true
- destination file('build/reports/jacoco/html')
+ outputLocation = file('build/reports/jacoco/html')
}
csv {
required = true
- destination file('build/reports/jacoco/jacocoFullCombinedReport.csv')
+ outputLocation = file('build/reports/jacoco/jacocoFullCombinedReport.csv')
}
}
}
\ No newline at end of file
diff --git a/libs/annotations/build.gradle b/libs/annotations/build.gradle
index 9fbeaa9100..e1523b1d34 100644
--- a/libs/annotations/build.gradle
+++ b/libs/annotations/build.gradle
@@ -82,8 +82,10 @@ android {
targetCompatibility JavaVersion.VERSION_17
}
- configurations.all {
- resolutionStrategy.force 'com.getkeepsafe.relinker:relinker:1.4.3'
+ configurations.configureEach {
+ if (canBeResolved) {
+ resolutionStrategy.force 'com.getkeepsafe.relinker:relinker:1.4.3'
+ }
}
}
diff --git a/libs/annotations/src/main/java/com/instructure/annotations/PdfSubmissionView.kt b/libs/annotations/src/main/java/com/instructure/annotations/PdfSubmissionView.kt
index 9bab1e51ed..f17d2d0a06 100644
--- a/libs/annotations/src/main/java/com/instructure/annotations/PdfSubmissionView.kt
+++ b/libs/annotations/src/main/java/com/instructure/annotations/PdfSubmissionView.kt
@@ -149,6 +149,10 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
.copyPastEnabled(false)
.contentEditingEnabled(false)
.annotationPopupToolbarEnabled(false)
+ // Disable autosave to prevent PdfFragment.onStop() from calling save() synchronously
+ // on the main thread, which blocks until the native save completes and causes an ANR.
+ // Annotations are saved explicitly via the canvas doc API, not via PSPDFKit autosave.
+ .autosaveEnabled(false)
.build()
private val annotationCreationToolbar = AnnotationCreationToolbar(context)
@@ -162,12 +166,11 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
private var pdfContentJob: Job? = null
private var annotationsJob: Job? = null
private var sendCommentJob: Job? = null
- private var appearanceGeneratorsJob: Job? = null
private var currentAnnotationModeTool: AnnotationTool? = null
private var currentAnnotationModeType: AnnotationType? = null
private var isUpdatingWithNoNetwork = false
private var stampRaceFlag = true
- private var appearanceGeneratorsLoaded = false
+ private var stampAppearanceGeneratorsRegistered = false
@get:ColorRes
abstract val progressColor: Int
@@ -210,7 +213,6 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
annotationsJob?.cancel()
pdfContentJob?.cancel()
fileJob?.cancel()
- appearanceGeneratorsJob?.cancel()
}
protected fun unregisterPdfFragmentListeners() {
@@ -456,7 +458,7 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
private val documentListener = object : DocumentListener {
override fun onDocumentLoaded(pdfDocument: PdfDocument) {
setupPdfAnnotationDefaults()
- loadCustomAppearanceGeneratorsAsync()
+ stampAppearanceGeneratorsRegistered = false
docSession.rotations?.let { rotations ->
pdfFragment?.document?.let {
@@ -464,8 +466,9 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
}
}
- pdfFragment?.enterAnnotationCreationMode()
- if (docSession.annotationMetadata?.canRead() != true) return
+ val metadata = docSession.annotationMetadata
+ if (metadata?.canWrite() == true) pdfFragment?.enterAnnotationCreationMode()
+ if (metadata?.canRead() != true) return
loadAnnotations()
}
}
@@ -478,6 +481,14 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
// Grab all the annotations and sort them by type (descending).
// This will result in all of the comments being iterated over first as the COMMENT_REPLY type is last in the AnnotationType enum.
val sortedAnnotationList = annotations.data.sortedByDescending { it.annotationType }
+
+ // AnnotationType.TEXT is the CanvaDoc API type for stamp (point) annotations, which are converted
+ // to PSPDFKit StampAnnotations via convertTextType(). Register generators only after this network
+ // roundtrip — by this point PSPDFKit has finished its initial render, avoiding blank pages.
+ if (sortedAnnotationList.any { it.annotationType == CanvaDocAnnotation.AnnotationType.TEXT }) {
+ registerStampAppearanceGenerators()
+ }
+
for (item in sortedAnnotationList) {
if (item.annotationType == CanvaDocAnnotation.AnnotationType.COMMENT_REPLY) {
// Grab the annotation comments and store them to be displayed later when user selects annotation
@@ -1063,55 +1074,30 @@ abstract class PdfSubmissionView(context: Context, private val studentAnnotation
return stamps
}
- private fun loadCustomAppearanceGeneratorsAsync() {
- // Avoid loading multiple times
- if (appearanceGeneratorsLoaded) return
- appearanceGeneratorsLoaded = true
-
- // Load appearance generators asynchronously to prevent ANR
- // These generators load and parse PDF files from assets, which can cause blocking I/O
- appearanceGeneratorsJob = viewScope.tryLaunch {
- // Perform I/O operations on background thread
- val generators = withContext(Dispatchers.IO) {
- // Create appearance stream generators with a PDF containing vector logo.
- // This reads and parses 10 PDF files from assets, which can block the main thread
- val black = AssetAppearanceStreamGenerator(blackStampFile)
- val blue = AssetAppearanceStreamGenerator(blueStampFile)
- val brown = AssetAppearanceStreamGenerator(brownStampFile)
- val green = AssetAppearanceStreamGenerator(greenStampFile)
- val navy = AssetAppearanceStreamGenerator(navyStampFile)
- val orange = AssetAppearanceStreamGenerator(orangeStampFile)
- val pink = AssetAppearanceStreamGenerator(pinkStampFile)
- val purple = AssetAppearanceStreamGenerator(purpleStampFile)
- val red = AssetAppearanceStreamGenerator(redStampFile)
- val yellow = AssetAppearanceStreamGenerator(yellowStampFile)
-
- mapOf(
- blackStampSubject to black,
- blueStampSubject to blue,
- brownStampSubject to brown,
- greenStampSubject to green,
- navyStampSubject to navy,
- orangeStampSubject to orange,
- pinkStampSubject to pink,
- purpleStampSubject to purple,
- redStampSubject to red,
- yellowStampSubject to yellow
- )
- }
-
- // Register on main thread after loading completes
- val customStampAppearanceStreamGenerator = CustomStampAppearanceStreamGenerator()
- pdfFragment?.document?.annotationProvider?.addAppearanceStreamGenerator(customStampAppearanceStreamGenerator)
-
- // Register created appearance stream generator for the custom subject.
- generators.forEach { (subject, generator) ->
- customStampAppearanceStreamGenerator.addAppearanceStreamGenerator(subject, generator)
- }
- } catch {
- appearanceGeneratorsLoaded = false
+ private suspend fun registerStampAppearanceGenerators() {
+ if (stampAppearanceGeneratorsRegistered) return
+ val generators = withContext(Dispatchers.IO) {
+ mapOf(
+ blackStampSubject to AssetAppearanceStreamGenerator(blackStampFile),
+ blueStampSubject to AssetAppearanceStreamGenerator(blueStampFile),
+ brownStampSubject to AssetAppearanceStreamGenerator(brownStampFile),
+ greenStampSubject to AssetAppearanceStreamGenerator(greenStampFile),
+ navyStampSubject to AssetAppearanceStreamGenerator(navyStampFile),
+ orangeStampSubject to AssetAppearanceStreamGenerator(orangeStampFile),
+ pinkStampSubject to AssetAppearanceStreamGenerator(pinkStampFile),
+ purpleStampSubject to AssetAppearanceStreamGenerator(purpleStampFile),
+ redStampSubject to AssetAppearanceStreamGenerator(redStampFile),
+ yellowStampSubject to AssetAppearanceStreamGenerator(yellowStampFile)
+ )
+ }
+ val customStampAppearanceStreamGenerator = CustomStampAppearanceStreamGenerator()
+ pdfFragment?.document?.annotationProvider?.addAppearanceStreamGenerator(customStampAppearanceStreamGenerator)
+ generators.forEach { (subject, generator) ->
+ customStampAppearanceStreamGenerator.addAppearanceStreamGenerator(subject, generator)
}
+ stampAppearanceGeneratorsRegistered = true
}
+
//endregion
open fun configureEditMenuItemGrouping(toolbarMenuItems: MutableList): MutableList {
diff --git a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/CourseAnnouncementsQuery.graphql b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/CourseAnnouncementsQuery.graphql
new file mode 100644
index 0000000000..de21d94e97
--- /dev/null
+++ b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/CourseAnnouncementsQuery.graphql
@@ -0,0 +1,45 @@
+#
+# Copyright (C) 2026 - present Instructure, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+query CourseAnnouncementsQuery($courseId: ID!, $pageSize: Int!, $cursor: String) {
+ course: legacyNode(_id: $courseId, type: Course) {
+ ... on Course {
+ _id
+ announcements: discussionsConnection(
+ first: $pageSize
+ after: $cursor
+ filter: { isAnnouncement: true }
+ ) {
+ pageInfo {
+ hasNextPage
+ endCursor
+ }
+ nodes {
+ _id
+ title
+ message
+ postedAt
+ participant {
+ read
+ }
+ entryCounts {
+ unreadCount
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/DashboardCoursesQuery.graphql b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/DashboardCoursesQuery.graphql
new file mode 100644
index 0000000000..4e4080e989
--- /dev/null
+++ b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/DashboardCoursesQuery.graphql
@@ -0,0 +1,61 @@
+#
+# Copyright (C) 2026 - present Instructure, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+query DashboardCoursesQuery($pageSize: Int!) {
+ allCourses {
+ _id
+ name
+ courseCode
+ imageUrl
+ dashboardCard {
+ isFavorited
+ position
+ color
+ image
+ }
+ enrollmentsConnection(first: 1) {
+ nodes {
+ _id
+ type
+ grades {
+ currentGrade
+ currentScore
+ }
+ }
+ }
+ announcements: discussionsConnection(
+ first: $pageSize
+ filter: { isAnnouncement: true }
+ ) {
+ pageInfo {
+ hasNextPage
+ endCursor
+ }
+ nodes {
+ _id
+ title
+ message
+ postedAt
+ participant {
+ read
+ }
+ entryCounts {
+ unreadCount
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/DashboardSingleCourseQuery.graphql b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/DashboardSingleCourseQuery.graphql
new file mode 100644
index 0000000000..98bb716e2d
--- /dev/null
+++ b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/DashboardSingleCourseQuery.graphql
@@ -0,0 +1,42 @@
+#
+# Copyright (C) 2026 - present Instructure, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+query DashboardSingleCourseQuery($courseId: ID!) {
+ course: legacyNode(_id: $courseId, type: Course) {
+ ... on Course {
+ _id
+ name
+ courseCode
+ imageUrl
+ dashboardCard {
+ isFavorited
+ position
+ color
+ image
+ }
+ enrollmentsConnection(first: 1) {
+ nodes {
+ _id
+ type
+ grades {
+ currentGrade
+ currentScore
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/SubmissionContentQuery.graphql b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/SubmissionContentQuery.graphql
index be5102f76a..89fa2ecc2f 100644
--- a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/SubmissionContentQuery.graphql
+++ b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/SubmissionContentQuery.graphql
@@ -45,6 +45,7 @@ query SubmissionContent(
fragment SubmissionFields on SubmissionInterface {
groupId
state
+ grade
attempt
body
url
diff --git a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/schema.json b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/schema.json
index 9beabebbb7..ddaea809d9 100644
--- a/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/schema.json
+++ b/libs/canvas-api-2/src/main/graphql/com/instructure/canvasapi2/schema.json
@@ -9,6 +9,381 @@
},
"subscriptionType": null,
"types": [
+ {
+ "kind": "OBJECT",
+ "name": "AIGradeCriterionResult",
+ "description": null,
+ "fields": [
+ {
+ "name": "comments",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "description",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rating",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AIGradeRating",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AIGradeRating",
+ "description": null,
+ "fields": [
+ {
+ "name": "description",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rating",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reasoning",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AIGradeResult",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "attempt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errorMessage",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradeData",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AIGradeCriterionResult",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingAttempts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AcceptEnrollmentInvitationInput",
+ "description": "Autogenerated input type of AcceptEnrollmentInvitation",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "enrollmentUuid",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AcceptEnrollmentInvitationPayload",
+ "description": "Autogenerated return type of AcceptEnrollmentInvitation.",
+ "fields": [
+ {
+ "name": "enrollment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "success",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "Account",
@@ -121,6 +496,18 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "careerLearningLibraryOnly",
+ "description": "Whether or not to include or exclude Canvas Career learning library only courses",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
@@ -449,6 +836,18 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": "Filter by rubric ID",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
@@ -592,6 +991,22 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "workflowState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
@@ -894,6 +1309,223 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "OBJECT",
+ "name": "AccountNotification",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "accountId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "accountName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "endAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "icon",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "message",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "notificationType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "siteAdmin",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "startAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subject",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "ActivityStream",
@@ -1152,11 +1784,11 @@
},
{
"kind": "OBJECT",
- "name": "AnonymousStudentIdentity",
- "description": "An anonymous student identity",
+ "name": "AllocationError",
+ "description": "An error that occurred while processing an allocation rule",
"fields": [
{
- "name": "anonymousId",
+ "name": "assignmentId",
"description": null,
"args": [],
"type": {
@@ -1172,52 +1804,7 @@
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "position",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AnonymousUser",
- "description": null,
- "fields": [
- {
- "name": "avatarUrl",
+ "name": "attribute",
"description": null,
"args": [],
"type": {
@@ -1229,23 +1816,19 @@
"deprecationReason": null
},
{
- "name": "id",
+ "name": "attributeId",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "shortName",
+ "name": "message",
"description": null,
"args": [],
"type": {
@@ -1270,7 +1853,7 @@
},
{
"kind": "OBJECT",
- "name": "AssessmentRequest",
+ "name": "AllocationRule",
"description": null,
"fields": [
{
@@ -1290,8 +1873,24 @@
"deprecationReason": null
},
{
- "name": "anonymizedUser",
- "description": null,
+ "name": "appliesToAssessor",
+ "description": "Boolean indicating if this rule applies to the assessor (true) or assessee (false)",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assessee",
+ "description": "The user who will be receiving the peer review",
"args": [],
"type": {
"kind": "OBJECT",
@@ -1302,19 +1901,19 @@
"deprecationReason": null
},
{
- "name": "anonymousId",
- "description": null,
+ "name": "assessor",
+ "description": "The user who will be doing the peer review",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "User",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assetId",
+ "name": "assignmentId",
"description": null,
"args": [],
"type": {
@@ -1322,7 +1921,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -1330,63 +1929,75 @@
"deprecationReason": null
},
{
- "name": "assetSubmissionType",
+ "name": "courseId",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "available",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
- "description": null,
+ "name": "mustReview",
+ "description": "Boolean indicating if the assessor must review the assessee",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "user",
- "description": null,
+ "name": "reviewPermitted",
+ "description": "Boolean indicating if the assessor is permitted to review the assessee",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
@@ -1394,9 +2005,21 @@
"deprecationReason": null
},
{
- "name": "workflowState",
+ "name": "updatedAt",
"description": null,
"args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "workflowState",
+ "description": "The current state of the allocation rule",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -1417,6 +2040,11 @@
"name": "LegacyIDInterface",
"ofType": null
},
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
{
"kind": "INTERFACE",
"name": "Timestamped",
@@ -1429,91 +2057,171 @@
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "AssessmentType",
- "description": "The type of assessment",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ "kind": "OBJECT",
+ "name": "AllocationRuleConnection",
+ "description": "The connection type for AllocationRule.",
+ "fields": [
{
- "name": "grading",
- "description": null,
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AllocationRuleEdge",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "peer_review",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AllocationRule",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "provisional_grade",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AllocationRuleEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "self_assessment",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AllocationRule",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INTERFACE",
- "name": "AssetString",
+ "kind": "INPUT_OBJECT",
+ "name": "AllocationRulesFilterInput",
"description": null,
- "fields": [
+ "fields": null,
+ "inputFields": [
{
- "name": "assetString",
+ "name": "searchTerm",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
+ "interfaces": null,
"enumValues": null,
- "possibleTypes": [
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AllowProvisionalGradingType",
+ "description": "Indicates whether a submission requires a provisional grade",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
+ "name": "not_applicable",
+ "description": "Assignment does not use moderated grading or grades are already published",
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "OBJECT",
- "name": "Enrollment",
- "ofType": null
+ "name": "not_allowed",
+ "description": "User is not allowed to provide a provisional grade",
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "OBJECT",
- "name": "Group",
- "ofType": null
+ "name": "allowed",
+ "description": "User can provide a provisional grade",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
+ "possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "Assignment",
- "description": null,
+ "name": "AnonymousStudentIdentity",
+ "description": "An anonymous student identity",
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "anonymousId",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
@@ -1528,285 +2236,177 @@
"deprecationReason": null
},
{
- "name": "allowGoogleDocsSubmission",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "allowedAttempts",
- "description": "The number of submission attempts a student can make for this assignment. null implies unlimited.",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "allowedExtensions",
- "description": "permitted uploaded file extensions (e.g. ['doc', 'xls', 'txt'])",
- "args": [],
- "type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymizeStudents",
+ "name": "position",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AnonymousUser",
+ "description": null,
+ "fields": [
{
- "name": "anonymousGrading",
+ "name": "avatarUrl",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymousInstructorAnnotations",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymousStudentIdentities",
+ "name": "shortName",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "AnonymousStudentIdentity",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssessmentRequest",
+ "description": null,
+ "fields": [
{
- "name": "assessmentRequestsForCurrentUser",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "AssessmentRequest",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentGroup",
+ "name": "anonymizedUser",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "AssignmentGroup",
+ "name": "User",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentGroupId",
+ "name": "anonymousId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentOverrides",
+ "name": "assetId",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentOverrideConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentTargetConnection",
+ "name": "assetSubmissionType",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "orderBy",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentTargetSortOrder",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentOverrideConnection",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canDuplicate",
+ "name": "available",
"description": null,
"args": [],
"type": {
@@ -1818,32 +2418,44 @@
"deprecationReason": null
},
{
- "name": "canUnpublish",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canUpdateRubricSelfAssessment",
- "description": "specifies that the current user can update the rubric self-assessment.",
+ "name": "rubricAssessment",
+ "description": "Assessor's rubric assessment for the submission being peer reviewed",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "RubricAssessment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "checkpoints",
- "description": null,
+ "name": "submission",
+ "description": "The submission being peer reviewed",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionComments",
+ "description": "Assessor's comments for the submission being peer reviewed",
"args": [],
"type": {
"kind": "LIST",
@@ -1853,7 +2465,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Checkpoint",
+ "name": "SubmissionComment",
"ofType": null
}
}
@@ -1862,136 +2474,245 @@
"deprecationReason": null
},
{
- "name": "course",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Course",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseId",
+ "name": "user",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "workflowState",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "description",
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AssessmentType",
+ "description": "The type of assessment",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "grading",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussion",
+ "name": "peer_review",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueAt",
- "description": "when this assignment is due",
- "args": [
- {
- "name": "applyOverrides",
- "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": "true",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
+ "name": "provisional_grade",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueDateRequired",
+ "name": "self_assessment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "AssetString",
+ "description": null,
+ "fields": [
+ {
+ "name": "assetString",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
},
{
- "name": "expectsExternalSubmission",
- "description": null,
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "AssignedDates",
+ "description": "Contains standardized date hash information for objects with date overrides",
+ "fields": [
+ {
+ "name": "assignedToDates",
+ "description": "Standardized date hash visible to current user",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DateHash",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
},
{
- "name": "expectsSubmission",
+ "kind": "OBJECT",
+ "name": "Checkpoint",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PeerReviewSubAssignment",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Quiz",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignedStudentsFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "searchTerm",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "description": null,
+ "fields": [
{
- "name": "gradeAsGroup",
- "description": "specifies that students are being graded as a group (as opposed to being graded individually).",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
}
},
@@ -1999,15 +2720,39 @@
"deprecationReason": null
},
{
- "name": "gradeByQuestionEnabled",
- "description": null,
+ "name": "allocationRules",
+ "description": "Allocation rules if peer review is enabled",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AssignmentAllocationRules",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowGoogleDocsSubmission",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowProvisionalGrading",
+ "description": "Whether the current user can provide a provisional grade for this assignment",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "ENUM",
+ "name": "AllowProvisionalGradingType",
"ofType": null
}
},
@@ -2015,31 +2760,39 @@
"deprecationReason": null
},
{
- "name": "gradeGroupStudentsIndividually",
- "description": "If this is a group assignment, boolean flag indicating whether or not students will be graded individually.",
+ "name": "allowedAttempts",
+ "description": "The number of submission attempts a student can make for this assignment. null implies unlimited.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradedSubmissionsExist",
- "description": "If true, the assignment has at least one graded submission",
+ "name": "allowedExtensions",
+ "description": "permitted uploaded file extensions (e.g. ['doc', 'xls', 'txt'])",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradesPublished",
+ "name": "anonymizeStudents",
"description": null,
"args": [],
"type": {
@@ -2051,68 +2804,109 @@
"deprecationReason": null
},
{
- "name": "gradingPeriodId",
+ "name": "anonymousGrading",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingStandard",
+ "name": "anonymousInstructorAnnotations",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "GradingStandard",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingType",
+ "name": "anonymousStudentIdentities",
"description": null,
"args": [],
"type": {
- "kind": "ENUM",
- "name": "GradingType",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AnonymousStudentIdentity",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupCategoryId",
+ "name": "assessmentRequestsForCurrentUser",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssessmentRequest",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupSet",
- "description": null,
- "args": [],
+ "name": "assessmentRequestsForUser",
+ "description": "Assessment requests for a specific user where they are the assessor (peer reviewer)",
+ "args": [
+ {
+ "name": "userId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "OBJECT",
- "name": "GroupSet",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssessmentRequest",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupSubmissionsConnection",
- "description": "returns submissions grouped to one submission object per group",
+ "name": "assignedStudents",
+ "description": null,
"args": [
{
"name": "after",
@@ -2167,261 +2961,129 @@
"description": null,
"type": {
"kind": "INPUT_OBJECT",
- "name": "SubmissionSearchFilterInput",
+ "name": "AssignedStudentsFilter",
"ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "orderBy",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SubmissionSearchOrder",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "SubmissionConnection",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "hasGroupCategory",
- "description": "specifies that this assignment is a group assignment",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "hasMultipleDueDates",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "hasSubAssignments",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "hasSubmittedSubmissions",
- "description": "If true, the assignment has been submitted to by at least one student",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "htmlUrl",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "URL",
+ "name": "UserConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
- "description": null,
+ "name": "assignedToDates",
+ "description": "Standardized date hash visible to current user",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DateHash",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "importantDates",
+ "name": "assignmentGroup",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "inClosedGradingPeriod",
+ "name": "assignmentGroupId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "isNewQuiz",
+ "name": "assignmentOverrides",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "lockAt",
- "description": "the lock date (assignment is locked after this date)",
"args": [
{
- "name": "applyOverrides",
- "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": "true",
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "lockInfo",
- "description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "LockInfo",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "moderatedGrading",
- "description": null,
- "args": [],
"type": {
"kind": "OBJECT",
- "name": "ModeratedGrading",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "moderatedGradingEnabled",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "name": "AssignmentOverrideConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "modules",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "mySubAssignmentSubmissionsConnection",
+ "name": "assignmentTargetConnection",
"description": null,
"args": [
{
@@ -2471,253 +3133,293 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentTargetSortOrder",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "SubmissionConnection",
+ "name": "AssignmentOverrideConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
+ "name": "assignmentType",
+ "description": "Discriminator indicating the actual type of this assignment",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AssignmentTypeEnum",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "needsGradingCount",
- "description": null,
+ "name": "assignmentVisibility",
+ "description": "Returns empty array if visible to everyone",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nonDigitalSubmission",
- "description": null,
+ "name": "autoGradeAssignmentErrors",
+ "description": "Errors related to the assignment",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ }
},
- "isDeprecated": false,
- "deprecationReason": null
+ "isDeprecated": true,
+ "deprecationReason": "Use autoGradeEligibility instead"
},
{
- "name": "omitFromFinalGrade",
- "description": "If true, the assignment will be omitted from the student's final grade",
+ "name": "autoGradeAssignmentIssues",
+ "description": "Issues related to the assignment",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "EligibilityIssue",
"ofType": null
},
- "isDeprecated": false,
- "deprecationReason": null
+ "isDeprecated": true,
+ "deprecationReason": "Use autoGradeEligibility instead"
},
{
- "name": "onlyVisibleToOverrides",
- "description": "specifies that this assignment is only assigned to students for whom an\n `AssignmentOverride` applies.",
+ "name": "autoGradeEligibility",
+ "description": "Eligibility for auto-grading",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "AutoGradeEligibility",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "originalityReportVisibility",
+ "name": "canDuplicate",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "peerReviews",
+ "name": "canManageAssignTo",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "PeerReviews",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
- "description": "the assignment is out of this many points",
+ "name": "canUnpublish",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "position",
- "description": "determines the order this assignment is displayed in in its assignment group",
+ "name": "canUpdateRubricSelfAssessment",
+ "description": "specifies that the current user can update the rubric self-assessment.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postManually",
- "description": null,
+ "name": "checkpoints",
+ "description": "A list of checkpoints (also known as sub_assignments) that are associated with this assignment",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Checkpoint",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postPolicy",
+ "name": "course",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "PostPolicy",
+ "name": "Course",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postToSis",
- "description": "present if Sync Grades to SIS feature is enabled",
+ "name": "courseId",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "quiz",
+ "name": "description",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussion",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Quiz",
+ "name": "Discussion",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "restrictQuantitativeData",
- "description": "Is the current user restricted from viewing quantitative data",
+ "name": "dueAt",
+ "description": "when this assignment is due",
"args": [
{
- "name": "checkExtraPermissions",
- "description": "Check extra permissions in RQD method",
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
+ "defaultValue": "true",
"isDeprecated": false,
"deprecationReason": null
}
],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rubric",
+ "name": "dueDateRequired",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Rubric",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rubricAssessment",
+ "name": "expectsExternalSubmission",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentRubricAssessment",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rubricAssociation",
+ "name": "expectsSubmission",
"description": null,
"args": [],
- "type": {
- "kind": "OBJECT",
- "name": "RubricAssociation",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rubricSelfAssessmentEnabled",
- "description": "specifies that students can self-assess using the assignment rubric.",
- "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
@@ -2727,80 +3429,76 @@
"deprecationReason": null
},
{
- "name": "rubricUpdateUrl",
- "description": null,
+ "name": "gradeAsGroup",
+ "description": "specifies that students are being graded as a group (as opposed to being graded individually).",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "scoreStatistic",
+ "name": "gradeByQuestionEnabled",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentScoreStatistic",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sisId",
- "description": null,
+ "name": "gradeGroupStudentsIndividually",
+ "description": "If this is a group assignment, boolean flag indicating whether or not students will be graded individually.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "graded",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "AssignmentState",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionTypes",
- "description": null,
+ "name": "gradedSubmissionsExist",
+ "description": "If true, the assignment has at least one graded submission",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "SubmissionType",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionsConnection",
- "description": "submissions for this assignment",
+ "name": "graderIdentitiesConnection",
+ "description": "Grader identities if moderated assignment",
"args": [
{
"name": "after",
@@ -2849,78 +3547,42 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "SubmissionSearchFilterInput",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "orderBy",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SubmissionSearchOrder",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "SubmissionConnection",
+ "name": "GraderIdentityConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionsDownloads",
+ "name": "gradesPublished",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "supportsGradeByQuestion",
+ "name": "gradesPublishedAt",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "timeZoneEdited",
+ "name": "gradingPeriodId",
"description": null,
"args": [],
"type": {
@@ -2932,105 +3594,173 @@
"deprecationReason": null
},
{
- "name": "title",
+ "name": "gradingRole",
+ "description": "The grading role of the current user for this assignment. Returns null if the user does not have sufficient grading permissions.",
+ "args": [],
+ "type": {
+ "kind": "ENUM",
+ "name": "GradingRole",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingStandard",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "GradingStandard",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "totalGradedSubmissions",
+ "name": "gradingStandardId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "totalSubmissions",
+ "name": "gradingType",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "ENUM",
+ "name": "GradingType",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "groupCategoryId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "groupSet",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "GroupSet",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlockAt",
- "description": "the unlock date (assignment is unlocked after this date)",
+ "name": "groupSubmissionsConnection",
+ "description": "returns submissions grouped to one submission object per group",
"args": [
{
- "name": "applyOverrides",
- "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": "true",
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchOrder",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updatedAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "visibleToEveryone",
- "description": "specifies all other variables that can determine visiblity.",
+ "name": "hasGroupCategory",
+ "description": "specifies that this assignment is a group assignment",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -3043,67 +3773,29 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentConnection",
- "description": "The connection type for Assignment.",
- "fields": [
- {
- "name": "edges",
- "description": "A list of edges.",
+ "name": "hasMultipleDueDates",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "AssignmentEdge",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "hasPlagiarismTool",
+ "description": "Indicates if the assignment has LTI 2.0 plagiarism detection tool configured",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "Assignment",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
@@ -3111,396 +3803,173 @@
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "hasRubric",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentCreate",
- "description": null,
- "fields": null,
- "inputFields": [
+ },
{
- "name": "abGuid",
- "description": null,
+ "name": "hasSubAssignments",
+ "description": "Boolean: returns true if the assignment is checkpointed. A checkpointed assignment has checkpoints ( also known as sub_assignments)",
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentGroupId",
- "description": null,
+ "name": "hasSubmittedSubmissions",
+ "description": "If true, the assignment has been submitted to by at least one student",
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentOverrides",
+ "name": "htmlUrl",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentOverrideCreateOrUpdate",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueAt",
+ "name": "id",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "forCheckpoints",
+ "name": "importantDates",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingStandardId",
+ "name": "inClosedGradingPeriod",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingType",
+ "name": "isLockedByMasterCourse",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "GradingType",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupCategoryId",
- "description": null,
+ "name": "isNewQuiz",
+ "description": "Assignment is connected to a New Quiz",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "importantDates",
- "description": null,
+ "name": "lockAt",
+ "description": "the lock date (assignment is locked after this date)",
+ "args": [
+ {
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "intraReviews",
+ "name": "lockInfo",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "LockInfo",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "ltiAssetProcessorsConnection",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "onlyVisibleToOverrides",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "peerReviews",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentPeerReviewsUpdate",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pointsPossible",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "postToSis",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "unlockAt",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentEdge",
- "description": "An edge in a connection.",
- "fields": [
- {
- "name": "cursor",
- "description": "A cursor for use in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentFilter",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "userId",
- "description": "only return assignments for the given user. Defaults to\nthe current user.\n",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradingPeriodId",
- "description": "only return assignments for the given grading period. Defaults to\nthe current grading period. Pass `null` to return all assignments\n(irrespective of the assignment's grading period)\n",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": "only return assignments whose title matches this search term\n",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "assignmentsConnection",
- "description": "returns a list of assignments.\n\n**NOTE**: for courses with grading periods, this will only return grading\nperiods in the current course; see `AssignmentFilter` for more info.\nIn courses with grading periods that don't have students, it is necessary\nto *not* filter by grading period to list assignments.\n",
"args": [
{
"name": "after",
@@ -3549,43 +4018,95 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "AssignmentConnection",
+ "name": "LtiAssetProcessorConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "moderatedGrading",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ModeratedGrading",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "moderatedGradingEnabled",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradesConnection",
- "description": "grades for this assignment group",
+ "name": "moduleItems",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ModuleItem",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "modules",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "muted",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mySubAssignmentSubmissionsConnection",
+ "description": "submissions for sub-assignments belonging to the current user",
"args": [
{
"name": "after",
@@ -3634,114 +4155,86 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "GradesEnrollmentFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "GradesConnection",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupWeight",
+ "name": "name",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
+ "name": "needsGradingCount",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "position",
+ "name": "newQuizzesAnonymousParticipants",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rules",
+ "name": "nonDigitalSubmission",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentGroupRules",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sisId",
- "description": null,
+ "name": "omitFromFinalGrade",
+ "description": "If true, the assignment will be omitted from the student's final grade",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
- "description": null,
+ "name": "onlyVisibleToOverrides",
+ "description": "specifies that this assignment is only assigned to students for whom an\n `AssignmentOverride` applies.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "AssignmentGroupState",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
@@ -3749,156 +4242,80 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "originalityReportVisibility",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "AssignmentsConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentGroupConnection",
- "description": "The connection type for AssignmentGroup.",
- "fields": [
- {
- "name": "edges",
- "description": "A list of edges.",
+ "name": "parentAssignment",
+ "description": "The parent assignment (only for PeerReviewSubAssignment)",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "AssignmentGroupEdge",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "parentAssignmentId",
+ "description": "The parent assignment ID (only for PeerReviewSubAssignment)",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "peerReviewSubAssignment",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "PeerReviewSubAssignment",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentGroupEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "peerReviews",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "PeerReviews",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "pointsPossible",
+ "description": "the assignment is out of this many points",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentGroupRules",
- "description": null,
- "fields": [
+ },
{
- "name": "dropHighest",
- "description": "The highest N assignments are not included in grade calculations",
+ "name": "position",
+ "description": "determines the order this assignment is displayed in in its assignment group",
"args": [],
"type": {
"kind": "SCALAR",
@@ -3909,263 +4326,382 @@
"deprecationReason": null
},
{
- "name": "dropLowest",
- "description": "The lowest N assignments are not included in grade calculations",
+ "name": "postManually",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "neverDrop",
+ "name": "postPolicy",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
- }
- }
- },
+ "kind": "OBJECT",
+ "name": "PostPolicy",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "AssignmentGroupState",
- "description": "States that Assignment Group can be in",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "available",
- "description": null,
+ "name": "postToSis",
+ "description": "present if Sync Grades to SIS feature is enabled",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleted",
- "description": null,
+ "name": "provisionalGradingLocked",
+ "description": "Indicates if the user is locked out of provisional grading for this assignment.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentModeratedGradingUpdate",
- "description": null,
- "fields": null,
- "inputFields": [
+ },
{
- "name": "enabled",
+ "name": "published",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "finalGraderId",
+ "name": "quiz",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "Quiz",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "graderCommentsVisibleToGraders",
- "description": null,
+ "name": "restrictQuantitativeData",
+ "description": "Is the current user restricted from viewing quantitative data",
+ "args": [
+ {
+ "name": "checkExtraPermissions",
+ "description": "Check extra permissions in RQD method",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "graderCount",
+ "name": "rubric",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "Rubric",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "graderNamesVisibleToFinalGrader",
+ "name": "rubricAssessment",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "AssignmentRubricAssessment",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradersAnonymousToGraders",
+ "name": "rubricAssociation",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "RubricAssociation",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentOverride",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "rubricSelfAssessmentEnabled",
+ "description": "specifies that students can self-assess using the assignment rubric.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "allDay",
+ "name": "rubricUpdateUrl",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignment",
+ "name": "scheduledPost",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Assignment",
+ "name": "ScheduledPost",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextModule",
+ "name": "scoreStatistic",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Module",
+ "name": "AssignmentScoreStatistic",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "sisId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueAt",
+ "name": "state",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AssignmentState",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "submissionTypes",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "SubmissionType",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsConnection",
+ "description": "submissions for this assignment",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchOrder",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "submissionsDownloads",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "set",
- "description": "This object specifies what students this override applies to",
+ "name": "supportsGradeByQuestion",
+ "description": null,
"args": [],
"type": {
- "kind": "UNION",
- "name": "AssignmentOverrideSet",
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "suppressAssignment",
+ "description": "internal use",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "timeZoneEdited",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
@@ -4184,21 +4720,58 @@
"deprecationReason": null
},
{
- "name": "unassignItem",
+ "name": "totalGradedSubmissions",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlockAt",
+ "name": "totalSubmissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "type",
"description": null,
"args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlockAt",
+ "description": "the unlock date (assignment is unlocked after this date)",
+ "args": [
+ {
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "SCALAR",
"name": "DateTime",
@@ -4218,10 +4791,46 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "visibleToEveryone",
+ "description": "specifies all other variables that can determine visiblity.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
"interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssignedDates",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
{
"kind": "INTERFACE",
"name": "Timestamped",
@@ -4235,8 +4844,119 @@
},
{
"kind": "OBJECT",
- "name": "AssignmentOverrideConnection",
- "description": "The connection type for AssignmentOverride.",
+ "name": "AssignmentAllocationRules",
+ "description": "Allocation rules for peer review assignments",
+ "fields": [
+ {
+ "name": "count",
+ "description": "Total count of allocation rules (filtered if search is applied)",
+ "args": [
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AllocationRulesFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rulesConnection",
+ "description": "Paginated list of allocation rules",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AllocationRulesFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AllocationRuleConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentConnection",
+ "description": "The connection type for Assignment.",
"fields": [
{
"name": "edges",
@@ -4247,7 +4967,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "AssignmentOverrideEdge",
+ "name": "AssignmentEdge",
"ofType": null
}
},
@@ -4263,7 +4983,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "AssignmentOverride",
+ "name": "Assignment",
"ofType": null
}
},
@@ -4296,52 +5016,56 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "AssignmentOverrideCreateOrUpdate",
+ "name": "AssignmentCreate",
"description": null,
"fields": null,
"inputFields": [
{
- "name": "dueAt",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
+ "name": "abGuid",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "assetProcessors",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorCreateOrUpdate",
+ "ofType": null
+ }
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unassignItem",
+ "name": "assignmentGroupId",
"description": null,
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
"defaultValue": null,
@@ -4349,23 +5073,31 @@
"deprecationReason": null
},
{
- "name": "unlockAt",
+ "name": "assignmentOverrides",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentOverrideCreateOrUpdate",
+ "ofType": null
+ }
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseId",
+ "name": "dueAt",
"description": null,
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "DateTime",
"ofType": null
},
"defaultValue": null,
@@ -4373,11 +5105,11 @@
"deprecationReason": null
},
{
- "name": "courseSectionId",
- "description": null,
+ "name": "forCheckpoints",
+ "description": "if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
"defaultValue": null,
@@ -4385,7 +5117,7 @@
"deprecationReason": null
},
{
- "name": "groupId",
+ "name": "gradingStandardId",
"description": null,
"type": {
"kind": "SCALAR",
@@ -4397,11 +5129,11 @@
"deprecationReason": null
},
{
- "name": "noopId",
+ "name": "gradingType",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "ENUM",
+ "name": "GradingType",
"ofType": null
},
"defaultValue": null,
@@ -4409,131 +5141,31 @@
"deprecationReason": null
},
{
- "name": "studentIds",
+ "name": "groupCategoryId",
"description": null,
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "importantDates",
"description": null,
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentOverrideEdge",
- "description": "An edge in a connection.",
- "fields": [
- {
- "name": "cursor",
- "description": "A cursor for use in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "AssignmentOverride",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "UNION",
- "name": "AssignmentOverrideSet",
- "description": "Objects that can be assigned overridden dates",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "AdhocStudents",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Group",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Noop",
- "ofType": null
},
{
- "kind": "OBJECT",
- "name": "Section",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentPeerReviewsUpdate",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "anonymousReviews",
+ "name": "intraReviews",
"description": null,
"type": {
"kind": "SCALAR",
@@ -4545,11 +5177,11 @@
"deprecationReason": null
},
{
- "name": "automaticReviews",
+ "name": "lockAt",
"description": null,
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"defaultValue": null,
@@ -4557,11 +5189,11 @@
"deprecationReason": null
},
{
- "name": "count",
+ "name": "onlyVisibleToOverrides",
"description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"defaultValue": null,
@@ -4569,11 +5201,11 @@
"deprecationReason": null
},
{
- "name": "dueAt",
+ "name": "peerReviews",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentPeerReviewsUpdate",
"ofType": null
},
"defaultValue": null,
@@ -4581,11 +5213,11 @@
"deprecationReason": null
},
{
- "name": "enabled",
+ "name": "pointsPossible",
"description": null,
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Float",
"ofType": null
},
"defaultValue": null,
@@ -4593,7 +5225,7 @@
"deprecationReason": null
},
{
- "name": "intraReviews",
+ "name": "postToSis",
"description": null,
"type": {
"kind": "SCALAR",
@@ -4603,123 +5235,110 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentRubricAssessment",
- "description": "RubricAssessments on an Assignment",
- "fields": [
- {
- "name": "assessmentsCount",
- "description": "The count of RubricAssessments on an Assignment.",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentScoreStatistic",
- "description": "Statistics for an Assignment",
- "fields": [
+ },
{
- "name": "count",
- "description": "The number of scores for the assignment",
- "args": [],
+ "name": "secureParams",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lowerQ",
- "description": "The lower quartile score for the assignment",
- "args": [],
+ "name": "suppressAssignment",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "maximum",
- "description": "The maximum score for the assignment",
- "args": [],
+ "name": "unlockAt",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "DateTime",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mean",
- "description": "The mean score for the assignment",
- "args": [],
+ "name": "courseId",
+ "description": null,
"type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "median",
- "description": "The median score for the assignment",
- "args": [],
+ "name": "name",
+ "description": null,
"type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "minimum",
- "description": "The minimum score for the assignment",
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "upperQ",
- "description": "The upper quartile score for the assignment",
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Float",
+ "kind": "OBJECT",
+ "name": "Assignment",
"ofType": null
},
"isDeprecated": false,
@@ -4734,133 +5353,41 @@
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "AssignmentState",
- "description": "States that an Assignment can be in",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "unpublished",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "published",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleted",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "duplicating",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "failed_to_duplicate",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "importing",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "fail_to_import",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "migrating",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "failed_to_migrate",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "outcome_alignment_cloning",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "failed_to_clone_outcome_alignment",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "AssignmentTargetSortField",
- "description": "Field to sort by",
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentFilter",
+ "description": null,
"fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "title",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "inputFields": [
{
- "name": "due_at",
- "description": null,
+ "name": "userId",
+ "description": "only return assignments for the given user. Defaults to\nthe current user.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlock_at",
- "description": null,
+ "name": "gradingPeriodId",
+ "description": "only return assignments for the given grading period. Defaults to\nthe current grading period. Pass `null` to return all assignments\n(irrespective of the assignment's grading period)\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lock_at",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentTargetSortOrder",
- "description": "Specify a sort order for the results",
- "fields": null,
- "inputFields": [
- {
- "name": "direction",
- "description": null,
+ "name": "searchTerm",
+ "description": "only return assignments whose title matches this search term\n",
"type": {
- "kind": "ENUM",
- "name": "OrderDirection",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
@@ -4868,15 +5395,19 @@
"deprecationReason": null
},
{
- "name": "field",
- "description": null,
+ "name": "submissionTypes",
+ "description": "only return assignments for the given submission types. Defaults to\nall.\n",
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "AssignmentTargetSortField",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "SubmissionType",
+ "ofType": null
+ }
}
},
"defaultValue": null,
@@ -4891,243 +5422,26 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "AssignmentUpdate",
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
"description": null,
- "fields": null,
- "inputFields": [
+ "fields": [
{
- "name": "abGuid",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
- {
- "name": "assignmentGroupId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "assignmentOverrides",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentOverrideCreateOrUpdate",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "dueAt",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "forCheckpoints",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradingStandardId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradingType",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "GradingType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "groupCategoryId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "importantDates",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "intraReviews",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "lockAt",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "onlyVisibleToOverrides",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "peerReviews",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentPeerReviewsUpdate",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pointsPossible",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "postToSis",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "unlockAt",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "setAssignment",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INTERFACE",
- "name": "AssignmentsConnectionInterface",
- "description": null,
- "fields": [
{
"name": "assignmentsConnection",
"description": "returns a list of assignments.\n\n**NOTE**: for courses with grading periods, this will only return grading\nperiods in the current course; see `AssignmentFilter` for more info.\nIn courses with grading periods that don't have students, it is necessary\nto *not* filter by grading period to list assignments.\n",
@@ -5194,40 +5508,32 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
- "ofType": null
},
{
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "AuditLogs",
- "description": null,
- "fields": [
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
- "name": "mutationLogs",
- "description": "A list of all recent graphql mutations run on the specified object",
+ "name": "gradesConnection",
+ "description": "grades for this assignment group",
"args": [
{
"name": "after",
@@ -5278,39 +5584,11 @@
"deprecationReason": null
},
{
- "name": "assetString",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "endTime",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "startTime",
+ "name": "filter",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "INPUT_OBJECT",
+ "name": "GradesEnrollmentFilter",
"ofType": null
},
"defaultValue": null,
@@ -5320,200 +5598,78 @@
],
"type": {
"kind": "OBJECT",
- "name": "MutationLogConnection",
+ "name": "GradesConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "AutoLeaderPolicy",
- "description": "Determines if/how a leader is chosen for each group",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "random",
- "description": "a leader is chosen at random",
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "first",
- "description": "the first student assigned to the group is the leader",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "AutoLeaderType",
- "description": "Method of selecting an automatic leader for groups",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "first",
+ "name": "groupWeight",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "random",
+ "name": "id",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "Boolean",
- "description": "Represents `true` or `false` values.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Checkpoint",
- "description": null,
- "fields": [
+ },
{
- "name": "assignmentOverrides",
+ "name": "name",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentOverrideConnection",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueAt",
- "description": "when this checkpoint is due",
- "args": [
- {
- "name": "applyOverrides",
- "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": "true",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "position",
+ "description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
- "description": "when this checkpoint is closed",
- "args": [
- {
- "name": "applyOverrides",
- "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": "true",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "rules",
+ "description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "AssignmentGroupRules",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "sisId",
"description": null,
"args": [],
"type": {
@@ -5525,15 +5681,15 @@
"deprecationReason": null
},
{
- "name": "onlyVisibleToOverrides",
- "description": "specifies that this checkpoint is only assigned to students for whom an override applies",
+ "name": "state",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "ENUM",
+ "name": "AssignmentGroupState",
"ofType": null
}
},
@@ -5541,207 +5697,25 @@
"deprecationReason": null
},
{
- "name": "pointsPossible",
- "description": "the checkpoint is out of this many points",
+ "name": "updatedAt",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssignmentsConnectionInterface",
+ "ofType": null
},
- {
- "name": "tag",
- "description": "the tag of the checkpoint",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "unlockAt",
- "description": "when this checkpoint is available",
- "args": [
- {
- "name": "applyOverrides",
- "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": "true",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "CheckpointLabelType",
- "description": "Valid labels for discussion checkpoint types",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "reply_to_topic",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "reply_to_entry",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CommentBankItem",
- "description": "Comment bank items",
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "comment",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updatedAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "userId",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
{
"kind": "INTERFACE",
"name": "LegacyIDInterface",
@@ -5765,8 +5739,8 @@
},
{
"kind": "OBJECT",
- "name": "CommentBankItemConnection",
- "description": "The connection type for CommentBankItem.",
+ "name": "AssignmentGroupConnection",
+ "description": "The connection type for AssignmentGroup.",
"fields": [
{
"name": "edges",
@@ -5777,7 +5751,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "CommentBankItemEdge",
+ "name": "AssignmentGroupEdge",
"ofType": null
}
},
@@ -5793,7 +5767,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "CommentBankItem",
+ "name": "AssignmentGroup",
"ofType": null
}
},
@@ -5826,7 +5800,7 @@
},
{
"kind": "OBJECT",
- "name": "CommentBankItemEdge",
+ "name": "AssignmentGroupEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -5851,7 +5825,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "CommentBankItem",
+ "name": "AssignmentGroup",
"ofType": null
},
"isDeprecated": false,
@@ -5867,70 +5841,37 @@
},
{
"kind": "OBJECT",
- "name": "CommunicationChannel",
+ "name": "AssignmentGroupRules",
"description": null,
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "dropHighest",
+ "description": "The highest N assignments are not included in grade calculations",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
- "description": null,
+ "name": "dropLowest",
+ "description": "The lowest N assignments are not included in grade calculations",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "neverDrop",
"description": null,
"args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "notificationPolicies",
- "description": null,
- "args": [
- {
- "name": "contextType",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "NotificationPreferencesContextType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
"kind": "LIST",
"name": null,
@@ -5939,130 +5880,127 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "NotificationPolicy",
+ "name": "Assignment",
"ofType": null
}
}
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AssignmentGroupState",
+ "description": "States that Assignment Group can be in",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "available",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "notificationPolicyOverrides",
+ "name": "deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentModeratedGradingUpdate",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "enabled",
"description": null,
- "args": [
- {
- "name": "accountId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "contextType",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "NotificationPreferencesContextType",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "NotificationPolicy",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "path",
+ "name": "finalGraderId",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pathType",
+ "name": "graderCommentsVisibleToGraders",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "graderCount",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
+ "name": "graderNamesVisibleToFinalGrader",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
+ "name": "gradersAnonymousToGraders",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
+ "interfaces": null,
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -6070,27 +6008,23 @@
},
{
"kind": "OBJECT",
- "name": "ContentTag",
- "description": "An edge in a connection.",
+ "name": "AssignmentOverride",
+ "description": null,
"fields": [
{
"name": "_id",
"description": "legacy canvas id",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canUnlink",
+ "name": "allDay",
"description": null,
"args": [],
"type": {
@@ -6102,7 +6036,7 @@
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "allDayDate",
"description": null,
"args": [],
"type": {
@@ -6114,63 +6048,55 @@
"deprecationReason": null
},
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "assignment",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "group",
+ "name": "assignmentId",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "contextModule",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "createdAt",
+ "description": null,
"args": [],
"type": {
- "kind": "UNION",
- "name": "ContentTagContent",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "dueAt",
"description": null,
"args": [],
"type": {
@@ -6180,595 +6106,334 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ContentTagConnection",
- "description": "The connection type for ContentTagContent.",
- "fields": [
- {
- "name": "edges",
- "description": "A list of edges.",
+ "name": "id",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ContentTag",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "lockAt",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "UNION",
- "name": "ContentTagContent",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "UNION",
- "name": "ContentTagContent",
- "description": "Content of a Content Tag",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "LearningOutcome",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Conversation",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "set",
+ "description": "This object specifies what students this override applies to",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "UNION",
+ "name": "AssignmentOverrideSet",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canReply",
+ "name": "title",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextAssetString",
+ "name": "unassignItem",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextId",
+ "name": "unlockAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextName",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "contextType",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentOverrideConnection",
+ "description": "The connection type for AssignmentOverride.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentOverrideEdge",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "conversationMessagesConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdBefore",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "participants",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "ConversationMessageConnection",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentOverride",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "conversationMessagesCount",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentOverrideCreateOrUpdate",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
- "name": "conversationParticipantsConnection",
+ "name": "dueAt",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
- "kind": "OBJECT",
- "name": "ConversationParticipantConnection",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "id",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isPrivate",
+ "name": "lockAt",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subject",
+ "name": "unassignItem",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "unlockAt",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
"name": "DateTime",
"ofType": null
},
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ConversationMessage",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "attachments",
+ "name": "courseId",
"description": null,
- "args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "File",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "attachmentsConnection",
+ "name": "courseSectionId",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
- "kind": "OBJECT",
- "name": "FileConnection",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "author",
+ "name": "groupId",
"description": null,
- "args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "body",
+ "name": "noopId",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "conversationId",
+ "name": "studentIds",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "title",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentOverrideEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "id",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
@@ -6776,40 +6441,16 @@
"deprecationReason": null
},
{
- "name": "mediaComment",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
"kind": "OBJECT",
- "name": "MediaObject",
+ "name": "AssignmentOverride",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "recipients",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "User",
- "ofType": null
- }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
}
],
"inputFields": null,
@@ -6820,297 +6461,165 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "ConversationMessageConnection",
- "description": "The connection type for ConversationMessage.",
- "fields": [
+ "kind": "UNION",
+ "name": "AssignmentOverrideSet",
+ "description": "Objects that can be assigned overridden dates",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": [
{
- "name": "edges",
- "description": "A list of edges.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ConversationMessageEdge",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "AdhocStudents",
+ "ofType": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ConversationMessage",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ConversationMessageEdge",
- "description": "An edge in a connection.",
- "fields": [
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Noop",
+ "ofType": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "ConversationMessage",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Section",
+ "ofType": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "ConversationParticipant",
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentPeerReviewsUpdate",
"description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "fields": null,
+ "inputFields": [
{
- "name": "conversation",
+ "name": "acrossSections",
"description": null,
- "args": [],
"type": {
- "kind": "OBJECT",
- "name": "Conversation",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "anonymousReviews",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "label",
+ "name": "automaticReviews",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "messages",
+ "name": "count",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
- "kind": "OBJECT",
- "name": "ConversationMessageConnection",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subscribed",
+ "name": "dueAt",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "enabled",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "user",
+ "name": "intraReviews",
"description": null,
- "args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "userId",
+ "name": "submissionRequired",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentRubricAssessment",
+ "description": "RubricAssessments on an Assignment",
+ "fields": [
{
- "name": "workflowState",
- "description": null,
+ "name": "assessmentsCount",
+ "description": "The count of RubricAssessments on an Assignment.",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -7125,93 +6634,88 @@
},
{
"kind": "OBJECT",
- "name": "ConversationParticipantConnection",
- "description": "The connection type for ConversationParticipant.",
+ "name": "AssignmentScoreStatistic",
+ "description": "Statistics for an Assignment",
"fields": [
{
- "name": "edges",
- "description": "A list of edges.",
+ "name": "count",
+ "description": "The number of scores for the assignment",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ConversationParticipantEdge",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "lowerQ",
+ "description": "The lower quartile score for the assignment",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ConversationParticipant",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "maximum",
+ "description": "The maximum score for the assignment",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ConversationParticipantEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "mean",
+ "description": "The mean score for the assignment",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "median",
+ "description": "The median score for the assignment",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "ConversationParticipant",
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "minimum",
+ "description": "The minimum score for the assignment",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "upperQ",
+ "description": "The upper quartile score for the assignment",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
@@ -7226,228 +6730,469 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "Course",
- "description": null,
- "fields": [
+ "kind": "ENUM",
+ "name": "AssignmentState",
+ "description": "States that an Assignment can be in",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
+ "name": "unpublished",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "account",
+ "name": "published",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Account",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "activityStream",
+ "name": "deleted",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "ActivityStream",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "allowFinalGradeOverride",
+ "name": "duplicating",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "applyGroupWeights",
+ "name": "failed_to_duplicate",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assetString",
+ "name": "importing",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentGroups",
+ "name": "fail_to_import",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentGroupsConnection",
+ "name": "migrating",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "failed_to_migrate",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcome_alignment_cloning",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "failed_to_clone_outcome_alignment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AssignmentTargetSortField",
+ "description": "Field to sort by",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "title",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "due_at",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlock_at",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lock_at",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentTargetSortOrder",
+ "description": "Specify a sort order for the results",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "direction",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentGroupConnection",
+ "kind": "ENUM",
+ "name": "OrderDirection",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentPostPolicies",
- "description": "PostPolicies for assignments within a course\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
+ "name": "field",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AssignmentTargetSortField",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AssignmentTypeEnum",
+ "description": "Assignment subtypes for filtering queries and discriminating response types",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "ASSIGNMENT",
+ "description": "Standard assignment",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "PEER_REVIEW_SUB_ASSIGNMENT",
+ "description": "Peer review sub-assignment",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentUpdate",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "abGuid",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
"kind": "SCALAR",
"name": "String",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assetProcessors",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorCreateOrUpdate",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentGroupId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentOverrides",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentOverrideCreateOrUpdate",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "dueAt",
+ "description": null,
"type": {
- "kind": "OBJECT",
- "name": "PostPolicyConnection",
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "forCheckpoints",
+ "description": "if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingStandardId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "GradingType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupCategoryId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "importantDates",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "intraReviews",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyVisibleToOverrides",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "peerReviews",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentPeerReviewsUpdate",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pointsPossible",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postToSis",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "secureParams",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "suppressAssignment",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "setAssignment",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "AssignmentsConnectionInterface",
+ "description": null,
+ "fields": [
{
"name": "assignmentsConnection",
"description": "returns a list of assignments.\n\n**NOTE**: for courses with grading periods, this will only return grading\nperiods in the current course; see `AssignmentFilter` for more info.\nIn courses with grading periods that don't have students, it is necessary\nto *not* filter by grading period to list assignments.\n",
@@ -7514,112 +7259,123 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
+ "ofType": null
},
{
- "name": "availableModerators",
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEvent",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UserConnection",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "availableModeratorsCount",
+ "name": "eventType",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AuditEventType",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "externalTool",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AuditEventExternalTool",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseCode",
- "description": "course short name",
+ "name": "payload",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "JSON",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseNickname",
+ "name": "quiz",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "AuditEventQuiz",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
@@ -7631,503 +7387,601 @@
"deprecationReason": null
},
{
- "name": "customGradeStatusesConnection",
+ "name": "user",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "CustomGradeStatusConnection",
+ "name": "AuditEventUser",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "dashboardCard",
- "description": "returns dashboard card information for this course",
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventConnection",
+ "description": "The connection type for AuditEvent.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "CourseDashboardCard",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AuditEventEdge",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionsConnection",
- "description": "returns a list of discussions.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "DiscussionFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionConnection",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AuditEvent",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "enrollmentsConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "EnrollmentFilterInput",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "EnrollmentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "externalToolsConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "ExternalToolFilterInput",
- "ofType": null
- },
- "defaultValue": "{}",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "ExternalToolConnection",
+ "name": "AuditEvent",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventExternalTool",
+ "description": null,
+ "fields": [
{
- "name": "filesConnection",
- "description": "returns a list of files.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "FileFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "FileConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradeStatuses",
+ "name": "name",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "CourseGradeStatus",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingPeriodsConnection",
+ "name": "role",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AuditEventRole",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventQuiz",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "GradingPeriodConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingStandard",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "GradingStandard",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupSets",
- "description": "Project group sets for this course.",
- "args": [
- {
- "name": "includeNonCollaborative",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": "false",
- "isDeprecated": false,
- "deprecationReason": null
+ "name": "role",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AuditEventRole",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AuditEventRole",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "student",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "final_grader",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "admin",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "grader",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AuditEventType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "assignment_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignment_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_area_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_area_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_area_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_comment_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_comment_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_comment_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_free_draw_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_free_draw_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_free_draw_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_free_text_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_free_text_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_free_text_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_highlight_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_highlight_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_highlight_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_point_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_point_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_point_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_strikeout_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_strikeout_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "docviewer_strikeout_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "grades_posted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "provisional_grade_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "provisional_grade_selected",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "provisional_grade_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubric_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubric_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubric_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submission_comment_created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submission_comment_deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submission_comment_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submission_updated",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventUser",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "GroupSet",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupSetsConnection",
- "description": "Project group sets for this course.",
+ "name": "name",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "role",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AuditEventRole",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditLogs",
+ "description": null,
+ "fields": [
+ {
+ "name": "mutationLogs",
+ "description": "A list of all recent graphql mutations run on the specified object",
"args": [
{
"name": "after",
@@ -8178,60 +8032,27 @@
"deprecationReason": null
},
{
- "name": "includeNonCollaborative",
+ "name": "assetString",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": "false",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "GroupSetConnection",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "groupsConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
+ "name": "endTime",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "DateTime",
"ofType": null
},
"defaultValue": null,
@@ -8239,64 +8060,13912 @@
"deprecationReason": null
},
{
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
+ "name": "startTime",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "DateTime",
"ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "includeNonCollaborative",
- "description": null,
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "MutationLogConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AutoGradeEligibility",
+ "description": null,
+ "fields": [
+ {
+ "name": "issues",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AutoGradeIssue",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AutoGradeIssue",
+ "description": null,
+ "fields": [
+ {
+ "name": "message",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "AutoGradeSubmissionInput",
+ "description": "Autogenerated input type of AutoGradeSubmission",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AutoGradeSubmissionPayload",
+ "description": "Autogenerated return type of AutoGradeSubmission.",
+ "fields": [
+ {
+ "name": "error",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "progress",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Progress",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AutoLeaderPolicy",
+ "description": "Determines if/how a leader is chosen for each group",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "random",
+ "description": "a leader is chosen at random",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "the first student assigned to the group is the leader",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "AutoLeaderType",
+ "description": "Method of selecting an automatic leader for groups",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "first",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "random",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "description": "Represents `true` or `false` values.",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Checkpoint",
+ "description": null,
+ "fields": [
+ {
+ "name": "assignedToDates",
+ "description": "Standardized date hash visible to current user",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DateHash",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentOverrides",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AssignmentOverrideConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "dueAt",
+ "description": "when this checkpoint is due",
+ "args": [
+ {
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": "false",
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": "when this checkpoint is closed",
+ "args": [
+ {
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyVisibleToOverrides",
+ "description": "specifies that this checkpoint is only assigned to students for whom an override applies",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pointsPossible",
+ "description": "the checkpoint is out of this many points",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "tag",
+ "description": "the tag of the checkpoint",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlockAt",
+ "description": "when this checkpoint is available",
+ "args": [
+ {
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
"isDeprecated": false,
"deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "GroupConnection",
- "ofType": null
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssignedDates",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CheckpointLabelType",
+ "description": "Valid labels for discussion checkpoint types",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "reply_to_topic",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reply_to_entry",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CommentBankItem",
+ "description": "Comment bank items",
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "comment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CommentBankItemConnection",
+ "description": "The connection type for CommentBankItem.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CommentBankItemEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CommentBankItem",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "TotalCountPageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CommentBankItemEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CommentBankItem",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CommunicationChannel",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "notificationPolicies",
+ "description": null,
+ "args": [
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "NotificationPreferencesContextType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "NotificationPolicy",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "notificationPolicyOverrides",
+ "description": null,
+ "args": [
+ {
+ "name": "accountId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "NotificationPreferencesContextType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "NotificationPolicy",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "path",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pathType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ContentTag",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canUnlink",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "group",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroup",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "UNION",
+ "name": "ContentTagContent",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ContentTagConnection",
+ "description": "The connection type for ContentTagContent.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ContentTag",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "UNION",
+ "name": "ContentTagContent",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "UNION",
+ "name": "ContentTagContent",
+ "description": "Content of a Content Tag",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "LearningOutcome",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Conversation",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canReply",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextAssetString",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversationMessagesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdBefore",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "participants",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ConversationMessageConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversationMessagesCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversationParticipantsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ConversationParticipantConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isPrivate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subject",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ConversationMessage",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "attachments",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "attachmentsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "FileConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "author",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "body",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversationId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaComment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "MediaObject",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "recipients",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ConversationMessageConnection",
+ "description": "The connection type for ConversationMessage.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ConversationMessageEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ConversationMessage",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ConversationMessageEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ConversationMessage",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ConversationParticipant",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversation",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Conversation",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "label",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "messages",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ConversationMessageConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subscribed",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "user",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "workflowState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ConversationParticipantConnection",
+ "description": "The connection type for ConversationParticipant.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ConversationParticipantEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ConversationParticipant",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ConversationParticipantEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ConversationParticipant",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "account",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Account",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "activityStream",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ActivityStream",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowFinalGradeOverride",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "applyGroupWeights",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assetString",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentGroups",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentGroupsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentGroupConnection",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentPostPolicies",
+ "description": "PostPolicies for assignments within a course\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PostPolicyConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentsConnection",
+ "description": "returns a list of assignments.\n\n**NOTE**: for courses with grading periods, this will only return grading\nperiods in the current course; see `AssignmentFilter` for more info.\nIn courses with grading periods that don't have students, it is necessary\nto *not* filter by grading period to list assignments.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssignmentConnection",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "availableModerators",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UserConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "availableModeratorsCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "careerLearningLibraryOnly",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseCode",
+ "description": "course short name",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseNickname",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "customGradeStatusesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatusConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "dashboardCard",
+ "description": "returns dashboard card information for this course",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CourseDashboardCard",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionsConnection",
+ "description": "returns a list of discussions.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "EnrollmentFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "EnrollmentConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "externalToolsConnection",
+ "description": "returns a list of external tools.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "ExternalToolFilterInput",
+ "ofType": null
+ },
+ "defaultValue": "{}",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ExternalToolConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filesConnection",
+ "description": "returns a list of files.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "FileFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "FileConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "foldersConnection",
+ "description": "Folders for this course.",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "FolderConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradeStatuses",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "CourseGradeStatus",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingPeriodsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GradingPeriodConnection",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingStandard",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GradingStandard",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupSets",
+ "description": "Project group sets for this course.",
+ "args": [
+ {
+ "name": "includeNonCollaborative",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupSetsConnection",
+ "description": "Project group sets for this course.",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeNonCollaborative",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GroupSetConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeNonCollaborative",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GroupConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "horizonCourse",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "imageUrl",
+ "description": "Returns a URL for the course image (this is the image used on dashboard\ncourse cards)\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "moduleProgressionStatistics",
+ "description": "Returns module progression statistics for the current user",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ModuleProgressionStatistics",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "modulesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": "Filter modules by various criteria",
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "ModuleFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ModuleConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeAlignmentStats",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CourseOutcomeAlignmentStats",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeCalculationMethod",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "OutcomeCalculationMethod",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeProficiency",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "OutcomeProficiency",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pagesConnection",
+ "description": "returns a list of wiki pages.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "PageFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PageConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "permissions",
+ "description": "returns permission information for the current user in this course",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CoursePermissions",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postPolicy",
+ "description": "A course-specific post policy",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PostPolicy",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "quizzesConnection",
+ "description": "returns a list of quizzes.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "QuizFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "QuizConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "relevantGradingPeriodGroup",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GradingPeriodGroup",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootOutcomeGroup",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroup",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubricsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": "Filter by rubric ID",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "RubricConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sectionsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseSectionsFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "SectionConnection",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "settings",
+ "description": "Settings for the course",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CourseSettings",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "CourseWorkflowState",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionStatistics",
+ "description": "Returns submission-related statistics for the current user",
+ "args": [
+ {
+ "name": "observedUserId",
+ "description": "Optional observed user ID for observer statistics",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionStatistics",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsConnection",
+ "description": "all the submissions for assignments in this course",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionOrderCriteria",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "studentIds",
+ "description": "Only return submissions for the given students.",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "syllabusBody",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "term",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Term",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "usersConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userIds",
+ "description": "Only include users with the given ids.\n\n**This field is deprecated, use `filter: {userIds}` instead.**\n",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseUsersFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sort",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseUsersSortInputType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UserConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "usersConnectionCount",
+ "description": null,
+ "args": [
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseUsersFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sort",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseUsersSortInputType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userIds",
+ "description": "Only include users with the given ids.\n\n**This field is deprecated, use `filter: {userIds}` instead.**\n",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssetString",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "AssignmentsConnectionInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "DiscussionsConnectionInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "ExternalToolsConnectionInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "FilesConnectionInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "PagesConnectionInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "QuizzesConnectionInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseConnection",
+ "description": "The connection type for Course.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CourseEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseDashboardCard",
+ "description": "A card on the course dashboard",
+ "fields": [
+ {
+ "name": "assetString",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canChangeCoursePublishState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canManage",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canReadAnnouncements",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "color",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseCode",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "defaultView",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "frontPageTitle",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "href",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "image",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isFavorited",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isHomeroom",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isK5Subject",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "links",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CourseDashboardCardLink",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "longName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "observee",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "originalName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pagesUrl",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "position",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "published",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "shortName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subtitle",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "term",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Term",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "useClassicFont",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseDashboardCardLink",
+ "description": "A link on a course dashboard card",
+ "fields": [
+ {
+ "name": "cssClass",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hidden",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "icon",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "label",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "path",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseFilterableEnrollmentState",
+ "description": "Users in a course can be returned based on these enrollment states",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "invited",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "creation_pending",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "active",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rejected",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "completed",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "inactive",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseFilterableEnrollmentType",
+ "description": "Users in a course can be returned based on these enrollment types",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "StudentEnrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "TeacherEnrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "TaEnrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ObserverEnrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "DesignerEnrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "StudentViewEnrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseGradeStatus",
+ "description": "Grade statuses that can be applied to submissions in a course",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "late",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "missing",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "none",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "excused",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "extended",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseOutcomeAlignmentStats",
+ "description": null,
+ "fields": [
+ {
+ "name": "alignedArtifacts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "alignedOutcomes",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "artifactAlignments",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "totalAlignments",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "totalArtifacts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "totalOutcomes",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CoursePermissions",
+ "description": null,
+ "fields": [
+ {
+ "name": "becomeUser",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "manageGrades",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sendMessages",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "viewAllGrades",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "viewAnalytics",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseProgression",
+ "description": null,
+ "fields": [
+ {
+ "name": "incompleteModulesConnection",
+ "description": "Modules are ordered by position",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ModuleProgressionConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "requirements",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CourseRequirements",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseRequirements",
+ "description": null,
+ "fields": [
+ {
+ "name": "completed",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "completionPercentage",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "total",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseSectionsFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "assignmentId",
+ "description": "Only include sections associated with users assigned to this assignment",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CourseSettings",
+ "description": "Settings for a course",
+ "fields": [
+ {
+ "name": "allowFinalGradeOverride",
+ "description": "Whether the course allows final grade override",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowStudentAnonymousDiscussionTopics",
+ "description": "Whether the course allows students to create anonymous discussion topics",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowStudentDiscussionEditing",
+ "description": "Whether the course allows students to edit their discussion posts",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowStudentDiscussionReporting",
+ "description": "Whether the course allows students to report discussion posts",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowStudentDiscussionTopics",
+ "description": "Whether the course allows students to create discussion topics",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowStudentForumAttachments",
+ "description": "Whether the course allows students to attach files to discussion posts",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowStudentOrganizedGroups",
+ "description": "Whether the course allows student organized groups",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "bannerImageId",
+ "description": "ID of the course banner image",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "bannerImageUrl",
+ "description": "URL to the course banner image",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conditionalRelease",
+ "description": "Whether the course has conditional release enabled",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseColor",
+ "description": "Color for the course",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "defaultDueTime",
+ "description": "Default due time for the course",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filterSpeedGraderByStudentGroup",
+ "description": "Whether the course filters SpeedGrader by student group",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "friendlyName",
+ "description": "Friendly name for the course",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradePassbackSetting",
+ "description": "Grade passback setting for the course",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingStandardEnabled",
+ "description": "Whether the course has a grading standard enabled",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingStandardId",
+ "description": "ID of the grading standard, if enabled",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hideDistributionGraphs",
+ "description": "Whether the course hides grade distribution graphs from students",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hideFinalGrades",
+ "description": "Whether the course hides final grades from students",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hideSectionsOnCourseUsersPage",
+ "description": "Whether the course hides sections on the course users page",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "homePageAnnouncementLimit",
+ "description": "Maximum number of announcements to show on the home page",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "homeroomCourse",
+ "description": "Whether the course is a homeroom course",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "imageId",
+ "description": "ID of the course image",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "imageUrl",
+ "description": "URL to the course image",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAllAnnouncements",
+ "description": "Whether the course locks all announcements",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "restrictQuantitativeData",
+ "description": "How the course restricts quantitative data for students",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "restrictStudentFutureView",
+ "description": "Whether the course restricts students from viewing future courses",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "restrictStudentPastView",
+ "description": "Whether the course restricts students from viewing past courses",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "showAnnouncementsOnHomePage",
+ "description": "Whether the course shows announcements on the home page",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "showStudentOnlyModuleId",
+ "description": "ID of the module that should only be shown to students",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "showTeacherOnlyModuleId",
+ "description": "ID of the module that should only be shown to teachers",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "syllabusCourseSummary",
+ "description": "Whether the course shows the syllabus course summary",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "usageRightsRequired",
+ "description": "Whether the course requires usage rights for uploaded files",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseUsersFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "enrollmentRoleIds",
+ "description": "Only return users with the specified enrollment role ids",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentStates",
+ "description": "only return users with the given enrollment state. defaults\nto `invited`, `creation_pending`, `active`\n",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "CourseFilterableEnrollmentState",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentTypes",
+ "description": "Only return users with the specified enrollment types",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "CourseFilterableEnrollmentType",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "excludeTestStudents",
+ "description": "Exclude test students from results",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchTerm",
+ "description": "Only return users that match the given search term. The search\nterm is matched against the user's name and depending on current\nuser permissions against the user's login id, email and sisid\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userIds",
+ "description": "only include users with the given ids",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseUsersSortDirectionType",
+ "description": "Order direction for results",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "asc",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "desc",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseUsersSortFieldType",
+ "description": "Sort field for results",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "name",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sis_id",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "login_id",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "total_activity_time",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last_activity_at",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "section_name",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "role",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CourseUsersSortInputType",
+ "description": "Specify sort field and direction for results",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "direction",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "CourseUsersSortDirectionType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "field",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "CourseUsersSortFieldType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseWorkSubmissionsOrderField",
+ "description": "Fields to order course work submissions by",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "graded_at",
+ "description": "Order by graded date",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "due_at",
+ "description": "Order by due date",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "CourseWorkflowState",
+ "description": "States that Courses can be in",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "created",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "claimed",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "available",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "completed",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateAccountDomainLookupInput",
+ "description": "Autogenerated input type of CreateAccountDomainLookup",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "accountDomainId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "authenticationProvider",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateAccountDomainLookupPayload",
+ "description": "Autogenerated return type of CreateAccountDomainLookup.",
+ "fields": [
+ {
+ "name": "accountDomainLookup",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AccountDomainLookup",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateAllocationRuleInput",
+ "description": "Autogenerated input type of CreateAllocationRule",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "appliesToAssessor",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assesseeIds",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assessorIds",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mustReview",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reciprocal",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reviewPermitted",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateAllocationRulePayload",
+ "description": "Autogenerated return type of CreateAllocationRule.",
+ "fields": [
+ {
+ "name": "allocationErrors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AllocationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allocationRules",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AllocationRule",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateAssignmentInput",
+ "description": "Autogenerated input type of CreateAssignment",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "allowedAttempts",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowedExtensions",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousGrading",
+ "description": "requires anonymous_marking course feature to be set to true",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousInstructorAnnotations",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentGroupId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentOverrides",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentOverrideCreateOrUpdate",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "description",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "dueAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "forCheckpoints",
+ "description": "if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradeGroupStudentsIndividually",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingStandardId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "GradingType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupCategoryId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupSetId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "moderatedGrading",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentModeratedGradingUpdate",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "moduleIds",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "omitFromFinalGrade",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyVisibleToOverrides",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "peerReviews",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentPeerReviewsUpdate",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pointsPossible",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "position",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postToSis",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "AssignmentState",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionTypes",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "SubmissionType",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "suppressAssignment",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "secureParams",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateAssignmentPayload",
+ "description": "Autogenerated return type of CreateAssignment.",
+ "fields": [
+ {
+ "name": "assignment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateCommentBankItemInput",
+ "description": "Autogenerated input type of CreateCommentBankItem",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "assignmentId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "comment",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateCommentBankItemPayload",
+ "description": "Autogenerated return type of CreateCommentBankItem.",
+ "fields": [
+ {
+ "name": "commentBankItem",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CommentBankItem",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateConversationInput",
+ "description": "Autogenerated input type of CreateConversation",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "attachmentIds",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "body",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "bulkMessage",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextCode",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversationId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "forceNew",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupConversation",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaCommentId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaCommentType",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "recipients",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subject",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "tags",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateConversationPayload",
+ "description": "Autogenerated return type of CreateConversation.",
+ "fields": [
+ {
+ "name": "conversations",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ConversationParticipant",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateDiscussionEntryInput",
+ "description": "Autogenerated input type of CreateDiscussionEntry",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "discussionTopicId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "fileId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "message",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "parentEntryId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isAnonymousAuthor",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "quotedEntryId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateDiscussionEntryPayload",
+ "description": "Autogenerated return type of CreateDiscussionEntry.",
+ "fields": [
+ {
+ "name": "discussionEntry",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mySubAssignmentSubmissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateDiscussionTopicInput",
+ "description": "Autogenerated input type of CreateDiscussionTopic",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "allowRating",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "checkpoints",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionCheckpoints",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "delayedPostAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "expanded",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "expandedLocked",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "fileId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupCategoryId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "locked",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "message",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyGradersCanRate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyVisibleToOverrides",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "podcastEnabled",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "podcastHasStudentPosts",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "published",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "requireInitialPost",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrder",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrderLocked",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "specificSections",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "todoDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousState",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionTopicAnonymousStateType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignment",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentCreate",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "DiscussionTopicContextType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionTopicDiscussionType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isAnnouncement",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isAnonymousAuthor",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ungradedDiscussionOverrides",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentOverrideCreateOrUpdate",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateDiscussionTopicPayload",
+ "description": "Autogenerated return type of CreateDiscussionTopic.",
+ "fields": [
+ {
+ "name": "discussionTopic",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateGroupInSetInput",
+ "description": "Autogenerated input type of CreateGroupInSet",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "groupSetId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nonCollaborative",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateGroupInSetPayload",
+ "description": "Autogenerated return type of CreateGroupInSet.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "group",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateGroupSetInput",
+ "description": "Autogenerated input type of CreateGroupSet",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "contextId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "GroupSetContextType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignAsync",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignUnassignedMembers",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "autoLeaderType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "AutoLeaderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createGroupCount",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createGroupMemberCount",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enableAutoLeader",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enableSelfSignup",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupBySection",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupLimit",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nonCollaborative",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "restrictSelfSignup",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "selfSignup",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateGroupSetPayload",
+ "description": "Autogenerated return type of CreateGroupSet.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupSet",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateInternalSettingInput",
+ "description": "Autogenerated input type of CreateInternalSetting",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "name",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "value",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateInternalSettingPayload",
+ "description": "Autogenerated return type of CreateInternalSetting.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "internalSetting",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "InternalSetting",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateLearningOutcomeGroupInput",
+ "description": "Autogenerated input type of CreateLearningOutcomeGroup",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "description",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "vendorGuid",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateLearningOutcomeGroupPayload",
+ "description": "Autogenerated return type of CreateLearningOutcomeGroup.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "learningOutcomeGroup",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroup",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateLearningOutcomeInput",
+ "description": "Autogenerated input type of CreateLearningOutcome",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "calculationInt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "calculationMethod",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "description",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "displayName",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "masteryPoints",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ratings",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "ProficiencyRatingInput",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "vendorGuid",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateLearningOutcomePayload",
+ "description": "Autogenerated return type of CreateLearningOutcome.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "learningOutcome",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LearningOutcome",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateModuleInput",
+ "description": "Autogenerated input type of CreateModule",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateModulePayload",
+ "description": "Autogenerated return type of CreateModule.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "module",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateOutcomeCalculationMethodInput",
+ "description": "Autogenerated input type of CreateOutcomeCalculationMethod",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "calculationInt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "calculationMethod",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateOutcomeCalculationMethodPayload",
+ "description": "Autogenerated return type of CreateOutcomeCalculationMethod.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeCalculationMethod",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "OutcomeCalculationMethod",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateOutcomeProficiencyInput",
+ "description": "Autogenerated input type of CreateOutcomeProficiency",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "contextId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "proficiencyRatings",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "OutcomeProficiencyRatingCreate",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateOutcomeProficiencyPayload",
+ "description": "Autogenerated return type of CreateOutcomeProficiency.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeProficiency",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "OutcomeProficiency",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateSubmissionCommentInput",
+ "description": "Autogenerated input type of CreateSubmissionComment",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "attempt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "comment",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "draftComment",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "fileIds",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupComment",
+ "description": "Post comment to entire group (only relevant for group assignments grading students individually)",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaObjectId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaObjectType",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reviewerSubmissionId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateSubmissionCommentPayload",
+ "description": "Autogenerated return type of CreateSubmissionComment.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionComment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionComment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateSubmissionDraftInput",
+ "description": "Autogenerated input type of CreateSubmissionDraft",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "activeSubmissionType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "DraftableSubmissionType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "attempt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "body",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "externalToolId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "fileIds",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ltiLaunchUrl",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "resourceLinkLookupUuid",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "url",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateSubmissionDraftPayload",
+ "description": "Autogenerated return type of CreateSubmissionDraft.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionDraft",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionDraft",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateSubmissionInput",
+ "description": "Autogenerated input type of CreateSubmission",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "annotatableAttachmentId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "body",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "fileIds",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mediaId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "resourceLinkLookupUuid",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "studentId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "OnlineSubmissionType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "url",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateSubmissionPayload",
+ "description": "Autogenerated return type of CreateSubmission.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submission",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateUserInboxLabelInput",
+ "description": "Autogenerated input type of CreateUserInboxLabel",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "names",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CreateUserInboxLabelPayload",
+ "description": "Autogenerated return type of CreateUserInboxLabel.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "inboxLabels",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatus",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "color",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "icon",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatusConnection",
+ "description": "The connection type for CustomGradeStatus.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatusEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatus",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatusEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatus",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DashboardObserveeFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "observedUserId",
+ "description": "Only view filtered user",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DateHash",
+ "description": "Standardized date hash from backend assigned_to_dates field",
+ "fields": [
+ {
+ "name": "base",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "dueAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "peerReviewDates",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PeerReviewDates",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "set",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DateHashSet",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlockAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DateHashSet",
+ "description": "Set information for a date hash entry",
+ "fields": [
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "type",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "description": "an ISO8601 formatted time string",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DateTimeRange",
+ "description": "a range of datetimes",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "end",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "start",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteAccountDomainLookupInput",
+ "description": "Autogenerated input type of DeleteAccountDomainLookup",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteAccountDomainLookupPayload",
+ "description": "Autogenerated return type of DeleteAccountDomainLookup.",
+ "fields": [
+ {
+ "name": "accountDomainLookupId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteAllocationRuleInput",
+ "description": "Autogenerated input type of DeleteAllocationRule",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "ruleId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteAllocationRulePayload",
+ "description": "Autogenerated return type of DeleteAllocationRule.",
+ "fields": [
+ {
+ "name": "allocationRuleId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteCommentBankItemInput",
+ "description": "Autogenerated input type of DeleteCommentBankItem",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteCommentBankItemPayload",
+ "description": "Autogenerated return type of DeleteCommentBankItem.",
+ "fields": [
+ {
+ "name": "commentBankItemId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteConversationMessagesInput",
+ "description": "Autogenerated input type of DeleteConversationMessages",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "ids",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteConversationMessagesPayload",
+ "description": "Autogenerated return type of DeleteConversationMessages.",
+ "fields": [
+ {
+ "name": "conversationMessageIds",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteConversationsInput",
+ "description": "Autogenerated input type of DeleteConversations",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "ids",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteConversationsPayload",
+ "description": "Autogenerated return type of DeleteConversations.",
+ "fields": [
+ {
+ "name": "conversationIds",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteCustomGradeStatusInput",
+ "description": "Autogenerated input type of DeleteCustomGradeStatus",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteCustomGradeStatusPayload",
+ "description": "Autogenerated return type of DeleteCustomGradeStatus.",
+ "fields": [
+ {
+ "name": "customGradeStatusId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteDiscussionEntryInput",
+ "description": "Autogenerated input type of DeleteDiscussionEntry",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteDiscussionEntryPayload",
+ "description": "Autogenerated return type of DeleteDiscussionEntry.",
+ "fields": [
+ {
+ "name": "discussionEntry",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteDiscussionTopicInput",
+ "description": "Autogenerated input type of DeleteDiscussionTopic",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteDiscussionTopicPayload",
+ "description": "Autogenerated return type of DeleteDiscussionTopic.",
+ "fields": [
+ {
+ "name": "discussionTopicId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteInternalSettingInput",
+ "description": "Autogenerated input type of DeleteInternalSetting",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "internalSettingId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteInternalSettingPayload",
+ "description": "Autogenerated return type of DeleteInternalSetting.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "internalSettingId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteOutcomeCalculationMethodInput",
+ "description": "Autogenerated input type of DeleteOutcomeCalculationMethod",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteOutcomeCalculationMethodPayload",
+ "description": "Autogenerated return type of DeleteOutcomeCalculationMethod.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeCalculationMethodId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteOutcomeLinksInput",
+ "description": "Autogenerated input type of DeleteOutcomeLinks",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "ids",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteOutcomeLinksPayload",
+ "description": "Autogenerated return type of DeleteOutcomeLinks.",
+ "fields": [
+ {
+ "name": "deletedOutcomeLinkIds",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteOutcomeProficiencyInput",
+ "description": "Autogenerated input type of DeleteOutcomeProficiency",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteOutcomeProficiencyPayload",
+ "description": "Autogenerated return type of DeleteOutcomeProficiency.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomeProficiencyId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteSubmissionCommentInput",
+ "description": "Autogenerated input type of DeleteSubmissionComment",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "submissionCommentId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteSubmissionCommentPayload",
+ "description": "Autogenerated return type of DeleteSubmissionComment.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionComment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionComment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteSubmissionDraftInput",
+ "description": "Autogenerated input type of DeleteSubmissionDraft",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteSubmissionDraftPayload",
+ "description": "Autogenerated return type of DeleteSubmissionDraft.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionDraftIds",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteUserInboxLabelInput",
+ "description": "Autogenerated input type of DeleteUserInboxLabel",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "names",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DeleteUserInboxLabelPayload",
+ "description": "Autogenerated return type of DeleteUserInboxLabel.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "inboxLabels",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allowRating",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousAuthor",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AnonymousUser",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionTopicAnonymousStateType",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignedToDates",
+ "description": "Standardized date hash visible to current user",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DateHash",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "attachment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "author",
+ "description": null,
+ "args": [
+ {
+ "name": "builtInOnly",
+ "description": "Only return default/built_in roles",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "roleTypes",
+ "description": "Return only requested base role types",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "availableForUser",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canDuplicate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canGroup",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canManageAssignTo",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canReplyAnonymously",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canUnpublish",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "checkpoints",
+ "description": "a list of checkpoints(also known as sub_assignments) that belong to this discussion",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Checkpoint",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "childTopics",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseSections",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Section",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "delayedPostAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionEntriesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionFilterType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntries",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchTerm",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unreadBefore",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userSearchId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionTopicDiscussionType",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "editedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "editor",
+ "description": null,
+ "args": [
+ {
+ "name": "builtInOnly",
+ "description": "Only return default/built_in roles",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "roleTypes",
+ "description": "Return only requested base role types",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "entriesTotalPages",
+ "description": null,
+ "args": [
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionFilterType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "perPage",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntries",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchTerm",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrder",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unreadBefore",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "entryCounts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryCounts",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "expanded",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "expandedLocked",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "graded",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupSet",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "initialPostRequiredForCurrentUser",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isAnnouncement",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isAnonymousAuthor",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isLockedByMasterCourse",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isSectionSpecific",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lastReplyAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockInformation",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "locked",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mentionableUsersConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchTerm",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "MessageableUserConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "message",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "modules",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyGradersCanRate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyVisibleToOverrides",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "participant",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionParticipant",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "permissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionPermissions",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pinnedEntries",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "podcastEnabled",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "podcastHasStudentPosts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pointsPossible",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "position",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "published",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "replyToEntryRequiredCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "requireInitialPost",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntriesTotalPages",
+ "description": null,
+ "args": [
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionFilterType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "perPage",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchTerm",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrder",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootTopic",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchEntryCount",
+ "description": null,
+ "args": [
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionFilterType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchTerm",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortByRating",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrder",
+ "description": null,
+ "args": [
+ {
+ "name": "sort",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrderLocked",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsConnection",
+ "description": "submissions for this assignment",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchOrder",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subscribed",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subscriptionDisabledForUser",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "todoDate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "type",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ungradedDiscussionOverrides",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AssignmentOverrideConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "visibleToEveryone",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssignedDates",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionCheckpointDate",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "dueAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "setId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "setType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionCheckpointDateSetType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "studentIds",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "type",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "DiscussionCheckpointDateType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlockAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "DiscussionCheckpointDateSetType",
+ "description": "Types of date set that can be set for discussion checkpoints",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "CourseSection",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Group",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ADHOC",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Course",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "DiscussionCheckpointDateType",
+ "description": "Types of dates that can be set for discussion checkpoints",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "everyone",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "override",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionCheckpoints",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "checkpointLabel",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "CheckpointLabelType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "dates",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionCheckpointDate",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pointsPossible",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "repliesRequired",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionConnection",
+ "description": "The connection type for Discussion.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiscussionEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allRootEntries",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousAuthor",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AnonymousUser",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "attachment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "author",
+ "description": null,
+ "args": [
+ {
+ "name": "builtInOnly",
+ "description": "Only return default/built_in roles",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "roleTypes",
+ "description": "Return only requested base role types",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "deleted",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "depth",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionEntryVersions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryVersion",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionSubentriesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "beforeRelativeEntry",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeRelativeEntry",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "relativeEntryId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrder",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionTopic",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "discussionTopicId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "editedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "editor",
+ "description": null,
+ "args": [
+ {
+ "name": "builtInOnly",
+ "description": "Only return default/built_in roles",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "roleTypes",
+ "description": "Return only requested base role types",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "entryParticipant",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "EntryParticipant",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "lastReply",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "message",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "parentId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "permissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryPermissions",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pinType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionEntryPinningType",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pinnedBy",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "previewMessage",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "quotedEntry",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ratingCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ratingSum",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reportTypeCounts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryReportTypeCounts",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntry",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntryId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntryPageNumber",
+ "description": null,
+ "args": [
+ {
+ "name": "perPage",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rootEntryParticipantCounts",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryCounts",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "subentriesCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryConnection",
+ "description": "The connection type for DiscussionEntry.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryCounts",
+ "description": null,
+ "fields": [
+ {
+ "name": "deletedCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "repliesCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unreadCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryPermissions",
+ "description": null,
+ "fields": [
+ {
+ "name": "attach",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "create",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "delete",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "read",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reply",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "update",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "viewRating",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "DiscussionEntryPinningType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "thread",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reply",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "none",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryReportTypeCounts",
+ "description": null,
+ "fields": [
+ {
+ "name": "inappropriateCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "horizonCourse",
+ "name": "offensiveCount",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "horizonCourse",
+ "name": "otherCount",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "total",
"description": null,
"args": [],
"type": {
@@ -8304,88 +21973,56 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryVersion",
+ "description": null,
+ "fields": [
{
- "name": "imageUrl",
- "description": "Returns a URL for the course image (this is the image used on dashboard\ncourse cards)\n",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "URL",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "modulesConnection",
+ "name": "createdAt",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "ModuleConnection",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "id",
"description": null,
"args": [],
"type": {
@@ -8393,7 +22030,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -8401,395 +22038,225 @@
"deprecationReason": null
},
{
- "name": "outcomeAlignmentStats",
+ "name": "message",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "CourseOutcomeAlignmentStats",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomeCalculationMethod",
+ "name": "messageIntro",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "OutcomeCalculationMethod",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomeProficiency",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "OutcomeProficiency",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pagesConnection",
- "description": "returns a list of wiki pages.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "PageFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "version",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "PageConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "permissions",
- "description": "returns permission information for the current user in this course",
- "args": [],
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "userId",
+ "description": "only return discussions for the given user. Defaults to\nthe current user.\n",
"type": {
- "kind": "OBJECT",
- "name": "CoursePermissions",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postPolicy",
- "description": "A course-specific post policy",
- "args": [],
+ "name": "searchTerm",
+ "description": "only return discussions whose title matches this search term\n",
"type": {
- "kind": "OBJECT",
- "name": "PostPolicy",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "quizzesConnection",
- "description": "returns a list of quizzes.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "QuizFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "isAnnouncement",
+ "description": "only return discussions that are announcements (true) or\nregular discussions (false). If not provided, returns both.\n",
"type": {
- "kind": "OBJECT",
- "name": "QuizConnection",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "DiscussionFilterType",
+ "description": "Search types that can be associated with discussions",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "relevantGradingPeriodGroup",
+ "name": "all",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "GradingPeriodGroup",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootOutcomeGroup",
+ "name": "unread",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rubricsConnection",
+ "name": "drafts",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "RubricConnection",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sectionsConnection",
+ "name": "deleted",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "CourseSectionsFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionParticipant",
+ "description": null,
+ "fields": [
+ {
+ "name": "discussionTopic",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "expanded",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SectionConnection",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sisId",
+ "name": "hasUnreadPinnedEntry",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "id",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "CourseWorkflowState",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -8797,316 +22264,104 @@
"deprecationReason": null
},
{
- "name": "submissionsConnection",
- "description": "all the submissions for assignments in this course",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "SubmissionFilterInput",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "orderBy",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SubmissionOrderCriteria",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "studentIds",
- "description": "Only return submissions for the given students.",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "posted",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SubmissionConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "syllabusBody",
+ "name": "preferredLanguage",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "ENUM",
+ "name": "PreferredLanguageType",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "term",
+ "name": "read",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Term",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "showPinnedEntries",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "usersConnection",
+ "name": "sortOrder",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "userIds",
- "description": "Only include users with the given ids.\n\n**This field is deprecated, use `filter: {userIds}` instead.**\n",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "CourseUsersFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UserConnection",
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "AssetString",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "AssignmentsConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "DiscussionsConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "FilesConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "DiscussionsConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "FilesConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "PagesConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "QuizzesConnectionInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "PagesConnectionInterface",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "QuizzesConnectionInterface",
- "ofType": null
+ "name": "summaryEnabled",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
+ "name": "workflowState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -9114,8 +22369,8 @@
},
{
"kind": "OBJECT",
- "name": "CourseConnection",
- "description": "The connection type for Course.",
+ "name": "DiscussionParticipantConnection",
+ "description": "The connection type for DiscussionParticipant.",
"fields": [
{
"name": "edges",
@@ -9126,7 +22381,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "CourseEdge",
+ "name": "DiscussionParticipantEdge",
"ofType": null
}
},
@@ -9142,7 +22397,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Course",
+ "name": "DiscussionParticipant",
"ofType": null
}
},
@@ -9151,14 +22406,14 @@
},
{
"name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "PageInfo",
+ "name": "TotalCountPageInfo",
"ofType": null
}
},
@@ -9175,155 +22430,149 @@
},
{
"kind": "OBJECT",
- "name": "CourseDashboardCard",
- "description": "A card on the course dashboard",
+ "name": "DiscussionParticipantEdge",
+ "description": "An edge in a connection.",
"fields": [
{
- "name": "assetString",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "canChangeCoursePublishState",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canManage",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "DiscussionParticipant",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionParticipantFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
- "name": "canReadAnnouncements",
- "description": null,
- "args": [],
+ "name": "isAnnouncement",
+ "description": "only return participants for discussions that are announcements (true) or\nregular discussions (false). If not provided, returns both.\n",
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "color",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseCode",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "defaultView",
- "description": null,
- "args": [],
+ "name": "courseId",
+ "description": "only return participants for discussions in the specified course\n",
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "enrollmentState",
- "description": null,
- "args": [],
+ "name": "readState",
+ "description": "only return participants with specific read state: 'read', 'unread', or 'all' (default)\n",
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionPermissions",
+ "description": null,
+ "fields": [
{
- "name": "enrollmentType",
+ "name": "addRubric",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "frontPageTitle",
+ "name": "attach",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "href",
+ "name": "closeForComments",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "image",
+ "name": "copyAndSendTo",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isFavorited",
+ "name": "create",
"description": null,
"args": [],
"type": {
@@ -9335,7 +22584,7 @@
"deprecationReason": null
},
{
- "name": "isHomeroom",
+ "name": "delete",
"description": null,
"args": [],
"type": {
@@ -9347,7 +22596,7 @@
"deprecationReason": null
},
{
- "name": "isK5Subject",
+ "name": "duplicate",
"description": null,
"args": [],
"type": {
@@ -9359,87 +22608,67 @@
"deprecationReason": null
},
{
- "name": "links",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "CourseDashboardCardLink",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "longName",
+ "name": "manageAssignTo",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "observee",
+ "name": "manageCourseContentAdd",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "originalName",
+ "name": "manageCourseContentDelete",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pagesUrl",
+ "name": "manageCourseContentEdit",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "position",
+ "name": "moderateForum",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
+ "name": "openForComments",
"description": null,
"args": [],
"type": {
@@ -9451,43 +22680,43 @@
"deprecationReason": null
},
{
- "name": "shortName",
+ "name": "peerReview",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subtitle",
+ "name": "rate",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "term",
+ "name": "read",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Term",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "useClassicFont",
+ "name": "readAsAdmin",
"description": null,
"args": [],
"type": {
@@ -9497,34 +22726,21 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CourseDashboardCardLink",
- "description": "A link on a course dashboard card",
- "fields": [
+ },
{
- "name": "cssClass",
+ "name": "readReplies",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "hidden",
+ "name": "reply",
"description": null,
"args": [],
"type": {
@@ -9536,77 +22752,60 @@
"deprecationReason": null
},
{
- "name": "icon",
+ "name": "showRubric",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "label",
+ "name": "speedGrader",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "path",
+ "name": "studentReporting",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CourseEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "update",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "viewGroupPages",
+ "description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Course",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
@@ -9622,44 +22821,20 @@
},
{
"kind": "ENUM",
- "name": "CourseFilterableEnrollmentState",
- "description": "Users in a course can be returned based on these enrollment states",
+ "name": "DiscussionSortOrderType",
+ "description": null,
"fields": null,
"inputFields": null,
"interfaces": null,
"enumValues": [
{
- "name": "invited",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "creation_pending",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "active",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rejected",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "completed",
+ "name": "asc",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "inactive",
+ "name": "desc",
"description": null,
"isDeprecated": false,
"deprecationReason": null
@@ -9671,44 +22846,26 @@
},
{
"kind": "ENUM",
- "name": "CourseFilterableEnrollmentType",
- "description": "Users in a course can be returned based on these enrollment types",
+ "name": "DiscussionTopicAnonymousStateType",
+ "description": "Anonymous states for discussionTopics",
"fields": null,
"inputFields": null,
"interfaces": null,
"enumValues": [
{
- "name": "StudentEnrollment",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "TeacherEnrollment",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "TaEnrollment",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "ObserverEnrollment",
+ "name": "partial_anonymity",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "DesignerEnrollment",
+ "name": "full_anonymity",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "StudentViewEnrollment",
+ "name": "off",
"description": null,
"isDeprecated": false,
"deprecationReason": null
@@ -9720,38 +22877,20 @@
},
{
"kind": "ENUM",
- "name": "CourseGradeStatus",
- "description": "Grade statuses that can be applied to submissions in a course",
+ "name": "DiscussionTopicContextType",
+ "description": "Context types that can be associated with discussionTopics",
"fields": null,
"inputFields": null,
"interfaces": null,
"enumValues": [
{
- "name": "late",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "missing",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "none",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "excused",
+ "name": "Course",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "extended",
+ "name": "Group",
"description": null,
"isDeprecated": false,
"deprecationReason": null
@@ -9762,171 +22901,50 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CourseOutcomeAlignmentStats",
- "description": null,
- "fields": [
- {
- "name": "alignedArtifacts",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "alignedOutcomes",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "artifactAlignments",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "totalAlignments",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "totalArtifacts",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "totalOutcomes",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "kind": "ENUM",
+ "name": "DiscussionTopicDiscussionType",
+ "description": "Discussion type for discussionTopics",
+ "fields": null,
"inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CoursePermissions",
- "description": null,
- "fields": [
- {
- "name": "becomeUser",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "interfaces": null,
+ "enumValues": [
{
- "name": "manageGrades",
+ "name": "not_threaded",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sendMessages",
+ "name": "threaded",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "viewAllGrades",
+ "name": "flat",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "viewAnalytics",
+ "name": "side_comment",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CourseProgression",
+ "kind": "INTERFACE",
+ "name": "DiscussionsConnectionInterface",
"description": null,
"fields": [
{
- "name": "incompleteModulesConnection",
- "description": "Modules are ordered by position",
+ "name": "discussionsConnection",
+ "description": "returns a list of discussions.\n",
"args": [
{
"name": "after",
@@ -9975,115 +22993,60 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "ModuleProgressionConnection",
+ "name": "DiscussionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "requirements",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "CourseRequirements",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
}
],
"inputFields": null,
"interfaces": [],
"enumValues": null,
- "possibleTypes": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ ],
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CourseRequirements",
- "description": null,
- "fields": [
- {
- "name": "completed",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "completionPercentage",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "INPUT_OBJECT",
+ "name": "DismissAccountNotificationInput",
+ "description": "Autogenerated input type of DismissAccountNotification",
+ "fields": null,
+ "inputFields": [
{
- "name": "total",
+ "name": "notificationId",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ID",
"ofType": null
}
},
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CourseSectionsFilter",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "assignmentId",
- "description": "Only include sections associated with users assigned to this assignment",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
@@ -10095,75 +23058,15 @@
"specifiedByURL": null,
"isOneOf": false
},
- {
- "kind": "INPUT_OBJECT",
- "name": "CourseUsersFilter",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "userIds",
- "description": "only include users with the given ids",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "enrollmentRoleIds",
- "description": "Only return users with the specified enrollment role ids",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "enrollmentStates",
- "description": "only return users with the given enrollment state. defaults\nto `invited`, `creation_pending`, `active`\n",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "CourseFilterableEnrollmentState",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ {
+ "kind": "OBJECT",
+ "name": "DismissAccountNotificationPayload",
+ "description": "Autogenerated return type of DismissAccountNotification.",
+ "fields": [
{
- "name": "enrollmentTypes",
- "description": "Only return users with the specified enrollment types",
+ "name": "errors",
+ "description": null,
+ "args": [],
"type": {
"kind": "LIST",
"name": null,
@@ -10171,42 +23074,18 @@
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "CourseFilterableEnrollmentType",
+ "kind": "OBJECT",
+ "name": "ValidationError",
"ofType": null
}
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "excludeTestStudents",
- "description": "Exclude test students from results",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": "Only return users that match the given search term. The search\nterm is matched against the user's name and depending on current\nuser permissions against the user's login id, email and sisid\n",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -10214,38 +23093,44 @@
},
{
"kind": "ENUM",
- "name": "CourseWorkflowState",
- "description": "States that Courses can be in",
+ "name": "DraftableSubmissionType",
+ "description": "Types of submissions that can have a submission draft",
"fields": null,
"inputFields": null,
"interfaces": null,
"enumValues": [
{
- "name": "created",
+ "name": "basic_lti_launch",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "claimed",
+ "name": "media_recording",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "available",
+ "name": "online_text_entry",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "completed",
+ "name": "online_upload",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleted",
+ "name": "online_url",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "student_annotation",
"description": null,
"isDeprecated": false,
"deprecationReason": null
@@ -10256,42 +23141,30 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "CreateAccountDomainLookupInput",
- "description": "Autogenerated input type of CreateAccountDomainLookup",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "EligibilityIssue",
+ "description": null,
+ "fields": [
{
- "name": "accountDomainId",
+ "name": "level",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "ENUM",
+ "name": "EligibilityIssueLevel",
"ofType": null
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "authenticationProvider",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "message",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -10301,770 +23174,516 @@
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CreateAccountDomainLookupPayload",
- "description": "Autogenerated return type of CreateAccountDomainLookup.",
- "fields": [
+ "kind": "ENUM",
+ "name": "EligibilityIssueLevel",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "accountDomainLookup",
+ "name": "error",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "AccountDomainLookup",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "warning",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "CreateAssignmentInput",
- "description": "Autogenerated input type of CreateAssignment",
- "fields": null,
- "inputFields": [
- {
- "name": "allowedAttempts",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "allowedExtensions",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "anonymousGrading",
- "description": "requires anonymous_marking course feature to be set to true",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "anonymousInstructorAnnotations",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "description": null,
+ "fields": [
{
- "name": "assignmentGroupId",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "assignmentOverrides",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentOverrideCreateOrUpdate",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "description",
+ "name": "assetString",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueAt",
+ "name": "associatedUser",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "User",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "forCheckpoints",
+ "name": "canBeRemoved",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradeGroupStudentsIndividually",
+ "name": "concluded",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradingStandardId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradingType",
+ "name": "course",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "GradingType",
+ "kind": "OBJECT",
+ "name": "Course",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupCategoryId",
+ "name": "courseSectionId",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupSetId",
+ "name": "createdAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "endAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "moderatedGrading",
+ "name": "enrollmentState",
"description": null,
+ "args": [],
"type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentModeratedGradingUpdate",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "EnrollmentWorkflowState",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "moduleIds",
+ "name": "grades",
"description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
+ "args": [
+ {
+ "name": "gradingPeriodId",
+ "description": "The grading period to return grades for. If not specified, will use the current grading period (or the course grade for courses that don't use grading periods)",
+ "type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "omitFromFinalGrade",
- "description": null,
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "Grades",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "onlyVisibleToOverrides",
+ "name": "htmlUrl",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "URL",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "peerReviews",
+ "name": "id",
"description": null,
+ "args": [],
"type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentPeerReviewsUpdate",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "invitationSentAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "position",
+ "name": "lastActivityAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postToSis",
+ "name": "limitPrivilegesToCourseSection",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "role",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "AssignmentState",
+ "kind": "OBJECT",
+ "name": "EnrollmentRole",
"ofType": null
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "submissionTypes",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "SubmissionType",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlockAt",
+ "name": "roleLabel",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateAssignmentPayload",
- "description": "Autogenerated return type of CreateAssignment.",
- "fields": [
- {
- "name": "assignment",
+ "name": "section",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Assignment",
+ "name": "Section",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "sisImportId",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateCommentBankItemInput",
- "description": "Autogenerated input type of CreateCommentBankItem",
- "fields": null,
- "inputFields": [
- {
- "name": "comment",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateCommentBankItemPayload",
- "description": "Autogenerated return type of CreateCommentBankItem.",
- "fields": [
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
- "name": "commentBankItem",
+ "name": "sisRole",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "CommentBankItem",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "sisSectionId",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateConversationInput",
- "description": "Autogenerated input type of CreateConversation",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "attachmentIds",
+ "name": "startAt",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "body",
+ "name": "state",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "ENUM",
+ "name": "EnrollmentWorkflowState",
"ofType": null
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "bulkMessage",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextCode",
+ "name": "totalActivityTime",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "conversationId",
+ "name": "type",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "EnrollmentType",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "forceNew",
+ "name": "updatedAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupConversation",
+ "name": "user",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "User",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaCommentId",
+ "name": "userId",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaCommentType",
+ "name": "uuid",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssetString",
+ "ofType": null
},
{
- "name": "recipients",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "EnrollmentConnection",
+ "description": "The connection type for Enrollment.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "EnrollmentEdge",
+ "ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subject",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "tags",
+ "name": "pageInfo",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "TotalCountPageInfo",
+ "ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -11072,45 +23691,33 @@
},
{
"kind": "OBJECT",
- "name": "CreateConversationPayload",
- "description": "Autogenerated return type of CreateConversation.",
+ "name": "EnrollmentEdge",
+ "description": "An edge in a connection.",
"fields": [
{
- "name": "conversations",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ConversationParticipant",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -11125,75 +23732,87 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "CreateDiscussionEntryDraftInput",
- "description": "Autogenerated input type of CreateDiscussionEntryDraft",
+ "name": "EnrollmentFilterInput",
+ "description": null,
"fields": null,
"inputFields": [
{
- "name": "discussionEntryId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "discussionTopicId",
+ "name": "associatedUserIds",
"description": null,
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
}
},
- "defaultValue": null,
+ "defaultValue": "[]",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileId",
+ "name": "states",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "EnrollmentWorkflowState",
+ "ofType": null
+ }
+ }
},
- "defaultValue": null,
+ "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "message",
+ "name": "types",
"description": null,
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "EnrollmentType",
+ "ofType": null
+ }
}
},
- "defaultValue": null,
+ "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "parentId",
+ "name": "userIds",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
},
- "defaultValue": null,
+ "defaultValue": "[]",
"isDeprecated": false,
"deprecationReason": null
}
@@ -11206,37 +23825,29 @@
},
{
"kind": "OBJECT",
- "name": "CreateDiscussionEntryDraftPayload",
- "description": "Autogenerated return type of CreateDiscussionEntryDraft.",
+ "name": "EnrollmentRole",
+ "description": null,
"fields": [
{
- "name": "discussionEntryDraft",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntryDraft",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -11250,175 +23861,177 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "CreateDiscussionEntryInput",
- "description": "Autogenerated input type of CreateDiscussionEntry",
+ "kind": "ENUM",
+ "name": "EnrollmentType",
+ "description": null,
"fields": null,
- "inputFields": [
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "discussionTopicId",
+ "name": "StudentEnrollment",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileId",
+ "name": "TeacherEnrollment",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "message",
+ "name": "TaEnrollment",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "parentEntryId",
+ "name": "ObserverEnrollment",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isAnonymousAuthor",
+ "name": "DesignerEnrollment",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "quotedEntryId",
+ "name": "StudentViewEnrollment",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "EnrollmentWorkflowState",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
"interfaces": null,
- "enumValues": null,
+ "enumValues": [
+ {
+ "name": "invited",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "creation_pending",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "active",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "deleted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rejected",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "completed",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "inactive",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CreateDiscussionEntryPayload",
- "description": "Autogenerated return type of CreateDiscussionEntry.",
- "fields": [
+ "kind": "ENUM",
+ "name": "EnrollmentsSortDirectionType",
+ "description": "Order direction for enrollments",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "discussionEntry",
+ "name": "asc",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "desc",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "EnrollmentsSortFieldType",
+ "description": "Sort field for enrollments",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "role",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mySubAssignmentSubmissions",
+ "name": "section_name",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last_activity_at",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Submission",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "INPUT_OBJECT",
- "name": "CreateDiscussionTopicInput",
- "description": "Autogenerated input type of CreateDiscussionTopic",
+ "name": "EnrollmentsSortInputType",
+ "description": "Specify sort field and direction for enrollments",
"fields": null,
"inputFields": [
{
- "name": "allowRating",
+ "name": "direction",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "ENUM",
+ "name": "EnrollmentsSortDirectionType",
"ofType": null
},
"defaultValue": null,
@@ -11426,367 +24039,415 @@
"deprecationReason": null
},
{
- "name": "checkpoints",
+ "name": "field",
"description": null,
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DiscussionCheckpoints",
- "ofType": null
- }
+ "kind": "ENUM",
+ "name": "EnrollmentsSortFieldType",
+ "ofType": null
}
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "EntryParticipant",
+ "description": null,
+ "fields": [
{
- "name": "delayedPostAt",
+ "name": "forcedReadState",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "expanded",
+ "name": "rating",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "expandedLocked",
+ "name": "read",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileId",
+ "name": "reportType",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalTool",
+ "description": null,
+ "fields": [
{
- "name": "groupCategoryId",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "canDuplicate",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "locked",
+ "name": "canManageAssignTo",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "message",
- "description": null,
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "onlyGradersCanRate",
+ "name": "createdAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "onlyVisibleToOverrides",
+ "name": "description",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "podcastEnabled",
+ "name": "domain",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "podcastHasStudentPosts",
+ "name": "graded",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
+ "name": "isLockedByMasterCourse",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "requireInitialPost",
+ "name": "labelFor",
"description": null,
+ "args": [
+ {
+ "name": "placement",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "ExternalToolPlacement",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sortOrder",
+ "name": "modules",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sortOrderLocked",
+ "name": "name",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "specificSections",
- "description": null,
+ "name": "placements",
+ "description": "Placements for the external tool",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Placements",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "pointsPossible",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Float",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "todoDate",
+ "name": "published",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymousState",
+ "name": "settings",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "DiscussionTopicAnonymousStateType",
+ "kind": "OBJECT",
+ "name": "ExternalToolSettings",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignment",
+ "name": "state",
"description": null,
+ "args": [],
"type": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentCreate",
+ "kind": "ENUM",
+ "name": "ExternalToolState",
"ofType": null
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "contextId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "title",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "DiscussionTopicContextType",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionType",
+ "name": "type",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "DiscussionTopicDiscussionType",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isAnnouncement",
+ "name": "updatedAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isAnonymousAuthor",
+ "name": "url",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "URL",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "ungradedDiscussionOverrides",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "AssignmentOverrideCreateOrUpdate",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "PlacementsInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
}
],
- "interfaces": null,
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -11794,74 +24455,74 @@
},
{
"kind": "OBJECT",
- "name": "CreateDiscussionTopicPayload",
- "description": "Autogenerated return type of CreateDiscussionTopic.",
+ "name": "ExternalToolConnection",
+ "description": "The connection type for ExternalTool.",
"fields": [
{
- "name": "discussionTopic",
- "description": null,
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ExternalToolEdge",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "ExternalTool",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateGroupInSetInput",
- "description": "Autogenerated input type of CreateGroupInSet",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "groupSetId",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalToolEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "name",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -11871,38 +24532,50 @@
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nonCollaborative",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "ExternalTool",
"ofType": null
},
- "defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CreateGroupInSetPayload",
- "description": "Autogenerated return type of CreateGroupInSet.",
- "fields": [
+ "kind": "INPUT_OBJECT",
+ "name": "ExternalToolFilterInput",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
- "name": "errors",
+ "name": "placement",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "ExternalToolPlacement",
+ "ofType": null
+ },
+ "defaultValue": "null",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "placementList",
"description": null,
- "args": [],
"type": {
"kind": "LIST",
"name": null,
@@ -11910,272 +24583,328 @@
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
+ "kind": "ENUM",
+ "name": "ExternalToolPlacement",
"ofType": null
}
}
},
+ "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "group",
+ "name": "state",
"description": null,
- "args": [],
"type": {
- "kind": "OBJECT",
- "name": "Group",
+ "kind": "ENUM",
+ "name": "ExternalToolState",
"ofType": null
},
+ "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
+ "interfaces": null,
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "CreateGroupSetInput",
- "description": "Autogenerated input type of CreateGroupSet",
+ "kind": "ENUM",
+ "name": "ExternalToolPlacement",
+ "description": "Placements that an External Tool can have",
"fields": null,
- "inputFields": [
- {
- "name": "contextId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "homework_submission",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "ActivityAssetProcessor",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "GroupSetContextType",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "link_selection",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignAsync",
+ "name": "resource_selection",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalToolPlacements",
+ "description": null,
+ "fields": [
+ {
+ "name": "canvasIconClass",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignUnassignedMembers",
+ "name": "iconUrl",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "URL",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "autoLeaderType",
+ "name": "messageType",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "AutoLeaderType",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createGroupCount",
+ "name": "text",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createGroupMemberCount",
+ "name": "url",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "URL",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalToolSettings",
+ "description": null,
+ "fields": [
{
- "name": "enableAutoLeader",
+ "name": "homeworkSubmission",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "ExternalToolPlacements",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "enableSelfSignup",
+ "name": "iconUrl",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "URL",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupBySection",
+ "name": "selectionHeight",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupLimit",
+ "name": "selectionWidth",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "Int",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nonCollaborative",
+ "name": "text",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "ExternalToolState",
+ "description": "States that an External Tool can be in",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "anonymous",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "restrictSelfSignup",
+ "name": "name_only",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "selfSignup",
+ "name": "email_only",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "public",
"description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "CreateGroupSetPayload",
- "description": "Autogenerated return type of CreateGroupSet.",
+ "kind": "INTERFACE",
+ "name": "ExternalToolsConnectionInterface",
+ "description": null,
"fields": [
{
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
+ "name": "externalToolsConnection",
+ "description": "returns a list of external tools.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "ExternalToolFilterInput",
+ "ofType": null
+ },
+ "defaultValue": "{}",
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "groupSet",
- "description": null,
- "args": [],
+ ],
"type": {
"kind": "OBJECT",
- "name": "GroupSet",
+ "name": "ExternalToolConnection",
"ofType": null
},
"isDeprecated": false,
@@ -12185,62 +24914,115 @@
"inputFields": null,
"interfaces": [],
"enumValues": null,
- "possibleTypes": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ ],
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "CreateInternalSettingInput",
- "description": "Autogenerated input type of CreateInternalSetting",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "ExternalUrl",
+ "description": null,
+ "fields": [
{
- "name": "name",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "value",
+ "name": "canDuplicate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canManageAssignTo",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "graded",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isLockedByMasterCourse",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateInternalSettingPayload",
- "description": "Autogenerated return type of CreateInternalSetting.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "modules",
"description": null,
"args": [],
"type": {
@@ -12251,7 +25033,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ValidationError",
+ "name": "Module",
"ofType": null
}
}
@@ -12260,126 +25042,84 @@
"deprecationReason": null
},
{
- "name": "internalSetting",
+ "name": "newTab",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "InternalSetting",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateLearningOutcomeGroupInput",
- "description": "Autogenerated input type of CreateLearningOutcomeGroup",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "description",
+ "name": "pointsPossible",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Float",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
- "description": null,
+ "name": "published",
+ "description": "Whether the module item is published",
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "title",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "vendorGuid",
+ "name": "type",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateLearningOutcomeGroupPayload",
- "description": "Autogenerated return type of CreateLearningOutcomeGroup.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "learningOutcomeGroup",
+ "name": "url",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
@@ -12387,203 +25127,161 @@
}
],
"inputFields": null,
- "interfaces": [],
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "CreateLearningOutcomeInput",
- "description": "Autogenerated input type of CreateLearningOutcome",
- "fields": null,
- "inputFields": [
- {
- "name": "calculationInt",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "OBJECT",
+ "name": "File",
+ "description": null,
+ "fields": [
{
- "name": "calculationMethod",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "description",
+ "name": "canDuplicate",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "displayName",
+ "name": "canManageAssignTo",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "masteryPoints",
- "description": null,
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ratings",
+ "name": "contentType",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "ProficiencyRatingInput",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "createdAt",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "vendorGuid",
+ "name": "displayName",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupId",
+ "name": "fileState",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateLearningOutcomePayload",
- "description": "Autogenerated return type of CreateLearningOutcome.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "folder",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "Folder",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "learningOutcome",
+ "name": "graded",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "LearningOutcome",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateModuleInput",
- "description": "Autogenerated input type of CreateModule",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "courseId",
+ "name": "id",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -12593,158 +25291,63 @@
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "isLockedByMasterCourse",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateModulePayload",
- "description": "Autogenerated return type of CreateModule.",
- "fields": [
- {
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "module",
+ "name": "lockAt",
"description": null,
"args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateOutcomeCalculationMethodInput",
- "description": "Autogenerated input type of CreateOutcomeCalculationMethod",
- "fields": null,
- "inputFields": [
- {
- "name": "calculationInt",
- "description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "calculationMethod",
+ "name": "locked",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextId",
+ "name": "mimeClass",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateOutcomeCalculationMethodPayload",
- "description": "Autogenerated return type of CreateOutcomeCalculationMethod.",
- "fields": [
- {
- "name": "errors",
+ "name": "modules",
"description": null,
"args": [],
"type": {
@@ -12755,7 +25358,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ValidationError",
+ "name": "Module",
"ofType": null
}
}
@@ -12764,271 +25367,259 @@
"deprecationReason": null
},
{
- "name": "outcomeCalculationMethod",
+ "name": "pointsPossible",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "OutcomeCalculationMethod",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateOutcomeProficiencyInput",
- "description": "Autogenerated input type of CreateOutcomeProficiency",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "contextId",
- "description": null,
+ "name": "published",
+ "description": "Whether the module item is published",
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "size",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "proficiencyRatings",
+ "name": "submissionPreviewUrl",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "OutcomeProficiencyRatingCreate",
- "ofType": null
- }
- }
+ "args": [
+ {
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateOutcomeProficiencyPayload",
- "description": "Autogenerated return type of CreateOutcomeProficiency.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "thumbnailUrl",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomeProficiency",
+ "name": "title",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "OutcomeProficiency",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateSubmissionCommentInput",
- "description": "Autogenerated input type of CreateSubmissionComment",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "attempt",
+ "name": "type",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "comment",
+ "name": "unlockAt",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "draftComment",
+ "name": "updatedAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileIds",
+ "name": "url",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupComment",
- "description": "Post comment to entire group (only relevant for group assignments grading students individually)",
+ "name": "usageRights",
+ "description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "UsageRights",
"ofType": null
},
- "defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaObjectId",
+ "name": "viewedAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaObjectType",
+ "name": "wordCount",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "reviewerSubmissionId",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "FileConnection",
+ "description": "The connection type for File.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "FileEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionId",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -13036,36 +25627,32 @@
},
{
"kind": "OBJECT",
- "name": "CreateSubmissionCommentPayload",
- "description": "Autogenerated return type of CreateSubmissionComment.",
+ "name": "FileEdge",
+ "description": "An edge in a connection.",
"fields": [
{
- "name": "errors",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionComment",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
"kind": "OBJECT",
- "name": "SubmissionComment",
+ "name": "File",
"ofType": null
},
"isDeprecated": false,
@@ -13081,160 +25668,244 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "CreateSubmissionDraftInput",
- "description": "Autogenerated input type of CreateSubmissionDraft",
+ "name": "FileFilter",
+ "description": null,
"fields": null,
"inputFields": [
{
- "name": "activeSubmissionType",
- "description": null,
+ "name": "userId",
+ "description": "only return files for the given user. Defaults to\nthe current user.\n",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "DraftableSubmissionType",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "attempt",
- "description": null,
+ "name": "searchTerm",
+ "description": "only return files whose name matches this search term\n",
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "FilesConnectionInterface",
+ "description": null,
+ "fields": [
{
- "name": "body",
- "description": null,
+ "name": "filesConnection",
+ "description": "returns a list of files.\n",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "FileFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "FileConnection",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
{
- "name": "externalToolId",
- "description": null,
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "Float",
+ "description": "Represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Folder",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileIds",
+ "name": "canUpload",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ltiLaunchUrl",
+ "name": "contextId",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaId",
+ "name": "contextType",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "resourceLinkLookupUuid",
+ "name": "createdAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionId",
+ "name": "currentlyLocked",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateSubmissionDraftPayload",
- "description": "Autogenerated return type of CreateSubmissionDraft.",
- "fields": [
- {
- "name": "errors",
+ "name": "files",
"description": null,
"args": [],
"type": {
@@ -13245,7 +25916,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ValidationError",
+ "name": "File",
"ofType": null
}
}
@@ -13254,312 +25925,167 @@
"deprecationReason": null
},
{
- "name": "submissionDraft",
+ "name": "filesCount",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "SubmissionDraft",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateSubmissionInput",
- "description": "Autogenerated input type of CreateSubmission",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "annotatableAttachmentId",
+ "name": "foldersCount",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentId",
+ "name": "fullName",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "body",
+ "name": "hidden",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileIds",
+ "name": "id",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "mediaId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "resourceLinkLookupUuid",
+ "name": "lockAt",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "studentId",
+ "name": "locked",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionType",
+ "name": "name",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "OnlineSubmissionType",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "url",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateSubmissionPayload",
- "description": "Autogenerated return type of CreateSubmission.",
- "fields": [
- {
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submission",
+ "name": "parentFolder",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Submission",
+ "name": "Folder",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "CreateUserInboxLabelInput",
- "description": "Autogenerated input type of CreateUserInboxLabel",
- "fields": null,
- "inputFields": [
- {
- "name": "names",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CreateUserInboxLabelPayload",
- "description": "Autogenerated return type of CreateUserInboxLabel.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "parentFolderId",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "inboxLabels",
+ "name": "position",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "CustomGradeStatus",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "rootFolder",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -13567,49 +26093,45 @@
"deprecationReason": null
},
{
- "name": "color",
+ "name": "subFolders",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Folder",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "unlockAt",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -13626,6 +26148,11 @@
"kind": "INTERFACE",
"name": "Node",
"ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
}
],
"enumValues": null,
@@ -13635,8 +26162,8 @@
},
{
"kind": "OBJECT",
- "name": "CustomGradeStatusConnection",
- "description": "The connection type for CustomGradeStatus.",
+ "name": "FolderConnection",
+ "description": "The connection type for Folder.",
"fields": [
{
"name": "edges",
@@ -13647,7 +26174,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "CustomGradeStatusEdge",
+ "name": "FolderEdge",
"ofType": null
}
},
@@ -13663,7 +26190,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "CustomGradeStatus",
+ "name": "Folder",
"ofType": null
}
},
@@ -13696,7 +26223,7 @@
},
{
"kind": "OBJECT",
- "name": "CustomGradeStatusEdge",
+ "name": "FolderEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -13721,7 +26248,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "CustomGradeStatus",
+ "name": "Folder",
"ofType": null
},
"isDeprecated": false,
@@ -13736,103 +26263,86 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DashboardObserveeFilter",
+ "kind": "ENUM",
+ "name": "GradeState",
"description": null,
"fields": null,
- "inputFields": [
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "observedUserId",
- "description": "Only view filtered user",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
+ "name": "active",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "deleted",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "DateTime",
- "description": "an ISO8601 formatted time string",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DateTimeRange",
- "description": "a range of datetimes",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "GraderIdentity",
+ "description": "Represents a grader's identity in a moderated grading context.",
+ "fields": [
{
- "name": "end",
+ "name": "anonymousId",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "start",
- "description": null,
+ "name": "name",
+ "description": "The name of the grader, which may be anonymized in certain contexts.",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteAccountDomainLookupInput",
- "description": "Autogenerated input type of DeleteAccountDomainLookup",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "id",
+ "name": "position",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -13840,73 +26350,60 @@
},
{
"kind": "OBJECT",
- "name": "DeleteAccountDomainLookupPayload",
- "description": "Autogenerated return type of DeleteAccountDomainLookup.",
+ "name": "GraderIdentityConnection",
+ "description": "The connection type for GraderIdentity.",
"fields": [
{
- "name": "accountDomainLookupId",
- "description": null,
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GraderIdentityEdge",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "GraderIdentity",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteCommentBankItemInput",
- "description": "Autogenerated input type of DeleteCommentBankItem",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "id",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -13914,19 +26411,19 @@
},
{
"kind": "OBJECT",
- "name": "DeleteCommentBankItemPayload",
- "description": "Autogenerated return type of DeleteCommentBankItem.",
+ "name": "GraderIdentityEdge",
+ "description": "An edge in a connection.",
"fields": [
{
- "name": "commentBankItemId",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
@@ -13934,21 +26431,13 @@
"deprecationReason": null
},
{
- "name": "errors",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "GraderIdentity",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -13962,131 +26451,209 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DeleteConversationMessagesInput",
- "description": "Autogenerated input type of DeleteConversationMessages",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "Grades",
+ "description": "Contains grade information for a course or grading period",
+ "fields": [
{
- "name": "ids",
+ "name": "assignmentGroup",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- }
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteConversationMessagesPayload",
- "description": "Autogenerated return type of DeleteConversationMessages.",
- "fields": [
+ },
{
- "name": "conversationMessageIds",
+ "name": "currentGrade",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "currentScore",
+ "description": "The current score includes all graded assignments, excluding muted submissions.\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "customGradeStatusId",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteConversationsInput",
- "description": "Autogenerated input type of DeleteConversations",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "ids",
+ "name": "enrollment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "finalGrade",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "finalScore",
+ "description": "The final score includes all assignments, excluding muted submissions\n(ungraded assignments are counted as 0 points).\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradingPeriod",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GradingPeriod",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "htmlUrl",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "overrideGrade",
+ "description": "The override grade. Supersedes the computed final grade if set.\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "overrideScore",
+ "description": "The override score. Supersedes the computed final score if set.\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "kind": "ENUM",
+ "name": "GradeState",
+ "ofType": null
}
},
- "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unpostedCurrentGrade",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unpostedCurrentScore",
+ "description": "The current score includes all graded assignments, including muted submissions.\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unpostedFinalGrade",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unpostedFinalScore",
+ "description": "The final score includes all assignments, including muted submissions\n(ungraded assignments are counted as 0 points).\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -14094,81 +26661,60 @@
},
{
"kind": "OBJECT",
- "name": "DeleteConversationsPayload",
- "description": "Autogenerated return type of DeleteConversations.",
+ "name": "GradesConnection",
+ "description": "The connection type for Grades.",
"fields": [
{
- "name": "conversationIds",
- "description": null,
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "GradesEdge",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "Grades",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteCustomGradeStatusInput",
- "description": "Autogenerated input type of DeleteCustomGradeStatus",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "id",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -14176,37 +26722,33 @@
},
{
"kind": "OBJECT",
- "name": "DeleteCustomGradeStatusPayload",
- "description": "Autogenerated return type of DeleteCustomGradeStatus.",
+ "name": "GradesEdge",
+ "description": "An edge in a connection.",
"fields": [
{
- "name": "customGradeStatusId",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "Grades",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -14221,20 +26763,24 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "DeleteDiscussionEntryInput",
- "description": "Autogenerated input type of DeleteDiscussionEntry",
+ "name": "GradesEnrollmentFilter",
+ "description": null,
"fields": null,
"inputFields": [
{
- "name": "id",
- "description": null,
+ "name": "enrollmentIds",
+ "description": "only include users with the given enrollment ids",
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
}
},
"defaultValue": null,
@@ -14250,58 +26796,81 @@
},
{
"kind": "OBJECT",
- "name": "DeleteDiscussionEntryPayload",
- "description": "Autogenerated return type of DeleteDiscussionEntry.",
+ "name": "GradingPeriod",
+ "description": null,
"fields": [
{
- "name": "discussionEntry",
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "closeDate",
+ "description": "assignments can only be graded before the grading period closes\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "displayTotals",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteDiscussionTopicInput",
- "description": "Autogenerated input type of DeleteDiscussionTopic",
- "fields": null,
- "inputFields": [
+ },
+ {
+ "name": "endDate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "id",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -14311,24 +26880,11 @@
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteDiscussionTopicPayload",
- "description": "Autogenerated return type of DeleteDiscussionTopic.",
- "fields": [
+ },
{
- "name": "discussionTopicId",
+ "name": "isClosed",
"description": null,
"args": [],
"type": {
@@ -14336,7 +26892,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -14344,97 +26900,140 @@
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "isLast",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "startDate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "weight",
+ "description": "used to calculate how much the assignments in this grading period\ncontribute to the overall grade\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
- "interfaces": [],
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DeleteInternalSettingInput",
- "description": "Autogenerated input type of DeleteInternalSetting",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "GradingPeriodConnection",
+ "description": "The connection type for GradingPeriod.",
+ "fields": [
{
- "name": "internalSettingId",
- "description": null,
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "GradingPeriodEdge",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteInternalSettingPayload",
- "description": "Autogenerated return type of DeleteInternalSetting.",
- "fields": [
+ },
{
- "name": "errors",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "GradingPeriod",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "internalSettingId",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
@@ -14450,29 +27049,41 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DeleteOutcomeCalculationMethodInput",
- "description": "Autogenerated input type of DeleteOutcomeCalculationMethod",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "GradingPeriodEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "id",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
- "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GradingPeriod",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -14480,31 +27091,39 @@
},
{
"kind": "OBJECT",
- "name": "DeleteOutcomeCalculationMethodPayload",
- "description": "Autogenerated return type of DeleteOutcomeCalculationMethod.",
+ "name": "GradingPeriodGroup",
+ "description": null,
"fields": [
{
- "name": "errors",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomeCalculationMethodId",
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "displayTotals",
"description": null,
"args": [],
"type": {
@@ -14512,30 +27131,17 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteOutcomeLinksInput",
- "description": "Autogenerated input type of DeleteOutcomeLinks",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "ids",
+ "name": "enrollmentTermIds",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -14547,136 +27153,118 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
}
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteOutcomeLinksPayload",
- "description": "Autogenerated return type of DeleteOutcomeLinks.",
- "fields": [
+ },
{
- "name": "deletedOutcomeLinkIds",
+ "name": "gradingPeriodsConnection",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GradingPeriodConnection",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteOutcomeProficiencyInput",
- "description": "Autogenerated input type of DeleteOutcomeProficiency",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "id",
+ "name": "title",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteOutcomeProficiencyPayload",
- "description": "Autogenerated return type of DeleteOutcomeProficiency.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomeProficiencyId",
+ "name": "weighted",
"description": null,
"args": [],
"type": {
@@ -14684,7 +27272,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -14693,232 +27281,126 @@
}
],
"inputFields": null,
- "interfaces": [],
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DeleteSubmissionCommentInput",
- "description": "Autogenerated input type of DeleteSubmissionComment",
+ "kind": "ENUM",
+ "name": "GradingRole",
+ "description": "The grading role of the current user for this assignment",
"fields": null,
- "inputFields": [
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "submissionCommentId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
+ "name": "moderator",
+ "description": "User is a moderator for the assignment",
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteSubmissionCommentPayload",
- "description": "Autogenerated return type of DeleteSubmissionComment.",
- "fields": [
+ },
{
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
+ "name": "provisional_grader",
+ "description": "User is a provisional grader for the assignment",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionComment",
- "description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "SubmissionComment",
- "ofType": null
- },
+ "name": "grader",
+ "description": "User is a standard grader for the assignment",
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DeleteSubmissionDraftInput",
- "description": "Autogenerated input type of DeleteSubmissionDraft",
- "fields": null,
- "inputFields": [
+ "kind": "OBJECT",
+ "name": "GradingStandard",
+ "description": null,
+ "fields": [
{
- "name": "submissionId",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteSubmissionDraftPayload",
- "description": "Autogenerated return type of DeleteSubmissionDraft.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "contextCode",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionDraftIds",
+ "name": "contextId",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DeleteUserInboxLabelInput",
- "description": "Autogenerated input type of DeleteUserInboxLabel",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "names",
+ "name": "contextType",
"description": null,
+ "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DeleteUserInboxLabelPayload",
- "description": "Autogenerated return type of DeleteUserInboxLabel.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "inboxLabels",
+ "name": "data",
"description": null,
"args": [],
"type": {
@@ -14928,31 +27410,18 @@
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "GradingStandardItem",
"ofType": null
}
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Discussion",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "id",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
@@ -14967,225 +27436,209 @@
"deprecationReason": null
},
{
- "name": "allowRating",
+ "name": "migrationId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymousAuthor",
+ "name": "rootAccountId",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AnonymousUser",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymousState",
+ "name": "title",
"description": null,
"args": [],
"type": {
- "kind": "ENUM",
- "name": "DiscussionTopicAnonymousStateType",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignment",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Assignment",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "attachment",
+ "name": "usageCount",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "File",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "author",
+ "name": "userId",
"description": null,
- "args": [
- {
- "name": "builtInOnly",
- "description": "Only return default/built_in roles",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "roleTypes",
- "description": "Return only requested base role types",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "availableForUser",
+ "name": "version",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canGroup",
+ "name": "workflowState",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "canReplyAnonymously",
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GradingStandardItem",
+ "description": null,
+ "fields": [
+ {
+ "name": "baseValue",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canUnpublish",
+ "name": "letterGrade",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "GradingType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "points",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "percent",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "letter_grade",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "checkpoints",
+ "name": "gpa_scale",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Checkpoint",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "childTopics",
+ "name": "pass_fail",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextId",
+ "name": "not_graded",
"description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Group",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -15200,52 +27653,40 @@
"deprecationReason": null
},
{
- "name": "contextName",
+ "name": "activityStream",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "ActivityStream",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "assetString",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseSections",
+ "name": "canMessage",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Section",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
},
"isDeprecated": false,
@@ -15264,136 +27705,48 @@
"deprecationReason": null
},
{
- "name": "delayedPostAt",
+ "name": "groupCategory",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "GroupSet",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionEntriesConnection",
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "member",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionFilterType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rootEntries",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sortOrder",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "unreadBefore",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "userSearchId",
+ "name": "userId",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
@@ -15402,14 +27755,14 @@
],
"type": {
"kind": "OBJECT",
- "name": "DiscussionEntryConnection",
+ "name": "GroupMembership",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionEntryDraftsConnection",
+ "name": "membersConnection",
"description": null,
"args": [
{
@@ -15463,240 +27816,278 @@
],
"type": {
"kind": "OBJECT",
- "name": "DiscussionEntryDraftConnection",
+ "name": "GroupMembershipConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionType",
+ "name": "membersCount",
"description": null,
"args": [],
"type": {
- "kind": "ENUM",
- "name": "DiscussionTopicDiscussionType",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "editedAt",
+ "name": "name",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "editor",
+ "name": "nonCollaborative",
"description": null,
- "args": [
- {
- "name": "builtInOnly",
- "description": "Only return default/built_in roles",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "roleTypes",
- "description": "Return only requested base role types",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "entriesTotalPages",
+ "name": "sisId",
"description": null,
- "args": [
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionFilterType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "perPage",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rootEntries",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sortOrder",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "unreadBefore",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "GroupState",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssetString",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupConnection",
+ "description": "The connection type for Group.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GroupEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "entryCounts",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
"kind": "OBJECT",
- "name": "DiscussionEntryCounts",
+ "name": "Group",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupMembership",
+ "description": null,
+ "fields": [
{
- "name": "expanded",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "expandedLocked",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupSet",
+ "name": "group",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "GroupSet",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "state",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "ENUM",
+ "name": "GroupMembershipState",
"ofType": null
}
},
@@ -15704,15 +28095,63 @@
"deprecationReason": null
},
{
- "name": "initialPostRequiredForCurrentUser",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "user",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupMembershipConnection",
+ "description": "The connection type for GroupMembership.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "GroupMembershipEdge",
"ofType": null
}
},
@@ -15720,15 +28159,15 @@
"deprecationReason": null
},
{
- "name": "isAnnouncement",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "GroupMembership",
"ofType": null
}
},
@@ -15736,27 +28175,44 @@
"deprecationReason": null
},
{
- "name": "isAnonymousAuthor",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupMembershipEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "isLockedByMasterCourse",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
}
},
@@ -15764,71 +28220,135 @@
"deprecationReason": null
},
{
- "name": "isSectionSpecific",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "GroupMembership",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "GroupMembershipState",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "accepted",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "lastReplyAt",
+ "name": "invited",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "requested",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rejected",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "deleted",
"description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "autoLeader",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "ENUM",
+ "name": "AutoLeaderPolicy",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockInformation",
+ "name": "currentGroup",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "Group",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "locked",
+ "name": "groups",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mentionableUsersConnection",
+ "name": "groupsConnection",
"description": null,
"args": [
{
@@ -15878,30 +28398,46 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "MessageableUserConnection",
+ "name": "GroupConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "message",
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "memberLimit",
+ "description": "Sets a cap on the number of members in the group. Only applies when\nself-signup is enabled.\n",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
"description": null,
"args": [],
"type": {
@@ -15913,738 +28449,959 @@
"deprecationReason": null
},
{
- "name": "modules",
+ "name": "nonCollaborative",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "selfSignup",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
+ "kind": "ENUM",
+ "name": "SelfSignupPolicy",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "onlyGradersCanRate",
+ "name": "singleTag",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "onlyVisibleToOverrides",
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupSetConnection",
+ "description": "The connection type for GroupSet.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GroupSetEdge",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "GroupSetContextType",
+ "description": "Type of context for group set",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "account",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "course",
"description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupSetEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "GroupSet",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "GroupState",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "available",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "participant",
+ "name": "deleted",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "DiscussionParticipant",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "HideAssignmentGradesForSectionsInput",
+ "description": "Autogenerated input type of HideAssignmentGradesForSections",
+ "fields": null,
+ "inputFields": [
{
- "name": "permissions",
+ "name": "assignmentId",
"description": null,
- "args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionPermissions",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "podcastEnabled",
+ "name": "sectionIds",
"description": null,
- "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "HideAssignmentGradesForSectionsPayload",
+ "description": "Autogenerated return type of HideAssignmentGradesForSections.",
+ "fields": [
{
- "name": "podcastHasStudentPosts",
+ "name": "assignment",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "Assignment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "errors",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "position",
+ "name": "progress",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "Progress",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postedAt",
+ "name": "sections",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Section",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "HideAssignmentGradesInput",
+ "description": "Autogenerated input type of HideAssignmentGrades",
+ "fields": null,
+ "inputFields": [
{
- "name": "published",
+ "name": "assignmentId",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "replyToEntryRequiredCount",
+ "name": "onlyStudentIds",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "requireInitialPost",
+ "name": "sectionIds",
"description": null,
- "args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootEntriesTotalPages",
+ "name": "skipStudentIds",
"description": null,
- "args": [
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionFilterType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "perPage",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": null,
- "type": {
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
"kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sortOrder",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
+ "name": "ID",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "HideAssignmentGradesPayload",
+ "description": "Autogenerated return type of HideAssignmentGrades.",
+ "fields": [
{
- "name": "rootTopic",
+ "name": "assignment",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Discussion",
+ "name": "Assignment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "searchEntryCount",
+ "name": "errors",
"description": null,
- "args": [
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionFilterType",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sortByRating",
+ "name": "progress",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "Progress",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sortOrder",
+ "name": "sections",
"description": null,
- "args": [
- {
- "name": "sort",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Section",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "ID",
+ "description": "Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"VXNlci0xMA==\"`) or integer (such as `4`) input value will be accepted as an ID.",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "description": "An ISO 8601-encoded datetime",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": "https://tools.ietf.org/html/rfc3339",
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "ISO8601Duration",
+ "description": "An ISO 8601-encoded duration",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "ImportOutcomesInput",
+ "description": "Autogenerated input type of ImportOutcomes",
+ "fields": null,
+ "inputFields": [
{
- "name": "sortOrderLocked",
+ "name": "groupId",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subscribed",
+ "name": "outcomeId",
"description": null,
- "args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subscriptionDisabledForUser",
+ "name": "sourceContextId",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "sourceContextType",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "todoDate",
+ "name": "targetContextId",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "ISO8601DateTime",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "targetContextType",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ungradedDiscussionOverrides",
+ "name": "targetGroupId",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ImportOutcomesPayload",
+ "description": "Autogenerated return type of ImportOutcomes.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "progress",
+ "description": null,
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "AssignmentOverrideConnection",
+ "name": "Progress",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "InboxSettings",
+ "description": null,
+ "fields": [
{
- "name": "updatedAt",
+ "name": "_id",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "userCount",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "visibleToEveryone",
+ "name": "outOfOfficeFirstDate",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DiscussionCheckpointDate",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "dueAt",
+ "name": "outOfOfficeLastDate",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
"name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "outOfOfficeMessage",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "outOfOfficeSubject",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setId",
+ "name": "signature",
"description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setType",
+ "name": "updatedAt",
"description": null,
+ "args": [],
"type": {
- "kind": "ENUM",
- "name": "DiscussionCheckpointDateSetType",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "studentIds",
+ "name": "useOutOfOffice",
"description": null,
+ "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "useSignature",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "DiscussionCheckpointDateType",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlockAt",
+ "name": "userId",
"description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "DiscussionCheckpointDateSetType",
- "description": "Types of date set that can be set for discussion checkpoints",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ "kind": "OBJECT",
+ "name": "InstructorEnrollmentInfo",
+ "description": null,
+ "fields": [
{
- "name": "CourseSection",
+ "name": "course",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Group",
+ "name": "enrollmentState",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ADHOC",
+ "name": "role",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "EnrollmentRole",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Course",
+ "name": "type",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "DiscussionCheckpointDateType",
- "description": "Types of dates that can be set for discussion checkpoints",
- "fields": null,
"inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "everyone",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "override",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "interfaces": [],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "DiscussionCheckpoints",
+ "kind": "OBJECT",
+ "name": "InstructorWithEnrollments",
"description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "checkpointLabel",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "CheckpointLabelType",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "fields": [
{
- "name": "dates",
+ "name": "enrollments",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -16655,47 +29412,35 @@
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DiscussionCheckpointDate",
+ "kind": "OBJECT",
+ "name": "InstructorEnrollmentInfo",
"ofType": null
}
}
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "user",
"description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Float",
+ "kind": "OBJECT",
+ "name": "User",
"ofType": null
}
},
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "repliesRequired",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -16703,8 +29448,8 @@
},
{
"kind": "OBJECT",
- "name": "DiscussionConnection",
- "description": "The connection type for Discussion.",
+ "name": "InstructorWithEnrollmentsConnection",
+ "description": "The connection type for InstructorWithEnrollments.",
"fields": [
{
"name": "edges",
@@ -16715,7 +29460,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "DiscussionEdge",
+ "name": "InstructorWithEnrollmentsEdge",
"ofType": null
}
},
@@ -16731,7 +29476,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Discussion",
+ "name": "InstructorWithEnrollments",
"ofType": null
}
},
@@ -16740,14 +29485,14 @@
},
{
"name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "PageInfo",
+ "name": "TotalCountPageInfo",
"ofType": null
}
},
@@ -16764,7 +29509,7 @@
},
{
"kind": "OBJECT",
- "name": "DiscussionEdge",
+ "name": "InstructorWithEnrollmentsEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -16789,7 +29534,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Discussion",
+ "name": "InstructorWithEnrollments",
"ofType": null
},
"isDeprecated": false,
@@ -16803,9 +29548,21 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "SCALAR",
+ "name": "Int",
+ "description": "Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
- "name": "DiscussionEntry",
+ "name": "InternalSetting",
"description": null,
"fields": [
{
@@ -16825,108 +29582,67 @@
"deprecationReason": null
},
{
- "name": "allRootEntries",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "anonymousAuthor",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AnonymousUser",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "attachment",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "File",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "author",
+ "name": "secret",
"description": null,
- "args": [
- {
- "name": "builtInOnly",
- "description": "Only return default/built_in roles",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "roleTypes",
- "description": "Return only requested base role types",
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
@@ -16938,144 +29654,167 @@
"deprecationReason": null
},
{
- "name": "deleted",
+ "name": "value",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "depth",
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "SCALAR",
+ "name": "JSON",
+ "description": "Represents untyped JSON",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "LatePolicyStatusType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "late",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "missing",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "extended",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "none",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "LearnerDashboardTabType",
+ "description": "Available tabs on the learner dashboard",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "dashboard",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionEntryVersions",
- "description": null,
+ "name": "courses",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LearningOutcome",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "DiscussionEntryVersion",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionSubentriesConnection",
+ "name": "alignments",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "beforeRelativeEntry",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "includeRelativeEntry",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "relativeEntryId",
+ "name": "contextId",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sortOrder",
+ "name": "contextType",
"description": null,
"type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
@@ -17083,23 +29822,31 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntryConnection",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "OutcomeAlignment",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionTopic",
+ "name": "assessed",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "Discussion",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
@@ -17107,75 +29854,59 @@
"deprecationReason": null
},
{
- "name": "discussionTopicId",
+ "name": "calculationInt",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "editedAt",
+ "name": "calculationMethod",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "editor",
+ "name": "canArchive",
"description": null,
"args": [
{
- "name": "builtInOnly",
- "description": "Only return default/built_in roles",
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseId",
+ "name": "contextId",
"description": null,
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "roleTypes",
- "description": "Return only requested base role types",
+ "name": "contextType",
+ "description": null,
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"defaultValue": null,
@@ -17184,27 +29915,19 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "User",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "entryParticipant",
- "description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "EntryParticipant",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "canEdit",
"description": null,
"args": [],
"type": {
@@ -17212,7 +29935,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -17220,19 +29943,19 @@
"deprecationReason": null
},
{
- "name": "lastReply",
+ "name": "contextId",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "message",
+ "name": "contextType",
"description": null,
"args": [],
"type": {
@@ -17244,31 +29967,31 @@
"deprecationReason": null
},
{
- "name": "parentId",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "permissions",
+ "name": "description",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntryPermissions",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "previewMessage",
+ "name": "displayName",
"description": null,
"args": [],
"type": {
@@ -17280,133 +30003,190 @@
"deprecationReason": null
},
{
- "name": "quotedEntry",
+ "name": "friendlyDescription",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "contextId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "DiscussionEntry",
+ "name": "OutcomeFriendlyDescriptionType",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ratingCount",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ratingSum",
+ "name": "isImported",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "targetContextId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "targetContextType",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "reportTypeCounts",
+ "name": "masteryPoints",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntryReportTypeCounts",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootEntry",
+ "name": "pointsPossible",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootEntryId",
+ "name": "ratings",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rootEntryPageNumber",
- "description": null,
- "args": [
- {
- "name": "perPage",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ProficiencyRating",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootEntryParticipantCounts",
+ "name": "title",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "DiscussionEntryCounts",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subentriesCount",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "vendorGuid",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
@@ -17438,72 +30218,27 @@
},
{
"kind": "OBJECT",
- "name": "DiscussionEntryConnection",
- "description": "The connection type for DiscussionEntry.",
+ "name": "LearningOutcomeGroup",
+ "description": "Learning Outcome Group",
"fields": [
{
- "name": "edges",
- "description": "A list of edges.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "DiscussionEntryEdge",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "nodes",
- "description": "A list of nodes.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DiscussionEntryCounts",
- "description": null,
- "fields": [
+ },
{
- "name": "deletedCount",
+ "name": "canEdit",
"description": null,
"args": [],
"type": {
@@ -17511,7 +30246,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
}
},
@@ -17519,23 +30254,68 @@
"deprecationReason": null
},
{
- "name": "repliesCount",
+ "name": "childGroups",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroupConnection",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unreadCount",
+ "name": "childGroupsCount",
"description": null,
"args": [],
"type": {
@@ -17549,74 +30329,45 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DiscussionEntryDraft",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "attachment",
+ "name": "contextId",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "File",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "contextType",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionEntryId",
+ "name": "description",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "discussionTopicId",
+ "name": "id",
"description": null,
"args": [],
"type": {
@@ -17632,15 +30383,113 @@
"deprecationReason": null
},
{
- "name": "id",
+ "name": "notImportedOutcomesCount",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "targetGroupId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "outcomes",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "searchQuery",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "ContentTagConnection",
"ofType": null
}
},
@@ -17648,15 +30497,28 @@
"deprecationReason": null
},
{
- "name": "message",
+ "name": "outcomesCount",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "searchQuery",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
}
},
@@ -17664,36 +30526,40 @@
"deprecationReason": null
},
{
- "name": "parentId",
+ "name": "parentOutcomeGroup",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroup",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootEntryId",
+ "name": "title",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "vendorGuid",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
@@ -17709,7 +30575,7 @@
},
{
"kind": "INTERFACE",
- "name": "Timestamped",
+ "name": "Node",
"ofType": null
}
],
@@ -17720,8 +30586,8 @@
},
{
"kind": "OBJECT",
- "name": "DiscussionEntryDraftConnection",
- "description": "The connection type for DiscussionEntryDraft.",
+ "name": "LearningOutcomeGroupConnection",
+ "description": "The connection type for LearningOutcomeGroup.",
"fields": [
{
"name": "edges",
@@ -17732,7 +30598,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "DiscussionEntryDraftEdge",
+ "name": "LearningOutcomeGroupEdge",
"ofType": null
}
},
@@ -17748,7 +30614,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "DiscussionEntryDraft",
+ "name": "LearningOutcomeGroup",
"ofType": null
}
},
@@ -17781,7 +30647,7 @@
},
{
"kind": "OBJECT",
- "name": "DiscussionEntryDraftEdge",
+ "name": "LearningOutcomeGroupEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -17806,7 +30672,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "DiscussionEntryDraft",
+ "name": "LearningOutcomeGroup",
"ofType": null
},
"isDeprecated": false,
@@ -17821,283 +30687,394 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "DiscussionEntryEdge",
- "description": "An edge in a connection.",
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "description": null,
"fields": [
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
}
],
"inputFields": null,
"interfaces": [],
"enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DiscussionEntryPermissions",
- "description": null,
- "fields": [
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "AIGradeResult",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Account",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AccountDomain",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AccountDomainLookup",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AccountNotification",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AllocationRule",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssessmentRequest",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEvent",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventExternalTool",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventQuiz",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AuditEventUser",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CommentBankItem",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CommunicationChannel",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ContentTag",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "CustomGradeStatus",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "DiscussionEntryVersion",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalTool",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalUrl",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Folder",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GradingPeriod",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GradingPeriodGroup",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Group",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupMembership",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "InternalSetting",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LearningOutcome",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroup",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LtiAsset",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessor",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LtiAssetReport",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MediaTrack",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleExternalTool",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleItem",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleProgression",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Notification",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "NotificationPolicy",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "OutcomeCalculationMethod",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "OutcomeFriendlyDescriptionType",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "OutcomeProficiency",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Page",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PeerReviewSubAssignment",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PostPolicy",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ProficiencyRating",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Progress",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ProvisionalGrade",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Quiz",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "QuizSubmission",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Rubric",
+ "ofType": null
+ },
{
- "name": "attach",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "RubricAssessment",
+ "ofType": null
},
{
- "name": "create",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "RubricAssociation",
+ "ofType": null
},
{
- "name": "delete",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "RubricCriterion",
+ "ofType": null
},
{
- "name": "rate",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "RubricRating",
+ "ofType": null
},
{
- "name": "read",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "ScheduledPost",
+ "ofType": null
},
{
- "name": "reply",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Section",
+ "ofType": null
},
{
- "name": "update",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "StandardGradeStatus",
+ "ofType": null
},
{
- "name": "viewRating",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DiscussionEntryReportTypeCounts",
- "description": null,
- "fields": [
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
+ },
{
- "name": "inappropriateCount",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "SubmissionComment",
+ "ofType": null
},
{
- "name": "offensiveCount",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "SubmissionDraft",
+ "ofType": null
},
{
- "name": "otherCount",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Term",
+ "ofType": null
},
{
- "name": "total",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "UsageRights",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "DiscussionEntryVersion",
+ "name": "LockInfo",
"description": null,
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdAt",
+ "name": "canView",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "message",
+ "name": "isLocked",
"description": null,
"args": [],
"type": {
@@ -18105,7 +31082,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
}
},
@@ -18113,7 +31090,7 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "lockAt",
"description": null,
"args": [],
"type": {
@@ -18125,134 +31102,95 @@
"deprecationReason": null
},
{
- "name": "version",
+ "name": "lockedObject",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- }
+ "kind": "UNION",
+ "name": "Lockable",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "DiscussionFilter",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "userId",
- "description": "only return discussions for the given user. Defaults to\nthe current user.\n",
+ "name": "module",
+ "description": null,
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "Module",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "searchTerm",
- "description": "only return discussions whose title matches this search term\n",
+ "name": "unlockAt",
+ "description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "DiscussionFilterType",
- "description": "Search types that can be associated with discussions",
+ "kind": "UNION",
+ "name": "Lockable",
+ "description": "Types that can be locked",
"fields": null,
"inputFields": null,
"interfaces": null,
- "enumValues": [
+ "enumValues": null,
+ "possibleTypes": [
{
- "name": "all",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
},
{
- "name": "unread",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
},
{
- "name": "drafts",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
},
{
- "name": "deleted",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Page",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Quiz",
+ "ofType": null
}
],
- "possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "DiscussionParticipant",
+ "name": "LtiAsset",
"description": null,
"fields": [
{
- "name": "expanded",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -18267,302 +31205,239 @@
"deprecationReason": null
},
{
- "name": "sortOrder",
- "description": null,
- "args": [],
- "type": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "DiscussionPermissions",
- "description": null,
- "fields": [
- {
- "name": "addRubric",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "attach",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "closeForComments",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "copyAndSendTo",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "create",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "delete",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "duplicate",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "manageAssignTo",
+ "name": "attachmentId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "manageCourseContentAdd",
+ "name": "attachmentName",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "manageCourseContentDelete",
+ "name": "discussionEntryVersion",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "DiscussionEntryVersion",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "manageCourseContentEdit",
+ "name": "submissionAttempt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "moderateForum",
+ "name": "submissionId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "openForComments",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessor",
+ "description": null,
+ "fields": [
{
- "name": "peerReview",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rate",
+ "name": "externalTool",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ExternalTool",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "read",
+ "name": "iconOrToolIconUrl",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "readAsAdmin",
+ "name": "iframe",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessorIframe",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "readReplies",
+ "name": "text",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "reply",
+ "name": "title",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "showRubric",
+ "name": "window",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessorWindowSettings",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "speedGrader",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessorConnection",
+ "description": "The connection type for LtiAssetProcessor.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessorEdge",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "studentReporting",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessor",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "update",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -18576,196 +31451,207 @@
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorCreateOrUpdate",
"description": null,
"fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ "inputFields": [
{
- "name": "asc",
+ "name": "existingId",
"description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "desc",
+ "name": "newContentItem",
"description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorDto",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "interfaces": null,
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "DiscussionTopicAnonymousStateType",
- "description": "Anonymous states for discussionTopics",
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorDto",
+ "description": null,
"fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ "inputFields": [
{
- "name": "partial_anonymity",
+ "name": "contextExternalToolId",
"description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "full_anonymity",
+ "name": "custom",
"description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "StringMap",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "off",
+ "name": "icon",
"description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiContentItemIcon",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "DiscussionTopicContextType",
- "description": "Context types that can be associated with discussionTopics",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "Course",
+ "name": "iframe",
"description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiContentItemIframe",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Group",
+ "name": "report",
"description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorReportSettings",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "DiscussionTopicDiscussionType",
- "description": "Discussion type for discussionTopics",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "not_threaded",
+ "name": "text",
"description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "threaded",
+ "name": "thumbnail",
"description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiContentItemIcon",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "flat",
+ "name": "title",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "url",
"description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "side_comment",
+ "name": "window",
"description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorWindowSettingsInput",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "interfaces": null,
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "INTERFACE",
- "name": "DiscussionsConnectionInterface",
- "description": null,
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessorEdge",
+ "description": "An edge in a connection.",
"fields": [
{
- "name": "discussionsConnection",
- "description": "returns a list of discussions.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "DiscussionFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "node",
+ "description": "The item at the end of the edge.",
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "DiscussionConnection",
+ "name": "LtiAssetProcessor",
"ofType": null
},
"isDeprecated": false,
@@ -18775,84 +31661,103 @@
"inputFields": null,
"interfaces": [],
"enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
- ],
+ "possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "DraftableSubmissionType",
- "description": "Types of submissions that can have a submission draft",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "basic_lti_launch",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "media_recording",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "OBJECT",
+ "name": "LtiAssetProcessorIframe",
+ "description": null,
+ "fields": [
{
- "name": "online_text_entry",
+ "name": "height",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "online_upload",
+ "name": "width",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorReportSettings",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
- "name": "online_url",
+ "name": "custom",
"description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "StringMap",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "student_annotation",
+ "name": "url",
"description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "interfaces": null,
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "Enrollment",
+ "name": "LtiAssetProcessorWindowSettings",
"description": null,
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "height",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assetString",
+ "name": "targetName",
"description": null,
"args": [],
"type": {
@@ -18864,200 +31769,237 @@
"deprecationReason": null
},
{
- "name": "associatedUser",
+ "name": "width",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canBeRemoved",
+ "name": "windowFeatures",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiAssetProcessorWindowSettingsInput",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
- "name": "concluded",
+ "name": "height",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "course",
+ "name": "targetName",
"description": null,
- "args": [],
"type": {
- "kind": "OBJECT",
- "name": "Course",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseSectionId",
+ "name": "width",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "windowFeatures",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "LtiAssetReport",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "grades",
+ "name": "asset",
"description": null,
- "args": [
- {
- "name": "gradingPeriodId",
- "description": "The grading period to return grades for. If not specified, will use the current grading period (or the course grade for courses that don't use grading periods)",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "LtiAsset",
+ "ofType": null
}
- ],
- "type": {
- "kind": "OBJECT",
- "name": "Grades",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "htmlUrl",
+ "name": "comment",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "errorCode",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lastActivityAt",
+ "name": "indicationAlt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "limitPrivilegesToCourseSection",
+ "name": "indicationColor",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "section",
+ "name": "launchUrlPath",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Section",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sisImportId",
+ "name": "priority",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sisRole",
+ "name": "processingProgress",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "processorId",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "EnrollmentWorkflowState",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -19065,27 +32007,31 @@
"deprecationReason": null
},
{
- "name": "totalActivityTime",
+ "name": "reportType",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "resubmitAvailable",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "EnrollmentType",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
@@ -19093,24 +32039,36 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "result",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "user",
+ "name": "resultTruncated",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "title",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
@@ -19121,17 +32079,7 @@
"interfaces": [
{
"kind": "INTERFACE",
- "name": "AssetString",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
+ "name": "LegacyIDInterface",
"ofType": null
}
],
@@ -19142,8 +32090,8 @@
},
{
"kind": "OBJECT",
- "name": "EnrollmentConnection",
- "description": "The connection type for Enrollment.",
+ "name": "LtiAssetReportConnection",
+ "description": "The connection type for LtiAssetReport.",
"fields": [
{
"name": "edges",
@@ -19154,7 +32102,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "EnrollmentEdge",
+ "name": "LtiAssetReportEdge",
"ofType": null
}
},
@@ -19170,7 +32118,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Enrollment",
+ "name": "LtiAssetReport",
"ofType": null
}
},
@@ -19203,7 +32151,7 @@
},
{
"kind": "OBJECT",
- "name": "EnrollmentEdge",
+ "name": "LtiAssetReportEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -19228,7 +32176,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Enrollment",
+ "name": "LtiAssetReport",
"ofType": null
},
"isDeprecated": false,
@@ -19244,33 +32192,156 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "EnrollmentFilterInput",
+ "name": "LtiContentItemIcon",
"description": null,
"fields": null,
"inputFields": [
{
- "name": "associatedUserIds",
+ "name": "height",
"description": null,
"type": {
- "kind": "LIST",
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "url",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "width",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "LtiContentItemIframe",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "height",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "width",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "MarkSubmissionCommentsReadInput",
+ "description": "Autogenerated input type of MarkSubmissionCommentsRead",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "submissionCommentIds",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
}
}
},
- "defaultValue": "[]",
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "states",
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MarkSubmissionCommentsReadPayload",
+ "description": "Autogenerated return type of MarkSubmissionCommentsRead.",
+ "fields": [
+ {
+ "name": "errors",
"description": null,
+ "args": [],
"type": {
"kind": "LIST",
"name": null,
@@ -19278,19 +32349,19 @@
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "EnrollmentWorkflowState",
+ "kind": "OBJECT",
+ "name": "ValidationError",
"ofType": null
}
}
},
- "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "types",
+ "name": "submissionComments",
"description": null,
+ "args": [],
"type": {
"kind": "LIST",
"name": null,
@@ -19298,174 +32369,265 @@
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "EnrollmentType",
+ "kind": "OBJECT",
+ "name": "SubmissionComment",
"ofType": null
}
}
},
- "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "EnrollmentType",
+ "kind": "OBJECT",
+ "name": "MediaObject",
"description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ "fields": [
{
- "name": "StudentEnrollment",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "TeacherEnrollment",
+ "name": "canAddCaptions",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "TaEnrollment",
+ "name": "id",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ObserverEnrollment",
+ "name": "mediaDownloadUrl",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "DesignerEnrollment",
+ "name": "mediaSources",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "MediaSource",
+ "ofType": null
+ }
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "StudentViewEnrollment",
+ "name": "mediaTracks",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "MediaTrack",
+ "ofType": null
+ }
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "EnrollmentWorkflowState",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "invited",
+ "name": "mediaType",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "ENUM",
+ "name": "MediaType",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "creation_pending",
+ "name": "thumbnailUrl",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "active",
+ "name": "title",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "deleted",
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MediaSource",
+ "description": null,
+ "fields": [
+ {
+ "name": "bitrate",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rejected",
+ "name": "contentType",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "completed",
+ "name": "fileExt",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "inactive",
+ "name": "height",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "EntryParticipant",
- "description": null,
- "fields": [
+ },
{
- "name": "forcedReadState",
+ "name": "isOriginal",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rating",
+ "name": "size",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "read",
+ "name": "url",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "reportType",
+ "name": "width",
"description": null,
"args": [],
"type": {
@@ -19486,19 +32648,51 @@
},
{
"kind": "OBJECT",
- "name": "ExternalTool",
+ "name": "MediaTrack",
"description": null,
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "asr",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "content",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
@@ -19506,196 +32700,268 @@
"deprecationReason": null
},
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
+ "name": "kind",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "locale",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "description",
+ "name": "mediaObject",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "MediaObject",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
+ "name": "webvttContent",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
+ "name": "workflowState",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "ENUM",
+ "name": "MediaTrackWorkflowState",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "MediaTrackWorkflowState",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "ready",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "modules",
+ "name": "failed",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "processing",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "MediaType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "audio",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "video",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MessagePermissions",
+ "description": null,
+ "fields": [
+ {
+ "name": "sendMessages",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
- "description": "Whether the module item is published",
+ "name": "sendMessagesAll",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MessageableContext",
+ "description": null,
+ "fields": [
{
- "name": "settings",
+ "name": "avatarUrl",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "ExternalToolSettings",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "ENUM",
- "name": "ExternalToolState",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "itemCount",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "permissions",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "MessagePermissions",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
+ "name": "userCount",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
@@ -19706,17 +32972,7 @@
"interfaces": [
{
"kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
+ "name": "Node",
"ofType": null
}
],
@@ -19727,8 +32983,8 @@
},
{
"kind": "OBJECT",
- "name": "ExternalToolConnection",
- "description": "The connection type for ExternalTool.",
+ "name": "MessageableContextConnection",
+ "description": "The connection type for MessageableContext.",
"fields": [
{
"name": "edges",
@@ -19739,7 +32995,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ExternalToolEdge",
+ "name": "MessageableContextEdge",
"ofType": null
}
},
@@ -19755,7 +33011,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ExternalTool",
+ "name": "MessageableContext",
"ofType": null
}
},
@@ -19788,7 +33044,7 @@
},
{
"kind": "OBJECT",
- "name": "ExternalToolEdge",
+ "name": "MessageableContextEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -19813,7 +33069,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "ExternalTool",
+ "name": "MessageableContext",
"ofType": null
},
"isDeprecated": false,
@@ -19827,190 +33083,288 @@
"specifiedByURL": null,
"isOneOf": false
},
- {
- "kind": "INPUT_OBJECT",
- "name": "ExternalToolFilterInput",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "state",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "ExternalToolState",
- "ofType": null
- },
- "defaultValue": "null",
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "placement",
- "description": null,
- "type": {
- "kind": "ENUM",
- "name": "ExternalToolPlacement",
- "ofType": null
- },
- "defaultValue": "null",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "ExternalToolPlacement",
- "description": "Placements that an External Tool can have",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "homework_submission",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
{
"kind": "OBJECT",
- "name": "ExternalToolPlacements",
+ "name": "MessageableUser",
"description": null,
"fields": [
{
- "name": "canvasIconClass",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "iconUrl",
+ "name": "commonCoursesConnection",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "URL",
+ "kind": "OBJECT",
+ "name": "EnrollmentConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "messageType",
+ "name": "commonGroupsConnection",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "GroupConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "text",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "URL",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ExternalToolSettings",
- "description": null,
- "fields": [
+ },
{
- "name": "homeworkSubmission",
+ "name": "observerEnrollmentsConnection",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextCode",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "ExternalToolPlacements",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "iconUrl",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "URL",
+ "name": "EnrollmentConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "selectionHeight",
+ "name": "pronouns",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "selectionWidth",
+ "name": "shortName",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "text",
+ "name": "sisId",
"description": null,
"args": [],
"type": {
@@ -20023,64 +33377,33 @@
}
],
"inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "ExternalToolState",
- "description": "States that an External Tool can be in",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "anonymous",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name_only",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "email_only",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "interfaces": [
{
- "name": "public",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
}
],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "ExternalUrl",
- "description": null,
+ "name": "MessageableUserConnection",
+ "description": "The connection type for MessageableUser.",
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "MessageableUserEdge",
"ofType": null
}
},
@@ -20088,55 +33411,60 @@
"deprecationReason": null
},
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdAt",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "MessageableUser",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "PageInfo",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MessageableUserEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "isLockedByMasterCourse",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
}
},
@@ -20144,28 +33472,33 @@
"deprecationReason": null
},
{
- "name": "modules",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "MessageableUser",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModeratedGrading",
+ "description": "Settings for Moderated Grading on an Assignment",
+ "fields": [
{
- "name": "newTab",
- "description": null,
+ "name": "enabled",
+ "description": "Boolean indicating if the assignment is moderated.",
"args": [],
"type": {
"kind": "SCALAR",
@@ -20176,72 +33509,72 @@
"deprecationReason": null
},
{
- "name": "pointsPossible",
- "description": null,
+ "name": "finalGrader",
+ "description": "The user of the grader responsible for choosing final grades for this assignment.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Float",
+ "kind": "OBJECT",
+ "name": "User",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
- "description": "Whether the module item is published",
+ "name": "finalGraderAnonymousId",
+ "description": "The anonymous ID of the final grader",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
- "description": null,
+ "name": "graderCommentsVisibleToGraders",
+ "description": "Boolean indicating if provisional graders' comments are visible to other provisional graders.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
- "description": null,
+ "name": "graderCount",
+ "description": "The maximum number of provisional graders who may issue grades for this assignment.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
- "description": null,
+ "name": "graderNamesVisibleToFinalGrader",
+ "description": "Boolean indicating if provisional graders' identities are hidden from other provisional graders.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
- "description": null,
+ "name": "gradersAnonymousToGraders",
+ "description": "Boolean indicating if provisional grader identities are visible to the final grader.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
@@ -20249,23 +33582,7 @@
}
],
"inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -20273,7 +33590,7 @@
},
{
"kind": "OBJECT",
- "name": "File",
+ "name": "Module",
"description": null,
"fields": [
{
@@ -20293,25 +33610,21 @@
"deprecationReason": null
},
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "contentType",
+ "name": "completionRequirements",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ModuleCompletionRequirement",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -20329,19 +33642,19 @@
"deprecationReason": null
},
{
- "name": "displayName",
+ "name": "estimatedDuration",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ISO8601Duration",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "hasActiveOverrides",
"description": null,
"args": [],
"type": {
@@ -20349,7 +33662,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -20357,7 +33670,7 @@
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
+ "name": "id",
"description": null,
"args": [],
"type": {
@@ -20365,7 +33678,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
}
},
@@ -20373,169 +33686,225 @@
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
+ "name": "moduleItems",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ModuleItem",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mimeClass",
+ "name": "moduleItemsConnection",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "ModuleItemFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "ModuleItemConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "modules",
+ "name": "moduleItemsTotalCount",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "name",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
- "description": "Whether the module item is published",
+ "name": "position",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "size",
+ "name": "prerequisites",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ModulePrerequisite",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionPreviewUrl",
- "description": null,
- "args": [
- {
- "name": "submissionId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "progression",
+ "description": "The current user's progression through the module",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "URL",
+ "kind": "OBJECT",
+ "name": "ModuleProgression",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "thumbnailUrl",
+ "name": "published",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "requireSequentialProgress",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "requirementCount",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "submissionStatistics",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "ModuleStatistics",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "unlockAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
@@ -20552,76 +33921,141 @@
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "url",
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleCompletionRequirement",
+ "description": null,
+ "fields": [
+ {
+ "name": "id",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "minPercentage",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "usageRights",
+ "name": "minScore",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "UsageRights",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "wordCount",
+ "name": "type",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
}
],
"inputFields": null,
- "interfaces": [
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "ModuleCompletionStatus",
+ "description": "Filter options for module completion status",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
+ "name": "COMPLETED",
+ "description": "Modules marked as completed",
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
+ "name": "INCOMPLETE",
+ "description": "Modules not yet completed (includes locked, unlocked, started)",
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
+ "name": "NOT_STARTED",
+ "description": "Modules that are unlocked but not started",
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
+ "name": "IN_PROGRESS",
+ "description": "Modules that are started but not completed",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "FileConnection",
- "description": "The connection type for File.",
+ "name": "ModuleConnection",
+ "description": "The connection type for Module.",
"fields": [
{
"name": "edges",
@@ -20632,7 +34066,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "FileEdge",
+ "name": "ModuleEdge",
"ofType": null
}
},
@@ -20648,7 +34082,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "File",
+ "name": "Module",
"ofType": null
}
},
@@ -20681,7 +34115,7 @@
},
{
"kind": "OBJECT",
- "name": "FileEdge",
+ "name": "ModuleEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -20706,7 +34140,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "File",
+ "name": "Module",
"ofType": null
},
"isDeprecated": false,
@@ -20721,251 +34155,137 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "FileFilter",
+ "kind": "OBJECT",
+ "name": "ModuleExternalTool",
"description": null,
- "fields": null,
- "inputFields": [
+ "fields": [
{
- "name": "userId",
- "description": "only return files for the given user. Defaults to\nthe current user.\n",
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "searchTerm",
- "description": "only return files whose name matches this search term\n",
+ "name": "canDuplicate",
+ "description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INTERFACE",
- "name": "FilesConnectionInterface",
- "description": null,
- "fields": [
+ },
{
- "name": "filesConnection",
- "description": "returns a list of files.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "FileFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "canManageAssignTo",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "FileConnection",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "Float",
- "description": "Represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "GradeState",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "active",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "deleted",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Grades",
- "description": "Contains grade information for a course or grading period",
- "fields": [
- {
- "name": "assignmentGroup",
- "description": null,
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "currentGrade",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "currentScore",
- "description": "The current score includes all graded assignments, excluding muted submissions.\n",
+ "name": "domain",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "customGradeStatusId",
+ "name": "graded",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "enrollment",
+ "name": "isLockedByMasterCourse",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Enrollment",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "finalGrade",
+ "name": "modules",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "finalScore",
- "description": "The final score includes all assignments, excluding muted submissions\n(ungraded assignments are counted as 0 points).\n",
+ "name": "pointsPossible",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
@@ -20976,20 +34296,20 @@
"deprecationReason": null
},
{
- "name": "gradingPeriod",
- "description": null,
+ "name": "published",
+ "description": "Whether the module item is published",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "GradingPeriod",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "overrideGrade",
- "description": "The override grade. Supersedes the computed final grade if set.\n",
+ "name": "title",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
@@ -21000,35 +34320,31 @@
"deprecationReason": null
},
{
- "name": "overrideScore",
- "description": "The override score. Supersedes the computed final score if set.\n",
+ "name": "type",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "GradeState",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unpostedCurrentGrade",
+ "name": "url",
"description": null,
"args": [],
"type": {
@@ -21038,46 +34354,63 @@
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "unpostedCurrentScore",
- "description": "The current score includes all graded assignments, including muted submissions.\n",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
},
{
- "name": "unpostedFinalGrade",
- "description": null,
- "args": [],
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "ModuleFilterInput",
+ "description": "Input type for filtering modules in a course",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "completionStatus",
+ "description": "Filter modules by completion status",
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "ENUM",
+ "name": "ModuleCompletionStatus",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unpostedFinalScore",
- "description": "The final score includes all assignments, including muted submissions\n(ungraded assignments are counted as 0 points).\n",
- "args": [],
+ "name": "userId",
+ "description": "Filter by specific user's progress (requires permission). Defaults to current user if not specified.",
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
+ "interfaces": null,
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -21085,19 +34418,19 @@
},
{
"kind": "OBJECT",
- "name": "GradesConnection",
- "description": "The connection type for Grades.",
+ "name": "ModuleItem",
+ "description": null,
"fields": [
{
- "name": "edges",
- "description": "A list of edges.",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "GradesEdge",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -21105,60 +34438,51 @@
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "content",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Grades",
- "ofType": null
- }
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "createdAt",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GradesEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "estimatedDuration",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601Duration",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -21166,186 +34490,242 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "indent",
+ "description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Grades",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "GradesEnrollmentFilter",
- "description": null,
- "fields": null,
- "inputFields": [
+ },
{
- "name": "enrollmentIds",
- "description": "only include users with the given enrollment ids",
+ "name": "masterCourseRestrictions",
+ "description": "Restrictions from master courses for this module item",
+ "args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "ModuleItemMasterCourseRestriction",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GradingPeriod",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "masteryPaths",
+ "description": "Mastery path information for this module item",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "ModuleItemMasteryPathInfo",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "module",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "closeDate",
- "description": "assignments can only be graded before the grading period closes\n",
+ "name": "moduleItemUrl",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "URL",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "newTab",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "displayTotals",
+ "name": "next",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "ModuleItem",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "endDate",
- "description": null,
- "args": [],
+ "name": "nextItemsConnection",
+ "description": "Items are ordered based on distance to the current item, starting with the next item directly following it.",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "ModuleItemConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "position",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isClosed",
+ "name": "previous",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "ModuleItem",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLast",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "name": "previousItemsConnection",
+ "description": "Items are ordered based on distance to the current item, starting with the previous item directly preceding it.",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ModuleItemConnection",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "startDate",
+ "name": "published",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
@@ -21376,12 +34756,12 @@
"deprecationReason": null
},
{
- "name": "weight",
- "description": "used to calculate how much the assignments in this grading period\ncontribute to the overall grade\n",
+ "name": "url",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "URL",
"ofType": null
},
"isDeprecated": false,
@@ -21413,8 +34793,8 @@
},
{
"kind": "OBJECT",
- "name": "GradingPeriodConnection",
- "description": "The connection type for GradingPeriod.",
+ "name": "ModuleItemConnection",
+ "description": "The connection type for ModuleItem.",
"fields": [
{
"name": "edges",
@@ -21425,7 +34805,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "GradingPeriodEdge",
+ "name": "ModuleItemEdge",
"ofType": null
}
},
@@ -21441,7 +34821,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "GradingPeriod",
+ "name": "ModuleItem",
"ofType": null
}
},
@@ -21474,7 +34854,7 @@
},
{
"kind": "OBJECT",
- "name": "GradingPeriodEdge",
+ "name": "ModuleItemEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -21499,7 +34879,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "GradingPeriod",
+ "name": "ModuleItem",
"ofType": null
},
"isDeprecated": false,
@@ -21514,181 +34894,109 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "GradingPeriodGroup",
+ "kind": "INPUT_OBJECT",
+ "name": "ModuleItemFilter",
"description": null,
- "fields": [
+ "fields": null,
+ "inputFields": [
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
+ "name": "contentType",
+ "description": "Filter by content type (Assignment, WikiPage, etc.)",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
- "description": null,
- "args": [],
+ "name": "published",
+ "description": "Filter by published status",
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "displayTotals",
- "description": null,
- "args": [],
+ "name": "searchTerm",
+ "description": "Filter by title or content",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "description": "An item that can be in context modules",
+ "fields": [
{
- "name": "enrollmentTermIds",
+ "name": "canDuplicate",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradingPeriodsConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "GradingPeriodConnection",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "canManageAssignTo",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
- "description": null,
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "graded",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "weighted",
+ "name": "isLockedByMasterCourse",
"description": null,
"args": [],
"type": {
@@ -21702,74 +35010,53 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GradingStandard",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "modules",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextCode",
+ "name": "pointsPossible",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextId",
- "description": null,
+ "name": "published",
+ "description": "Whether the module item is published",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "title",
"description": null,
"args": [],
"type": {
@@ -21781,140 +35068,193 @@
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "type",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
},
{
- "name": "data",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "GradingStandardItem",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
},
{
- "name": "id",
- "description": null,
+ "kind": "OBJECT",
+ "name": "ExternalTool",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ExternalUrl",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleExternalTool",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Page",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PeerReviewSubAssignment",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Quiz",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "SubHeader",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleItemMasterCourseRestriction",
+ "description": "Restrictions for a module item defined in a blueprint course",
+ "fields": [
+ {
+ "name": "all",
+ "description": "Whether all aspects are restricted",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
- {
- "name": "migrationId",
- "description": null,
+ {
+ "name": "availabilityDates",
+ "description": "Whether availability dates are restricted",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rootAccountId",
- "description": null,
+ "name": "content",
+ "description": "Whether content is restricted",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
- "description": null,
+ "name": "dueDates",
+ "description": "Whether due dates are restricted",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
- "description": null,
+ "name": "points",
+ "description": "Whether points are restricted",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "usageCount",
- "description": null,
+ "name": "settings",
+ "description": "Whether settings are restricted",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleItemMasteryPathInfo",
+ "description": "Mastery path information for a module item",
+ "fields": [
{
- "name": "userId",
- "description": null,
+ "name": "assignmentSetCount",
+ "description": "Number of assignment sets that can be selected",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "version",
- "description": null,
+ "name": "awaitingChoice",
+ "description": "Whether the next assignment set can be chosen",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "workflowState",
- "description": null,
+ "name": "chooseUrl",
+ "description": "URL to expose next assignment set choice",
"args": [],
"type": {
"kind": "SCALAR",
@@ -21923,45 +35263,26 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GradingStandardItem",
- "description": null,
- "fields": [
+ },
{
- "name": "baseValue",
- "description": null,
+ "name": "locked",
+ "description": "Indicates locked content",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "letterGrade",
- "description": null,
+ "name": "stillProcessing",
+ "description": "Indicates mastery path handler in-flight",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
@@ -21976,57 +35297,69 @@
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "GradingType",
+ "kind": "OBJECT",
+ "name": "ModulePrerequisite",
"description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "points",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "percent",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "letter_grade",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "fields": [
{
- "name": "gpa_scale",
+ "name": "id",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pass_fail",
+ "name": "name",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "not_graded",
+ "name": "type",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "Group",
+ "name": "ModuleProgression",
"description": null,
"fields": [
{
@@ -22046,41 +35379,53 @@
"deprecationReason": null
},
{
- "name": "activityStream",
+ "name": "collapsed",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "ActivityStream",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assetString",
+ "name": "completed",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "completedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canMessage",
+ "name": "contextModule",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -22098,53 +35443,60 @@
"deprecationReason": null
},
{
- "name": "id",
+ "name": "current",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "member",
+ "name": "currentPosition",
"description": null,
- "args": [
- {
- "name": "userId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "GroupMembership",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "membersConnection",
+ "name": "evaluatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "incompleteItemsConnection",
+ "description": "Items are ordered by position",
"args": [
{
"name": "after",
@@ -22196,57 +35548,117 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "GroupMembershipConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ModuleItemConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "membersCount",
+ "name": "incompleteRequirements",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Requirement",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "locked",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nonCollaborative",
+ "name": "module",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sisId",
+ "name": "requirementsMet",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Requirement",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "started",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "unlocked",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -22262,15 +35674,38 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "user",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "workflowState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
"interfaces": [
- {
- "kind": "INTERFACE",
- "name": "AssetString",
- "ofType": null
- },
{
"kind": "INTERFACE",
"name": "LegacyIDInterface",
@@ -22294,8 +35729,8 @@
},
{
"kind": "OBJECT",
- "name": "GroupConnection",
- "description": "The connection type for Group.",
+ "name": "ModuleProgressionConnection",
+ "description": "The connection type for ModuleProgression.",
"fields": [
{
"name": "edges",
@@ -22306,7 +35741,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "GroupEdge",
+ "name": "ModuleProgressionEdge",
"ofType": null
}
},
@@ -22322,7 +35757,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Group",
+ "name": "ModuleProgression",
"ofType": null
}
},
@@ -22355,7 +35790,7 @@
},
{
"kind": "OBJECT",
- "name": "GroupEdge",
+ "name": "ModuleProgressionEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -22380,7 +35815,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Group",
+ "name": "ModuleProgression",
"ofType": null
},
"isDeprecated": false,
@@ -22396,19 +35831,19 @@
},
{
"kind": "OBJECT",
- "name": "GroupMembership",
+ "name": "ModuleProgressionStatistics",
"description": null,
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "completedModulesCount",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
}
},
@@ -22416,27 +35851,31 @@
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "inProgressModulesCount",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "state",
+ "name": "lockedModulesCount",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "GroupMembershipState",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
}
},
@@ -22444,96 +35883,167 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "totalModulesCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ModuleStatistics",
+ "description": null,
+ "fields": [
+ {
+ "name": "latestDueAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "ISO8601DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "user",
+ "name": "missingAssignmentCount",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
}
],
"inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "GroupMembershipConnection",
- "description": "The connection type for GroupMembership.",
- "fields": [
+ "kind": "INPUT_OBJECT",
+ "name": "MoveOutcomeLinksInput",
+ "description": "Autogenerated input type of MoveOutcomeLinks",
+ "fields": null,
+ "inputFields": [
{
- "name": "edges",
- "description": "A list of edges.",
- "args": [],
+ "name": "outcomeLinkIds",
+ "description": "A list of ContentTags that will be moved\n",
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "GroupMembershipEdge",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "groupId",
+ "description": "The id of the destination group\n",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MoveOutcomeLinksPayload",
+ "description": "Autogenerated return type of MoveOutcomeLinks.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "GroupMembership",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "movedOutcomeLinks",
+ "description": "List of Outcome Links that were sucessfully moved to the group\n",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ContentTag",
+ "ofType": null
+ }
+ }
}
},
"isDeprecated": false,
@@ -22549,200 +36059,488 @@
},
{
"kind": "OBJECT",
- "name": "GroupMembershipEdge",
- "description": "An edge in a connection.",
+ "name": "Mutation",
+ "description": null,
"fields": [
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "name": "acceptEnrollmentInvitation",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for AcceptEnrollmentInvitation",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AcceptEnrollmentInvitationInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AcceptEnrollmentInvitationPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
+ "name": "addConversationMessage",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for AddConversationMessage",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AddConversationMessageInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "GroupMembership",
+ "name": "AddConversationMessagePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "GroupMembershipState",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "accepted",
+ "name": "autoGradeSubmission",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for AutoGradeSubmission",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "AutoGradeSubmissionInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AutoGradeSubmissionPayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "invited",
+ "name": "createAccountDomainLookup",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateAccountDomainLookup",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateAccountDomainLookupInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateAccountDomainLookupPayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "requested",
+ "name": "createAllocationRule",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateAllocationRule",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateAllocationRuleInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateAllocationRulePayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "rejected",
+ "name": "createAssignment",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateAssignment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateAssignmentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateAssignmentPayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleted",
+ "name": "createCommentBankItem",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateCommentBankItem",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateCommentBankItemInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateCommentBankItemPayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GroupSet",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
+ "name": "createConversation",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateConversation",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateConversationInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "OBJECT",
+ "name": "CreateConversationPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createDiscussionEntry",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateDiscussionEntry",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateDiscussionEntryInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateDiscussionEntryPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "autoLeader",
+ "name": "createDiscussionTopic",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateDiscussionTopic",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateDiscussionTopicInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "ENUM",
- "name": "AutoLeaderPolicy",
+ "kind": "OBJECT",
+ "name": "CreateDiscussionTopicPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "currentGroup",
+ "name": "createGroupInSet",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateGroupInSet",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateGroupInSetInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "Group",
+ "name": "CreateGroupInSetPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groups",
+ "name": "createGroupSet",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateGroupSet",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateGroupSetInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Group",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "CreateGroupSetPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createInternalSetting",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateInternalSetting",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateInternalSettingInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateInternalSettingPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "groupsConnection",
+ "name": "createLearningOutcome",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
+ "name": "input",
+ "description": "Parameters for CreateLearningOutcome",
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateLearningOutcomeInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateLearningOutcomePayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createLearningOutcomeGroup",
+ "description": null,
+ "args": [
{
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
+ "name": "input",
+ "description": "Parameters for CreateLearningOutcomeGroup",
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateLearningOutcomeGroupInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateLearningOutcomeGroupPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createModule",
+ "description": null,
+ "args": [
{
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
+ "name": "input",
+ "description": "Parameters for CreateModule",
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateModuleInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CreateModulePayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createOutcomeCalculationMethod",
+ "description": null,
+ "args": [
{
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
+ "name": "input",
+ "description": "Parameters for CreateOutcomeCalculationMethod",
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateOutcomeCalculationMethodInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
@@ -22751,1119 +36549,1475 @@
],
"type": {
"kind": "OBJECT",
- "name": "GroupConnection",
+ "name": "CreateOutcomeCalculationMethodPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "createOutcomeProficiency",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateOutcomeProficiency",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateOutcomeProficiencyInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "memberLimit",
- "description": "Sets a cap on the number of members in the group. Only applies when\nself-signup is enabled.\n",
- "args": [],
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "CreateOutcomeProficiencyPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
- "args": [],
+ "name": "createSubmission",
+ "description": "IN ACTIVE DEVELOPMENT, USE AT YOUR OWN RISK: Submit homework on an assignment.\n",
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateSubmission",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateSubmissionInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "CreateSubmissionPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nonCollaborative",
+ "name": "createSubmissionComment",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateSubmissionComment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateSubmissionCommentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "CreateSubmissionCommentPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "selfSignup",
+ "name": "createSubmissionDraft",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "SelfSignupPolicy",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateSubmissionDraft",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateSubmissionDraftInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sisId",
- "description": null,
- "args": [],
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "CreateSubmissionDraftPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GroupSetConnection",
- "description": "The connection type for GroupSet.",
- "fields": [
- {
- "name": "edges",
- "description": "A list of edges.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "GroupSetEdge",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "GroupSet",
- "ofType": null
+ "name": "createUserInboxLabel",
+ "description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for CreateUserInboxLabel",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "CreateUserInboxLabelInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
- "args": [],
+ ],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "CreateUserInboxLabelPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "GroupSetContextType",
- "description": "Type of context for group set",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "account",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "course",
+ "name": "deleteAccountDomainLookup",
"description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "GroupSetEdge",
- "description": "An edge in a connection.",
- "fields": [
- {
- "name": "cursor",
- "description": "A cursor for use in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteAccountDomainLookup",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteAccountDomainLookupInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
+ ],
"type": {
"kind": "OBJECT",
- "name": "GroupSet",
+ "name": "DeleteAccountDomainLookupPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "HideAssignmentGradesForSectionsInput",
- "description": "Autogenerated input type of HideAssignmentGradesForSections",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "assignmentId",
+ "name": "deleteAllocationRule",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteAllocationRule",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteAllocationRuleInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteAllocationRulePayload",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sectionIds",
+ "name": "deleteCommentBankItem",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteCommentBankItem",
+ "type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteCommentBankItemInput",
"ofType": null
}
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "HideAssignmentGradesForSectionsPayload",
- "description": "Autogenerated return type of HideAssignmentGradesForSections.",
- "fields": [
- {
- "name": "assignment",
- "description": null,
- "args": [],
+ ],
"type": {
"kind": "OBJECT",
- "name": "Assignment",
+ "name": "DeleteCommentBankItemPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "deleteConversationMessages",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteConversationMessages",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteConversationMessagesInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteConversationMessagesPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "progress",
+ "name": "deleteConversations",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteConversations",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteConversationsInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "Progress",
+ "name": "DeleteConversationsPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sections",
+ "name": "deleteCustomGradeStatus",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Section",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteCustomGradeStatus",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteCustomGradeStatusInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteCustomGradeStatusPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "HideAssignmentGradesInput",
- "description": "Autogenerated input type of HideAssignmentGrades",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "assignmentId",
+ "name": "deleteDiscussionEntry",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteDiscussionEntry",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteDiscussionEntryInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteDiscussionEntryPayload",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "onlyStudentIds",
+ "name": "deleteDiscussionTopic",
"description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteDiscussionTopic",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteDiscussionTopicInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteDiscussionTopicPayload",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sectionIds",
+ "name": "deleteInternalSetting",
"description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteInternalSetting",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteInternalSettingInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteInternalSettingPayload",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "skipStudentIds",
+ "name": "deleteOutcomeCalculationMethod",
"description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteOutcomeCalculationMethod",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteOutcomeCalculationMethodInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteOutcomeCalculationMethodPayload",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "HideAssignmentGradesPayload",
- "description": "Autogenerated return type of HideAssignmentGrades.",
- "fields": [
+ },
{
- "name": "assignment",
+ "name": "deleteOutcomeLinks",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteOutcomeLinks",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteOutcomeLinksInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "Assignment",
+ "name": "DeleteOutcomeLinksPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "deleteOutcomeProficiency",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteOutcomeProficiency",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteOutcomeProficiencyInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteOutcomeProficiencyPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "progress",
+ "name": "deleteSubmissionComment",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteSubmissionComment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteSubmissionCommentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "Progress",
+ "name": "DeleteSubmissionCommentPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sections",
+ "name": "deleteSubmissionDraft",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Section",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteSubmissionDraft",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteSubmissionDraftInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "DeleteSubmissionDraftPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "ID",
- "description": "Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"VXNlci0xMA==\"`) or integer (such as `4`) input value will be accepted as an ID.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "ISO8601DateTime",
- "description": "An ISO 8601-encoded datetime",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": "https://tools.ietf.org/html/rfc3339",
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "ISO8601Duration",
- "description": "An ISO 8601-encoded duration",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "ImportOutcomesInput",
- "description": "Autogenerated input type of ImportOutcomes",
- "fields": null,
- "inputFields": [
+ },
{
- "name": "groupId",
+ "name": "deleteUserInboxLabel",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DeleteUserInboxLabel",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DeleteUserInboxLabelInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "DeleteUserInboxLabelPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomeId",
+ "name": "dismissAccountNotification",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for DismissAccountNotification",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "DismissAccountNotificationInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "DismissAccountNotificationPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sourceContextId",
+ "name": "hideAssignmentGrades",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for HideAssignmentGrades",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "HideAssignmentGradesInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "HideAssignmentGradesPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sourceContextType",
+ "name": "hideAssignmentGradesForSections",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for HideAssignmentGradesForSections",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "HideAssignmentGradesForSectionsInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "HideAssignmentGradesForSectionsPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "targetContextId",
+ "name": "importOutcomes",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for ImportOutcomes",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "ImportOutcomesInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "ImportOutcomesPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "targetContextType",
+ "name": "markSubmissionCommentsRead",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for MarkSubmissionCommentsRead",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "MarkSubmissionCommentsReadInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "MarkSubmissionCommentsReadPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "targetGroupId",
+ "name": "moveOutcomeLinks",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for MoveOutcomeLinks",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "MoveOutcomeLinksInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "MoveOutcomeLinksPayload",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ImportOutcomesPayload",
- "description": "Autogenerated return type of ImportOutcomes.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "postAssignmentGrades",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for PostAssignmentGrades",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "PostAssignmentGradesInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PostAssignmentGradesPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "progress",
+ "name": "postAssignmentGradesForSections",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for PostAssignmentGradesForSections",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "PostAssignmentGradesForSectionsInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "Progress",
+ "name": "PostAssignmentGradesForSectionsPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "InboxSettings",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
+ "name": "postDraftSubmissionComment",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for PostDraftSubmissionComment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "PostDraftSubmissionCommentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PostDraftSubmissionCommentPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "rejectEnrollmentInvitation",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for RejectEnrollmentInvitation",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "RejectEnrollmentInvitationInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "RejectEnrollmentInvitationPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outOfOfficeFirstDate",
+ "name": "reorderModuleItems",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for ReorderModuleItems",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "ReorderModuleItemsInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "ReorderModuleItemsPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outOfOfficeLastDate",
+ "name": "restoreDeletedDiscussionEntry",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for RestoreDeletedDiscussionEntry",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "RestoreDeletedDiscussionEntryInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "RestoreDeletedDiscussionEntryPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outOfOfficeMessage",
+ "name": "saveRubricAssessment",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SaveRubricAssessment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SaveRubricAssessmentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "SaveRubricAssessmentPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outOfOfficeSubject",
+ "name": "selectProvisionalGrade",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SelectProvisionalGrade",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SelectProvisionalGradeInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "SelectProvisionalGradePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "signature",
- "description": null,
- "args": [],
+ "name": "setAssignmentPostPolicy",
+ "description": "Sets the post policy for the assignment.\n",
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetAssignmentPostPolicy",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetAssignmentPostPolicyInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "SetAssignmentPostPolicyPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
- "description": null,
- "args": [],
+ "name": "setCoursePostPolicy",
+ "description": "Sets the post policy for the course, with an option to override and delete\nexisting assignment post policies.\n",
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetCoursePostPolicy",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetCoursePostPolicyInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "SetCoursePostPolicyPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "useOutOfOffice",
+ "name": "setFriendlyDescription",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetFriendlyDescription",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetFriendlyDescriptionInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SetFriendlyDescriptionPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "useSignature",
+ "name": "setModuleItemCompletion",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetModuleItemCompletion",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetModuleItemCompletionInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SetModuleItemCompletionPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "userId",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "name": "setOverrideScore",
+ "description": "Sets the overridden final score for the associated enrollment, optionally limited to a specific\ngrading period. This will supersede the computed final score/grade if present.\n",
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetOverrideScore",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetOverrideScoreInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "Int",
- "description": "Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "InternalSetting",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
+ ],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "SetOverrideScorePayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "setOverrideStatus",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetOverrideStatus",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetOverrideStatusInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "SetOverrideStatusPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "setRubricSelfAssessment",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SetRubricSelfAssessment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SetRubricSelfAssessmentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SetRubricSelfAssessmentPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "subscribeToDiscussionTopic",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for SubscribeToDiscussionTopic",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubscribeToDiscussionTopicInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubscribeToDiscussionTopicPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "secret",
+ "name": "updateAccountDomainLookup",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateAccountDomainLookup",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateAccountDomainLookupInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateAccountDomainLookupPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "updateAllocationRule",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateAllocationRule",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateAllocationRuleInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "UpdateAllocationRulePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "value",
+ "name": "updateAssignment",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateAssignment",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateAssignmentInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateAssignmentPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "SCALAR",
- "name": "JSON",
- "description": "Represents untyped JSON",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "LatePolicyStatusType",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "late",
+ "name": "updateCommentBankItem",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateCommentBankItem",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateCommentBankItemInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateCommentBankItemPayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "missing",
+ "name": "updateConversationParticipants",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateConversationParticipants",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateConversationParticipantsInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateConversationParticipantsPayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "extended",
+ "name": "updateDiscussionEntriesReadState",
"description": null,
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionEntriesReadState",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionEntriesReadStateInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionEntriesReadStatePayload",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "none",
+ "name": "updateDiscussionEntry",
"description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "LearningOutcome",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionEntry",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionEntryInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionEntryPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "alignments",
+ "name": "updateDiscussionEntryParticipant",
"description": null,
"args": [
{
- "name": "contextId",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionEntryParticipant",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionEntryParticipantInput",
"ofType": null
}
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionEntryParticipantPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updateDiscussionReadState",
+ "description": null,
+ "args": [
{
- "name": "contextType",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionReadState",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionReadStateInput",
"ofType": null
}
},
@@ -23873,90 +38027,142 @@
}
],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "OutcomeAlignment",
- "ofType": null
- }
- }
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionReadStatePayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assessed",
+ "name": "updateDiscussionThreadReadState",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionThreadReadState",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionThreadReadStateInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionThreadReadStatePayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "calculationInt",
+ "name": "updateDiscussionTopic",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionTopic",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionTopicInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionTopicPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "calculationMethod",
+ "name": "updateDiscussionTopicParticipant",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateDiscussionTopicParticipant",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionTopicParticipantInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionTopicParticipantPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canArchive",
+ "name": "updateGradebookGroupFilter",
"description": null,
"args": [
{
- "name": "contextId",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateGradebookGroupFilter",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateGradebookGroupFilterInput",
"ofType": null
}
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateGradebookGroupFilterPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updateInternalSetting",
+ "description": null,
+ "args": [
{
- "name": "contextType",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateInternalSetting",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateInternalSettingInput",
"ofType": null
}
},
@@ -23966,122 +38172,229 @@
}
],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "UpdateInternalSettingPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canEdit",
+ "name": "updateLearnerDashboardTabSelection",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateLearnerDashboardTabSelection",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateLearnerDashboardTabSelectionInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateLearnerDashboardTabSelectionPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextId",
+ "name": "updateLearningOutcome",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateLearningOutcome",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateLearningOutcomeInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "UpdateLearningOutcomePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "updateLearningOutcomeGroup",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateLearningOutcomeGroup",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateLearningOutcomeGroupInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateLearningOutcomeGroupPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "updateMyInboxSettings",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateMyInboxSettings",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateMyInboxSettingsInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "UpdateMyInboxSettingsPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "description",
+ "name": "updateNotificationPreferences",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateNotificationPreferences",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateNotificationPreferencesInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateNotificationPreferencesPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "displayName",
+ "name": "updateOutcomeCalculationMethod",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateOutcomeCalculationMethod",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateOutcomeCalculationMethodInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateOutcomeCalculationMethodPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "friendlyDescription",
+ "name": "updateOutcomeProficiency",
"description": null,
"args": [
{
- "name": "contextId",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateOutcomeProficiency",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateOutcomeProficiencyInput",
"ofType": null
}
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateOutcomeProficiencyPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updateRubricArchivedState",
+ "description": null,
+ "args": [
{
- "name": "contextType",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateRubricArchivedState",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateRubricArchivedStateInput",
"ofType": null
}
},
@@ -24092,57 +38405,54 @@
],
"type": {
"kind": "OBJECT",
- "name": "OutcomeFriendlyDescriptionType",
+ "name": "UpdateRubricArchivedStatePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "isImported",
+ "name": "updateRubricAssessmentReadState",
"description": null,
"args": [
{
- "name": "targetContextId",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateRubricAssessmentReadState",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateRubricAssessmentReadStateInput",
"ofType": null
}
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateRubricAssessmentReadStatePayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updateSpeedGraderSettings",
+ "description": null,
+ "args": [
{
- "name": "targetContextType",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateSpeedGraderSettings",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSpeedGraderSettingsInput",
"ofType": null
}
},
@@ -24152,205 +38462,115 @@
}
],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "masteryPoints",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Float",
+ "kind": "OBJECT",
+ "name": "UpdateSpeedGraderSettingsPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "updateSplitScreenViewDeeplyNestedAlert",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateSplitScreenViewDeeplyNestedAlert",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSplitScreenViewDeeplyNestedAlertInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Float",
+ "kind": "OBJECT",
+ "name": "UpdateSplitScreenViewDeeplyNestedAlertPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ratings",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ProficiencyRating",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "title",
+ "name": "updateSubmissionGrade",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateSubmissionsGrade",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSubmissionsGradeInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updatedAt",
- "description": null,
- "args": [],
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "UpdateSubmissionsGradePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "vendorGuid",
+ "name": "updateSubmissionGradeStatus",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
- "description": "Learning Outcome Group",
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateSubmissionsGradeStatus",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSubmissionsGradeStatusInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "canEdit",
- "description": null,
- "args": [],
+ ],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "UpdateSubmissionsGradeStatusPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "childGroups",
+ "name": "updateSubmissionSticker",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
+ "name": "input",
+ "description": "Parameters for UpdateSubmissionSticker",
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSubmissionStickerInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
@@ -24359,91 +38579,114 @@
],
"type": {
"kind": "OBJECT",
- "name": "LearningOutcomeGroupConnection",
+ "name": "UpdateSubmissionStickerPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "childGroupsCount",
+ "name": "updateSubmissionStudentEnteredScore",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateSubmissionStudentEnteredScore",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSubmissionStudentEnteredScoreInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "contextId",
- "description": null,
- "args": [],
+ ],
"type": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "UpdateSubmissionStudentEnteredScorePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextType",
+ "name": "updateSubmissionsReadState",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateSubmissionsReadState",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateSubmissionsReadStateInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateSubmissionsReadStatePayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "description",
+ "name": "updateUserDiscussionsSplitscreenView",
"description": null,
- "args": [],
+ "args": [
+ {
+ "name": "input",
+ "description": "Parameters for UpdateUserDiscussionsSplitscreenView",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateUserDiscussionsSplitscreenViewInput",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "UpdateUserDiscussionsSplitscreenViewPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "notImportedOutcomesCount",
+ "name": "updateWidgetDashboardConfig",
"description": null,
"args": [
{
- "name": "targetGroupId",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateWidgetDashboardConfig",
"type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateWidgetDashboardConfigInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
@@ -24451,84 +38694,57 @@
}
],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "UpdateWidgetDashboardConfigPayload",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomes",
+ "name": "updateWidgetDashboardLayout",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpdateWidgetDashboardLayout",
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateWidgetDashboardLayoutInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpdateWidgetDashboardLayoutPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "upsertCustomGradeStatus",
+ "description": null,
+ "args": [
{
- "name": "searchQuery",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpsertCustomGradeStatus",
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpsertCustomGradeStatusInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
@@ -24536,40 +38752,65 @@
}
],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ContentTagConnection",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "UpsertCustomGradeStatusPayload",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "outcomesCount",
+ "name": "upsertStandardGradeStatus",
"description": null,
"args": [
{
- "name": "searchQuery",
- "description": null,
+ "name": "input",
+ "description": "Parameters for UpsertStandardGradeStatus",
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "UpsertStandardGradeStatusInput",
+ "ofType": null
+ }
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "type": {
+ "kind": "OBJECT",
+ "name": "UpsertStandardGradeStatusPayload",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "MutationLog",
+ "description": null,
+ "fields": [
+ {
+ "name": "assetString",
+ "description": null,
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ID",
"ofType": null
}
},
@@ -24577,19 +38818,23 @@
"deprecationReason": null
},
{
- "name": "parentOutcomeGroup",
+ "name": "mutationId",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "mutationName",
"description": null,
"args": [],
"type": {
@@ -24605,31 +38850,56 @@
"deprecationReason": null
},
{
- "name": "vendorGuid",
+ "name": "params",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "JSON",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
+ },
{
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
+ "name": "realUser",
+ "description": "If the mutation was performed by a user masquerading as another user,\nthis field returns the \"real\" (logged-in) user.\n",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
+ "name": "timestamp",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "user",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -24637,8 +38907,8 @@
},
{
"kind": "OBJECT",
- "name": "LearningOutcomeGroupConnection",
- "description": "The connection type for LearningOutcomeGroup.",
+ "name": "MutationLogConnection",
+ "description": "The connection type for MutationLog.",
"fields": [
{
"name": "edges",
@@ -24649,7 +38919,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "LearningOutcomeGroupEdge",
+ "name": "MutationLogEdge",
"ofType": null
}
},
@@ -24665,7 +38935,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "LearningOutcomeGroup",
+ "name": "MutationLog",
"ofType": null
}
},
@@ -24698,7 +38968,7 @@
},
{
"kind": "OBJECT",
- "name": "LearningOutcomeGroupEdge",
+ "name": "MutationLogEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -24723,7 +38993,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "LearningOutcomeGroup",
+ "name": "MutationLog",
"ofType": null
},
"isDeprecated": false,
@@ -24739,12 +39009,12 @@
},
{
"kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "description": null,
+ "name": "Node",
+ "description": "An object with an ID.",
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "id",
+ "description": "ID of the object.",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -24770,17 +39040,12 @@
},
{
"kind": "OBJECT",
- "name": "AccountDomain",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "AccountDomainLookup",
+ "name": "AccountNotification",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "AssessmentRequest",
+ "name": "AllocationRule",
"ofType": null
},
{
@@ -24808,6 +39073,11 @@
"name": "ContentTag",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "Conversation",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "Course",
@@ -24830,72 +39100,72 @@
},
{
"kind": "OBJECT",
- "name": "DiscussionEntryDraft",
+ "name": "Enrollment",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "DiscussionEntryVersion",
+ "name": "File",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "ExternalTool",
+ "name": "Folder",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "ExternalUrl",
+ "name": "GradingPeriod",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "File",
+ "name": "GradingPeriodGroup",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "GradingPeriod",
+ "name": "GradingStandard",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "GradingPeriodGroup",
+ "name": "Group",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "Group",
+ "name": "GroupSet",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "GroupMembership",
+ "name": "InternalSetting",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "GroupSet",
+ "name": "LearningOutcome",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "InternalSetting",
+ "name": "LearningOutcomeGroup",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "LearningOutcome",
+ "name": "MediaObject",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "LearningOutcomeGroup",
+ "name": "MessageableContext",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "MediaTrack",
+ "name": "MessageableUser",
"ofType": null
},
{
@@ -24905,12 +39175,12 @@
},
{
"kind": "OBJECT",
- "name": "ModuleExternalTool",
+ "name": "ModuleItem",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "ModuleItem",
+ "name": "ModuleProgression",
"ofType": null
},
{
@@ -24945,12 +39215,12 @@
},
{
"kind": "OBJECT",
- "name": "PostPolicy",
+ "name": "PeerReviewSubAssignment",
"ofType": null
},
{
"kind": "OBJECT",
- "name": "ProficiencyRating",
+ "name": "PostPolicy",
"ofType": null
},
{
@@ -24968,26 +39238,6 @@
"name": "Rubric",
"ofType": null
},
- {
- "kind": "OBJECT",
- "name": "RubricAssessment",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "RubricAssociation",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "RubricCriterion",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "RubricRating",
- "ofType": null
- },
{
"kind": "OBJECT",
"name": "Section",
@@ -25003,16 +39253,6 @@
"name": "Submission",
"ofType": null
},
- {
- "kind": "OBJECT",
- "name": "SubmissionComment",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "SubmissionDraft",
- "ofType": null
- },
{
"kind": "OBJECT",
"name": "Term",
@@ -25033,225 +39273,238 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "LockInfo",
+ "kind": "ENUM",
+ "name": "NodeType",
"description": null,
- "fields": [
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "canView",
+ "name": "Account",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLocked",
+ "name": "AllocationRule",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockAt",
+ "name": "Assignment",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "lockedObject",
+ "name": "AssignmentGroup",
"description": null,
- "args": [],
- "type": {
- "kind": "UNION",
- "name": "Lockable",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "module",
+ "name": "Conversation",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlockAt",
+ "name": "Course",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "UNION",
- "name": "Lockable",
- "description": "Types that can be locked",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
},
{
- "kind": "OBJECT",
"name": "Discussion",
- "ofType": null
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "DiscussionEntry",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Enrollment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "File",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Folder",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "GradingPeriod",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "GradingPeriodGroup",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Group",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "GroupSet",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "InternalSetting",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "LearningOutcomeGroup",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "MediaObject",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "OBJECT",
"name": "Module",
- "ofType": null
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ModuleItem",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ModuleProgression",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "OutcomeCalculationMethod",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "OutcomeProficiency",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "OBJECT",
"name": "Page",
- "ofType": null
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "OBJECT",
- "name": "Quiz",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "MarkSubmissionCommentsReadInput",
- "description": "Autogenerated input type of MarkSubmissionCommentsRead",
- "fields": null,
- "inputFields": [
+ "name": "PeerReviewSubAssignment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
- "name": "submissionCommentIds",
+ "name": "PostPolicy",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionId",
+ "name": "Progress",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Rubric",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Section",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "SubAssignment",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Submission",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Term",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "UsageRights",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "User",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
- ],
- "interfaces": null,
- "enumValues": null,
+ ],
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "MarkSubmissionCommentsReadPayload",
- "description": "Autogenerated return type of MarkSubmissionCommentsRead.",
+ "name": "Noop",
+ "description": "A descriptive tag that doesn't link the assignment to a set",
"fields": [
{
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "submissionComments",
+ "name": "_id",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "SubmissionComment",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
@@ -25267,7 +39520,7 @@
},
{
"kind": "OBJECT",
- "name": "MediaObject",
+ "name": "Notification",
"description": null,
"fields": [
{
@@ -25287,19 +39540,23 @@
"deprecationReason": null
},
{
- "name": "canAddCaptions",
+ "name": "category",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "categoryDescription",
"description": null,
"args": [],
"type": {
@@ -25307,7 +39564,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
@@ -25315,83 +39572,79 @@
"deprecationReason": null
},
{
- "name": "mediaDownloadUrl",
+ "name": "categoryDisplayName",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaSources",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "MediaSource",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaTracks",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "MediaTrack",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaType",
+ "name": "name",
"description": null,
"args": [],
"type": {
- "kind": "ENUM",
- "name": "MediaType",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "thumbnailUrl",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "workflowState",
"description": null,
"args": [],
"type": {
@@ -25405,10 +39658,20 @@
],
"inputFields": null,
"interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
{
"kind": "INTERFACE",
"name": "Node",
"ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
}
],
"enumValues": null,
@@ -25417,401 +39680,244 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "MediaSource",
- "description": null,
- "fields": [
+ "kind": "ENUM",
+ "name": "NotificationCategoryType",
+ "description": "The categories that a notification can belong to",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "bitrate",
+ "name": "Account_Notification",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contentType",
+ "name": "Added_To_Conversation",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "fileExt",
+ "name": "All_Submissions",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "height",
+ "name": "Announcement",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isOriginal",
+ "name": "Announcement_Created_By_You",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "size",
+ "name": "Appointment_Availability",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
+ "name": "Appointment_Cancelations",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "URL",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "width",
+ "name": "Appointment_Signups",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MediaTrack",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
+ "name": "Blueprint",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "content",
+ "name": "Calendar",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "kind",
+ "name": "Content_Link_Error",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "locale",
+ "name": "Conversation_Created",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mediaObject",
+ "name": "Conversation_Message",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "MediaObject",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "webvttContent",
+ "name": "Course_Content",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
+ },
{
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "MediaType",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ "name": "Discussion",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
- "name": "audio",
+ "name": "DiscussionEntry",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "video",
+ "name": "DiscussionMention",
"description": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MessagePermissions",
- "description": null,
- "fields": [
+ },
{
- "name": "sendMessages",
+ "name": "ReportedReply",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sendMessagesAll",
+ "name": "Due_Date",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MessageableContext",
- "description": null,
- "fields": [
+ },
{
- "name": "avatarUrl",
+ "name": "Files",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "Grading",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "itemCount",
+ "name": "Grading_Policies",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "Invitation",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "permissions",
+ "name": "Late_Grading",
"description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "MessagePermissions",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "userCount",
+ "name": "Membership_Update",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Other",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Recording_Ready",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Student_Appointment_Signups",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "Submission_Comment",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
}
],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "NotificationFrequencyType",
+ "description": "Frequency that notifications can be delivered on",
+ "fields": null,
"inputFields": null,
- "interfaces": [
+ "interfaces": null,
+ "enumValues": [
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
+ "name": "immediately",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "daily",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "weekly",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "never",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "MessageableContextConnection",
- "description": "The connection type for MessageableContext.",
+ "name": "NotificationPolicy",
+ "description": null,
"fields": [
{
- "name": "edges",
- "description": "A list of edges.",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "MessageableContextEdge",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -25819,15 +39925,15 @@
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "communicationChannelId",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "MessageableContext",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -25835,44 +39941,39 @@
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "frequency",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MessageableContextEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "id",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -25880,12 +39981,24 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "notification",
+ "description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "MessageableContext",
+ "name": "Notification",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
@@ -25893,7 +40006,23 @@
}
],
"inputFields": null,
- "interfaces": [],
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -25901,313 +40030,213 @@
},
{
"kind": "OBJECT",
- "name": "MessageableUser",
+ "name": "NotificationPreferences",
"description": null,
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "commonCoursesConnection",
+ "name": "channels",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
+ "name": "channelId",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ID",
"ofType": null
},
- "defaultValue": null,
+ "defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "EnrollmentConnection",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "commonGroupsConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "CommunicationChannel",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "OBJECT",
- "name": "GroupConnection",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "readPrivacyNoticeDate",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
+ "name": "sendObservedNamesInNotifications",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "observerEnrollmentsConnection",
+ "name": "sendScoresInEmails",
"description": null,
"args": [
{
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
+ "name": "courseId",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ID",
"ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "contextCode",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "EnrollmentConnection",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "NotificationPreferencesContextType",
+ "description": "Context types that can be associated with notification preferences",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "Course",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "pronouns",
+ "name": "Account",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "OnlineSubmissionType",
+ "description": "Types that can be submitted online",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "basic_lti_launch",
"description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "shortName",
+ "name": "student_annotation",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "media_recording",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "online_text_entry",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "online_upload",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "online_url",
"description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
"isDeprecated": false,
"deprecationReason": null
}
],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "OrderDirection",
+ "description": null,
+ "fields": null,
"inputFields": null,
- "interfaces": [
+ "interfaces": null,
+ "enumValues": [
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
+ "name": "ascending",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "descending",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "MessageableUserConnection",
- "description": "The connection type for MessageableUser.",
+ "name": "OutcomeAlignment",
+ "description": null,
"fields": [
{
- "name": "edges",
- "description": "A list of edges.",
+ "name": "_id",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "MessageableUserEdge",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -26215,15 +40244,15 @@
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "alignmentsCount",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "MessageableUser",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
}
},
@@ -26231,37 +40260,48 @@
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "assignmentContentType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentWorkflowState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contentId",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MessageableUserEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "contentType",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
@@ -26276,133 +40316,115 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "contextId",
+ "description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "MessageableUser",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ModeratedGrading",
- "description": "Settings for Moderated Grading on an Assignment",
- "fields": [
+ },
{
- "name": "enabled",
- "description": "Boolean indicating if the assignment is moderated.",
+ "name": "contextType",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "finalGrader",
- "description": "The user of the grader responsible for choosing final grades for this assignment.",
+ "name": "createdAt",
+ "description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "graderCommentsVisibleToGraders",
- "description": "Boolean indicating if provisional graders' comments are visible to other provisional graders.",
+ "name": "learningOutcomeId",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "graderCount",
- "description": "The maximum number of provisional graders who may issue grades for this assignment.",
+ "name": "moduleId",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "graderNamesVisibleToFinalGrader",
- "description": "Boolean indicating if provisional graders' identities are hidden from other provisional graders.",
+ "name": "moduleName",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "gradersAnonymousToGraders",
- "description": "Boolean indicating if provisional grader identities are visible to the final grader.",
+ "name": "moduleUrl",
+ "description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Module",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "moduleWorkflowState",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "completionRequirements",
+ "name": "quizItems",
"description": null,
"args": [],
"type": {
@@ -26413,7 +40435,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ModuleCompletionRequirement",
+ "name": "QuizItem",
"ofType": null
}
}
@@ -26422,43 +40444,35 @@
"deprecationReason": null
},
{
- "name": "createdAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "estimatedDuration",
+ "name": "title",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "ISO8601Duration",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "estimatedDuration",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ISO8601Duration",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "url",
"description": null,
"args": [],
"type": {
@@ -26466,47 +40480,50 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "moduleItems",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "OutcomeCalculationMethod",
+ "description": "Customized calculation method",
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ModuleItem",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "position",
+ "name": "calculationInt",
"description": null,
"args": [],
"type": {
@@ -26518,69 +40535,81 @@
"deprecationReason": null
},
{
- "name": "prerequisites",
+ "name": "calculationMethod",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ModulePrerequisite",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
+ "name": "contextId",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "requirementCount",
+ "name": "contextType",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "unlockAt",
+ "name": "id",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "locked",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -26597,11 +40626,6 @@
"kind": "INTERFACE",
"name": "Node",
"ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
}
],
"enumValues": null,
@@ -26611,11 +40635,27 @@
},
{
"kind": "OBJECT",
- "name": "ModuleCompletionRequirement",
+ "name": "OutcomeFriendlyDescriptionType",
"description": null,
"fields": [
{
- "name": "id",
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "contextId",
"description": null,
"args": [],
"type": {
@@ -26631,31 +40671,35 @@
"deprecationReason": null
},
{
- "name": "minPercentage",
+ "name": "contextType",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "minScore",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "description",
"description": null,
"args": [],
"type": {
@@ -26669,30 +40713,17 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ModuleConnection",
- "description": "The connection type for Module.",
- "fields": [
+ },
{
- "name": "edges",
- "description": "A list of edges.",
+ "name": "id",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "ModuleEdge",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -26700,15 +40731,15 @@
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "learningOutcomeId",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "Module",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -26716,15 +40747,27 @@
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "updatedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "workflowState",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
}
},
@@ -26733,7 +40776,23 @@
}
],
"inputFields": null,
- "interfaces": [],
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -26741,19 +40800,19 @@
},
{
"kind": "OBJECT",
- "name": "ModuleEdge",
- "description": "An edge in a connection.",
+ "name": "OutcomeProficiency",
+ "description": "Customized proficiency ratings",
"fields": [
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -26761,33 +40820,40 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "contextId",
+ "description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ModuleExternalTool",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "contextType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
@@ -26802,156 +40868,193 @@
"deprecationReason": null
},
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
+ "name": "locked",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "masteryPoints",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "proficiencyRatingsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ProficiencyRatingConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "isLockedByMasterCourse",
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "OutcomeProficiencyRatingCreate",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "color",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "modules",
+ "name": "description",
"description": null,
- "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "published",
- "description": "Whether the module item is published",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "title",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updatedAt",
+ "name": "mastery",
"description": null,
- "args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
+ "name": "points",
"description": null,
- "args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
+ "interfaces": null,
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -26959,7 +41062,7 @@
},
{
"kind": "OBJECT",
- "name": "ModuleItem",
+ "name": "Page",
"description": null,
"fields": [
{
@@ -26979,48 +41082,60 @@
"deprecationReason": null
},
{
- "name": "content",
+ "name": "canDuplicate",
"description": null,
"args": [],
"type": {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "canManageAssignTo",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "estimatedDuration",
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ISO8601Duration",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "estimatedDuration",
+ "name": "graded",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ISO8601Duration",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
@@ -27043,206 +41158,108 @@
"deprecationReason": null
},
{
- "name": "indent",
+ "name": "isLockedByMasterCourse",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "indent",
+ "name": "modules",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "module",
+ "name": "pointsPossible",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Module",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "next",
- "description": null,
+ "name": "published",
+ "description": "Whether the module item is published",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "ModuleItem",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "nextItemsConnection",
- "description": "Items are ordered based on distance to the current item, starting with the next item directly following it.",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "ModuleItemConnection",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "previous",
+ "name": "title",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "ModuleItem",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "previousItemsConnection",
- "description": "Items are ordered based on distance to the current item, starting with the previous item directly preceding it.",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "todoDate",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "ModuleItemConnection",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "type",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "URL",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
@@ -27256,6 +41273,11 @@
"name": "LegacyIDInterface",
"ofType": null
},
+ {
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
{
"kind": "INTERFACE",
"name": "Node",
@@ -27274,8 +41296,8 @@
},
{
"kind": "OBJECT",
- "name": "ModuleItemConnection",
- "description": "The connection type for ModuleItem.",
+ "name": "PageConnection",
+ "description": "The connection type for Page.",
"fields": [
{
"name": "edges",
@@ -27286,7 +41308,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ModuleItemEdge",
+ "name": "PageEdge",
"ofType": null
}
},
@@ -27302,7 +41324,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ModuleItem",
+ "name": "Page",
"ofType": null
}
},
@@ -27335,7 +41357,7 @@
},
{
"kind": "OBJECT",
- "name": "ModuleItemEdge",
+ "name": "PageEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -27360,7 +41382,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "ModuleItem",
+ "name": "Page",
"ofType": null
},
"isDeprecated": false,
@@ -27375,209 +41397,148 @@
"isOneOf": false
},
{
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "description": "An item that can be in context modules",
- "fields": [
+ "kind": "INPUT_OBJECT",
+ "name": "PageFilter",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
- "args": [],
+ "name": "userId",
+ "description": "only return pages for the given user. Defaults to\nthe current user.\n",
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "modules",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pointsPossible",
- "description": null,
- "args": [],
+ "name": "searchTerm",
+ "description": "only return pages whose title matches this search term\n",
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "String",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "description": "Information about pagination in a connection.",
+ "fields": [
{
- "name": "published",
- "description": "Whether the module item is published",
+ "name": "endCursor",
+ "description": "When paginating forwards, the cursor to continue.",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
- "description": null,
+ "name": "hasNextPage",
+ "description": "When paginating forwards, are there more items?",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
- "description": null,
+ "name": "hasPreviousPage",
+ "description": "When paginating backwards, are there more items?",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "ExternalTool",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "ExternalUrl",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "File",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "ModuleExternalTool",
- "ofType": null
},
{
- "kind": "OBJECT",
- "name": "Page",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Quiz",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "SubHeader",
- "ofType": null
+ "name": "startCursor",
+ "description": "When paginating backwards, the cursor to continue.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "ModulePrerequisite",
+ "name": "PageViewAnalysis",
"description": null,
"fields": [
{
- "name": "id",
- "description": null,
+ "name": "level",
+ "description": "This number (0-3) is intended to give an idea of how the student is doing relative to others in the course",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
+ "name": "max",
+ "description": "The maximum number of views/participations in this course",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
- "description": null,
+ "name": "total",
+ "description": "The number of views/participations this student has",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -27591,13 +41552,13 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "ModuleProgression",
+ "kind": "INTERFACE",
+ "name": "PagesConnectionInterface",
"description": null,
"fields": [
{
- "name": "incompleteItemsConnection",
- "description": "Items are ordered by position",
+ "name": "pagesConnection",
+ "description": "returns a list of wiki pages.\n",
"args": [
{
"name": "after",
@@ -27646,32 +41607,24 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "PageFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ModuleItemConnection",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "module",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "PageConnection",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -27680,59 +41633,53 @@
"inputFields": null,
"interfaces": [],
"enumValues": null,
- "possibleTypes": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ ],
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "ModuleProgressionConnection",
- "description": "The connection type for ModuleProgression.",
+ "name": "PeerReviewDates",
+ "description": "Peer review dates for an assignment date hash entry",
"fields": [
{
- "name": "edges",
- "description": "A list of edges.",
+ "name": "dueAt",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ModuleProgressionEdge",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "lockAt",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ModuleProgression",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "unlockAt",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -27747,19 +41694,19 @@
},
{
"kind": "OBJECT",
- "name": "ModuleProgressionEdge",
- "description": "An edge in a connection.",
+ "name": "PeerReviewStatus",
+ "description": "Peer review status for a student on an assignment",
"fields": [
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "completedReviewsCount",
+ "description": "Number of peer reviews the student has completed",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
}
},
@@ -27767,73 +41714,24 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "mustReviewCount",
+ "description": "Number of peer reviews the student has been allocated",
"args": [],
- "type": {
- "kind": "OBJECT",
- "name": "ModuleProgression",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "MoveOutcomeLinksInput",
- "description": "Autogenerated input type of MoveOutcomeLinks",
- "fields": null,
- "inputFields": [
- {
- "name": "outcomeLinkIds",
- "description": "A list of ContentTags that will be moved\n",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "groupId",
- "description": "The id of the destination group\n",
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
}
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -27841,369 +41739,186 @@
},
{
"kind": "OBJECT",
- "name": "MoveOutcomeLinksPayload",
- "description": "Autogenerated return type of MoveOutcomeLinks.",
+ "name": "PeerReviewSubAssignment",
+ "description": null,
"fields": [
{
- "name": "errors",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "movedOutcomeLinks",
- "description": "List of Outcome Links that were sucessfully moved to the group\n",
+ "name": "allocationRules",
+ "description": "Allocation rules if peer review is enabled",
"args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ContentTag",
- "ofType": null
- }
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Mutation",
- "description": null,
- "fields": [
- {
- "name": "addConversationMessage",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for AddConversationMessage",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "AddConversationMessageInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
"kind": "OBJECT",
- "name": "AddConversationMessagePayload",
+ "name": "AssignmentAllocationRules",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createAccountDomainLookup",
+ "name": "allowGoogleDocsSubmission",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateAccountDomainLookup",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateAccountDomainLookupInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateAccountDomainLookupPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createAssignment",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateAssignment",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateAssignmentInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "allowProvisionalGrading",
+ "description": "Whether the current user can provide a provisional grade for this assignment",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateAssignmentPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AllowProvisionalGradingType",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createCommentBankItem",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateCommentBankItem",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateCommentBankItemInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "allowedAttempts",
+ "description": "The number of submission attempts a student can make for this assignment. null implies unlimited.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateCommentBankItemPayload",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createConversation",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateConversation",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateConversationInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "allowedExtensions",
+ "description": "permitted uploaded file extensions (e.g. ['doc', 'xls', 'txt'])",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateConversationPayload",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createDiscussionEntry",
+ "name": "anonymizeStudents",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateDiscussionEntry",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateDiscussionEntryInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateDiscussionEntryPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createDiscussionEntryDraft",
+ "name": "anonymousGrading",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateDiscussionEntryDraft",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateDiscussionEntryDraftInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateDiscussionEntryDraftPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createDiscussionTopic",
+ "name": "anonymousInstructorAnnotations",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateDiscussionTopic",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateDiscussionTopicInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateDiscussionTopicPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createGroupInSet",
+ "name": "anonymousStudentIdentities",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateGroupInSet",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateGroupInSetInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AnonymousStudentIdentity",
+ "ofType": null
+ }
}
- ],
- "type": {
- "kind": "OBJECT",
- "name": "CreateGroupInSetPayload",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createGroupSet",
+ "name": "assessmentRequestsForCurrentUser",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateGroupSet",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateGroupSetInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateGroupSetPayload",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssessmentRequest",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createInternalSetting",
- "description": null,
+ "name": "assessmentRequestsForUser",
+ "description": "Assessment requests for a specific user where they are the assessor (peer reviewer)",
"args": [
{
- "name": "input",
- "description": "Parameters for CreateInternalSetting",
+ "name": "userId",
+ "description": null,
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateInternalSettingInput",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
}
},
@@ -28213,144 +41928,80 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "CreateInternalSettingPayload",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AssessmentRequest",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createLearningOutcome",
+ "name": "assignedStudents",
"description": null,
"args": [
{
- "name": "input",
- "description": "Parameters for CreateLearningOutcome",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateLearningOutcomeInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "CreateLearningOutcomePayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createLearningOutcomeGroup",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for CreateLearningOutcomeGroup",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateLearningOutcomeGroupInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "CreateLearningOutcomeGroupPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createModule",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for CreateModule",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateModuleInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "CreateModulePayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createOutcomeCalculationMethod",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for CreateOutcomeCalculationMethod",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateOutcomeCalculationMethodInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "CreateOutcomeCalculationMethodPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createOutcomeProficiency",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for CreateOutcomeProficiency",
+ "name": "filter",
+ "description": null,
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateOutcomeProficiencyInput",
- "ofType": null
- }
+ "kind": "INPUT_OBJECT",
+ "name": "AssignedStudentsFilter",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -28359,201 +42010,103 @@
],
"type": {
"kind": "OBJECT",
- "name": "CreateOutcomeProficiencyPayload",
+ "name": "UserConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createSubmission",
- "description": "IN ACTIVE DEVELOPMENT, USE AT YOUR OWN RISK: Submit homework on an assignment.\n",
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateSubmission",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateSubmissionInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "assignedToDates",
+ "description": "Standardized date hash visible to current user",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateSubmissionPayload",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DateHash",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createSubmissionComment",
+ "name": "assignmentGroup",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateSubmissionComment",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateSubmissionCommentInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "CreateSubmissionCommentPayload",
+ "name": "AssignmentGroup",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createSubmissionDraft",
+ "name": "assignmentGroupId",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for CreateSubmissionDraft",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateSubmissionDraftInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "CreateSubmissionDraftPayload",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createUserInboxLabel",
+ "name": "assignmentOverrides",
"description": null,
"args": [
{
- "name": "input",
- "description": "Parameters for CreateUserInboxLabel",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "CreateUserInboxLabelInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "CreateUserInboxLabelPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteAccountDomainLookup",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteAccountDomainLookup",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteAccountDomainLookupInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "DeleteAccountDomainLookupPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteCommentBankItem",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteCommentBankItem",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteCommentBankItemInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "DeleteCommentBankItemPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteConversationMessages",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteConversationMessages",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteConversationMessagesInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -28562,143 +42115,71 @@
],
"type": {
"kind": "OBJECT",
- "name": "DeleteConversationMessagesPayload",
+ "name": "AssignmentOverrideConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleteConversations",
+ "name": "assignmentTargetConnection",
"description": null,
"args": [
{
- "name": "input",
- "description": "Parameters for DeleteConversations",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteConversationsInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "DeleteConversationsPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteCustomGradeStatus",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteCustomGradeStatus",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteCustomGradeStatusInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "DeleteCustomGradeStatusPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteDiscussionEntry",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteDiscussionEntry",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteDiscussionEntryInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "DeleteDiscussionEntryPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteDiscussionTopic",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteDiscussionTopic",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteDiscussionTopicInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "DeleteDiscussionTopicPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "deleteInternalSetting",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for DeleteInternalSetting",
+ "name": "orderBy",
+ "description": null,
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteInternalSettingInput",
- "ofType": null
- }
+ "kind": "INPUT_OBJECT",
+ "name": "AssignmentTargetSortOrder",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -28707,723 +42188,400 @@
],
"type": {
"kind": "OBJECT",
- "name": "DeleteInternalSettingPayload",
+ "name": "AssignmentOverrideConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleteOutcomeCalculationMethod",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for DeleteOutcomeCalculationMethod",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteOutcomeCalculationMethodInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "name": "assignmentType",
+ "description": "Discriminator indicating the actual type of this assignment",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AssignmentTypeEnum",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentVisibility",
+ "description": "Returns empty array if visible to everyone",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "DeleteOutcomeCalculationMethodPayload",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleteOutcomeLinks",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for DeleteOutcomeLinks",
- "type": {
+ "name": "autoGradeAssignmentErrors",
+ "description": "Errors related to the assignment",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteOutcomeLinksInput",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
}
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
+ },
+ "isDeprecated": true,
+ "deprecationReason": "Use autoGradeEligibility instead"
+ },
+ {
+ "name": "autoGradeAssignmentIssues",
+ "description": "Issues related to the assignment",
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "DeleteOutcomeLinksPayload",
+ "name": "EligibilityIssue",
"ofType": null
},
- "isDeprecated": false,
- "deprecationReason": null
+ "isDeprecated": true,
+ "deprecationReason": "Use autoGradeEligibility instead"
},
{
- "name": "deleteOutcomeProficiency",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for DeleteOutcomeProficiency",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteOutcomeProficiencyInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "autoGradeEligibility",
+ "description": "Eligibility for auto-grading",
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "DeleteOutcomeProficiencyPayload",
+ "name": "AutoGradeEligibility",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleteSubmissionComment",
+ "name": "canDuplicate",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for DeleteSubmissionComment",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteSubmissionCommentInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "DeleteSubmissionCommentPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleteSubmissionDraft",
+ "name": "canManageAssignTo",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for DeleteSubmissionDraft",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteSubmissionDraftInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "DeleteSubmissionDraftPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "deleteUserInboxLabel",
+ "name": "canUnpublish",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for DeleteUserInboxLabel",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "DeleteUserInboxLabelInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "DeleteUserInboxLabelPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "hideAssignmentGrades",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for HideAssignmentGrades",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "HideAssignmentGradesInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "canUpdateRubricSelfAssessment",
+ "description": "specifies that the current user can update the rubric self-assessment.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "HideAssignmentGradesPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "hideAssignmentGradesForSections",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for HideAssignmentGradesForSections",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "HideAssignmentGradesForSectionsInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "checkpoints",
+ "description": "A list of checkpoints (also known as sub_assignments) that are associated with this assignment",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "HideAssignmentGradesForSectionsPayload",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Checkpoint",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "importOutcomes",
+ "name": "course",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for ImportOutcomes",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "ImportOutcomesInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "ImportOutcomesPayload",
+ "name": "Course",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "markSubmissionCommentsRead",
+ "name": "courseId",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for MarkSubmissionCommentsRead",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "MarkSubmissionCommentsReadInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "MarkSubmissionCommentsReadPayload",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "moveOutcomeLinks",
+ "name": "createdAt",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for MoveOutcomeLinks",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "MoveOutcomeLinksInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "MoveOutcomeLinksPayload",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postAssignmentGrades",
+ "name": "description",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for PostAssignmentGrades",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "PostAssignmentGradesInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "PostAssignmentGradesPayload",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postAssignmentGradesForSections",
+ "name": "discussion",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for PostAssignmentGradesForSections",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "PostAssignmentGradesForSectionsInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "PostAssignmentGradesForSectionsPayload",
+ "name": "Discussion",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "postDraftSubmissionComment",
- "description": null,
+ "name": "dueAt",
+ "description": "when this assignment is due",
"args": [
{
- "name": "input",
- "description": "Parameters for PostDraftSubmissionComment",
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "PostDraftSubmissionCommentInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
- "defaultValue": null,
+ "defaultValue": "true",
"isDeprecated": false,
"deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "PostDraftSubmissionCommentPayload",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setAssignmentPostPolicy",
- "description": "Sets the post policy for the assignment.\n",
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetAssignmentPostPolicy",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetAssignmentPostPolicyInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "dueDateRequired",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetAssignmentPostPolicyPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setCoursePostPolicy",
- "description": "Sets the post policy for the course, with an option to override and delete\nexisting assignment post policies.\n",
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetCoursePostPolicy",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetCoursePostPolicyInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "expectsExternalSubmission",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetCoursePostPolicyPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setFriendlyDescription",
+ "name": "expectsSubmission",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetFriendlyDescription",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetFriendlyDescriptionInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetFriendlyDescriptionPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setModuleItemCompletion",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetModuleItemCompletion",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetModuleItemCompletionInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "name": "gradeAsGroup",
+ "description": "specifies that students are being graded as a group (as opposed to being graded individually).",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradeByQuestionEnabled",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetModuleItemCompletionPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setOverrideScore",
- "description": "Sets the overridden final score for the associated enrollment, optionally limited to a specific\ngrading period. This will supersede the computed final score/grade if present.\n",
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetOverrideScore",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetOverrideScoreInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "gradeGroupStudentsIndividually",
+ "description": "If this is a group assignment, boolean flag indicating whether or not students will be graded individually.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetOverrideScorePayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setOverrideStatus",
+ "name": "graded",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetOverrideStatus",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetOverrideStatusInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetOverrideStatusPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "setRubricSelfAssessment",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for SetRubricSelfAssessment",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SetRubricSelfAssessmentInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "gradedSubmissionsExist",
+ "description": "If true, the assignment has at least one graded submission",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "SetRubricSelfAssessmentPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "subscribeToDiscussionTopic",
- "description": null,
+ "name": "graderIdentitiesConnection",
+ "description": "Grader identities if moderated assignment",
"args": [
{
- "name": "input",
- "description": "Parameters for SubscribeToDiscussionTopic",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "SubscribeToDiscussionTopicInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "SubscribeToDiscussionTopicPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateAccountDomainLookup",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateAccountDomainLookup",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateAccountDomainLookupInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateAccountDomainLookupPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateAssignment",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateAssignment",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateAssignmentInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateAssignmentPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateCommentBankItem",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateCommentBankItem",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateCommentBankItemInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -29432,403 +42590,198 @@
],
"type": {
"kind": "OBJECT",
- "name": "UpdateCommentBankItemPayload",
+ "name": "GraderIdentityConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateConversationParticipants",
+ "name": "gradesPublished",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateConversationParticipants",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateConversationParticipantsInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateConversationParticipantsPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionEntriesReadState",
+ "name": "gradesPublishedAt",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionEntriesReadState",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionEntriesReadStateInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateDiscussionEntriesReadStatePayload",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionEntry",
+ "name": "gradingPeriodId",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionEntry",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionEntryInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateDiscussionEntryPayload",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionEntryParticipant",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionEntryParticipant",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionEntryParticipantInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "gradingRole",
+ "description": "The grading role of the current user for this assignment. Returns null if the user does not have sufficient grading permissions.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateDiscussionEntryParticipantPayload",
+ "kind": "ENUM",
+ "name": "GradingRole",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionExpanded",
+ "name": "gradingStandard",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionExpanded",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionExpandedInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "UpdateDiscussionExpandedPayload",
+ "name": "GradingStandard",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionReadState",
+ "name": "gradingStandardId",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionReadState",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionReadStateInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateDiscussionReadStatePayload",
+ "kind": "SCALAR",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionSortOrder",
+ "name": "gradingType",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionSortOrder",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionSortOrderInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateDiscussionSortOrderPayload",
+ "kind": "ENUM",
+ "name": "GradingType",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionThreadReadState",
+ "name": "groupCategoryId",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionThreadReadState",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionThreadReadStateInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateDiscussionThreadReadStatePayload",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateDiscussionTopic",
+ "name": "groupSet",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateDiscussionTopic",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionTopicInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "UpdateDiscussionTopicPayload",
+ "name": "GroupSet",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateGradebookGroupFilter",
- "description": null,
+ "name": "groupSubmissionsConnection",
+ "description": "returns submissions grouped to one submission object per group",
"args": [
{
- "name": "input",
- "description": "Parameters for UpdateGradebookGroupFilter",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateGradebookGroupFilterInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateGradebookGroupFilterPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateGradebookGroupFilter",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateGradebookGroupFilter",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateGradebookGroupFilterInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateGradebookGroupFilterPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateInternalSetting",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateInternalSetting",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateInternalSettingInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateInternalSettingPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateLearningOutcome",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateLearningOutcome",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateLearningOutcomeInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchFilterInput",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateLearningOutcomePayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateLearningOutcomeGroup",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateLearningOutcomeGroup",
+ "name": "orderBy",
+ "description": null,
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateLearningOutcomeGroupInput",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchOrder",
+ "ofType": null
+ }
}
},
"defaultValue": null,
@@ -29838,462 +42791,268 @@
],
"type": {
"kind": "OBJECT",
- "name": "UpdateLearningOutcomeGroupPayload",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateMyInboxSettings",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateMyInboxSettings",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateMyInboxSettingsInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "hasGroupCategory",
+ "description": "specifies that this assignment is a group assignment",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateMyInboxSettingsPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateNotificationPreferences",
+ "name": "hasMultipleDueDates",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateNotificationPreferences",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateNotificationPreferencesInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateNotificationPreferencesPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateOutcomeCalculationMethod",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateOutcomeCalculationMethod",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateOutcomeCalculationMethodInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "hasPlagiarismTool",
+ "description": "Indicates if the assignment has LTI 2.0 plagiarism detection tool configured",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateOutcomeCalculationMethodPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateOutcomeProficiency",
+ "name": "hasRubric",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateOutcomeProficiency",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateOutcomeProficiencyInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateOutcomeProficiencyPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateRubricArchivedState",
- "description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateRubricArchivedState",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateRubricArchivedStateInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "name": "hasSubAssignments",
+ "description": "Boolean: returns true if the assignment is checkpointed. A checkpointed assignment has checkpoints ( also known as sub_assignments)",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasSubmittedSubmissions",
+ "description": "If true, the assignment has been submitted to by at least one student",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateRubricArchivedStatePayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateRubricAssessmentReadState",
+ "name": "htmlUrl",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateRubricAssessmentReadState",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateRubricAssessmentReadStateInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateRubricAssessmentReadStatePayload",
+ "kind": "SCALAR",
+ "name": "URL",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSpeedGraderSettings",
+ "name": "id",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateSpeedGraderSettings",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSpeedGraderSettingsInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateSpeedGraderSettingsPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSplitScreenViewDeeplyNestedAlert",
+ "name": "importantDates",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateSplitScreenViewDeeplyNestedAlert",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSplitScreenViewDeeplyNestedAlertInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateSplitScreenViewDeeplyNestedAlertPayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSubmissionGrade",
+ "name": "inClosedGradingPeriod",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateSubmissionsGrade",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSubmissionsGradeInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateSubmissionsGradePayload",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSubmissionGradeStatus",
+ "name": "isLockedByMasterCourse",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateSubmissionsGradeStatus",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSubmissionsGradeStatusInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
}
- ],
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "isNewQuiz",
+ "description": "Assignment is connected to a New Quiz",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "UpdateSubmissionsGradeStatusPayload",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSubmissionSticker",
- "description": null,
+ "name": "lockAt",
+ "description": "the lock date (assignment is locked after this date)",
"args": [
{
- "name": "input",
- "description": "Parameters for UpdateSubmissionSticker",
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSubmissionStickerInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
- "defaultValue": null,
+ "defaultValue": "true",
"isDeprecated": false,
"deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "UpdateSubmissionStickerPayload",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSubmissionStudentEnteredScore",
+ "name": "lockInfo",
"description": null,
- "args": [
- {
- "name": "input",
- "description": "Parameters for UpdateSubmissionStudentEnteredScore",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSubmissionStudentEnteredScoreInput",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "UpdateSubmissionStudentEnteredScorePayload",
+ "name": "LockInfo",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updateSubmissionsReadState",
+ "name": "ltiAssetProcessorsConnection",
"description": null,
"args": [
{
- "name": "input",
- "description": "Parameters for UpdateSubmissionsReadState",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateSubmissionsReadStateInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateSubmissionsReadStatePayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "updateUserDiscussionsSplitscreenView",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpdateUserDiscussionsSplitscreenView",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpdateUserDiscussionsSplitscreenViewInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpdateUserDiscussionsSplitscreenViewPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "upsertCustomGradeStatus",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpsertCustomGradeStatus",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpsertCustomGradeStatusInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "UpsertCustomGradeStatusPayload",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "upsertStandardGradeStatus",
- "description": null,
- "args": [
+ },
{
- "name": "input",
- "description": "Parameters for UpsertStandardGradeStatus",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "INPUT_OBJECT",
- "name": "UpsertStandardGradeStatusInput",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -30302,718 +43061,524 @@
],
"type": {
"kind": "OBJECT",
- "name": "UpsertStandardGradeStatusPayload",
+ "name": "LtiAssetProcessorConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MutationLog",
- "description": null,
- "fields": [
+ },
+ {
+ "name": "moderatedGrading",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ModeratedGrading",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
- "name": "assetString",
+ "name": "moderatedGradingEnabled",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mutationId",
+ "name": "moduleItems",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ModuleItem",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mutationName",
+ "name": "modules",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "params",
+ "name": "muted",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "JSON",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "realUser",
- "description": "If the mutation was performed by a user masquerading as another user,\nthis field returns the \"real\" (logged-in) user.\n",
- "args": [],
+ "name": "mySubAssignmentSubmissionsConnection",
+ "description": "submissions for sub-assignments belonging to the current user",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "User",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "timestamp",
+ "name": "name",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "user",
+ "name": "needsGradingCount",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "User",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MutationLogConnection",
- "description": "The connection type for MutationLog.",
- "fields": [
- {
- "name": "edges",
- "description": "A list of edges.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "MutationLogEdge",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "newQuizzesAnonymousParticipants",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "MutationLog",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "MutationLogEdge",
- "description": "An edge in a connection.",
- "fields": [
- {
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "nonDigitalSubmission",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "omitFromFinalGrade",
+ "description": "If true, the assignment will be omitted from the student's final grade",
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "MutationLog",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "description": "An object with an ID.",
- "fields": [
+ },
{
- "name": "id",
- "description": "ID of the object.",
+ "name": "onlyVisibleToOverrides",
+ "description": "specifies that this assignment is only assigned to students for whom an\n `AssignmentOverride` applies.",
"args": [],
"type": {
"kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Account",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "CommentBankItem",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "CommunicationChannel",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "ContentTag",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Conversation",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "CustomGradeStatus",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Enrollment",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "File",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "GradingPeriod",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "GradingPeriodGroup",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "GradingStandard",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Group",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "GroupSet",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "InternalSetting",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "LearningOutcome",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "MediaObject",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "MessageableContext",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "MessageableUser",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "ModuleItem",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Notification",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "NotificationPolicy",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "OutcomeCalculationMethod",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "OutcomeFriendlyDescriptionType",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "OutcomeProficiency",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Page",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "PostPolicy",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Progress",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Quiz",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Rubric",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Section",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "StandardGradeStatus",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Submission",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Term",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "UsageRights",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "User",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "NodeType",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "Account",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "Assignment",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "AssignmentGroup",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "Conversation",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "Course",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "Discussion",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "DiscussionEntry",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "Enrollment",
- "description": null,
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "File",
+ "name": "originalityReportVisibility",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "GradingPeriod",
+ "name": "parentAssignment",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "GradingPeriodGroup",
+ "name": "parentAssignmentId",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Group",
+ "name": "peerReviewSubAssignment",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PeerReviewSubAssignment",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "GroupSet",
+ "name": "peerReviews",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PeerReviews",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "InternalSetting",
- "description": null,
+ "name": "pointsPossible",
+ "description": "the assignment is out of this many points",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "LearningOutcomeGroup",
- "description": null,
+ "name": "position",
+ "description": "determines the order this assignment is displayed in in its assignment group",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "MediaObject",
+ "name": "postManually",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Module",
+ "name": "postPolicy",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PostPolicy",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ModuleItem",
- "description": null,
+ "name": "postToSis",
+ "description": "present if Sync Grades to SIS feature is enabled",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "OutcomeCalculationMethod",
- "description": null,
+ "name": "provisionalGradingLocked",
+ "description": "Indicates if the user is locked out of provisional grading for this assignment.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "OutcomeProficiency",
+ "name": "published",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Page",
+ "name": "quiz",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Quiz",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "PostPolicy",
- "description": null,
+ "name": "restrictQuantitativeData",
+ "description": "Is the current user restricted from viewing quantitative data",
+ "args": [
+ {
+ "name": "checkExtraPermissions",
+ "description": "Check extra permissions in RQD method",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Progress",
+ "name": "rubric",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Rubric",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Rubric",
+ "name": "rubricAssessment",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AssignmentRubricAssessment",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Section",
+ "name": "rubricAssociation",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "RubricAssociation",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Submission",
- "description": null,
+ "name": "rubricSelfAssessmentEnabled",
+ "description": "specifies that students can self-assess using the assignment rubric.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Term",
+ "name": "rubricUpdateUrl",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "UsageRights",
+ "name": "scheduledPost",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ScheduledPost",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "User",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Noop",
- "description": "A descriptive tag that doesn't link the assignment to a set",
- "fields": [
- {
- "name": "_id",
+ "name": "scoreStatistic",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "AssignmentScoreStatistic",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Notification",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "sisId",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "category",
+ "name": "state",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "ENUM",
+ "name": "AssignmentState",
"ofType": null
}
},
@@ -31021,51 +43586,132 @@
"deprecationReason": null
},
{
- "name": "categoryDescription",
+ "name": "submissionTypes",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "SubmissionType",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "categoryDisplayName",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "name": "submissionsConnection",
+ "description": "submissions for this assignment",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchOrder",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionConnection",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "submissionsDownloads",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "supportsGradeByQuestion",
"description": null,
"args": [],
"type": {
@@ -31073,7 +43719,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -31081,15 +43727,15 @@
"deprecationReason": null
},
{
- "name": "name",
- "description": null,
+ "name": "suppressAssignment",
+ "description": "internal use",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
}
},
@@ -31097,19 +43743,19 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "timeZoneEdited",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "workflowState",
+ "name": "title",
"description": null,
"args": [],
"type": {
@@ -31119,280 +43765,469 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "NotificationCategoryType",
- "description": "The categories that a notification can belong to",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "Account_Notification",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "Added_To_Conversation",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "All_Submissions",
+ "name": "totalGradedSubmissions",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Announcement",
+ "name": "totalSubmissions",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Announcement_Created_By_You",
+ "name": "type",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Appointment_Availability",
- "description": null,
+ "name": "unlockAt",
+ "description": "the unlock date (assignment is unlocked after this date)",
+ "args": [
+ {
+ "name": "applyOverrides",
+ "description": "When true, return the overridden dates.\n\nNot all roles have permission to view un-overridden dates (in which\ncase the overridden dates will be returned)\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Appointment_Cancelations",
+ "name": "updatedAt",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Appointment_Signups",
- "description": null,
+ "name": "visibleToEveryone",
+ "description": "specifies all other variables that can determine visiblity.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
{
- "name": "Blueprint",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "AssignedDates",
+ "ofType": null
},
{
- "name": "Calendar",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "Content_Link_Error",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
},
{
- "name": "Conversation_Created",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
},
{
- "name": "Conversation_Message",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PeerReviews",
+ "description": "Settings for Peer Reviews on an Assignment",
+ "fields": [
{
- "name": "Course_Content",
- "description": null,
+ "name": "acrossSections",
+ "description": "Boolean indicating if peer reviews can be assigned across different sections",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Discussion",
- "description": null,
+ "name": "anonymousReviews",
+ "description": "Boolean representing whether or not peer reviews are anonymous",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "DiscussionEntry",
- "description": null,
+ "name": "automaticReviews",
+ "description": "Boolean indicating peer reviews are assigned automatically. If false, the teacher is expected to manually assign peer reviews.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "DiscussionMention",
- "description": null,
+ "name": "count",
+ "description": "Integer representing the amount of reviews each user is assigned.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "ReportedReply",
- "description": null,
+ "name": "dueAt",
+ "description": "Date and Time representing when the peer reviews are due",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Due_Date",
- "description": null,
+ "name": "enabled",
+ "description": "Boolean indicating if peer reviews are required for this assignment",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Files",
- "description": null,
+ "name": "intraReviews",
+ "description": "Boolean representing whether or not members from within the same group on a group assignment can be assigned to peer review their own group's work",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Grading",
- "description": null,
+ "name": "pointsPossible",
+ "description": "Points possible for the peer review sub-assignment",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Grading_Policies",
- "description": null,
+ "name": "submissionRequired",
+ "description": "Boolean indicating if students must submit their assignment before they can do peer reviews",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "description": null,
+ "fields": [
{
- "name": "Invitation",
+ "name": "title",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Late_Grading",
+ "name": "url",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Placements",
+ "description": "A placement for an external tool in Canvas",
+ "fields": [
{
- "name": "Membership_Update",
- "description": null,
+ "name": "assignmentSelection",
+ "description": "Placement for assignment selection",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Other",
- "description": null,
+ "name": "courseAssignmentsMenu",
+ "description": "Placement for course assignments menu",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Recording_Ready",
- "description": null,
+ "name": "editorButton",
+ "description": "Placement for editor button",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Student_Appointment_Signups",
- "description": null,
+ "name": "linkSelection",
+ "description": "Placement for link selection",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Submission_Comment",
- "description": null,
+ "name": "moduleIndexMenuModal",
+ "description": "Placement for module index menu modal",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "NotificationFrequencyType",
- "description": "Frequency that notifications can be delivered on",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "immediately",
- "description": null,
+ "name": "moduleMenuModal",
+ "description": "Placement for module menu modal",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "daily",
- "description": null,
+ "name": "resourceSelection",
+ "description": "Placement for resource selection",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Placement",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "weekly",
+ "name": "title",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "never",
+ "name": "url",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "NotificationPolicy",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "PlacementsInterface",
+ "description": "Interface for placements",
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "placements",
+ "description": "Placements for the external tool",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "Placements",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
{
- "name": "communicationChannelId",
+ "kind": "OBJECT",
+ "name": "ExternalTool",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "PostAssignmentGradesForSectionsInput",
+ "description": "Autogenerated input type of PostAssignmentGradesForSections",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "assignmentId",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -31402,322 +44237,397 @@
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "gradedOnly",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "frequency",
+ "name": "sectionIds",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PostAssignmentGradesForSectionsPayload",
+ "description": "Autogenerated return type of PostAssignmentGradesForSections.",
+ "fields": [
+ {
+ "name": "assignment",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "Assignment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "errors",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "notification",
+ "name": "progress",
"description": null,
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Notification",
+ "name": "Progress",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "sections",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Section",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
}
],
"inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "NotificationPreferences",
- "description": null,
- "fields": [
+ "kind": "INPUT_OBJECT",
+ "name": "PostAssignmentGradesInput",
+ "description": "Autogenerated input type of PostAssignmentGrades",
+ "fields": null,
+ "inputFields": [
{
- "name": "channels",
+ "name": "assignmentId",
"description": null,
- "args": [
- {
- "name": "channelId",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": "null",
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "CommunicationChannel",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "readPrivacyNoticeDate",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sendObservedNamesInNotifications",
+ "name": "gradedOnly",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
"name": "Boolean",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sendScoresInEmails",
+ "name": "onlyStudentIds",
"description": null,
- "args": [
- {
- "name": "courseId",
- "description": null,
- "type": {
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "NotificationPreferencesContextType",
- "description": "Context types that can be associated with notification preferences",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "Course",
+ "name": "sectionIds",
"description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "Account",
+ "name": "skipStudentIds",
"description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "interfaces": null,
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "OnlineSubmissionType",
- "description": "Types that can be submitted online",
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "basic_lti_launch",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "student_annotation",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "kind": "OBJECT",
+ "name": "PostAssignmentGradesPayload",
+ "description": "Autogenerated return type of PostAssignmentGrades.",
+ "fields": [
{
- "name": "media_recording",
+ "name": "assignment",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "online_text_entry",
+ "name": "errors",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "online_upload",
+ "name": "progress",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Progress",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "online_url",
+ "name": "sections",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Section",
+ "ofType": null
+ }
+ }
+ },
"isDeprecated": false,
"deprecationReason": null
}
],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "ENUM",
- "name": "OrderDirection",
- "description": null,
+ "kind": "INPUT_OBJECT",
+ "name": "PostDraftSubmissionCommentInput",
+ "description": "Autogenerated input type of PostDraftSubmissionComment",
"fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "ascending",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
+ "inputFields": [
{
- "name": "descending",
+ "name": "submissionCommentId",
"description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
+ "interfaces": null,
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "OutcomeAlignment",
- "description": null,
+ "name": "PostDraftSubmissionCommentPayload",
+ "description": "Autogenerated return type of PostDraftSubmissionComment.",
"fields": [
{
- "name": "_id",
+ "name": "errors",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "alignmentsCount",
+ "name": "submissionComment",
"description": null,
"args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "SubmissionComment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PostPolicy",
+ "description": "A PostPolicy sets the policy for whether a Submission's grades are posted\nautomatically or manually. A PostPolicy can be set at the Course and/or\nAssignment level.\n",
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ID",
"ofType": null
}
},
@@ -31725,32 +44635,36 @@
"deprecationReason": null
},
{
- "name": "assignmentContentType",
+ "name": "assignment",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "Assignment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentWorkflowState",
+ "name": "course",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contentId",
- "description": null,
+ "name": "id",
+ "description": "ID of the object.",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -31765,7 +44679,7 @@
"deprecationReason": null
},
{
- "name": "contentType",
+ "name": "postManually",
"description": null,
"args": [],
"type": {
@@ -31773,23 +44687,47 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Boolean",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "contextId",
- "description": null,
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PostPolicyConnection",
+ "description": "The connection type for PostPolicy.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "PostPolicyEdge",
"ofType": null
}
},
@@ -31797,15 +44735,15 @@
"deprecationReason": null
},
{
- "name": "contextType",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "PostPolicy",
"ofType": null
}
},
@@ -31813,27 +44751,44 @@
"deprecationReason": null
},
{
- "name": "createdAt",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "PostPolicyEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "learningOutcomeId",
- "description": null,
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
@@ -31841,135 +44796,102 @@
"deprecationReason": null
},
{
- "name": "moduleId",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "PostPolicy",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "PreferredLanguageType",
+ "description": "The preferred language for the translation, currently supporting only Cedar languages.",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "CA",
+ "description": "Catalan",
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "moduleName",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
+ "name": "ZH_HANS",
+ "description": "Chinese (Simplified)",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "moduleUrl",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
+ "name": "NL",
+ "description": "Dutch",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "moduleWorkflowState",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
+ "name": "EN",
+ "description": "English",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "quizItems",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "QuizItem",
- "ofType": null
- }
- }
- },
+ "name": "FR",
+ "description": "French",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
+ "name": "DE",
+ "description": "German",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
+ "name": "PT_BR",
+ "description": "Portuguese (Brazil)",
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "url",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
+ "name": "RU",
+ "description": "Russian",
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
+ },
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
+ "name": "ES",
+ "description": "Spanish",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "SV",
+ "description": "Swedish",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "OutcomeCalculationMethod",
- "description": "Customized calculation method",
+ "name": "ProficiencyRating",
+ "description": "Customized proficiency rating",
"fields": [
{
"name": "_id",
@@ -31988,67 +44910,31 @@
"deprecationReason": null
},
{
- "name": "calculationInt",
+ "name": "color",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "calculationMethod",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "contextId",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "contextType",
+ "name": "description",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "mastery",
"description": null,
"args": [],
"type": {
@@ -32056,7 +44942,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Boolean",
"ofType": null
}
},
@@ -32064,7 +44950,7 @@
"deprecationReason": null
},
{
- "name": "locked",
+ "name": "points",
"description": null,
"args": [],
"type": {
@@ -32072,7 +44958,7 @@
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Float",
"ofType": null
}
},
@@ -32086,11 +44972,6 @@
"kind": "INTERFACE",
"name": "LegacyIDInterface",
"ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
}
],
"enumValues": null,
@@ -32100,19 +44981,19 @@
},
{
"kind": "OBJECT",
- "name": "OutcomeFriendlyDescriptionType",
- "description": null,
+ "name": "ProficiencyRatingConnection",
+ "description": "The connection type for ProficiencyRating.",
"fields": [
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "edges",
+ "description": "A list of edges.",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "ProficiencyRatingEdge",
"ofType": null
}
},
@@ -32120,15 +45001,15 @@
"deprecationReason": null
},
{
- "name": "contextId",
- "description": null,
+ "name": "nodes",
+ "description": "A list of nodes.",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "OBJECT",
+ "name": "ProficiencyRating",
"ofType": null
}
},
@@ -32136,8 +45017,37 @@
"deprecationReason": null
},
{
- "name": "contextType",
- "description": null,
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ProficiencyRatingEdge",
+ "description": "An edge in a connection.",
+ "fields": [
+ {
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -32152,21 +45062,34 @@
"deprecationReason": null
},
{
- "name": "createdAt",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "ProficiencyRating",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "ProficiencyRatingInput",
+ "description": null,
+ "fields": null,
+ "inputFields": [
{
"name": "description",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -32176,28 +45099,41 @@
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "points",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Float",
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Progress",
+ "description": "Returns completion status and progress information about an asynchronous job",
+ "fields": [
{
- "name": "learningOutcomeId",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -32212,80 +45148,43 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
- "description": null,
+ "name": "completion",
+ "description": "percent completed",
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "workflowState",
+ "name": "context",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "UNION",
+ "name": "ProgressContext",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "OutcomeProficiency",
- "description": "Customized proficiency ratings",
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "createdAt",
+ "description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "contextId",
+ "name": "id",
"description": null,
"args": [],
"type": {
@@ -32301,31 +45200,27 @@
"deprecationReason": null
},
{
- "name": "contextType",
- "description": null,
+ "name": "message",
+ "description": "details about the job",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "id",
+ "name": "state",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "ID",
+ "kind": "ENUM",
+ "name": "ProgressState",
"ofType": null
}
},
@@ -32333,15 +45228,15 @@
"deprecationReason": null
},
{
- "name": "locked",
- "description": null,
+ "name": "tag",
+ "description": "the type of operation",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
}
},
@@ -32349,61 +45244,12 @@
"deprecationReason": null
},
{
- "name": "proficiencyRatingsConnection",
+ "name": "updatedAt",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "ProficiencyRatingConnection",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
@@ -32421,6 +45267,11 @@
"kind": "INTERFACE",
"name": "Node",
"ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
}
],
"enumValues": null,
@@ -32429,85 +45280,83 @@
"isOneOf": false
},
{
- "kind": "INPUT_OBJECT",
- "name": "OutcomeProficiencyRatingCreate",
+ "kind": "UNION",
+ "name": "ProgressContext",
"description": null,
"fields": null,
- "inputFields": [
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": [
{
- "name": "color",
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "GroupSet",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "User",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "ProgressState",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "queued",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "description",
+ "name": "running",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "mastery",
+ "name": "completed",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "points",
+ "name": "failed",
"description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- }
- },
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "Page",
+ "name": "ProvisionalGrade",
"description": null,
"fields": [
{
@@ -32527,47 +45376,7 @@
"deprecationReason": null
},
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "isLockedByMasterCourse",
+ "name": "final",
"description": null,
"args": [],
"type": {
@@ -32583,81 +45392,53 @@
"deprecationReason": null
},
{
- "name": "modules",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "pointsPossible",
+ "name": "grade",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "published",
- "description": "Whether the module item is published",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "score",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "scorerAnonymousId",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "selected",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -32669,21 +45450,6 @@
"kind": "INTERFACE",
"name": "LegacyIDInterface",
"ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
}
],
"enumValues": null,
@@ -32693,8 +45459,8 @@
},
{
"kind": "OBJECT",
- "name": "PageConnection",
- "description": "The connection type for Page.",
+ "name": "ProvisionalGradeConnection",
+ "description": "The connection type for ProvisionalGrade.",
"fields": [
{
"name": "edges",
@@ -32705,7 +45471,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "PageEdge",
+ "name": "ProvisionalGradeEdge",
"ofType": null
}
},
@@ -32721,7 +45487,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Page",
+ "name": "ProvisionalGrade",
"ofType": null
}
},
@@ -32754,7 +45520,7 @@
},
{
"kind": "OBJECT",
- "name": "PageEdge",
+ "name": "ProvisionalGradeEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -32779,7 +45545,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "Page",
+ "name": "ProvisionalGrade",
"ofType": null
},
"isDeprecated": false,
@@ -32793,169 +45559,251 @@
"specifiedByURL": null,
"isOneOf": false
},
- {
- "kind": "INPUT_OBJECT",
- "name": "PageFilter",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "userId",
- "description": "only return pages for the given user. Defaults to\nthe current user.\n",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "searchTerm",
- "description": "only return pages whose title matches this search term\n",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
{
"kind": "OBJECT",
- "name": "PageInfo",
- "description": "Information about pagination in a connection.",
+ "name": "Query",
+ "description": null,
"fields": [
{
- "name": "endCursor",
- "description": "When paginating forwards, the cursor to continue.",
- "args": [],
+ "name": "account",
+ "description": null,
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
+ "description": "a id from the original SIS system",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "Account",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "hasNextPage",
- "description": "When paginating forwards, are there more items?",
- "args": [],
+ "name": "accountNotifications",
+ "description": "Account notifications for the current user",
+ "args": [
+ {
+ "name": "accountId",
+ "description": "Account ID to fetch notifications for",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AccountNotification",
+ "ofType": null
+ }
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "hasPreviousPage",
- "description": "When paginating backwards, are there more items?",
+ "name": "allCourses",
+ "description": "All courses viewable by the current user",
"args": [],
"type": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "startCursor",
- "description": "When paginating backwards, the cursor to continue.",
- "args": [],
+ "name": "assignment",
+ "description": null,
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeTypes",
+ "description": "Types of assignments to include. Defaults to [ASSIGNMENT] for backward compatibility. Note: This parameter is ignored when using sisId lookup.",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "AssignmentTypeEnum",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": "[ASSIGNMENT]",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
+ "description": "an id from the original SIS system",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "Assignment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PageViewAnalysis",
- "description": null,
- "fields": [
+ },
{
- "name": "level",
- "description": "This number (0-3) is intended to give an idea of how the student is doing relative to others in the course",
- "args": [],
+ "name": "assignmentGroup",
+ "description": null,
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
+ "description": "an id from the original SIS system",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "AssignmentGroup",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "max",
- "description": "The maximum number of views/participations in this course",
+ "name": "auditLogs",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "AuditLogs",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "total",
- "description": "The number of views/participations this student has",
- "args": [],
+ "name": "course",
+ "description": null,
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id, preference for search is given to this id",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
+ "description": "a id from the original SIS system",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "Course",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INTERFACE",
- "name": "PagesConnectionInterface",
- "description": null,
- "fields": [
+ },
{
- "name": "pagesConnection",
- "description": "returns a list of wiki pages.\n",
+ "name": "courseInstructorsConnection",
+ "description": "Paginated instructors with their enrollments across multiple courses",
"args": [
{
"name": "after",
@@ -33006,11 +45854,141 @@
"deprecationReason": null
},
{
- "name": "filter",
+ "name": "courseIds",
+ "description": "Course IDs to get instructors for",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentTypes",
+ "description": "Filter by enrollment types (TeacherEnrollment, TaEnrollment)",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "observedUserId",
+ "description": "ID of the observed user",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "InstructorWithEnrollmentsConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courses",
+ "description": "Courses by IDs that are viewable by the current user",
+ "args": [
+ {
+ "name": "ids",
+ "description": "graphql or legacy course IDs",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisIds",
+ "description": "ids from the original SIS system",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentInvitations",
+ "description": "Pending enrollment invitations for the current user",
+ "args": [
+ {
+ "name": "includeEnrollmentUuid",
"description": null,
"type": {
- "kind": "INPUT_OBJECT",
- "name": "PageFilter",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
@@ -33018,157 +45996,322 @@
"deprecationReason": null
}
],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "folder",
+ "description": "Folder",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "PageConnection",
+ "name": "Folder",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": [
+ },
{
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PeerReviews",
- "description": "Settings for Peer Reviews on an Assignment",
- "fields": [
+ "name": "internalSetting",
+ "description": "Retrieves a single internal setting by its ID or name",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "name",
+ "description": "the name of the Setting",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "InternalSetting",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
- "name": "anonymousReviews",
- "description": "Boolean representing whether or not peer reviews are anonymous",
+ "name": "internalSettings",
+ "description": "All internal settings",
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "InternalSetting",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "learningOutcome",
+ "description": "LearningOutcome",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LearningOutcome",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "automaticReviews",
- "description": "Boolean indicating peer reviews are assigned automatically. If false, the teacher is expected to manually assign peer reviews.",
- "args": [],
+ "name": "learningOutcomeGroup",
+ "description": "LearningOutcomeGroup",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LearningOutcomeGroup",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "legacyNode",
+ "description": "Fetches an object given its type and legacy ID",
+ "args": [
+ {
+ "name": "_id",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "type",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "NodeType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "INTERFACE",
+ "name": "Node",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "count",
- "description": "Integer representing the amount of reviews each user is assigned.",
- "args": [],
+ "name": "moduleItem",
+ "description": "ModuleItem",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "OBJECT",
+ "name": "ModuleItem",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "dueAt",
- "description": "Date and Time representing when the peer reviews are due",
+ "name": "myInboxSettings",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "InboxSettings",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "enabled",
- "description": "Boolean indicating if peer reviews are required for this assignment",
- "args": [],
+ "name": "node",
+ "description": "Fetches an object given its ID.",
+ "args": [
+ {
+ "name": "id",
+ "description": "ID of the object.",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "INTERFACE",
+ "name": "Node",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "intraReviews",
- "description": "Boolean representing whether or not members from within the same group on a group assignment can be assigned to peer review their own group's work",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "PostAssignmentGradesForSectionsInput",
- "description": "Autogenerated input type of PostAssignmentGradesForSections",
- "fields": null,
- "inputFields": [
- {
- "name": "assignmentId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "name": "outcomeCalculationMethod",
+ "description": "OutcomeCalculationMethod",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradedOnly",
- "description": null,
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "OutcomeCalculationMethod",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sectionIds",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "LIST",
- "name": null,
- "ofType": {
+ "name": "outcomeProficiency",
+ "description": "OutcomeProficiency",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
@@ -33176,193 +46319,179 @@
"name": "ID",
"ofType": null
}
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PostAssignmentGradesForSectionsPayload",
- "description": "Autogenerated return type of PostAssignmentGradesForSections.",
- "fields": [
- {
- "name": "assignment",
- "description": null,
- "args": [],
+ ],
"type": {
"kind": "OBJECT",
- "name": "Assignment",
+ "name": "OutcomeProficiency",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "errors",
+ "name": "peerReviewSubAssignment",
"description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "progress",
- "description": null,
- "args": [],
+ ],
"type": {
"kind": "OBJECT",
- "name": "Progress",
+ "name": "PeerReviewSubAssignment",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sections",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Section",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "PostAssignmentGradesInput",
- "description": "Autogenerated input type of PostAssignmentGrades",
- "fields": null,
- "inputFields": [
- {
- "name": "assignmentId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
+ "name": "rubric",
+ "description": "Rubric",
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "gradedOnly",
- "description": null,
+ ],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
+ "kind": "OBJECT",
+ "name": "Rubric",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "onlyStudentIds",
+ "name": "submission",
"description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
- }
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sectionIds",
- "description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentId",
+ "description": "a graphql or legacy assignment id",
+ "type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "userId",
+ "description": "a graphql or legacy user id",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "anonymousId",
+ "description": "an anonymous id in use when grading anonymously",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "skipStudentIds",
+ "name": "term",
"description": null,
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
+ "args": [
+ {
+ "name": "id",
+ "description": "a graphql or legacy id",
+ "type": {
"kind": "SCALAR",
"name": "ID",
"ofType": null
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sisId",
+ "description": "an id from the original SIS system",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Term",
+ "ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "interfaces": null,
+ "inputFields": null,
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
@@ -33370,56 +46499,44 @@
},
{
"kind": "OBJECT",
- "name": "PostAssignmentGradesPayload",
- "description": "Autogenerated return type of PostAssignmentGrades.",
+ "name": "Quiz",
+ "description": null,
"fields": [
{
- "name": "assignment",
- "description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "errors",
- "description": null,
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "progress",
+ "name": "anonymousSubmissions",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Progress",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sections",
- "description": null,
+ "name": "assignedToDates",
+ "description": "Standardized date hash visible to current user",
"args": [],
"type": {
"kind": "LIST",
@@ -33429,148 +46546,77 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "Section",
+ "name": "DateHash",
"ofType": null
}
}
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "PostDraftSubmissionCommentInput",
- "description": "Autogenerated input type of PostDraftSubmissionComment",
- "fields": null,
- "inputFields": [
- {
- "name": "submissionCommentId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PostDraftSubmissionCommentPayload",
- "description": "Autogenerated return type of PostDraftSubmissionComment.",
- "fields": [
+ },
{
- "name": "errors",
+ "name": "canDuplicate",
"description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "submissionComment",
+ "name": "canManageAssignTo",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "SubmissionComment",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PostPolicy",
- "description": "A PostPolicy sets the policy for whether a Submission's grades are posted\nautomatically or manually. A PostPolicy can be set at the Course and/or\nAssignment level.\n",
- "fields": [
+ },
{
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "canUnpublish",
+ "description": "Whether the module item can be unpublished",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignment",
+ "name": "createdAt",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Assignment",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "course",
+ "name": "graded",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "id",
- "description": "ID of the object.",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
@@ -33585,7 +46631,7 @@
"deprecationReason": null
},
{
- "name": "postManually",
+ "name": "isLockedByMasterCourse",
"description": null,
"args": [],
"type": {
@@ -33599,95 +46645,54 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
},
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PostPolicyConnection",
- "description": "The connection type for PostPolicy.",
- "fields": [
- {
- "name": "edges",
- "description": "A list of edges.",
+ "name": "modules",
+ "description": null,
"args": [],
"type": {
"kind": "LIST",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "PostPolicyEdge",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Module",
+ "ofType": null
+ }
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
+ "name": "pointsPossible",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PostPolicy",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "name": "published",
+ "description": "Whether the module item is published",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "PostPolicyEdge",
- "description": "An edge in a connection.",
- "fields": [
+ },
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "quizType",
+ "description": "The type of quiz: 'quiz' for regular quizzes, 'assignment' for LTI quiz assignments",
"args": [],
"type": {
"kind": "NON_NULL",
@@ -33702,48 +46707,100 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
- "args": [],
+ "name": "submissionsConnection",
+ "description": "submissions for this quiz's assignment",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "INPUT_OBJECT",
+ "name": "SubmissionSearchOrder",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "PostPolicy",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "ProficiencyRating",
- "description": "Customized proficiency rating",
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
},
{
- "name": "color",
+ "name": "title",
"description": null,
"args": [],
"type": {
@@ -33755,7 +46812,7 @@
"deprecationReason": null
},
{
- "name": "description",
+ "name": "type",
"description": null,
"args": [],
"type": {
@@ -33767,28 +46824,12 @@
"deprecationReason": null
},
{
- "name": "mastery",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "points",
+ "name": "updatedAt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
@@ -33797,10 +46838,30 @@
],
"inputFields": null,
"interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "AssignedDates",
+ "ofType": null
+ },
{
"kind": "INTERFACE",
"name": "LegacyIDInterface",
"ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "ModuleItemInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
}
],
"enumValues": null,
@@ -33810,8 +46871,8 @@
},
{
"kind": "OBJECT",
- "name": "ProficiencyRatingConnection",
- "description": "The connection type for ProficiencyRating.",
+ "name": "QuizConnection",
+ "description": "The connection type for Quiz.",
"fields": [
{
"name": "edges",
@@ -33822,7 +46883,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ProficiencyRatingEdge",
+ "name": "QuizEdge",
"ofType": null
}
},
@@ -33838,7 +46899,7 @@
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "ProficiencyRating",
+ "name": "Quiz",
"ofType": null
}
},
@@ -33871,7 +46932,7 @@
},
{
"kind": "OBJECT",
- "name": "ProficiencyRatingEdge",
+ "name": "QuizEdge",
"description": "An edge in a connection.",
"fields": [
{
@@ -33896,7 +46957,7 @@
"args": [],
"type": {
"kind": "OBJECT",
- "name": "ProficiencyRating",
+ "name": "Quiz",
"ofType": null
},
"isDeprecated": false,
@@ -33912,37 +46973,29 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "ProficiencyRatingInput",
+ "name": "QuizFilter",
"description": null,
"fields": null,
"inputFields": [
{
- "name": "description",
- "description": null,
+ "name": "userId",
+ "description": "only return quizzes for the given user. Defaults to\nthe current user.\n",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "points",
- "description": null,
+ "name": "searchTerm",
+ "description": "only return quizzes whose title matches this search term\n",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Float",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -33957,63 +47010,11 @@
},
{
"kind": "OBJECT",
- "name": "Progress",
- "description": "Returns completion status and progress information about an asynchronous job",
+ "name": "QuizItem",
+ "description": null,
"fields": [
{
"name": "_id",
- "description": "legacy canvas id",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "completion",
- "description": "percent completed",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "context",
- "description": null,
- "args": [],
- "type": {
- "kind": "UNION",
- "name": "ProgressContext",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdAt",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "id",
"description": null,
"args": [],
"type": {
@@ -34029,43 +47030,44 @@
"deprecationReason": null
},
{
- "name": "message",
- "description": "details about the job",
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "state",
+ "name": "title",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "ProgressState",
+ "kind": "SCALAR",
+ "name": "String",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "QuizSubmission",
+ "description": null,
+ "fields": [
{
- "name": "tag",
- "description": "the type of operation",
+ "name": "_id",
+ "description": "legacy canvas id",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -34073,604 +47075,362 @@
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "attempt",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "DateTime",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "UNION",
- "name": "ProgressContext",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "File",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "GroupSet",
- "ofType": null
- },
- {
- "kind": "OBJECT",
- "name": "User",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "ProgressState",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
+ },
{
- "name": "queued",
+ "name": "createdAt",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "running",
+ "name": "extraAttempts",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "completed",
+ "name": "extraTime",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "failed",
+ "name": "finishedAt",
"description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "Query",
- "description": null,
- "fields": [
+ },
{
- "name": "account",
+ "name": "fudgePoints",
"description": null,
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sisId",
- "description": "a id from the original SIS system",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "Account",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "allCourses",
- "description": "All courses viewable by the current user",
+ "name": "keptScore",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignment",
+ "name": "manuallyScored",
"description": null,
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sisId",
- "description": "an id from the original SIS system",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "Assignment",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "assignmentGroup",
+ "name": "quizPointsPossible",
"description": null,
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sisId",
- "description": "an id from the original SIS system",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "AssignmentGroup",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "auditLogs",
+ "name": "quizVersion",
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "AuditLogs",
+ "kind": "SCALAR",
+ "name": "Int",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "course",
+ "name": "score",
"description": null,
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id, preference for search is given to this id",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "sisId",
- "description": "a id from the original SIS system",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "Course",
+ "kind": "SCALAR",
+ "name": "Float",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "internalSetting",
- "description": "Retrieves a single internal setting by its ID or name",
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "name",
- "description": "the name of the Setting",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "startedAt",
+ "description": null,
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "InternalSetting",
+ "kind": "SCALAR",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "internalSettings",
- "description": "All internal settings",
+ "name": "updatedAt",
+ "description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "workflowState",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "InternalSetting",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
},
{
- "name": "learningOutcome",
- "description": "LearningOutcome",
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "kind": "INTERFACE",
+ "name": "Timestamped",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "QuizSubmissionConnection",
+ "description": "The connection type for QuizSubmission.",
+ "fields": [
+ {
+ "name": "edges",
+ "description": "A list of edges.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "LearningOutcome",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "QuizSubmissionEdge",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "learningOutcomeGroup",
- "description": "LearningOutcomeGroup",
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "nodes",
+ "description": "A list of nodes.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "LearningOutcomeGroup",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "QuizSubmission",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "legacyNode",
- "description": "Fetches an object given its type and legacy ID",
- "args": [
- {
- "name": "_id",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "type",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "ENUM",
- "name": "NodeType",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "pageInfo",
+ "description": "Information to aid in pagination.",
+ "args": [],
"type": {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "PageInfo",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "QuizSubmissionEdge",
+ "description": "An edge in a connection.",
+ "fields": [
{
- "name": "moduleItem",
- "description": "ModuleItem",
- "args": [
- {
- "name": "id",
- "description": "a graphql or legacy id",
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "cursor",
+ "description": "A cursor for use in pagination.",
+ "args": [],
"type": {
- "kind": "OBJECT",
- "name": "ModuleItem",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "myInboxSettings",
- "description": null,
+ "name": "node",
+ "description": "The item at the end of the edge.",
"args": [],
"type": {
"kind": "OBJECT",
- "name": "InboxSettings",
+ "name": "QuizSubmission",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "QuizzesConnectionInterface",
+ "description": null,
+ "fields": [
{
- "name": "node",
- "description": "Fetches an object given its ID.",
+ "name": "quizzesConnection",
+ "description": "returns a list of quizzes.\n",
"args": [
{
- "name": "id",
- "description": "ID of the object.",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "outcomeCalculationMethod",
- "description": "OutcomeCalculationMethod",
- "args": [
+ },
{
- "name": "id",
- "description": "a graphql or legacy id",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "OutcomeCalculationMethod",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "outcomeProficiency",
- "description": "OutcomeProficiency",
- "args": [
+ },
{
- "name": "id",
- "description": "a graphql or legacy id",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "OBJECT",
- "name": "OutcomeProficiency",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "rubric",
- "description": "Rubric",
- "args": [
+ },
{
- "name": "id",
- "description": "a graphql or legacy id",
+ "name": "filter",
+ "description": null,
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "INPUT_OBJECT",
+ "name": "QuizFilter",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
@@ -34679,22 +47439,66 @@
],
"type": {
"kind": "OBJECT",
- "name": "Rubric",
+ "name": "QuizConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Course",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "ENUM",
+ "name": "RatingInputType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "not_liked",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "name": "submission",
+ "name": "liked",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Recipients",
+ "description": null,
+ "fields": [
+ {
+ "name": "contextsConnection",
"description": null,
"args": [
{
- "name": "id",
- "description": "a graphql or legacy id",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
@@ -34702,11 +47506,11 @@
"deprecationReason": null
},
{
- "name": "assignmentId",
- "description": "a graphql or legacy assignment id",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
@@ -34714,11 +47518,11 @@
"deprecationReason": null
},
{
- "name": "userId",
- "description": "a graphql or legacy user id",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
},
"defaultValue": null,
@@ -34726,11 +47530,11 @@
"deprecationReason": null
},
{
- "name": "anonymousId",
- "description": "an anonymous id in use when grading anonymously",
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Int",
"ofType": null
},
"defaultValue": null,
@@ -34740,22 +47544,34 @@
],
"type": {
"kind": "OBJECT",
- "name": "Submission",
+ "name": "MessageableContextConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "term",
+ "name": "sendMessagesAll",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "usersConnection",
"description": null,
"args": [
{
- "name": "id",
- "description": "a graphql or legacy id",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
@@ -34763,8 +47579,8 @@
"deprecationReason": null
},
{
- "name": "sisId",
- "description": "an id from the original SIS system",
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
"kind": "SCALAR",
"name": "String",
@@ -34773,11 +47589,35 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "Term",
+ "name": "MessageableUserConnection",
"ofType": null
},
"isDeprecated": false,
@@ -34792,70 +47632,104 @@
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "Quiz",
- "description": null,
- "fields": [
+ "kind": "INPUT_OBJECT",
+ "name": "RejectEnrollmentInvitationInput",
+ "description": "Autogenerated input type of RejectEnrollmentInvitation",
+ "fields": null,
+ "inputFields": [
{
- "name": "_id",
- "description": "legacy canvas id",
- "args": [],
+ "name": "enrollmentUuid",
+ "description": null,
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "String",
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "RejectEnrollmentInvitationPayload",
+ "description": "Autogenerated return type of RejectEnrollmentInvitation.",
+ "fields": [
{
- "name": "anonymousSubmissions",
+ "name": "enrollment",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "Enrollment",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "canUnpublish",
- "description": "Whether the module item can be unpublished",
+ "name": "errors",
+ "description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "createdAt",
+ "name": "success",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "ReorderModuleItemsInput",
+ "description": "Autogenerated input type of ReorderModuleItems",
+ "fields": null,
+ "inputFields": [
{
- "name": "id",
+ "name": "courseId",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
@@ -34865,100 +47739,125 @@
"ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "isLockedByMasterCourse",
+ "name": "itemIds",
"description": null,
- "args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "modules",
+ "name": "moduleId",
"description": null,
- "args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Module",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pointsPossible",
+ "name": "oldModuleId",
"description": null,
- "args": [],
"type": {
"kind": "SCALAR",
- "name": "Float",
+ "name": "ID",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "published",
- "description": "Whether the module item is published",
- "args": [],
+ "name": "targetPosition",
+ "description": null,
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "Int",
"ofType": null
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ReorderModuleItemsPayload",
+ "description": "Autogenerated return type of ReorderModuleItems.",
+ "fields": [
{
- "name": "title",
+ "name": "errors",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "type",
+ "name": "module",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "String",
+ "kind": "OBJECT",
+ "name": "Module",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "updatedAt",
+ "name": "oldModule",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "Module",
"ofType": null
},
"isDeprecated": false,
@@ -34966,109 +47865,58 @@
}
],
"inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "ModuleItemInterface",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- },
- {
- "kind": "INTERFACE",
- "name": "Timestamped",
- "ofType": null
- }
- ],
+ "interfaces": [],
"enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
- "kind": "OBJECT",
- "name": "QuizConnection",
- "description": "The connection type for Quiz.",
- "fields": [
+ "kind": "ENUM",
+ "name": "ReportType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
{
- "name": "edges",
- "description": "A list of edges.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "QuizEdge",
- "ofType": null
- }
- },
+ "name": "inappropriate",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "nodes",
- "description": "A list of nodes.",
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Quiz",
- "ofType": null
- }
- },
+ "name": "offensive",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "pageInfo",
- "description": "Information to aid in pagination.",
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "PageInfo",
- "ofType": null
- }
- },
+ "name": "other",
+ "description": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "QuizEdge",
- "description": "An edge in a connection.",
+ "name": "Requirement",
+ "description": null,
"fields": [
{
- "name": "cursor",
- "description": "A cursor for use in pagination.",
+ "name": "id",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
- "name": "String",
+ "name": "ID",
"ofType": null
}
},
@@ -35076,85 +47924,43 @@
"deprecationReason": null
},
{
- "name": "node",
- "description": "The item at the end of the edge.",
+ "name": "minPercentage",
+ "description": null,
"args": [],
- "type": {
- "kind": "OBJECT",
- "name": "Quiz",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "QuizFilter",
- "description": null,
- "fields": null,
- "inputFields": [
- {
- "name": "userId",
- "description": "only return quizzes for the given user. Defaults to\nthe current user.\n",
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "Float",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "searchTerm",
- "description": "only return quizzes whose title matches this search term\n",
+ "name": "minScore",
+ "description": null,
+ "args": [],
"type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Float",
"ofType": null
},
- "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "QuizItem",
- "description": null,
- "fields": [
+ },
{
- "name": "_id",
+ "name": "score",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "title",
+ "name": "type",
"description": null,
"args": [],
"type": {
@@ -35178,257 +47984,67 @@
"isOneOf": false
},
{
- "kind": "INTERFACE",
- "name": "QuizzesConnectionInterface",
- "description": null,
- "fields": [
+ "kind": "INPUT_OBJECT",
+ "name": "RestoreDeletedDiscussionEntryInput",
+ "description": "Autogenerated input type of RestoreDeletedDiscussionEntry",
+ "fields": null,
+ "inputFields": [
{
- "name": "quizzesConnection",
- "description": "returns a list of quizzes.\n",
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "filter",
- "description": null,
- "type": {
- "kind": "INPUT_OBJECT",
- "name": "QuizFilter",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "name": "discussionEntryId",
+ "description": null,
"type": {
- "kind": "OBJECT",
- "name": "QuizConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
},
+ "defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
}
],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": [
- {
- "kind": "OBJECT",
- "name": "Course",
- "ofType": null
- }
- ],
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "ENUM",
- "name": "RatingInputType",
- "description": null,
- "fields": null,
- "inputFields": null,
"interfaces": null,
- "enumValues": [
- {
- "name": "not_liked",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "liked",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "enumValues": null,
"possibleTypes": null,
"specifiedByURL": null,
"isOneOf": false
},
{
"kind": "OBJECT",
- "name": "Recipients",
- "description": null,
+ "name": "RestoreDeletedDiscussionEntryPayload",
+ "description": "Autogenerated return type of RestoreDeletedDiscussionEntry.",
"fields": [
{
- "name": "contextsConnection",
+ "name": "discussionEntry",
"description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
+ "args": [],
"type": {
"kind": "OBJECT",
- "name": "MessageableContextConnection",
+ "name": "DiscussionEntry",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "sendMessagesAll",
+ "name": "errors",
"description": null,
"args": [],
"type": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "usersConnection",
- "description": null,
- "args": [
- {
- "name": "after",
- "description": "Returns the elements in the list that come after the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "before",
- "description": "Returns the elements in the list that come before the specified cursor.",
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "first",
- "description": "Returns the first _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "last",
- "description": "Returns the last _n_ elements from the list.",
- "type": {
- "kind": "SCALAR",
- "name": "Int",
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
"ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
+ }
}
- ],
- "type": {
- "kind": "OBJECT",
- "name": "MessageableUserConnection",
- "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -35441,37 +48057,6 @@
"specifiedByURL": null,
"isOneOf": false
},
- {
- "kind": "ENUM",
- "name": "ReportType",
- "description": null,
- "fields": null,
- "inputFields": null,
- "interfaces": null,
- "enumValues": [
- {
- "name": "inappropriate",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "offensive",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "other",
- "description": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
{
"kind": "OBJECT",
"name": "Rubric",
@@ -35509,6 +48094,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "canUpdateRubric",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "criteria",
"description": "The different criteria that makes up this rubric\n",
@@ -35813,6 +48414,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "isCurrentUser",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "rubricAssociation",
"description": null,
@@ -36143,6 +48760,38 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "associationId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "associationType",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hideOutcomeResults",
"description": null,
@@ -36589,6 +49238,255 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "SaveRubricAssessmentInput",
+ "description": "Autogenerated input type of SaveRubricAssessment",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "assessmentDetails",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "JSON",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "final",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "gradedAnonymously",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "provisional",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubricAssessmentId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubricAssociationId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "SaveRubricAssessmentPayload",
+ "description": "Autogenerated return type of SaveRubricAssessment.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubricAssessment",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "RubricAssessment",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "rubricAssociation",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "RubricAssociation",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submission",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "ScheduledPost",
+ "description": "A ScheduledPost represents an assignment grade and/or comment posting that is scheduled to be published at a\nspecific time.\n",
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postCommentsAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postGradesAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "Section",
@@ -36712,6 +49610,39 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "gradesPresent",
+ "description": null,
+ "args": [
+ {
+ "name": "assignmentId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "id",
"description": null,
@@ -36971,6 +49902,96 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "SelectProvisionalGradeInput",
+ "description": "Autogenerated input type of SelectProvisionalGrade",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "assignmentId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "provisionalGradeId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "SelectProvisionalGradePayload",
+ "description": "Autogenerated return type of SelectProvisionalGrade.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "provisionalGrade",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ProvisionalGrade",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "ENUM",
"name": "SelfSignupPolicy",
@@ -37024,6 +50045,30 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "postCommentsAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postGradesAt",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "postManually",
"description": null,
@@ -38293,6 +51338,18 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "SCALAR",
+ "name": "StringMap",
+ "description": "A hash with string keys and string values",
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "StudentSummaryAnalytics",
@@ -38364,12 +51421,12 @@
"deprecationReason": null
},
{
- "name": "customGradeStatusId",
+ "name": "cachedDueDate",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
- "name": "ID",
+ "name": "DateTime",
"ofType": null
},
"isDeprecated": false,
@@ -38387,6 +51444,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "deductedPoints",
+ "description": "how many points are being deducted due to late policy",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "enteredGrade",
"description": "the submission grade *before* late policy deductions were applied",
@@ -38447,6 +51516,42 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "late",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "latePolicyStatus",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "ENUM",
+ "name": "LatePolicyStatusType",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "missing",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "publishedGrade",
"description": null,
@@ -38522,6 +51627,18 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "submittedAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
@@ -38536,6 +51653,30 @@
"name": "SubHeader",
"description": null,
"fields": [
+ {
+ "name": "canDuplicate",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "canManageAssignTo",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "canUnpublish",
"description": "Whether the module item can be unpublished",
@@ -38548,6 +51689,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "graded",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "isLockedByMasterCourse",
"description": null,
@@ -38667,6 +51820,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "aiGradeResult",
+ "description": "The AI grading result for the current submission attempt, if any.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AIGradeResult",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "anonymousId",
"description": null,
@@ -38704,9 +51869,13 @@
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -38775,6 +51944,131 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "auditEventsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AuditEventConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "autoGradeEligibility",
+ "description": "Eligibility for auto-grading",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AutoGradeEligibility",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "autoGradeResultPresent",
+ "description": "Indicates whether an auto-grading result exists for the submission.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "autoGradeSubmissionErrors",
+ "description": "Errors related to the submission",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": true,
+ "deprecationReason": "Use autoGradeEligibility instead"
+ },
+ {
+ "name": "autoGradeSubmissionIssues",
+ "description": "Issues related to the submission",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "EligibilityIssue",
+ "ofType": null
+ },
+ "isDeprecated": true,
+ "deprecationReason": "Use autoGradeEligibility instead"
+ },
{
"name": "body",
"description": null,
@@ -38886,12 +52180,40 @@
"defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "includeDraftsFromOthers",
+ "description": "When true and include_draft_comments is true, draft comments from other teachers will be included.\nOnly applies to users with grading permissions (teachers, TAs, etc).\nWhen false, only the current user's draft comments are included.\nStudents never see draft comments from others regardless of this setting.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeProvisionalComments",
+ "description": "When true, provisional comments that the current user has permission to see will be returned.\nThe Moderator has permission to see all provisional comments.\nProvisional Graders can see each other's comments if \"Graders can view each other's comments\" is enabled.\nOtherwise, Provisional Graders can only see their own comments.\nStudents cannot see provisional comments.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "SubmissionCommentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "SubmissionCommentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -39181,6 +52503,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "hasOriginalityReport",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hasPostableComments",
"description": null,
@@ -39197,6 +52535,34 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "hasProvisionalGradeByCurrentUser",
+ "description": "Whether the current user has provided a provisional grade with a non-null score for this submission",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasSubAssignmentSubmissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hasUnreadRubricAssessment",
"description": null,
@@ -39277,6 +52643,79 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "ltiAssetReportsConnection",
+ "description": "Lti Asset Reports with active processors, with assets preloaded",
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "latest",
+ "description": "When true, returns only the asset reports of the latest submission attempt (as students would see them)",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "LtiAssetReportConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "mediaObject",
"description": null,
@@ -39353,6 +52792,67 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "provisionalGradesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ProvisionalGradeConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "proxySubmitter",
"description": null,
@@ -39479,9 +52979,13 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "RubricAssessmentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "RubricAssessmentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -39715,9 +53219,74 @@
"deprecationReason": null
}
],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "SubmissionHistoryConnection",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionQuizHistoriesConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
"type": {
"kind": "OBJECT",
- "name": "SubmissionHistoryConnection",
+ "name": "QuizSubmissionConnection",
"ofType": null
},
"isDeprecated": false,
@@ -39843,6 +53412,26 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "vericiteData",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "VericiteData",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "wordCount",
"description": null,
@@ -39922,15 +53511,19 @@
"description": null,
"args": [],
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
+ "kind": "LIST",
"name": null,
"ofType": {
- "kind": "OBJECT",
- "name": "File",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ }
}
}
},
@@ -39965,6 +53558,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "authorVisibleName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "canReply",
"description": null,
@@ -40085,6 +53690,38 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "provisional",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "publishable",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "read",
"description": null,
@@ -40187,14 +53824,14 @@
},
{
"name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "PageInfo",
+ "name": "TotalCountPageInfo",
"ofType": null
}
},
@@ -40291,6 +53928,26 @@
"defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "status",
+ "description": "Filter comments by status type.\n- ALL: Returns all comments visible to the current user (published + drafts based on permissions)\nWhen set, includeDraftComments, includeDraftsFromOthers and includeProvisionalComments will be ignored.\n",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "SubmissionCommentStatusType",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": "null",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"interfaces": null,
@@ -40299,6 +53956,25 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "ENUM",
+ "name": "SubmissionCommentStatusType",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "ALL",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "ENUM",
"name": "SubmissionCommentsSortOrderType",
@@ -40363,14 +54039,14 @@
},
{
"name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "PageInfo",
+ "name": "TotalCountPageInfo",
"ofType": null
}
},
@@ -40776,6 +54452,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "includePeerReviewSubmissions",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "submittedSince",
"description": null,
@@ -40849,6 +54537,18 @@
"name": "SubmissionHistory",
"description": null,
"fields": [
+ {
+ "name": "aiGradeResult",
+ "description": "The AI grading result for the current submission attempt, if any.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AIGradeResult",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "anonymousId",
"description": null,
@@ -40886,9 +54586,13 @@
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -40957,6 +54661,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "autoGradeResultPresent",
+ "description": "Indicates whether an auto-grading result exists for the submission.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "body",
"description": null,
@@ -41068,12 +54788,40 @@
"defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "includeDraftsFromOthers",
+ "description": "When true and include_draft_comments is true, draft comments from other teachers will be included.\nOnly applies to users with grading permissions (teachers, TAs, etc).\nWhen false, only the current user's draft comments are included.\nStudents never see draft comments from others regardless of this setting.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeProvisionalComments",
+ "description": "When true, provisional comments that the current user has permission to see will be returned.\nThe Moderator has permission to see all provisional comments.\nProvisional Graders can see each other's comments if \"Graders can view each other's comments\" is enabled.\nOtherwise, Provisional Graders can only see their own comments.\nStudents cannot see provisional comments.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "SubmissionCommentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "SubmissionCommentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -41290,6 +55038,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "hasOriginalityReport",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hasPostableComments",
"description": null,
@@ -41306,6 +55070,34 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "hasProvisionalGradeByCurrentUser",
+ "description": "Whether the current user has provided a provisional grade with a non-null score for this submission",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasSubAssignmentSubmissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hasUnreadRubricAssessment",
"description": null,
@@ -41576,9 +55368,13 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "RubricAssessmentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "RubricAssessmentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -41819,6 +55615,26 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "vericiteData",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "VericiteData",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "wordCount",
"description": null,
@@ -42066,6 +55882,18 @@
"name": "SubmissionInterface",
"description": "Types for submission or submission history",
"fields": [
+ {
+ "name": "aiGradeResult",
+ "description": "The AI grading result for the current submission attempt, if any.",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "AIGradeResult",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "anonymousId",
"description": null,
@@ -42103,9 +55931,13 @@
"description": null,
"args": [],
"type": {
- "kind": "OBJECT",
- "name": "Assignment",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Assignment",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -42174,6 +56006,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "autoGradeResultPresent",
+ "description": "Indicates whether an auto-grading result exists for the submission.",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "body",
"description": null,
@@ -42285,12 +56133,40 @@
"defaultValue": "false",
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "includeDraftsFromOthers",
+ "description": "When true and include_draft_comments is true, draft comments from other teachers will be included.\nOnly applies to users with grading permissions (teachers, TAs, etc).\nWhen false, only the current user's draft comments are included.\nStudents never see draft comments from others regardless of this setting.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeProvisionalComments",
+ "description": "When true, provisional comments that the current user has permission to see will be returned.\nThe Moderator has permission to see all provisional comments.\nProvisional Graders can see each other's comments if \"Graders can view each other's comments\" is enabled.\nOtherwise, Provisional Graders can only see their own comments.\nStudents cannot see provisional comments.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "SubmissionCommentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "SubmissionCommentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -42495,6 +56371,22 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "hasOriginalityReport",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hasPostableComments",
"description": null,
@@ -42511,6 +56403,34 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "hasProvisionalGradeByCurrentUser",
+ "description": "Whether the current user has provided a provisional grade with a non-null score for this submission",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasSubAssignmentSubmissions",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "hasUnreadRubricAssessment",
"description": null,
@@ -42765,9 +56685,13 @@
}
],
"type": {
- "kind": "OBJECT",
- "name": "RubricAssessmentConnection",
- "ofType": null
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "RubricAssessmentConnection",
+ "ofType": null
+ }
},
"isDeprecated": false,
"deprecationReason": null
@@ -42996,6 +56920,26 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "vericiteData",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "VericiteData",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "wordCount",
"description": null,
@@ -43093,6 +57037,31 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "ENUM",
+ "name": "SubmissionPostingStatus",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": [
+ {
+ "name": "hideable",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "postable",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "INPUT_OBJECT",
"name": "SubmissionRubricAssessmentFilterInput",
@@ -43101,7 +57070,7 @@
"inputFields": [
{
"name": "forAttempt",
- "description": "What submission attempt the rubric assessment should be returned for. If not\nspecified, it will return the rubric assessment for the current submisssion\nor submission history.\n",
+ "description": "What submission attempt the rubric assessment should be returned for. If not\nspecified, it will return the rubric assessment for the current submission\nor submission history.\n",
"type": {
"kind": "SCALAR",
"name": "Int",
@@ -43110,6 +57079,30 @@
"defaultValue": "null",
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "forAllAttempts",
+ "description": "it will return all rubric assessments for the current submission\nor submission history.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "null",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeProvisionalAssessments",
+ "description": "When true, provisional rubric assessments that the current user has permission to see will be returned.\nThe Moderator has permission to see all provisional rubric assessments.\nProvisional Graders only have permission to view their own provisional rubric assessments.\nDefault behavior is to omit provisional assessments entirely.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"interfaces": null,
@@ -43256,6 +57249,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "postingStatus",
+ "description": "Filter submissions by their posting status. Valid values: postable, hideable.\nIgnored if the current user cannot manage or view all grades for the assignment.\n",
+ "type": {
+ "kind": "ENUM",
+ "name": "SubmissionPostingStatus",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "userSearch",
"description": "The partial name or full ID of the users to match and return in the\nresults list. Must be at least 3 characters.\nQueries by administrative users will search on SIS ID, login ID, name, or email\naddress; non-administrative queries will only be compared against name.\n",
@@ -43280,6 +57285,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "userRepresentativeId",
+ "description": "Return only submissions related to group representative for the user_id\nThere is no character restriction on this field\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "anonymousId",
"description": "Return only submissions related to the given anonymous_id\nThere is no character restriction on this field\n",
@@ -43350,7 +57367,7 @@
{
"kind": "INPUT_OBJECT",
"name": "SubmissionSearchOrder",
- "description": "Specify a sort for the results",
+ "description": "Specify a sort for the results. The 'direction' argument is ignored for 'random' sorts. For sorts of boolean fields, 'true' comes before 'false' for ascending sorts.",
"fields": null,
"inputFields": [
{
@@ -43396,18 +57413,54 @@
"inputFields": null,
"interfaces": null,
"enumValues": [
+ {
+ "name": "group_name",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "username",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "username_first_last",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "test_student",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "needs_grading",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "random",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "score",
"description": null,
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "submission_status",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "submitted_at",
"description": null,
@@ -43468,6 +57521,235 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "OBJECT",
+ "name": "SubmissionStatistics",
+ "description": null,
+ "fields": [
+ {
+ "name": "missingSubmissionsCount",
+ "description": null,
+ "args": [
+ {
+ "name": "onlyCurrentGradingPeriod",
+ "description": "Only count missing submissions from current grading period (default: true)",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsDueCount",
+ "description": null,
+ "args": [
+ {
+ "name": "endDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "startDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsDueThisWeekCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsOverdueCount",
+ "description": null,
+ "args": [
+ {
+ "name": "endDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "startDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submissionsSubmittedCount",
+ "description": null,
+ "args": [
+ {
+ "name": "endDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "startDate",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submittedAndGradedCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submittedNotGradedCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "submittedSubmissionsCount",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "ENUM",
"name": "SubmissionStatusTagType",
@@ -43525,6 +57807,12 @@
"inputFields": null,
"interfaces": null,
"enumValues": [
+ {
+ "name": "ams",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "attendance",
"description": null,
@@ -43597,6 +57885,12 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "peer_review",
+ "description": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "student_annotation",
"description": null,
@@ -43990,6 +58284,16 @@
"name": "AccountDomainLookup",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "AccountNotification",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "AllocationRule",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "AssessmentRequest",
@@ -44010,6 +58314,11 @@
"name": "AssignmentOverride",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "AuditEvent",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "CommentBankItem",
@@ -44040,11 +58349,6 @@
"name": "DiscussionEntry",
"ofType": null
},
- {
- "kind": "OBJECT",
- "name": "DiscussionEntryDraft",
- "ofType": null
- },
{
"kind": "OBJECT",
"name": "DiscussionEntryVersion",
@@ -44070,6 +58374,11 @@
"name": "File",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "Folder",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "GradingPeriod",
@@ -44120,6 +58429,11 @@
"name": "ModuleItem",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "ModuleProgression",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "Notification",
@@ -44145,6 +58459,11 @@
"name": "Page",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "PeerReviewSubAssignment",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "Progress",
@@ -44155,6 +58474,11 @@
"name": "Quiz",
"ofType": null
},
+ {
+ "kind": "OBJECT",
+ "name": "QuizSubmission",
+ "ofType": null
+ },
{
"kind": "OBJECT",
"name": "Section",
@@ -44184,6 +58508,87 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "OBJECT",
+ "name": "TotalCountPageInfo",
+ "description": "Information about pagination in a connection.",
+ "fields": [
+ {
+ "name": "endCursor",
+ "description": "When paginating forwards, the cursor to continue.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasNextPage",
+ "description": "When paginating forwards, are there more items?",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasPreviousPage",
+ "description": "When paginating backwards, are there more items?",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "startCursor",
+ "description": "When paginating backwards, the cursor to continue.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "totalCount",
+ "description": "Total number of items in the connection, ignoring pagination.",
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "UNION",
"name": "TurnitinContext",
@@ -44212,6 +58617,22 @@
"name": "TurnitinData",
"description": null,
"fields": [
+ {
+ "name": "assetString",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "reportUrl",
"description": null,
@@ -44406,6 +58827,204 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateAllocationRuleInput",
+ "description": "Autogenerated input type of UpdateAllocationRule",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "appliesToAssessor",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assesseeIds",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assessorIds",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "mustReview",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reciprocal",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "false",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reviewPermitted",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "ruleId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "UpdateAllocationRulePayload",
+ "description": "Autogenerated return type of UpdateAllocationRule.",
+ "fields": [
+ {
+ "name": "allocationErrors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AllocationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "allocationRules",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "AllocationRule",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "INPUT_OBJECT",
"name": "UpdateAssignmentInput",
@@ -44526,7 +59145,7 @@
},
{
"name": "forCheckpoints",
- "description": null,
+ "description": "if true, this assignment is a parent assignment for checkpoints. cannot set points_possible, due_at, lock_at, or unlock_at",
"type": {
"kind": "SCALAR",
"name": "Boolean",
@@ -44744,6 +59363,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "suppressAssignment",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "unlockAt",
"description": null,
@@ -45204,6 +59835,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "pinType",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionEntryPinningType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "quotedEntryId",
"description": null,
@@ -45363,205 +60006,17 @@
},
{
"kind": "OBJECT",
- "name": "UpdateDiscussionEntryPayload",
- "description": "Autogenerated return type of UpdateDiscussionEntry.",
- "fields": [
- {
- "name": "discussionEntry",
- "description": null,
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "DiscussionEntry",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionExpandedInput",
- "description": "Autogenerated input type of UpdateDiscussionExpanded",
- "fields": null,
- "inputFields": [
- {
- "name": "discussionTopicId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "expanded",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "UpdateDiscussionExpandedPayload",
- "description": "Autogenerated return type of UpdateDiscussionExpanded.",
- "fields": [
- {
- "name": "discussionTopic",
- "description": null,
- "args": [],
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "errors",
- "description": null,
- "args": [],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "ValidationError",
- "ofType": null
- }
- }
- },
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionReadStateInput",
- "description": "Autogenerated input type of UpdateDiscussionReadState",
- "fields": null,
- "inputFields": [
- {
- "name": "discussionTopicId",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "read",
- "description": null,
- "type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "Boolean",
- "ofType": null
- }
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
- }
- ],
- "interfaces": null,
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "UpdateDiscussionReadStatePayload",
- "description": "Autogenerated return type of UpdateDiscussionReadState.",
+ "name": "UpdateDiscussionEntryPayload",
+ "description": "Autogenerated return type of UpdateDiscussionEntry.",
"fields": [
{
- "name": "discussionTopic",
+ "name": "discussionEntry",
"description": null,
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "OBJECT",
- "name": "Discussion",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "DiscussionEntry",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
@@ -45596,8 +60051,8 @@
},
{
"kind": "INPUT_OBJECT",
- "name": "UpdateDiscussionSortOrderInput",
- "description": "Autogenerated input type of UpdateDiscussionSortOrder",
+ "name": "UpdateDiscussionReadStateInput",
+ "description": "Autogenerated input type of UpdateDiscussionReadState",
"fields": null,
"inputFields": [
{
@@ -45617,14 +60072,14 @@
"deprecationReason": null
},
{
- "name": "sortOrder",
+ "name": "read",
"description": null,
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "ENUM",
- "name": "DiscussionSortOrderType",
+ "kind": "SCALAR",
+ "name": "Boolean",
"ofType": null
}
},
@@ -45641,8 +60096,8 @@
},
{
"kind": "OBJECT",
- "name": "UpdateDiscussionSortOrderPayload",
- "description": "Autogenerated return type of UpdateDiscussionSortOrder.",
+ "name": "UpdateDiscussionReadStatePayload",
+ "description": "Autogenerated return type of UpdateDiscussionReadState.",
"fields": [
{
"name": "discussionTopic",
@@ -46163,6 +60618,156 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateDiscussionTopicParticipantInput",
+ "description": "Autogenerated input type of UpdateDiscussionTopicParticipant",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "discussionTopicId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "expanded",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "hasUnreadPinnedEntry",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "preferredLanguage",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "PreferredLanguageType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "showPinnedEntries",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sortOrder",
+ "description": null,
+ "type": {
+ "kind": "ENUM",
+ "name": "DiscussionSortOrderType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "summaryEnabled",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "UpdateDiscussionTopicParticipantPayload",
+ "description": "Autogenerated return type of UpdateDiscussionTopicParticipant.",
+ "fields": [
+ {
+ "name": "discussionTopic",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Discussion",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "UpdateDiscussionTopicPayload",
@@ -46416,6 +61021,84 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateLearnerDashboardTabSelectionInput",
+ "description": "Autogenerated input type of UpdateLearnerDashboardTabSelection",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "tab",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "LearnerDashboardTabType",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "UpdateLearnerDashboardTabSelectionPayload",
+ "description": "Autogenerated return type of UpdateLearnerDashboardTabSelection.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "tab",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "LearnerDashboardTabType",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "INPUT_OBJECT",
"name": "UpdateLearningOutcomeGroupInput",
@@ -48184,6 +62867,182 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateWidgetDashboardConfigInput",
+ "description": "Autogenerated input type of UpdateWidgetDashboardConfig",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "filters",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "JSON",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "widgetId",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "UpdateWidgetDashboardConfigPayload",
+ "description": "Autogenerated return type of UpdateWidgetDashboardConfig.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filters",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "JSON",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "widgetId",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "UpdateWidgetDashboardLayoutInput",
+ "description": "Autogenerated input type of UpdateWidgetDashboardLayout",
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "layout",
+ "description": null,
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "UpdateWidgetDashboardLayoutPayload",
+ "description": "Autogenerated return type of UpdateWidgetDashboardLayout.",
+ "fields": [
+ {
+ "name": "errors",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "ValidationError",
+ "ofType": null
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "layout",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "INPUT_OBJECT",
"name": "UpsertCustomGradeStatusInput",
@@ -48460,54 +63319,305 @@
},
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "inputFields": null,
- "interfaces": [
- {
- "kind": "INTERFACE",
- "name": "LegacyIDInterface",
- "ofType": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [
+ {
+ "kind": "INTERFACE",
+ "name": "LegacyIDInterface",
+ "ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "Node",
+ "ofType": null
+ }
+ ],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "User",
+ "description": null,
+ "fields": [
+ {
+ "name": "_id",
+ "description": "legacy canvas id",
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "activityStream",
+ "description": null,
+ "args": [
+ {
+ "name": "onlyActiveCourses",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ActivityStream",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "avatarUrl",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "URL",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "commentBankItemsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "query",
+ "description": "Only include comments that match the query string.\n",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "assignmentId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "CommentBankItemConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "conversationsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "scope",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "showHorizonConversations",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "ConversationParticipantConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
},
{
- "kind": "INTERFACE",
- "name": "Node",
- "ofType": null
- }
- ],
- "enumValues": null,
- "possibleTypes": null,
- "specifiedByURL": null,
- "isOneOf": false
- },
- {
- "kind": "OBJECT",
- "name": "User",
- "description": null,
- "fields": [
- {
- "name": "_id",
- "description": "legacy canvas id",
+ "name": "courseProgression",
+ "description": "Returns null if either of these conditions are met:\n* the course is not module based\n* no module in it has completion requirements\n* the queried user is not a student in the course\n* insufficient permissions for the request\n",
"args": [],
"type": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "ID",
- "ofType": null
- }
+ "kind": "OBJECT",
+ "name": "CourseProgression",
+ "ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "activityStream",
+ "name": "courseRoles",
"description": null,
"args": [
{
- "name": "onlyActiveCourses",
- "description": null,
+ "name": "builtInOnly",
+ "description": "Only return default/built_in roles",
"type": {
"kind": "SCALAR",
"name": "Boolean",
@@ -48516,31 +63626,59 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": null,
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "roleTypes",
+ "description": "Return only requested base role types",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
- "kind": "OBJECT",
- "name": "ActivityStream",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "avatarUrl",
- "description": null,
- "args": [],
- "type": {
- "kind": "SCALAR",
- "name": "URL",
- "ofType": null
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "commentBankItemsConnection",
- "description": null,
+ "name": "courseWorkSubmissionsConnection",
+ "description": "All actionable submissions for the current user across enrolled courses, for course work widget",
"args": [
{
"name": "after",
@@ -48591,8 +63729,8 @@
"deprecationReason": null
},
{
- "name": "query",
- "description": "Only include comments that match the query string.\n",
+ "name": "courseFilter",
+ "description": null,
"type": {
"kind": "SCALAR",
"name": "String",
@@ -48603,11 +63741,95 @@
"deprecationReason": null
},
{
- "name": "limit",
- "description": null,
+ "name": "endDate",
+ "description": "End date for due date range filter",
"type": {
"kind": "SCALAR",
- "name": "Int",
+ "name": "ISO8601DateTime",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeNoDueDate",
+ "description": "Include assignments with no due date",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "includeOverdue",
+ "description": "Include overdue assignments",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "observedUserId",
+ "description": "ID of the observed user",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlyCurrentGradingPeriod",
+ "description": "Only include missing submissions from current grading period (default: true)",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": "true",
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "onlySubmitted",
+ "description": "Show only submitted assignments",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": "Field to order results by",
+ "type": {
+ "kind": "ENUM",
+ "name": "CourseWorkSubmissionsOrderField",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "startDate",
+ "description": "Start date for due date range filter",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ISO8601DateTime",
"ofType": null
},
"defaultValue": null,
@@ -48617,14 +63839,26 @@
],
"type": {
"kind": "OBJECT",
- "name": "CommentBankItemConnection",
+ "name": "SubmissionConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "conversationsConnection",
+ "name": "createdAt",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "DateTime",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "differentiationTagsConnection",
"description": null,
"args": [
{
@@ -48676,68 +63910,40 @@
"deprecationReason": null
},
{
- "name": "filter",
+ "name": "courseId",
"description": null,
"type": {
- "kind": "LIST",
+ "kind": "NON_NULL",
"name": null,
"ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
}
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- },
- {
- "name": "scope",
- "description": null,
- "type": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- },
- "defaultValue": null,
- "isDeprecated": false,
- "deprecationReason": null
}
],
"type": {
"kind": "OBJECT",
- "name": "ConversationParticipantConnection",
- "ofType": null
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "courseProgression",
- "description": "Returns null if either of these conditions are met:\n* the course is not module based\n* no module in it has completion requirements\n* the queried user is not a student in the course\n* insufficient permissions for the request\n",
- "args": [],
- "type": {
- "kind": "OBJECT",
- "name": "CourseProgression",
+ "name": "GroupMembershipConnection",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
- "name": "courseRoles",
- "description": null,
+ "name": "discussionParticipantsConnection",
+ "description": "All discussion topic participants for the user, optionally filtered by announcement status",
"args": [
{
- "name": "builtInOnly",
- "description": "Only return default/built_in roles",
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
"type": {
"kind": "SCALAR",
- "name": "Boolean",
+ "name": "String",
"ofType": null
},
"defaultValue": null,
@@ -48745,8 +63951,8 @@
"deprecationReason": null
},
{
- "name": "courseId",
- "description": null,
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
"type": {
"kind": "SCALAR",
"name": "String",
@@ -48757,49 +63963,57 @@
"deprecationReason": null
},
{
- "name": "roleTypes",
- "description": "Return only requested base role types",
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
"type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
- "kind": "SCALAR",
- "name": "String",
- "ofType": null
- }
- }
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
},
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
- }
- ],
- "type": {
- "kind": "LIST",
- "name": null,
- "ofType": {
- "kind": "NON_NULL",
- "name": null,
- "ofType": {
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
"kind": "SCALAR",
- "name": "String",
+ "name": "Int",
"ofType": null
- }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "DiscussionParticipantFilter",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "observedUserId",
+ "description": "ID of the observed user",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
- },
- "isDeprecated": false,
- "deprecationReason": null
- },
- {
- "name": "createdAt",
- "description": null,
- "args": [],
+ ],
"type": {
- "kind": "SCALAR",
- "name": "DateTime",
+ "kind": "OBJECT",
+ "name": "DiscussionParticipantConnection",
"ofType": null
},
"isDeprecated": false,
@@ -48837,6 +64051,18 @@
"name": "enrollments",
"description": null,
"args": [
+ {
+ "name": "careerLearningLibraryOnly",
+ "description": "Whether or not to only filter for or exclude Canvas Career learning library only courses",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "courseId",
"description": "only return enrollments for this course",
@@ -48904,6 +64130,18 @@
"defaultValue": null,
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "sort",
+ "description": "The sort field and direction for the results. Secondary sort is by section name",
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "EnrollmentsSortInputType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"type": {
@@ -48926,6 +64164,187 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "enrollmentsConnection",
+ "description": null,
+ "args": [
+ {
+ "name": "after",
+ "description": "Returns the elements in the list that come after the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "before",
+ "description": "Returns the elements in the list that come before the specified cursor.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "first",
+ "description": "Returns the first _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "last",
+ "description": "Returns the last _n_ elements from the list.",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseId",
+ "description": "only return enrollments for this course",
+ "type": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "courseIds",
+ "description": "only return enrollments for these courses",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "currentOnly",
+ "description": "Whether or not to restrict results to `active` enrollments in `available` courses",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "enrollmentTypes",
+ "description": "Filter by enrollment types (e.g., TeacherEnrollment, TaEnrollment)",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "EnrollmentType",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "excludeConcluded",
+ "description": "Whether or not to exclude `completed` enrollments",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "horizonCourses",
+ "description": "Whether or not to include or exclude Canvas Career courses",
+ "type": {
+ "kind": "SCALAR",
+ "name": "Boolean",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "orderBy",
+ "description": "The fields to order the results by",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "sort",
+ "description": "The sort field and direction for the results. Secondary sort is by section name",
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "EnrollmentsSortInputType",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "OBJECT",
+ "name": "EnrollmentConnection",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "favoriteCoursesConnection",
"description": null,
@@ -49072,6 +64491,55 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "firstName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupMemberships",
+ "description": null,
+ "args": [
+ {
+ "name": "filter",
+ "description": null,
+ "type": {
+ "kind": "INPUT_OBJECT",
+ "name": "UserGroupMembershipsFilterInput",
+ "ofType": null
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "GroupMembership",
+ "ofType": null
+ }
+ }
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "groups",
"description": "**NOTE**: this only returns groups for the currently logged-in user.\n",
@@ -49189,6 +64657,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "lastName",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "loginId",
"description": null,
@@ -49282,6 +64762,18 @@
"isDeprecated": false,
"deprecationReason": null
},
+ {
+ "name": "peerReviewStatus",
+ "description": "Peer review status for assignments where peer reviews are enabled",
+ "args": [],
+ "type": {
+ "kind": "OBJECT",
+ "name": "PeerReviewStatus",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
{
"name": "pronouns",
"description": null,
@@ -49630,6 +65122,18 @@
},
"isDeprecated": false,
"deprecationReason": null
+ },
+ {
+ "name": "widgetDashboardConfig",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
}
],
"inputFields": null,
@@ -49694,14 +65198,14 @@
},
{
"name": "pageInfo",
- "description": "Information to aid in pagination.",
+ "description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "OBJECT",
- "name": "PageInfo",
+ "name": "TotalCountPageInfo",
"ofType": null
}
},
@@ -49757,6 +65261,79 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "INPUT_OBJECT",
+ "name": "UserGroupMembershipsFilterInput",
+ "description": null,
+ "fields": null,
+ "inputFields": [
+ {
+ "name": "groupCourseId",
+ "description": "Only return group memberships in the specified group course ids",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "groupState",
+ "description": "Only return group memberships with the specified group workflow states",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "GroupState",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
+ "description": "Only return group memberships with the specified workflow states",
+ "type": {
+ "kind": "LIST",
+ "name": null,
+ "ofType": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "GroupMembershipState",
+ "ofType": null
+ }
+ }
+ },
+ "defaultValue": null,
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "ValidationError",
@@ -49798,6 +65375,122 @@
"specifiedByURL": null,
"isOneOf": false
},
+ {
+ "kind": "UNION",
+ "name": "VericiteContext",
+ "description": null,
+ "fields": null,
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "File",
+ "ofType": null
+ },
+ {
+ "kind": "OBJECT",
+ "name": "Submission",
+ "ofType": null
+ }
+ ],
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
+ {
+ "kind": "OBJECT",
+ "name": "VericiteData",
+ "description": null,
+ "fields": [
+ {
+ "name": "assetString",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "reportUrl",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "score",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "Float",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "state",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "status",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "target",
+ "description": null,
+ "args": [],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "UNION",
+ "name": "VericiteContext",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": [],
+ "enumValues": null,
+ "possibleTypes": null,
+ "specifiedByURL": null,
+ "isOneOf": false
+ },
{
"kind": "OBJECT",
"name": "__Directive",
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/DiscussionAPI.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/DiscussionAPI.kt
index eef2d1c8a9..0d47220e3b 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/DiscussionAPI.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/DiscussionAPI.kt
@@ -100,6 +100,9 @@ object DiscussionAPI {
@PUT("{contextType}/{contextId}/discussion_topics/{topicId}/read")
suspend fun markDiscussionTopicRead(@Path("contextType") contextType: String, @Path("contextId") contextId: Long, @Path("topicId") topicId: Long, @Tag params: RestParams): DataResult
+ @PUT("{contextType}/{contextId}/discussion_topics/{topicId}/read_all")
+ suspend fun markAllDiscussionTopicEntriesRead(@Path("contextType") contextType: String, @Path("contextId") contextId: Long, @Path("topicId") topicId: Long, @Tag params: RestParams): DataResult
+
@PUT("{contextType}/{contextId}/discussion_topics/{topicId}/entries/{entryId}/read")
suspend fun markDiscussionTopicEntryRead(@Path("contextType") contextType: String, @Path("contextId") contextId: Long, @Path("topicId") topicId: Long, @Path("entryId") entryId: Long, @Tag params: RestParams): DataResult
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/JourneyAssistAPI.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/JourneyAssistAPI.kt
index 94f6076ab9..17b9f3031d 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/JourneyAssistAPI.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/JourneyAssistAPI.kt
@@ -4,10 +4,12 @@ import com.instructure.canvasapi2.models.journey.assist.JourneyAssistRequestBody
import com.instructure.canvasapi2.models.journey.assist.JourneyAssistResponse
import retrofit2.http.Body
import retrofit2.http.POST
+import retrofit2.http.Query
interface JourneyAssistAPI {
@POST("assist")
suspend fun answerPrompt(
@Body body: JourneyAssistRequestBody,
+ @Query("studyToolsOnly") studyToolsOnly: Boolean
): JourneyAssistResponse
}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/OAuthAPI.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/OAuthAPI.kt
index c3954d392f..195776578c 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/OAuthAPI.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/OAuthAPI.kt
@@ -22,6 +22,7 @@ import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.models.AuthenticatedSession
import com.instructure.canvasapi2.models.OAuthTokenResponse
import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.canvasapi2.utils.DataResult
import com.instructure.canvasapi2.utils.dataResult
import retrofit2.Call
@@ -51,10 +52,10 @@ object OAuthAPI {
@Field("grant_type") grantType: String = "authorization_code"): Call
@GET("/login/session_token")
- fun getAuthenticatedSession(@Query("return_to") targetUrl: String): Call
+ fun getAuthenticatedSession(@Query("return_to") targetUrl: String, @Query("mobile_consent") mobileConsent: Boolean = ConsentPrefs.currentUserConsent == true): Call
@GET("/login/session_token")
- suspend fun getAuthenticatedSession(@Query("return_to") targetUrl: String, @Tag params: RestParams): DataResult
+ suspend fun getAuthenticatedSession(@Query("return_to") targetUrl: String, @Tag params: RestParams, @Query("mobile_consent") mobileConsent: Boolean = ConsentPrefs.currentUserConsent == true): DataResult
@GET("/api/v1/login/session_token")
fun getAuthenticatedSessionMasquerading(@Query("return_to") targetUrl: String, @Query("as_user_id") userId: Long): Call
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/UserAPI.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/UserAPI.kt
index f3df8c9608..0be44f507d 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/UserAPI.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/apis/UserAPI.kt
@@ -73,6 +73,9 @@ object UserAPI {
@GET("users/self/settings")
fun getSelfSettings(): Call
+ @GET("users/self/settings?include[]=mobile_settings")
+ suspend fun getSelfMobileSettings(@Tag params: RestParams): DataResult
+
@GET("users/self/features")
fun getSelfFeatures(): Call>
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/ApiModule.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/ApiModule.kt
index c9540cdeeb..c56df054aa 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/ApiModule.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/ApiModule.kt
@@ -72,6 +72,7 @@ import com.instructure.canvasapi2.managers.ToDoManager
import com.instructure.canvasapi2.managers.UserManager
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.canvasapi2.utils.CanvasAuthenticator
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.canvasapi2.utils.JourneyApiPref
import com.instructure.canvasapi2.utils.pageview.PandataApi
import dagger.Module
@@ -168,6 +169,12 @@ class ApiModule {
return ApiPrefs
}
+ @Provides
+ @Singleton
+ fun provideConsentPrefs(): ConsentPrefs {
+ return ConsentPrefs
+ }
+
@Provides
@Singleton
fun providePlannerApi(): PlannerAPI {
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/GraphQlApiModule.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/GraphQlApiModule.kt
index a624cd9b55..4df43c07af 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/GraphQlApiModule.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/di/GraphQlApiModule.kt
@@ -29,6 +29,8 @@ import com.instructure.canvasapi2.managers.SubmissionRubricManager
import com.instructure.canvasapi2.managers.SubmissionRubricManagerImpl
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManagerImpl
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManager
+import com.instructure.canvasapi2.managers.graphql.DashboardCoursesManagerImpl
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManagerImpl
import com.instructure.canvasapi2.managers.graphql.SubmissionContentManager
@@ -106,4 +108,9 @@ class GraphQlApiModule {
fun provideRecentGradedSubmissionsManager(@DefaultApolloClient apolloClient: ApolloClient): RecentGradedSubmissionsManager {
return RecentGradedSubmissionsManagerImpl(apolloClient)
}
+
+ @Provides
+ fun provideDashboardCoursesManager(@DefaultApolloClient apolloClient: ApolloClient): DashboardCoursesManager {
+ return DashboardCoursesManagerImpl(apolloClient)
+ }
}
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/SubmissionRubricManagerImpl.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/SubmissionRubricManagerImpl.kt
index d193825c13..c156aff7ee 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/SubmissionRubricManagerImpl.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/SubmissionRubricManagerImpl.kt
@@ -44,11 +44,13 @@ class SubmissionRubricManagerImpl(private val apolloClient: ApolloClient) : Subm
}
return data.copy(
- submission = data.submission?.copy(
- rubricAssessmentsConnection = data.submission?.rubricAssessmentsConnection?.copy(
- edges = assessments
+ submission = data.submission?.let { submission ->
+ submission.copy(
+ rubricAssessmentsConnection = submission.rubricAssessmentsConnection.copy(
+ edges = assessments
+ )
)
- )
+ }
)
}
}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/DashboardCoursesManager.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/DashboardCoursesManager.kt
new file mode 100644
index 0000000000..0b11abe5d6
--- /dev/null
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/DashboardCoursesManager.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.canvasapi2.managers.graphql
+
+import com.instructure.canvasapi2.CourseAnnouncementsQuery
+import com.instructure.canvasapi2.DashboardCoursesQuery
+import com.instructure.canvasapi2.DashboardSingleCourseQuery
+
+interface DashboardCoursesManager {
+
+ suspend fun getDashboardCourses(
+ forceNetwork: Boolean = true
+ ): DashboardCoursesQuery.Data
+
+ suspend fun getSingleCourse(
+ courseId: Long,
+ forceNetwork: Boolean = true
+ ): DashboardSingleCourseQuery.Data
+
+ suspend fun getCourseAnnouncements(
+ courseId: Long,
+ cursor: String? = null,
+ forceNetwork: Boolean = true
+ ): CourseAnnouncementsQuery.Data
+}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/DashboardCoursesManagerImpl.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/DashboardCoursesManagerImpl.kt
new file mode 100644
index 0000000000..b55e135119
--- /dev/null
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/DashboardCoursesManagerImpl.kt
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.canvasapi2.managers.graphql
+
+import com.apollographql.apollo.ApolloClient
+import com.apollographql.apollo.api.Optional
+import com.instructure.canvasapi2.CourseAnnouncementsQuery
+import com.instructure.canvasapi2.DashboardCoursesQuery
+import com.instructure.canvasapi2.DashboardSingleCourseQuery
+import com.instructure.canvasapi2.QLClientConfig
+import com.instructure.canvasapi2.enqueueQuery
+
+class DashboardCoursesManagerImpl(
+ private val apolloClient: ApolloClient
+) : DashboardCoursesManager {
+
+ override suspend fun getDashboardCourses(
+ forceNetwork: Boolean
+ ): DashboardCoursesQuery.Data {
+ val query = DashboardCoursesQuery(pageSize = QLClientConfig.GRAPHQL_PAGE_SIZE)
+ return apolloClient.enqueueQuery(query, forceNetwork = forceNetwork).dataAssertNoErrors
+ }
+
+ override suspend fun getSingleCourse(
+ courseId: Long,
+ forceNetwork: Boolean
+ ): DashboardSingleCourseQuery.Data {
+ val query = DashboardSingleCourseQuery(courseId = courseId.toString())
+ return apolloClient.enqueueQuery(query, forceNetwork = forceNetwork).dataAssertNoErrors
+ }
+
+ override suspend fun getCourseAnnouncements(
+ courseId: Long,
+ cursor: String?,
+ forceNetwork: Boolean
+ ): CourseAnnouncementsQuery.Data {
+ val pageSize = QLClientConfig.GRAPHQL_PAGE_SIZE
+ val initialCursor = if (cursor != null) Optional.present(cursor) else Optional.absent()
+ val query = CourseAnnouncementsQuery(
+ courseId = courseId.toString(),
+ pageSize = pageSize,
+ cursor = initialCursor
+ )
+ val initialData = apolloClient.enqueueQuery(query, forceNetwork = forceNetwork).dataAssertNoErrors
+
+ val course = initialData.course?.onCourse ?: return initialData
+ val allNodes = course.announcements?.nodes?.toMutableList() ?: mutableListOf()
+ var hasNextPage = course.announcements?.pageInfo?.hasNextPage == true
+ var nextCursor = course.announcements?.pageInfo?.endCursor
+
+ while (hasNextPage) {
+ val paginatedQuery = CourseAnnouncementsQuery(
+ courseId = courseId.toString(),
+ pageSize = pageSize,
+ cursor = Optional.present(nextCursor)
+ )
+ val paginatedData = apolloClient.enqueueQuery(paginatedQuery, forceNetwork = forceNetwork).dataAssertNoErrors
+ val paginatedCourse = paginatedData.course?.onCourse
+
+ paginatedCourse?.announcements?.nodes?.let { allNodes.addAll(it) }
+ hasNextPage = paginatedCourse?.announcements?.pageInfo?.hasNextPage == true
+ nextCursor = paginatedCourse?.announcements?.pageInfo?.endCursor
+ }
+
+ return CourseAnnouncementsQuery.Data(
+ course = CourseAnnouncementsQuery.Course(
+ __typename = "Course",
+ onCourse = course.copy(
+ announcements = course.announcements?.copy(nodes = allNodes)
+ )
+ )
+ )
+ }
+}
\ No newline at end of file
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionContentManagerImpl.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionContentManagerImpl.kt
index 4071a64367..928a714d32 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionContentManagerImpl.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionContentManagerImpl.kt
@@ -52,11 +52,13 @@ class SubmissionContentManagerImpl(private val apolloClient: ApolloClient) : Sub
}
return data.copy(
- submission = data.submission?.copy(
- submissionHistoriesConnection = data.submission.submissionHistoriesConnection?.copy(
- edges = allEdges
+ submission = data.submission?.let { submission ->
+ submission.copy(
+ submissionHistoriesConnection = submission.submissionHistoriesConnection.copy(
+ edges = allEdges
+ )
)
- )
+ }
)
}
}
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionGradeManagerImpl.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionGradeManagerImpl.kt
index 7454156a16..3a84925995 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionGradeManagerImpl.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/managers/graphql/SubmissionGradeManagerImpl.kt
@@ -44,16 +44,22 @@ class SubmissionGradeManagerImpl(private val apolloClient: ApolloClient) : Submi
submission = data
} else {
submission = submission.copy(
- submission = submission.submission?.copy(
- assignment = submission.submission.assignment?.copy(
- course = submission.submission.assignment.course?.copy(
- customGradeStatusesConnection = submission.submission.assignment.course.customGradeStatusesConnection?.copy(
- edges = submission.submission.assignment.course.customGradeStatusesConnection.edges.orEmpty() +
- data.submission?.assignment?.course?.customGradeStatusesConnection?.edges.orEmpty()
+ submission = submission.submission?.let { sub ->
+ sub.copy(
+ assignment = sub.assignment.let { assignment ->
+ assignment.copy(
+ course = assignment.course?.let { course ->
+ course.copy(
+ customGradeStatusesConnection = course.customGradeStatusesConnection?.copy(
+ edges = course.customGradeStatusesConnection.edges.orEmpty() +
+ data.submission?.assignment?.course?.customGradeStatusesConnection?.edges.orEmpty()
+ )
+ )
+ }
)
- )
+ }
)
- )
+ }
)
}
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/models/UserSettings.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/models/UserSettings.kt
index 9be64f3e36..9f3abcf4b9 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/models/UserSettings.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/models/UserSettings.kt
@@ -10,5 +10,19 @@ data class UserSettings(
@SerializedName("hide_dashcard_color_overlays")
val hideDashCardColorOverlays: Boolean = false,
@SerializedName("comment_library_suggestions_enabled")
- val commentLibrarySuggestions: Boolean = false
-)
+ val commentLibrarySuggestions: Boolean = false,
+ @SerializedName("usage_metrics")
+ val usageMetrics: String? = null,
+ @SerializedName("pendo_mobile_student_api_key")
+ val pendoMobileStudentApiKey: String? = null,
+ @SerializedName("pendo_mobile_teacher_api_key")
+ val pendoMobileTeacherApiKey: String? = null,
+ @SerializedName("pendo_mobile_parent_api_key")
+ val pendoMobileParentApiKey: String? = null
+) {
+ companion object {
+ const val USAGE_METRICS_TRACK = "track_usage"
+ const val USAGE_METRICS_NO_TRACK = "no_track_usage"
+ const val USAGE_METRICS_ASK_FOR_CONSENT = "ask_for_consent"
+ }
+}
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/Analytics.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/Analytics.kt
index 6c3b3639b3..4d80019f3a 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/Analytics.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/Analytics.kt
@@ -23,6 +23,7 @@ import sdk.pendo.io.Pendo
object Analytics {
fun logEvent(eventName: String, bundle: Bundle? = null) {
+ if (ConsentPrefs.currentUserConsent != true) return
val map = bundle?.let { bundle ->
bundle.keySet()
.filterNotNull()
@@ -35,6 +36,7 @@ object Analytics {
}
fun logEvent(eventName: String) {
+ if (ConsentPrefs.currentUserConsent != true) return
Pendo.track(eventName, emptyMap())
}
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/ConsentPrefs.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/ConsentPrefs.kt
new file mode 100644
index 0000000000..52c35df52d
--- /dev/null
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/ConsentPrefs.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.instructure.canvasapi2.utils
+
+object ConsentPrefs : PrefManager("consent-prefs") {
+
+ private var consentMap: HashMap by BooleanMapPref()
+
+ fun getConsent(userId: Long, domain: String): Boolean? = consentMap["$domain:$userId"]
+
+ fun setConsent(userId: Long, domain: String, consent: Boolean) {
+ consentMap = HashMap(consentMap).apply { put("$domain:$userId", consent) }
+ }
+
+ fun removeConsent(userId: Long, domain: String) {
+ consentMap = HashMap(consentMap).apply { remove("$domain:$userId") }
+ }
+
+ val currentUserConsent: Boolean?
+ get() {
+ val userId = ApiPrefs.user?.id ?: return null
+ val domain = ApiPrefs.domain.takeIf { it.isNotBlank() } ?: return null
+ return getConsent(userId, domain)
+ }
+}
diff --git a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/RemoteConfigUtils.kt b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/RemoteConfigUtils.kt
index d756d93e8f..e573bfd33d 100644
--- a/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/RemoteConfigUtils.kt
+++ b/libs/canvas-api-2/src/main/java/com/instructure/canvasapi2/utils/RemoteConfigUtils.kt
@@ -19,7 +19,8 @@ enum class RemoteConfigParam(val rc_name: String, val safeValueAsString: String)
SPEEDGRADER_V2("speedgrader_v2", "true"),
TODO_REDESIGN("todo_redesign", "true"),
DASHBOARD_REDESIGN("dashboard_redesign", "false"),
- DASHBOARD_FEEDBACK_URL("dashboard_feedback_url", "")
+ DASHBOARD_FEEDBACK_URL("dashboard_feedback_url", ""),
+ NEXT_GEN_CANVAS("next_gen_canvas", "false")
}
/**
diff --git a/libs/horizon/build.gradle.kts b/libs/horizon/build.gradle.kts
index 41d8a6056d..8706047eff 100644
--- a/libs/horizon/build.gradle.kts
+++ b/libs/horizon/build.gradle.kts
@@ -65,6 +65,7 @@ android {
dependencies {
implementation(project(":pandautils"))
+ implementation(project(":login-api-2"))
implementation(Libs.NAVIGATION_COMPOSE)
implementation(Libs.HILT)
diff --git a/libs/horizon/src/androidTest/java/com/instructure/horizon/espresso/TestModule.kt b/libs/horizon/src/androidTest/java/com/instructure/horizon/espresso/TestModule.kt
index ab583dc9d8..ac45e496ac 100644
--- a/libs/horizon/src/androidTest/java/com/instructure/horizon/espresso/TestModule.kt
+++ b/libs/horizon/src/androidTest/java/com/instructure/horizon/espresso/TestModule.kt
@@ -23,14 +23,17 @@ import com.instructure.pandautils.features.calendartodo.createupdate.CreateUpdat
import com.instructure.pandautils.features.calendartodo.createupdate.CreateUpdateToDoViewModelBehavior
import com.instructure.pandautils.features.calendartodo.details.ToDoRouter
import com.instructure.pandautils.features.calendartodo.details.ToDoViewModelBehavior
+import com.instructure.pandautils.features.cookieconsent.AnalyticsConsentHandler
+import com.instructure.pandautils.features.cookieconsent.CookieConsentNamespace
+import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyRouter
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentRouter
import com.instructure.pandautils.features.dashboard.edit.EditDashboardRepository
import com.instructure.pandautils.features.dashboard.edit.EditDashboardRouter
import com.instructure.pandautils.features.dashboard.notifications.DashboardRouter
import com.instructure.pandautils.features.dashboard.widget.conferences.ConferencesWidgetRouter
-import com.instructure.pandautils.features.dashboard.widget.courses.CoursesWidgetBehavior
import com.instructure.pandautils.features.dashboard.widget.forecast.ForecastWidgetRouter
import com.instructure.pandautils.features.dashboard.widget.progress.ProgressWidgetRouter
-import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetBehavior
+import com.instructure.pandautils.features.dashboard.widget.todo.TodoHomeScreenWidgetUpdater
import com.instructure.pandautils.features.dashboard.widget.todo.TodoWidgetRouter
import com.instructure.pandautils.features.discussion.details.DiscussionDetailsWebViewFragmentBehavior
import com.instructure.pandautils.features.discussion.router.DiscussionRouteHelperRepository
@@ -97,6 +100,26 @@ object HorizonTestModule {
}
}
+ @Provides
+ fun provideAnalyticsConsentHandler(): AnalyticsConsentHandler {
+ throw NotImplementedError("This is a test module. Implementation not required.")
+ }
+
+ @Provides
+ fun provideCookieConsentRouter(): CookieConsentRouter {
+ throw NotImplementedError("This is a test module. Implementation not required.")
+ }
+
+ @Provides
+ fun provideCookieConsentNamespace(): CookieConsentNamespace {
+ throw NotImplementedError("This is a test module. Implementation not required.")
+ }
+
+ @Provides
+ fun provideAcceptableUsePolicyRouter(): AcceptableUsePolicyRouter {
+ throw NotImplementedError("This is a test module. Implementation not required.")
+ }
+
@Provides
fun provideAppDatabase(): AppDatabase {
throw NotImplementedError("This is a test module. Implementation not required.")
@@ -367,11 +390,6 @@ object HorizonTestModule {
throw NotImplementedError("This is a test module. Implementation not required.")
}
- @Provides
- fun provideCoursesWidgetBehavior(): CoursesWidgetBehavior {
- throw NotImplementedError("This is a test module. Implementation not required.")
- }
-
@Provides
fun provideForecastWidgetRouter(): ForecastWidgetRouter {
throw NotImplementedError("This is a test module. Implementation not required.")
@@ -393,7 +411,7 @@ object HorizonTestModule {
}
@Provides
- fun provideTodoWidgetBehavior(): TodoWidgetBehavior {
+ fun provideTodoHomeScreenWidgetUpdater(): TodoHomeScreenWidgetUpdater {
throw NotImplementedError("This is a test module. Implementation not required.")
}
}
\ No newline at end of file
diff --git a/libs/horizon/src/androidTest/java/com/instructure/horizon/pages/HorizonHomePage.kt b/libs/horizon/src/androidTest/java/com/instructure/horizon/pages/HorizonHomePage.kt
index 07977dd90c..912d7330e6 100644
--- a/libs/horizon/src/androidTest/java/com/instructure/horizon/pages/HorizonHomePage.kt
+++ b/libs/horizon/src/androidTest/java/com/instructure/horizon/pages/HorizonHomePage.kt
@@ -18,7 +18,6 @@ package com.instructure.horizon.pages
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.ComposeTestRule
-import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -28,8 +27,6 @@ class HorizonHomePage(private val composeTestRule: ComposeTestRule) {
.assertIsDisplayed()
composeTestRule.onNodeWithText("Learn")
.assertIsDisplayed()
- composeTestRule.onNodeWithContentDescription("IgniteAI")
- .assertIsDisplayed()
composeTestRule.onNodeWithText("Skillspace")
.assertIsDisplayed()
composeTestRule.onNodeWithText("Account")
@@ -46,11 +43,6 @@ class HorizonHomePage(private val composeTestRule: ComposeTestRule) {
.performClick()
}
- fun clickAiAssistantTab() {
- composeTestRule.onNodeWithContentDescription("IgniteAI")
- .performClick()
- }
-
fun clickSkillspaceTab() {
composeTestRule.onNodeWithText("Skillspace")
.performClick()
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/AiAssistantScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/AiAssistantScreen.kt
index bf958c5ca1..d550dcd28c 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/AiAssistantScreen.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/AiAssistantScreen.kt
@@ -19,18 +19,19 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.safeDrawing
+import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.graphics.Color
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
-import com.instructure.horizon.R
import com.instructure.horizon.features.aiassistant.navigation.AiAssistNavigation
import com.instructure.horizon.horizonui.foundation.HorizonColors
-import com.instructure.horizon.util.bottomSafeDrawing
+import com.instructure.horizon.util.zeroScreenInsets
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -41,18 +42,17 @@ fun AiAssistantScreen(
val navController = rememberNavController()
val bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
ModalBottomSheet(
- containerColor = colorResource(R.color.ai_gradient_end),
+ containerColor = Color.Transparent,
onDismissRequest = { onDismiss() },
dragHandle = null,
sheetState = bottomSheetState,
- contentWindowInsets = { WindowInsets.bottomSafeDrawing }
+ contentWindowInsets = { WindowInsets.zeroScreenInsets }
) {
Box(
modifier = Modifier
.fillMaxSize()
- .background(
- brush = HorizonColors.Surface.aiGradient()
- )
+ .background(brush = HorizonColors.Surface.aiGradient())
+ .windowInsetsPadding(WindowInsets.safeDrawing)
) {
AiAssistNavigation(mainNavController, navController, onDismiss)
}
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/AiInformationScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/AiInformationScreen.kt
new file mode 100644
index 0000000000..eecff5ac89
--- /dev/null
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/AiInformationScreen.kt
@@ -0,0 +1,412 @@
+/*
+ * Copyright (C) 2025 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.horizon.features.aiassistant.aiinformation
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.navigationBarsPadding
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.ModalBottomSheet
+import androidx.compose.material3.Text
+import androidx.compose.material3.rememberModalBottomSheetState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.canvasapi2.utils.ContextKeeper
+import com.instructure.horizon.R
+import com.instructure.horizon.features.aiassistant.aiinformation.model.AiInformationData
+import com.instructure.horizon.features.aiassistant.aiinformation.model.AiInformationNutritionFactsData
+import com.instructure.horizon.features.aiassistant.aiinformation.model.AiInformationPermissionLevelsData
+import com.instructure.horizon.features.aiassistant.aiinformation.model.DataPermissionLevel
+import com.instructure.horizon.features.aiassistant.aiinformation.model.NutritionFactBlock
+import com.instructure.horizon.features.aiassistant.aiinformation.model.NutritionFactSegment
+import com.instructure.horizon.features.aiassistant.aiinformation.nutritionfacts.AiInformationNutritionFactsScreen
+import com.instructure.horizon.features.aiassistant.aiinformation.permissionlevels.AiInformationPermissionLevelsScreen
+import com.instructure.horizon.horizonui.foundation.HorizonColors
+import com.instructure.horizon.horizonui.foundation.HorizonSpace
+import com.instructure.horizon.horizonui.foundation.HorizonTypography
+import com.instructure.horizon.horizonui.foundation.SpaceSize
+import com.instructure.horizon.horizonui.molecules.IconButton
+import com.instructure.horizon.horizonui.molecules.IconButtonColor
+import com.instructure.horizon.horizonui.molecules.IconButtonSize
+import com.instructure.horizon.horizonui.molecules.TextLink
+import com.instructure.horizon.horizonui.molecules.TextLinkColor
+import com.instructure.horizon.horizonui.molecules.TextLinkSize
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun AiInformationScreen(
+ onDismiss: () -> Unit,
+ data: AiInformationData = defaultAiInformationData(),
+) {
+ var showPermissionLevels by rememberSaveable { mutableStateOf(false) }
+ var showNutritionFacts by rememberSaveable { mutableStateOf(false) }
+
+ val bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
+
+ ModalBottomSheet(
+ containerColor = HorizonColors.Surface.pageSecondary(),
+ onDismissRequest = onDismiss,
+ sheetState = bottomSheetState,
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .verticalScroll(rememberScrollState())
+ .padding(horizontal = 24.dp)
+ .navigationBarsPadding()
+ ) {
+ AiInformationHeader(onDismiss = onDismiss)
+ HorizonSpace(SpaceSize.SPACE_16)
+ Text(
+ text = data.title,
+ style = HorizonTypography.h1,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_24)
+ Text(
+ text = data.permissionLevelText,
+ style = HorizonTypography.labelLargeBold,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = data.permissionLevel,
+ style = HorizonTypography.tag,
+ color = HorizonColors.PrimitivesViolet.violet40(),
+ )
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = data.description,
+ style = HorizonTypography.p1,
+ color = HorizonColors.Text.body(),
+ )
+ HorizonSpace(SpaceSize.SPACE_16)
+ TextLink(
+ text = data.permissionLevelsModalTriggerText,
+ textLinkColor = TextLinkColor.Black,
+ textLinkSize = TextLinkSize.NORMAL,
+ onClick = { showPermissionLevels = true },
+ )
+ HorizonSpace(SpaceSize.SPACE_24)
+ Text(
+ text = data.modelNameText,
+ style = HorizonTypography.labelLargeBold,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = data.modelName,
+ style = HorizonTypography.p1,
+ color = HorizonColors.Text.body(),
+ )
+ HorizonSpace(SpaceSize.SPACE_16)
+ TextLink(
+ text = data.nutritionFactsModalTriggerText,
+ textLinkColor = TextLinkColor.Black,
+ textLinkSize = TextLinkSize.NORMAL,
+ onClick = { showNutritionFacts = true },
+ )
+ HorizonSpace(SpaceSize.SPACE_32)
+ }
+ }
+
+ if (showPermissionLevels) {
+ AiInformationPermissionLevelsScreen(
+ data = data.permissionLevelsData,
+ onDismiss = { showPermissionLevels = false },
+ )
+ }
+
+ if (showNutritionFacts) {
+ AiInformationNutritionFactsScreen(
+ data = data.nutritionFactsData,
+ onDismiss = { showNutritionFacts = false },
+ )
+ }
+}
+
+@Composable
+private fun defaultAiInformationData() = AiInformationData(
+ title = stringResource(R.string.aiInformation_title),
+ permissionLevelText = stringResource(R.string.aiInformation_permissionLevelText),
+ permissionLevel = stringResource(R.string.aiInformation_permissionLevel),
+ description = stringResource(R.string.aiInformation_description),
+ permissionLevelsModalTriggerText = stringResource(R.string.aiInformation_permissionLevelsModalTriggerText),
+ modelNameText = stringResource(R.string.aiInformation_modelNameText),
+ modelName = stringResource(R.string.aiInformation_modelName),
+ nutritionFactsModalTriggerText = stringResource(R.string.aiInformation_nutritionFactsModalTriggerText),
+ permissionLevelsData = AiInformationPermissionLevelsData(
+ title = stringResource(R.string.aiInformation_permissionLevels_title),
+ currentFeatureText = stringResource(R.string.aiInformation_permissionLevels_currentFeatureText),
+ currentFeature = stringResource(R.string.aiInformation_permissionLevels_currentFeature),
+ closeButtonText = stringResource(R.string.aiInformation_close),
+ levels = listOf(
+ DataPermissionLevel(
+ level = stringResource(R.string.aiInformation_level1),
+ title = stringResource(R.string.aiInformation_level1_title),
+ description = stringResource(R.string.aiInformation_level1_description),
+ ),
+ DataPermissionLevel(
+ level = stringResource(R.string.aiInformation_level2),
+ title = stringResource(R.string.aiInformation_level2_title),
+ description = stringResource(R.string.aiInformation_level2_description),
+ isHighlighted = true,
+ ),
+ DataPermissionLevel(
+ level = stringResource(R.string.aiInformation_level3),
+ title = stringResource(R.string.aiInformation_level3_title),
+ description = stringResource(R.string.aiInformation_level3_description),
+ ),
+ DataPermissionLevel(
+ level = stringResource(R.string.aiInformation_level4),
+ title = stringResource(R.string.aiInformation_level4_title),
+ description = stringResource(R.string.aiInformation_level4_description),
+ ),
+ ),
+ ),
+ nutritionFactsData = AiInformationNutritionFactsData(
+ title = stringResource(R.string.aiInformation_nutritionFacts_title),
+ featureName = stringResource(R.string.aiInformation_nutritionFacts_featureName),
+ closeButtonText = stringResource(R.string.aiInformation_close),
+ blocks = listOf(
+ NutritionFactBlock(
+ blockTitle = stringResource(R.string.aiInformation_block_modelData),
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_baseModel_title),
+ description = stringResource(R.string.aiInformation_segment_baseModel_description),
+ value = stringResource(R.string.aiInformation_modelName),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_trainedWithUserData_title),
+ description = stringResource(R.string.aiInformation_segment_trainedWithUserData_description),
+ value = stringResource(R.string.aiInformation_segment_trainedWithUserData_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_dataSharedWithModel_title),
+ description = stringResource(R.string.aiInformation_segment_dataSharedWithModel_description),
+ value = stringResource(R.string.aiInformation_segment_dataSharedWithModel_value),
+ ),
+ ),
+ ),
+ NutritionFactBlock(
+ blockTitle = stringResource(R.string.aiInformation_block_privacyCompliance),
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_dataRetention_title),
+ description = stringResource(R.string.aiInformation_segment_dataRetention_description),
+ value = stringResource(R.string.aiInformation_segment_dataRetention_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_dataLogging_title),
+ description = stringResource(R.string.aiInformation_segment_dataLogging_description),
+ value = stringResource(R.string.aiInformation_segment_dataLogging_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_regionsSupported_title),
+ description = stringResource(R.string.aiInformation_segment_regionsSupported_description),
+ value = stringResource(R.string.aiInformation_segment_regionsSupported_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_pii_title),
+ description = stringResource(R.string.aiInformation_segment_pii_description),
+ value = stringResource(R.string.aiInformation_segment_pii_value),
+ ),
+ ),
+ ),
+ NutritionFactBlock(
+ blockTitle = stringResource(R.string.aiInformation_block_outputs),
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_aiSettingsControl_title),
+ description = stringResource(R.string.aiInformation_segment_aiSettingsControl_description),
+ value = stringResource(R.string.aiInformation_segment_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_humanInTheLoop_title),
+ description = stringResource(R.string.aiInformation_segment_humanInTheLoop_description),
+ value = stringResource(R.string.aiInformation_segment_humanInTheLoop_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_guardrails_title),
+ description = stringResource(R.string.aiInformation_segment_guardrails_description),
+ value = stringResource(R.string.aiInformation_segment_guardrails_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_expectedRisks_title),
+ description = stringResource(R.string.aiInformation_segment_expectedRisks_description),
+ value = stringResource(R.string.aiInformation_segment_expectedRisks_value),
+ ),
+ NutritionFactSegment(
+ segmentTitle = stringResource(R.string.aiInformation_segment_intendedOutcomes_title),
+ description = stringResource(R.string.aiInformation_segment_intendedOutcomes_description),
+ value = stringResource(R.string.aiInformation_segment_intendedOutcomes_value),
+ ),
+ ),
+ ),
+ ),
+ ),
+)
+
+@Composable
+internal fun AiInformationHeader(
+ onDismiss: () -> Unit,
+ modifier: Modifier = Modifier,
+) {
+ Row(
+ modifier = modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ painter = painterResource(R.drawable.ai_filled),
+ contentDescription = null,
+ tint = HorizonColors.Surface.aiGradientStart(),
+ modifier = Modifier.size(20.dp),
+ )
+ HorizonSpace(SpaceSize.SPACE_4)
+ Text(
+ text = stringResource(R.string.igniteAIToolbarTitle),
+ style = HorizonTypography.labelLargeBold,
+ color = HorizonColors.Surface.aiGradientStart(),
+ modifier = Modifier.weight(1f),
+ )
+ IconButton(
+ iconRes = R.drawable.close,
+ contentDescription = stringResource(R.string.igniteAIDismissContentDescription),
+ size = IconButtonSize.SMALL,
+ color = IconButtonColor.Ghost,
+ onClick = onDismiss,
+ )
+ }
+}
+
+@Composable
+@Preview(showBackground = true)
+private fun AiInformationScreenPreview() {
+ ContextKeeper.appContext = LocalContext.current
+ AiInformationScreen(
+ data = previewAiInformationData(),
+ onDismiss = {},
+ )
+}
+
+internal fun previewAiInformationData() = AiInformationData(
+ title = "Study Tools",
+ permissionLevelText = "Permission Level",
+ permissionLevel = "LEVEL 2",
+ description = "We utilise off-the-shelf AI models and customer data as input to provide AI-powered features. No data is used for training this model.",
+ permissionLevelsModalTriggerText = "View Permission Levels",
+ modelNameText = "Base Model",
+ modelName = "Claude 3.5 Haiku by Anthropic and Cohere multi-language v3",
+ nutritionFactsModalTriggerText = "View AI Nutrition Facts",
+ permissionLevelsData = AiInformationPermissionLevelsData(
+ title = "Data Permission Levels",
+ currentFeatureText = "Current Feature:",
+ currentFeature = "Study Tools",
+ closeButtonText = "Close",
+ levels = listOf(
+ DataPermissionLevel(
+ level = "LEVEL 1",
+ title = "Descriptive Analytics and Research",
+ description = "We leverage anonymised aggregate data for detailed analytics to inform model development and product improvements. No AI models are used at this level.",
+ ),
+ DataPermissionLevel(
+ level = "LEVEL 2",
+ title = "AI-Powered Features Without Data Training",
+ description = "We utilise off-the-shelf AI models and customer data as input to provide AI-powered features. No data is used for training this model.",
+ isHighlighted = true,
+ ),
+ DataPermissionLevel(
+ level = "LEVEL 3",
+ title = "AI Customization for Individual Institutions",
+ description = "We customise AI solutions tailored to the unique needs and resources of educational institutions.",
+ ),
+ DataPermissionLevel(
+ level = "LEVEL 4",
+ title = "Collaborative AI Consortium",
+ description = "We established a consortium with educational institutions that shares anonymised data, best practices, and research findings.",
+ ),
+ ),
+ ),
+ nutritionFactsData = AiInformationNutritionFactsData(
+ title = "Nutrition Facts",
+ featureName = "Study Tools",
+ closeButtonText = "Close",
+ blocks = listOf(
+ NutritionFactBlock(
+ blockTitle = "Model & Data",
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = "Base Model",
+ description = "The foundational AI on which further training and customizations are built.",
+ value = "Claude 3.5 Haiku by Anthropic and Cohere multi-language v3",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Trained with User Data",
+ description = "Indicates the AI model has been given customer data in order to improve its results.",
+ value = "No",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Data Shared with Model",
+ description = "Indicates which training or operational content was given to the model.",
+ value = "Course content",
+ ),
+ ),
+ ),
+ NutritionFactBlock(
+ blockTitle = "Privacy & Compliance",
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = "Data Retention",
+ description = "How long the model stores customer data.",
+ value = "No",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Data Logging",
+ description = "Recording the AI's performance for auditing, analysis, and improvement.",
+ value = "No",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Regions Supported",
+ description = "The locations where the AI model is officially available and supported.",
+ value = "Global",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "PII",
+ description = "Sensitive data that can be used to identify an individual.",
+ value = "No",
+ ),
+ ),
+ ),
+ ),
+ ),
+)
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/model/AiInformationData.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/model/AiInformationData.kt
new file mode 100644
index 0000000000..fc16696233
--- /dev/null
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/model/AiInformationData.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2025 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.horizon.features.aiassistant.aiinformation.model
+
+data class AiInformationData(
+ val title: String,
+ val permissionLevelText: String,
+ val permissionLevel: String,
+ val description: String,
+ val permissionLevelsModalTriggerText: String,
+ val modelNameText: String,
+ val modelName: String,
+ val nutritionFactsModalTriggerText: String,
+ val permissionLevelsData: AiInformationPermissionLevelsData,
+ val nutritionFactsData: AiInformationNutritionFactsData,
+)
+
+data class AiInformationPermissionLevelsData(
+ val title: String,
+ val currentFeatureText: String,
+ val currentFeature: String,
+ val closeButtonText: String,
+ val levels: List,
+)
+
+data class DataPermissionLevel(
+ val level: String,
+ val title: String,
+ val description: String,
+ val isHighlighted: Boolean = false,
+)
+
+data class AiInformationNutritionFactsData(
+ val title: String,
+ val featureName: String,
+ val closeButtonText: String,
+ val blocks: List,
+)
+
+data class NutritionFactBlock(
+ val blockTitle: String,
+ val segments: List,
+)
+
+data class NutritionFactSegment(
+ val segmentTitle: String,
+ val description: String,
+ val value: String,
+ val valueDescription: String? = null,
+)
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/nutritionfacts/AiInformationNutritionFactsScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/nutritionfacts/AiInformationNutritionFactsScreen.kt
new file mode 100644
index 0000000000..42dcfa5509
--- /dev/null
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/nutritionfacts/AiInformationNutritionFactsScreen.kt
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2025 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.horizon.features.aiassistant.aiinformation.nutritionfacts
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.navigationBarsPadding
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.statusBarsPadding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog
+import androidx.compose.ui.window.DialogProperties
+import com.instructure.canvasapi2.utils.ContextKeeper
+import com.instructure.horizon.features.aiassistant.aiinformation.AiInformationHeader
+import com.instructure.horizon.features.aiassistant.aiinformation.model.AiInformationNutritionFactsData
+import com.instructure.horizon.features.aiassistant.aiinformation.model.NutritionFactBlock
+import com.instructure.horizon.features.aiassistant.aiinformation.model.NutritionFactSegment
+import com.instructure.horizon.horizonui.foundation.HorizonColors
+import com.instructure.horizon.horizonui.foundation.HorizonCornerRadius
+import com.instructure.horizon.horizonui.foundation.HorizonSpace
+import com.instructure.horizon.horizonui.foundation.HorizonTypography
+import com.instructure.horizon.horizonui.foundation.SpaceSize
+import com.instructure.horizon.horizonui.molecules.Button
+import com.instructure.horizon.horizonui.molecules.ButtonColor
+
+@Composable
+fun AiInformationNutritionFactsScreen(
+ data: AiInformationNutritionFactsData,
+ onDismiss: () -> Unit,
+) {
+ Dialog(
+ onDismissRequest = onDismiss,
+ properties = DialogProperties(usePlatformDefaultWidth = false),
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(HorizonColors.Surface.pageSecondary())
+ .statusBarsPadding(),
+ ) {
+ Column(modifier = Modifier.padding(horizontal = 24.dp, vertical = 16.dp)) {
+ AiInformationHeader(onDismiss = onDismiss)
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = data.title,
+ style = HorizonTypography.h2,
+ color = HorizonColors.Text.title(),
+ )
+ }
+ HorizontalDivider(thickness = 1.dp, color = HorizonColors.LineAndBorder.lineStroke())
+ LazyColumn(
+ modifier = Modifier
+ .weight(1f)
+ .padding(horizontal = 24.dp),
+ contentPadding = PaddingValues(vertical = 24.dp),
+ verticalArrangement = Arrangement.spacedBy(24.dp),
+ ) {
+ item {
+ Text(
+ text = data.featureName,
+ style = HorizonTypography.h2,
+ color = HorizonColors.Text.title(),
+ )
+ }
+ items(data.blocks) { block ->
+ NutritionFactBlockSection(block = block)
+ }
+ }
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 24.dp, vertical = 16.dp)
+ .navigationBarsPadding(),
+ horizontalArrangement = Arrangement.End,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Button(
+ label = data.closeButtonText,
+ color = ButtonColor.Black,
+ onClick = onDismiss,
+ )
+ }
+ }
+ }
+}
+
+@Composable
+private fun NutritionFactBlockSection(
+ block: NutritionFactBlock,
+ modifier: Modifier = Modifier,
+) {
+ Column(modifier = modifier) {
+ Text(
+ text = block.blockTitle,
+ style = HorizonTypography.h3,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_16)
+ block.segments.forEach { segment ->
+ NutritionFactSegmentCard(segment = segment)
+ HorizonSpace(SpaceSize.SPACE_16)
+ }
+ }
+}
+
+@Composable
+private fun NutritionFactSegmentCard(
+ segment: NutritionFactSegment,
+ modifier: Modifier = Modifier,
+) {
+ Column(
+ modifier = modifier
+ .fillMaxWidth()
+ .clip(HorizonCornerRadius.level2)
+ .border(
+ width = 1.dp,
+ color = HorizonColors.LineAndBorder.lineStroke(),
+ shape = HorizonCornerRadius.level2,
+ )
+ .padding(16.dp),
+ ) {
+ Text(
+ text = segment.segmentTitle,
+ style = HorizonTypography.labelLargeBold,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_4)
+ Text(
+ text = segment.description,
+ style = HorizonTypography.p2,
+ color = HorizonColors.Surface.attention(),
+ )
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = segment.value,
+ style = HorizonTypography.p1,
+ color = HorizonColors.Text.body(),
+ )
+ if (segment.valueDescription != null) {
+ HorizonSpace(SpaceSize.SPACE_4)
+ Text(
+ text = segment.valueDescription,
+ style = HorizonTypography.p2,
+ color = HorizonColors.Text.body(),
+ )
+ }
+ }
+}
+
+@Composable
+@Preview
+private fun AiInformationNutritionFactsScreenPreview() {
+ ContextKeeper.appContext = LocalContext.current
+ AiInformationNutritionFactsScreen(
+ data = AiInformationNutritionFactsData(
+ title = "Nutrition Facts",
+ featureName = "Study Tools",
+ closeButtonText = "Close",
+ blocks = listOf(
+ NutritionFactBlock(
+ blockTitle = "Model & Data",
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = "Base Model",
+ description = "The foundational AI on which further training and customizations are built.",
+ value = "Claude 3.5 Haiku by Anthropic and Cohere multi-language v3",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Trained with User Data",
+ description = "Indicates the AI model has been given customer data in order to improve its results.",
+ value = "No",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Data Shared with Model",
+ description = "Indicates which training or operational content was given to the model.",
+ value = "Course content",
+ ),
+ ),
+ ),
+ NutritionFactBlock(
+ blockTitle = "Privacy & Compliance",
+ segments = listOf(
+ NutritionFactSegment(
+ segmentTitle = "Data Retention",
+ description = "How long the model stores customer data.",
+ value = "No",
+ ),
+ NutritionFactSegment(
+ segmentTitle = "Data Logging",
+ description = "Recording the AI's performance for auditing, analysis, and improvement.",
+ value = "No",
+ ),
+ ),
+ ),
+ ),
+ ),
+ onDismiss = {},
+ )
+}
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/permissionlevels/AiInformationPermissionLevelsScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/permissionlevels/AiInformationPermissionLevelsScreen.kt
new file mode 100644
index 0000000000..21010b2c50
--- /dev/null
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/aiinformation/permissionlevels/AiInformationPermissionLevelsScreen.kt
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2025 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.horizon.features.aiassistant.aiinformation.permissionlevels
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.navigationBarsPadding
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.statusBarsPadding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog
+import androidx.compose.ui.window.DialogProperties
+import com.instructure.canvasapi2.utils.ContextKeeper
+import com.instructure.horizon.features.aiassistant.aiinformation.AiInformationHeader
+import com.instructure.horizon.features.aiassistant.aiinformation.model.AiInformationPermissionLevelsData
+import com.instructure.horizon.features.aiassistant.aiinformation.model.DataPermissionLevel
+import com.instructure.horizon.horizonui.foundation.HorizonColors
+import com.instructure.horizon.horizonui.foundation.HorizonCornerRadius
+import com.instructure.horizon.horizonui.foundation.HorizonSpace
+import com.instructure.horizon.horizonui.foundation.HorizonTypography
+import com.instructure.horizon.horizonui.foundation.SpaceSize
+import com.instructure.horizon.horizonui.molecules.Button
+import com.instructure.horizon.horizonui.molecules.ButtonColor
+
+@Composable
+fun AiInformationPermissionLevelsScreen(
+ data: AiInformationPermissionLevelsData,
+ onDismiss: () -> Unit,
+) {
+ Dialog(
+ onDismissRequest = onDismiss,
+ properties = DialogProperties(usePlatformDefaultWidth = false),
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(HorizonColors.Surface.pageSecondary())
+ .statusBarsPadding(),
+ ) {
+ Column(modifier = Modifier.padding(horizontal = 24.dp, vertical = 16.dp)) {
+ AiInformationHeader(onDismiss = onDismiss)
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = data.title,
+ style = HorizonTypography.h2,
+ color = HorizonColors.Text.title(),
+ )
+ }
+ HorizontalDivider(thickness = 1.dp, color = HorizonColors.LineAndBorder.lineStroke())
+ LazyColumn(
+ modifier = Modifier
+ .weight(1f),
+ contentPadding = PaddingValues(vertical = 24.dp),
+ verticalArrangement = Arrangement.spacedBy(24.dp),
+ ) {
+ items(data.levels) { level ->
+ if (level.isHighlighted) {
+ HighlightedPermissionLevelItem(
+ level = level,
+ currentFeatureText = data.currentFeatureText,
+ currentFeature = data.currentFeature,
+ modifier = Modifier.padding(horizontal = 8.dp)
+ )
+ } else {
+ PermissionLevelItem(
+ level = level,
+ modifier = Modifier.padding(horizontal = 24.dp)
+ )
+ }
+ }
+ }
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 24.dp, vertical = 16.dp)
+ .navigationBarsPadding(),
+ horizontalArrangement = Arrangement.End,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Button(
+ label = data.closeButtonText,
+ color = ButtonColor.Black,
+ onClick = onDismiss,
+ )
+ }
+ }
+ }
+}
+
+@Composable
+private fun PermissionLevelItem(
+ level: DataPermissionLevel,
+ modifier: Modifier = Modifier,
+) {
+ Column(modifier = modifier) {
+ Text(
+ text = level.level,
+ style = HorizonTypography.tag,
+ color = HorizonColors.PrimitivesViolet.violet40(),
+ )
+ HorizonSpace(SpaceSize.SPACE_4)
+ Text(
+ text = level.title,
+ style = HorizonTypography.h4,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = level.description,
+ style = HorizonTypography.p1,
+ color = HorizonColors.Surface.attention(),
+ )
+ }
+}
+
+@Composable
+private fun HighlightedPermissionLevelItem(
+ level: DataPermissionLevel,
+ currentFeatureText: String,
+ currentFeature: String,
+ modifier: Modifier = Modifier,
+) {
+ Box(
+ modifier = modifier
+ .fillMaxWidth()
+ .clip(HorizonCornerRadius.level2)
+ .border(
+ width = 1.dp,
+ color = HorizonColors.LineAndBorder.lineStroke(),
+ shape = HorizonCornerRadius.level2,
+ ),
+ ) {
+ Column {
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .background(brush = HorizonColors.Surface.aiGradient())
+ .padding(16.dp),
+ ) {
+ Text(
+ text = "$currentFeatureText $currentFeature",
+ style = HorizonTypography.labelLargeBold,
+ color = HorizonColors.Text.surfaceColored(),
+ )
+ }
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .background(HorizonColors.Surface.cardPrimary())
+ .padding(16.dp),
+ ) {
+ Text(
+ text = level.level,
+ style = HorizonTypography.tag,
+ color = HorizonColors.PrimitivesViolet.violet40(),
+ )
+ HorizonSpace(SpaceSize.SPACE_4)
+ Text(
+ text = level.title,
+ style = HorizonTypography.h4,
+ color = HorizonColors.Text.title(),
+ )
+ HorizonSpace(SpaceSize.SPACE_8)
+ Text(
+ text = level.description,
+ style = HorizonTypography.p1,
+ color = HorizonColors.Surface.attention(),
+ )
+ }
+ }
+ }
+}
+
+@Composable
+@Preview
+private fun AiInformationPermissionLevelsScreenPreview() {
+ ContextKeeper.appContext = LocalContext.current
+ AiInformationPermissionLevelsScreen(
+ data = AiInformationPermissionLevelsData(
+ title = "Data Permission Levels",
+ currentFeatureText = "Current Feature:",
+ currentFeature = "Study Tools",
+ closeButtonText = "Close",
+ levels = listOf(
+ DataPermissionLevel(
+ level = "LEVEL 1",
+ title = "Descriptive Analytics and Research",
+ description = "We leverage anonymised aggregate data for detailed analytics to inform model development and product improvements. No AI models are used at this level.",
+ ),
+ DataPermissionLevel(
+ level = "LEVEL 2",
+ title = "AI-Powered Features Without Data Training",
+ description = "We utilise off-the-shelf AI models and customer data as input to provide AI-powered features. No data is used for training this model.",
+ isHighlighted = true,
+ ),
+ DataPermissionLevel(
+ level = "LEVEL 3",
+ title = "AI Customization for Individual Institutions",
+ description = "We customise AI solutions tailored to the unique needs and resources of educational institutions.",
+ ),
+ DataPermissionLevel(
+ level = "LEVEL 4",
+ title = "Collaborative AI Consortium",
+ description = "We established a consortium with educational institutions that shares anonymised data, best practices, and research findings.",
+ ),
+ ),
+ ),
+ onDismiss = {},
+ )
+}
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatScreen.kt
index 989e44d257..d194636aac 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatScreen.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatScreen.kt
@@ -33,7 +33,6 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
@@ -86,9 +85,6 @@ fun AiAssistChatScreen(
navController = navController,
onClearChatHistory = state.onClearChatHistory,
onDismiss = { onDismiss() },
- inputTextValue = state.inputTextValue,
- onInputTextChanged = { state.onInputTextChanged(it) },
- onInputTextSubmitted = { state.onInputTextSubmitted() },
) { modifier ->
val scrollState = rememberLazyListState()
LaunchedEffect(state.messages.size) {
@@ -128,7 +124,7 @@ fun AiAssistChatScreen(
modifier = Modifier
.fillMaxWidth()
.semantics {
- contentDescription = context.getString(R.string.a11y_igniteAiLoadingContentDescription)
+ contentDescription = context.getString(R.string.a11y_studyToolsLoadingContentDescription)
}
.focusRequester(loadingFocusRequester)
.focusable()
@@ -158,7 +154,6 @@ private fun AssistChatScreenPreview() {
role = JourneyAssistRole.Assistant
)
),
- inputTextValue = TextFieldValue("Hi,"),
isLoading = true
)
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatUiState.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatUiState.kt
index 0d36a7d23c..aa3f7a5328 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatUiState.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatUiState.kt
@@ -1,6 +1,5 @@
package com.instructure.horizon.features.aiassistant.chat
-import androidx.compose.ui.text.input.TextFieldValue
import com.instructure.horizon.features.aiassistant.common.model.AiAssistMessage
data class AiAssistChatUiState(
@@ -8,9 +7,6 @@ data class AiAssistChatUiState(
val isLoading: Boolean = false,
val error: String? = null,
val isFeedbackEnabled: Boolean = false,
- val inputTextValue: TextFieldValue = TextFieldValue(""),
- val onInputTextChanged: (TextFieldValue) -> Unit = {},
- val onInputTextSubmitted: () -> Unit = {},
val onClearChatHistory: () -> Unit = {},
val onChipClicked: (String) -> Unit = {},
val onNavigateToCards: () -> Unit = {},
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModel.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModel.kt
index 52c2b224e6..fbce67c81b 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModel.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModel.kt
@@ -16,7 +16,6 @@
*/
package com.instructure.horizon.features.aiassistant.chat
-import androidx.compose.ui.text.input.TextFieldValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.instructure.canvasapi2.models.journey.assist.JourneyAssistRole
@@ -39,8 +38,6 @@ class AiAssistChatViewModel @Inject constructor(
private val aiAssistContextProvider: AiAssistContextProvider,
): ViewModel() {
private val _uiState = MutableStateFlow(AiAssistChatUiState(
- onInputTextChanged = ::onTextInputChanged,
- onInputTextSubmitted = ::onTextInputSubmitted,
onClearChatHistory = ::onClearChatHistory,
onChipClicked = ::onChipClicked,
onNavigateToCards = ::onNavigateToCards,
@@ -51,27 +48,6 @@ class AiAssistChatViewModel @Inject constructor(
private var aiAssistContextState = aiAssistContextProvider.aiAssistContext.state
private var aiAssistMessages = aiAssistContextProvider.aiAssistContext.chatHistory.toMutableList()
- private fun onTextInputChanged(newValue: TextFieldValue) {
- _uiState.update {
- it.copy(
- inputTextValue = newValue,
- )
- }
- }
-
- private fun onTextInputSubmitted() {
- val prompt = _uiState.value.inputTextValue.text
- val message = addMessage(prompt)
- _uiState.update {
- it.copy(
- inputTextValue = TextFieldValue(""),
- messages = it.messages + message,
- )
- }
-
- evaluatePrompt(message)
- }
-
private fun evaluatePrompt(message: AiAssistMessage) {
viewModelScope.tryLaunch {
_uiState.update {
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepository.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepository.kt
index 2f802b4ac3..ffc2f8b9d7 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepository.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepository.kt
@@ -22,7 +22,7 @@ class AiAssistRepository @Inject constructor(
state: JourneyAssistState
): AiAssistResponse {
val requestBody = JourneyAssistRequestBody(prompt, history, state)
- val response = journeyAssistAPI.answerPrompt(requestBody)
+ val response = journeyAssistAPI.answerPrompt(requestBody, true)
val message = AiAssistMessage(
text = response.response.orEmpty(),
role = JourneyAssistRole.Assistant,
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistDetailedFeedback.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistDetailedFeedback.kt
index 4d822859d3..6db1295d3f 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistDetailedFeedback.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistDetailedFeedback.kt
@@ -74,7 +74,7 @@ fun AiAssistDetailedFeedback(
) {
Column(
modifier = modifier
- .clip(HorizonCornerRadius.level2)
+ .clip(HorizonCornerRadius.level1_5)
.background(Color.White.copy(alpha = 0.1f))
.padding(16.dp)
) {
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistFeedback.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistFeedback.kt
index f510b336f5..f145e39d96 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistFeedback.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistFeedback.kt
@@ -71,7 +71,7 @@ private fun AiAssistPositiveFeedbackIcon(
} else {
painterResource(R.drawable.thumb_up)
},
- contentDescription = stringResource(R.string.a11y_igniteAIPositiveFeedback),
+ contentDescription = stringResource(R.string.a11y_studyToolsPositiveFeedback),
tint = HorizonColors.Text.surfaceColored(),
modifier = Modifier.clickable { onClick() },
)
@@ -88,7 +88,7 @@ private fun AiAssistNegativeFeedbackIcon(
} else {
painterResource(R.drawable.thumb_down)
},
- contentDescription = stringResource(R.string.a11y_igniteAINegativeFeedback),
+ contentDescription = stringResource(R.string.a11y_studyToolsNegativeFeedback),
tint = HorizonColors.Text.surfaceColored(),
modifier = Modifier.clickable { onClick() },
)
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistInput.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistInput.kt
index 6784067c21..e5f84ed0b3 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistInput.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistInput.kt
@@ -51,7 +51,7 @@ fun AiAssistInput(
.fillMaxWidth()
.background(
HorizonColors.Surface.cardPrimary(),
- HorizonCornerRadius.level2
+ HorizonCornerRadius.level1_5
)
) {
AiAssistTextArea(
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistResponseTextBlock.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistResponseTextBlock.kt
index d3e714cc14..5905477668 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistResponseTextBlock.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistResponseTextBlock.kt
@@ -103,29 +103,13 @@ fun AiAssistResponseTextBlock(
HorizonSpace(SpaceSize.SPACE_8)
FlowRow(
- horizontalArrangement = Arrangement.spacedBy(8.dp),
- verticalArrangement = Arrangement.spacedBy(8.dp)
+ horizontalArrangement = Arrangement.spacedBy(12.dp),
+ verticalArrangement = Arrangement.spacedBy(12.dp)
) {
chips.forEach { chip ->
AiAssistSuggestionTextBlock(
text = chip.label,
- onClick = chip.onClick
- )
- }
- }
- }
-
- if (chips.isNotEmpty()) {
- HorizonSpace(SpaceSize.SPACE_8)
-
- FlowRow(
- horizontalArrangement = Arrangement.spacedBy(8.dp),
- verticalArrangement = Arrangement.spacedBy(8.dp)
- ) {
- chips.forEach { chip ->
- AiAssistSuggestionTextBlock(
- text = chip.label,
- onClick = chip.onClick
+ onClick = chip.onClick,
)
}
}
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistScaffold.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistScaffold.kt
index 9104fa1819..4e532892d5 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistScaffold.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistScaffold.kt
@@ -22,27 +22,25 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalFocusManager
-import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
-import com.instructure.horizon.horizonui.foundation.HorizonColors
-import com.instructure.horizon.horizonui.foundation.HorizonSpace
-import com.instructure.horizon.horizonui.foundation.SpaceSize
-import com.instructure.horizon.horizonui.molecules.HorizonDivider
+import com.instructure.horizon.features.aiassistant.aiinformation.AiInformationScreen
@Composable
fun AiAssistScaffold(
navController: NavHostController,
onClearChatHistory: () -> Unit,
onDismiss: () -> Unit,
- inputTextValue: TextFieldValue? = null,
- onInputTextChanged: ((TextFieldValue) -> Unit)? = null,
- onInputTextSubmitted: (() -> Unit)? = null,
modifier: Modifier = Modifier,
content: @Composable (Modifier) -> Unit,
) {
+ var showAiInformation by rememberSaveable { mutableStateOf(false) }
+
Column(
modifier = modifier
.fillMaxSize()
@@ -61,28 +59,18 @@ fun AiAssistScaffold(
} else {
null
},
+ onInfoPressed = { showAiInformation = true },
modifier = Modifier
- .padding(horizontal = 16.dp)
)
- HorizonDivider(color = HorizonColors.Surface.pagePrimary())
- HorizonSpace(SpaceSize.SPACE_16)
-
- content(Modifier.weight(1f).padding(horizontal = 24.dp))
+ content(Modifier
+ .weight(1f)
+ .padding(horizontal = 24.dp))
+ }
- if (inputTextValue != null && onInputTextChanged != null && onInputTextSubmitted != null) {
- val focusManager = LocalFocusManager.current
- AiAssistInput(
- value = inputTextValue,
- onValueChange = { onInputTextChanged(it) },
- onSubmitPressed = {
- focusManager.clearFocus()
- onInputTextSubmitted()
- },
- modifier = Modifier
- .padding(horizontal = 24.dp)
- .padding(top = 8.dp, bottom = 24.dp)
- )
- }
+ if (showAiInformation) {
+ AiInformationScreen(
+ onDismiss = { showAiInformation = false },
+ )
}
-}
\ No newline at end of file
+}
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistSuggestionTextBlock.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistSuggestionTextBlock.kt
index c1f7f18ce7..7fd907ca03 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistSuggestionTextBlock.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistSuggestionTextBlock.kt
@@ -19,6 +19,7 @@ package com.instructure.horizon.features.aiassistant.common.composable
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -37,10 +38,11 @@ fun AiAssistSuggestionTextBlock(
) {
Box(
modifier = modifier
+ .fillMaxWidth()
.border(
1.dp,
HorizonColors.LineAndBorder.lineStroke(),
- HorizonCornerRadius.level4
+ HorizonCornerRadius.level1_5
)
.padding(16.dp)
.clickable { onClick() }
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistTextArea.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistTextArea.kt
index 1cbe110747..a3f57d23f8 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistTextArea.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistTextArea.kt
@@ -69,7 +69,7 @@ private fun TextAreaBox(
innerTextField()
if (value.text.isEmpty()) {
Text(
- text = stringResource(R.string.igniteAIEnterAPromptLabel),
+ text = stringResource(R.string.studyToolsEnterAPromptLabel),
style = HorizonTypography.p1,
color = HorizonColors.Text.timestamp(),
)
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistToolbar.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistToolbar.kt
index dc45c50ad6..208d9d3503 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistToolbar.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistToolbar.kt
@@ -17,16 +17,14 @@
package com.instructure.horizon.features.aiassistant.common.composable
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
-import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
-import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -48,54 +46,61 @@ fun AiAssistToolbar(
onDismissPressed: () -> Unit,
modifier: Modifier = Modifier,
onBackPressed: (() -> Unit)? = null,
+ onInfoPressed: (() -> Unit)? = null,
) {
- CenterAlignedTopAppBar(
- colors = TopAppBarDefaults.centerAlignedTopAppBarColors().copy(
- containerColor = Color.Transparent
- ),
- modifier = modifier,
- title = {
- Row(
- verticalAlignment = Alignment.CenterVertically,
- ) {
- Icon(
- painter = painterResource(R.drawable.ai_filled),
- contentDescription = null,
- tint = HorizonColors.Icon.surfaceColored(),
- modifier = Modifier
- .size(24.dp)
- )
+ Row(
+ modifier = modifier.padding(24.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ if (onBackPressed != null) {
+ IconButton(
+ iconRes = R.drawable.arrow_back,
+ contentDescription = stringResource(R.string.a11yNavigateBack),
+ size = IconButtonSize.SMALL,
+ color = IconButtonColor.WhiteOutline,
+ onClick = onBackPressed,
+ )
+ HorizonSpace(SpaceSize.SPACE_4)
+ }
+
+ Icon(
+ painter = painterResource(R.drawable.ai_filled),
+ contentDescription = null,
+ tint = HorizonColors.Icon.surfaceColored(),
+ modifier = Modifier
+ .size(24.dp)
+ )
- HorizonSpace(SpaceSize.SPACE_4)
+ HorizonSpace(SpaceSize.SPACE_4)
- Text(
- text = stringResource(R.string.igniteAIToolbarTitle),
- style = HorizonTypography.h3,
- color = HorizonColors.Text.surfaceColored()
- )
- }
- },
- navigationIcon = {
- if (onBackPressed != null) {
- IconButton(
- iconRes = R.drawable.arrow_back,
- contentDescription = stringResource(R.string.a11yNavigateBack),
- size = IconButtonSize.SMALL,
- color = IconButtonColor.WhiteOutline,
- onClick = onBackPressed,
- )
- }
- },
- actions = {
+ Text(
+ text = stringResource(R.string.studyToolsToolbarTitle),
+ style = HorizonTypography.h3,
+ color = HorizonColors.Text.surfaceColored(),
+ modifier = modifier.weight(1f)
+ )
+
+ HorizonSpace(SpaceSize.SPACE_4)
+
+ if (onInfoPressed != null) {
IconButton(
- iconRes = R.drawable.close,
- contentDescription = stringResource(R.string.igniteAIDismissContentDescription),
+ iconRes = R.drawable.info,
+ contentDescription = stringResource(R.string.a11y_aiInformation),
size = IconButtonSize.SMALL,
- color = IconButtonColor.WhiteOutline,
- onClick = onDismissPressed,
+ color = IconButtonColor.BlackGhost,
+ onClick = onInfoPressed,
)
+ HorizonSpace(SpaceSize.SPACE_4)
}
- )
+
+ IconButton(
+ iconRes = R.drawable.close,
+ contentDescription = stringResource(R.string.studyToolsDismissContentDescription),
+ size = IconButtonSize.SMALL,
+ color = IconButtonColor.BlackGhost,
+ onClick = onDismissPressed,
+ )
+ }
}
@Composable
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistUserTextBlock.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistUserTextBlock.kt
index 855c4668d6..1737c6219a 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistUserTextBlock.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/common/composable/AiAssistUserTextBlock.kt
@@ -36,7 +36,7 @@ fun AiAssistUserTextBlock(
) {
Box(
modifier = modifier
- .clip(HorizonCornerRadius.level2)
+ .clip(HorizonCornerRadius.level1_5)
.background(HorizonColors.Surface.cardPrimary())
.padding(16.dp)
) {
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/flashcard/composable/AiAssistFlashcard.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/flashcard/composable/AiAssistFlashcard.kt
index a33fb4f288..668cb24e05 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/flashcard/composable/AiAssistFlashcard.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/flashcard/composable/AiAssistFlashcard.kt
@@ -89,7 +89,7 @@ fun AiAssistFlashcard(
}
.clearAndSetSemantics {
onClick(
- label = context.getString(R.string.a11y_aiAssistFlashcardClickActionLabel),
+ label = context.getString(R.string.a11y_studyToolsFlashcardClickActionLabel),
action = { onClick(); true }
)
contentDescription = cardContentDescription
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/main/AiAssistMainScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/main/AiAssistMainScreen.kt
index ba5386346c..edb60a8abf 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/main/AiAssistMainScreen.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/main/AiAssistMainScreen.kt
@@ -97,12 +97,6 @@ fun AiAssistMainScreen(
navController = navController,
onClearChatHistory = { },
onDismiss = { onDismiss() },
- inputTextValue = promptInput,
- onInputTextChanged = { promptInput = it },
- onInputTextSubmitted = {
- state.sendMessage(promptInput.text)
- promptInput = TextFieldValue("")
- }
) { modifier ->
LazyColumn(
verticalArrangement = Arrangement.spacedBy(16.dp),
@@ -130,7 +124,7 @@ fun AiAssistMainScreen(
modifier = Modifier
.fillMaxWidth()
.semantics {
- contentDescription = context.getString(R.string.a11y_igniteAiLoadingContentDescription)
+ contentDescription = context.getString(R.string.a11y_studyToolsLoadingContentDescription)
}
.focusRequester(loadingFocusRequester)
.focusable()
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/quiz/composable/AiAssistQuizAnswer.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/quiz/composable/AiAssistQuizAnswer.kt
index 83443f06a8..0619064632 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/quiz/composable/AiAssistQuizAnswer.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/aiassistant/quiz/composable/AiAssistQuizAnswer.kt
@@ -65,7 +65,7 @@ fun AiAssistQuizAnswer(
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
- .clip(HorizonCornerRadius.level2)
+ .clip(HorizonCornerRadius.level1_5)
.clickable { onClick() }
.conditional(status != AiAssistQuizAnswerStatus.UNSELECTED) {
this
@@ -75,7 +75,7 @@ fun AiAssistQuizAnswer(
this
.border(
HorizonBorder.level1(HorizonColors.Surface.pageSecondary()),
- shape = HorizonCornerRadius.level2,
+ shape = HorizonCornerRadius.level1_5,
)
}
.padding(16.dp)
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/home/HomeBottomNavigationBar.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/home/HomeBottomNavigationBar.kt
index 4302663d17..c130777c53 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/home/HomeBottomNavigationBar.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/home/HomeBottomNavigationBar.kt
@@ -22,33 +22,23 @@ import androidx.annotation.StringRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
-import androidx.compose.foundation.layout.RowScope
-import androidx.compose.foundation.layout.requiredSize
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.dp
import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
import com.instructure.horizon.R
-import com.instructure.horizon.features.aiassistant.AiAssistantScreen
import com.instructure.horizon.horizonui.foundation.HorizonColors
import com.instructure.horizon.horizonui.foundation.HorizonElevation
-import com.instructure.horizon.horizonui.molecules.IconButton
-import com.instructure.horizon.horizonui.molecules.IconButtonColor
import com.instructure.horizon.horizonui.organisms.navelements.SelectableNavigationItem
data class BottomNavItem(
- val route: String?,
+ val route: String,
@StringRes val label: Int,
@DrawableRes val icon: Int,
@DrawableRes val selectedIcon: Int,
@@ -58,7 +48,6 @@ data class BottomNavItem(
private val bottomNavItems = listOf(
BottomNavItem(HomeNavigationRoute.Dashboard.route, R.string.bottomNav_home, R.drawable.home, R.drawable.home_filled),
BottomNavItem(HomeNavigationRoute.Learn.route, R.string.bottomNav_learn, R.drawable.book_2, R.drawable.book_2_filled, true),
- BottomNavItem(null, R.string.bottomNav_igniteAI, R.drawable.ai, R.drawable.ai_filled),
BottomNavItem(HomeNavigationRoute.Skillspace.route, R.string.bottomNav_skillspace, R.drawable.hub, R.drawable.hub_filled),
BottomNavItem(
HomeNavigationRoute.Account.route,
@@ -85,10 +74,6 @@ fun HomeBottomNavigationBar(
buttonsEnabled: Boolean = true,
modifier: Modifier = Modifier
) {
- var isAiAssistVisible by rememberSaveable { mutableStateOf(false) }
- if (isAiAssistVisible) {
- AiAssistantScreen(navController) { isAiAssistVisible = false }
- }
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination
val visible = isBottomBarVisible(navController)
@@ -104,43 +89,22 @@ fun HomeBottomNavigationBar(
modifier = modifier
) {
bottomNavItems.forEach { item ->
- val selected =
- currentDestination?.hierarchy?.any { it.route == item.route } == true
- if (item.route == null) {
- AiAssistantItem(item, buttonsEnabled, onClick = {
- isAiAssistVisible = true
- })
- } else {
- SelectableNavigationItem(item, selected, buttonsEnabled, onClick = {
- navController.navigate(item.route) {
- popUpTo(navController.graph.findStartDestination().id) {
- saveState = true
- }
- launchSingleTop = true
-
- // Do not restore screen state when navigating to Dashboard screen
- // Restore when navigating between other screens
- restoreState = item.route != HomeNavigationRoute.Dashboard.route ||
- (item.route == HomeNavigationRoute.Dashboard.route && currentDestination?.route == HomeNavigationRoute.Dashboard.route)
+ val selected = currentDestination?.hierarchy?.any { it.route == item.route } == true
+ SelectableNavigationItem(item, selected, buttonsEnabled, onClick = {
+ navController.navigate(item.route) {
+ popUpTo(navController.graph.findStartDestination().id) {
+ saveState = true
}
- })
- }
+ launchSingleTop = true
+
+ // Do not restore screen state when navigating to Dashboard screen
+ // Restore when navigating between other screens
+ restoreState = item.route != HomeNavigationRoute.Dashboard.route ||
+ (item.route == HomeNavigationRoute.Dashboard.route && currentDestination?.route == HomeNavigationRoute.Dashboard.route)
+ }
+ })
}
}
}
}
-}
-
-@Composable
-fun RowScope.AiAssistantItem(item: BottomNavItem, enabled: Boolean, onClick: () -> Unit, modifier: Modifier = Modifier) {
- IconButton(
- modifier = modifier
- .requiredSize(44.dp)
- .weight(1f),
- onClick = onClick,
- contentDescription = stringResource(item.label),
- iconRes = R.drawable.ai,
- color = IconButtonColor.Ai,
- enabled = enabled
- )
}
\ No newline at end of file
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/features/moduleitemsequence/ModuleItemSequenceScreen.kt b/libs/horizon/src/main/java/com/instructure/horizon/features/moduleitemsequence/ModuleItemSequenceScreen.kt
index d9d039b1bf..d9215a9e41 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/features/moduleitemsequence/ModuleItemSequenceScreen.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/features/moduleitemsequence/ModuleItemSequenceScreen.kt
@@ -144,6 +144,8 @@ fun ModuleItemSequenceScreen(navController: NavHostController, uiState: ModuleIt
showNextButton = uiState.currentPosition < uiState.items.size - 1,
showPreviousButton = uiState.currentPosition > 0,
showNotebookButton = uiState.currentItem?.moduleItemContent is ModuleItemContent.Page,
+ showAiAssistButton = (uiState.currentItem?.moduleItemContent is ModuleItemContent.File)
+ || (uiState.currentItem?.moduleItemContent is ModuleItemContent.Page),
showAssignmentToolsButton = uiState.currentItem?.moduleItemContent is ModuleItemContent.Assignment,
onNextClick = uiState.onNextClick,
onPreviousClick = uiState.onPreviousClick,
@@ -559,6 +561,7 @@ private fun ModuleItemSequenceBottomBar(
showNextButton: Boolean,
showPreviousButton: Boolean,
showNotebookButton: Boolean,
+ showAiAssistButton: Boolean,
showAssignmentToolsButton: Boolean,
onNextClick: () -> Unit,
onPreviousClick: () -> Unit,
@@ -594,9 +597,9 @@ private fun ModuleItemSequenceBottomBar(
.align(Alignment.Center),
horizontalArrangement = Arrangement.spacedBy(12.dp, Alignment.CenterHorizontally)
) {
- IconButton(
+ if (showAiAssistButton) IconButton(
iconRes = R.drawable.ai,
- contentDescription = stringResource(R.string.a11y_openIgniteAI),
+ contentDescription = stringResource(R.string.a11y_openStudyTools),
enabled = aiAssistEnabled,
color = IconButtonColor.Ai,
elevation = HorizonElevation.level4,
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/CollapsableScaffold.kt b/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/CollapsableScaffold.kt
index 1fe4008bd3..8efdd74860 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/CollapsableScaffold.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/CollapsableScaffold.kt
@@ -19,9 +19,12 @@ package com.instructure.horizon.horizonui.organisms.scaffolds
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.WindowInsetsSides
+import androidx.compose.foundation.layout.add
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.ime
import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.FabPosition
import androidx.compose.material3.MaterialTheme
@@ -122,7 +125,7 @@ private fun CollapsableHeaderScreenContent(
}
}
) {
- headerContent(statusBarWindowInsets.asPaddingValues())
+ headerContent(statusBarWindowInsets.add(navigationBarWindowInsets.only(WindowInsetsSides.Horizontal)).asPaddingValues())
}
val headerHeight = max(
with(density) { statusBarWindowInsets.getTop(density).toDp() },
@@ -259,7 +262,7 @@ private fun CollapsableScaffoldContent(
}
}
) {
- topBar(statusBarWindowInsets.asPaddingValues())
+ topBar(statusBarWindowInsets.add(navigationBarWindowInsets.only(WindowInsetsSides.Horizontal)).asPaddingValues())
}
},
bottomBar = {
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/EdgeToEdgeScaffold.kt b/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/EdgeToEdgeScaffold.kt
index 2372eafc34..ee4f1a077f 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/EdgeToEdgeScaffold.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/horizonui/organisms/scaffolds/EdgeToEdgeScaffold.kt
@@ -16,10 +16,8 @@
package com.instructure.horizon.horizonui.organisms.scaffolds
import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.add
-import androidx.compose.foundation.layout.ime
-import androidx.compose.foundation.layout.union
+import androidx.compose.foundation.layout.imePadding
import androidx.compose.material3.FabPosition
import androidx.compose.material3.Scaffold
import androidx.compose.material3.contentColorFor
@@ -52,7 +50,7 @@ fun EdgeToEdgeScaffold(
navigationBarAlpha = navigationBarAlpha
) { statusBarWindowInsets, navigationBarWindowInsets ->
Scaffold(
- modifier = modifier,
+ modifier = modifier.imePadding(),
topBar = topBar,
bottomBar = bottomBar,
snackbarHost = snackbarHost,
@@ -60,7 +58,7 @@ fun EdgeToEdgeScaffold(
floatingActionButtonPosition = floatingActionButtonPosition,
containerColor = containerColor,
contentColor = contentColor,
- contentWindowInsets = statusBarWindowInsets.add(navigationBarWindowInsets).union(WindowInsets.ime),
+ contentWindowInsets = statusBarWindowInsets.add(navigationBarWindowInsets),
content = content
)
}
diff --git a/libs/horizon/src/main/java/com/instructure/horizon/util/HorizonEdgeToEdgeHelper.kt b/libs/horizon/src/main/java/com/instructure/horizon/util/HorizonEdgeToEdgeHelper.kt
index 66564bcb87..ed1c9bc913 100644
--- a/libs/horizon/src/main/java/com/instructure/horizon/util/HorizonEdgeToEdgeHelper.kt
+++ b/libs/horizon/src/main/java/com/instructure/horizon/util/HorizonEdgeToEdgeHelper.kt
@@ -32,7 +32,6 @@ import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.statusBars
-import androidx.compose.foundation.layout.union
import androidx.compose.foundation.layout.windowInsetsBottomHeight
import androidx.compose.foundation.layout.windowInsetsEndWidth
import androidx.compose.foundation.layout.windowInsetsStartWidth
@@ -60,11 +59,9 @@ fun HorizonEdgeToEdgeSystemBars(
content: @Composable (statusBarWindowInsets: WindowInsets, navigationBarWindowInsets: WindowInsets) -> Unit
) {
val statusBarWindowsInsets = if (statusBarColor != null) {
- WindowInsets.statusBars.union(
- WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
- )
+ WindowInsets.statusBars
} else {
- WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
+ WindowInsets.zeroScreenInsets
}
val navigationBarWindowsInsets = if (navigationBarColor != null) {
diff --git a/libs/horizon/src/main/res/values-ar/strings.xml b/libs/horizon/src/main/res/values-ar/strings.xml
index 1065aed01a..23c785b3f6 100644
--- a/libs/horizon/src/main/res/values-ar/strings.xml
+++ b/libs/horizon/src/main/res/values-ar/strings.xml
@@ -555,6 +555,7 @@
تم تمييز %1$s كـ %2$s، اضغط مرتين لتحرير الملاحظة
المساقات
البرامج
+ استعراض
تقديم بطاقة لطلب استجابة شخصية من فريق الدعم لدينا.
أدخل مطالبة
جارٍ تحميل الاستجابة
@@ -589,4 +590,137 @@
خطأ: %1$s
مطلوب
+ بحث
+ العناصر التي تم حفظها كإشارات مرجعية
+ العناصر المكتملة
+ تم الإكمال
+ الإشارة المرجعية
+ إزالة الإشارة المرجعية
+ التسجيل
+ طي
+ توسيع
+ عرض المجموعة الكاملة
+ لم يتم العثور على نتائج. جرب تعديل مصطلحات البحث الخاصة بك.
+ فشل تحديث الإشارة المرجعية
+ فشل التسجيل في العنصر
+ إظهار المزيد
+ قيد التقدم
+ تم الإكمال
+ التقييم
+ المهمة
+ البرنامج
+ المساق
+ الأداة الخارجية
+ الارتباط الخارجي
+ الملف
+ الصفحة
+ فشل تحميل المجموعة
+ البحث في المجموعة
+ إظهار المزيد
+ لم يتم العثور على نتائج. جرب تعديل مصطلحات البحث الخاصة بك.
+ الإشارات المرجعية
+ فشل تحميل عناصر المجموعة
+ بحث
+ لم يتم العثور على نتائج. جرب تعديل مصطلحات البحث الخاصة بك.
+
+ - %1$d عناصر
+ - %1$d عنصر
+ - %1$d عناصر
+ - %1$d عناصر
+ - %1$d عناصر
+ - %1$d عناصر
+
+
+ - %1$d دقائق
+ - %1$d دقيقة
+ - %1$d دقائق
+ - %1$d دقائق
+ - %1$d دقائق
+ - %1$d دقائق
+
+
+ - %1$d وحدات
+ - %1$d وحدة
+ - %1$d وحدات
+ - %1$d وحدات
+ - %1$d وحدات
+ - %1$d وحدات
+
+ أي نوع
+ المساقات
+ البرامج
+ التقييمات
+ المهام
+ الارتباطات الخارجية
+ الأدوات الخارجية
+ الملفات
+ الصفحات
+ بحث
+ لم يتم العثور على نتائج. جرب تعديل مصطلحات البحث الخاصة بك.
+ أي حالة
+ تم الإكمال
+ تم الحفظ كإشارة مرجعية
+ فشل تحميل المجموعات
+ مسح عوامل التصفية
+ مسح استعلام البحث
+ نظرة عامة
+ هل أنت جاهز للانضمام؟
+ ليس الآن
+ التسجيل
+ سجل للوصول إلى المساق وابدأ في التعلم.
+ فشل التسجيل
+ لا توجد عناصر في هذه المجموعة
+ موصى به
+ شائع بين المتعلمين في مؤسستك
+ خطوة تالية بعد %1$s
+ متصل بالمحتوى الذي أبديت اهتمامك به
+ لجعل مهاراتك مصقولة بدرجة أكبر في %1$s
+ أنت
+ موصي به لـ %1$s
+ العنصر السابق
+ العنصر التالي
+ مجموعات
+ التصفية والفرز
+ الفزر حسب
+ نوع العنصر
+ تطبيق عوامل التصفية
+ مسح عوامل التصفية
+ الأحدث
+ الأقدم
+ الاسم: A-Z
+ الاسم: Z-A
+ عامل تصفية
+ المساق
+ البرنامج
+
+ - %1$d من المساقات
+ - %1$d المساق
+ - %1$d من المساقات
+ - %1$d من المساقات
+ - %1$d من المساقات
+ - %1$d من المساقات
+
+ فشل تحميل العناصر
+ البدء في التعلم
+ استئناف التعلم
+ قيد التقدم
+ تم الإكمال
+ تم الحفظ
+ بحث
+ المحتوى الخاص بي
+ إظهار المزيد
+ المساقات
+
+ - %1$d عناصر
+ - %1$d عنصر
+ - %1$d عناصر
+ - %1$d عناصر
+ - %1$d عناصر
+ - %1$d عناصر
+
+ %1$d ساعات %2$d دقيقة
+ %1$d ساعات
+ %1$d دقيقة
+ لم يتم العثور على نتائج. جرب تعديل مصطلحات البحث الخاصة بك.
+ فشل التحديث
diff --git a/libs/horizon/src/main/res/values-b+da+DK+instk12/strings.xml b/libs/horizon/src/main/res/values-b+da+DK+instk12/strings.xml
index 9388dc12a3..be705aecef 100644
--- a/libs/horizon/src/main/res/values-b+da+DK+instk12/strings.xml
+++ b/libs/horizon/src/main/res/values-b+da+DK+instk12/strings.xml
@@ -515,6 +515,7 @@
%1$s, markeret som %2$s, dobbelttryk for at redigere noten
Fag
Programmer
+ Gennemse
Indsend besked for et personligt svar fra vores supportteam
Indtast en prompt
Indlæser svar
@@ -545,4 +546,117 @@
Fejl: %1$s
Påkrævet
+ Søg
+ Bogmærkede elementer
+ Fuldførte elementer
+ Fuldført
+ Bogmærke
+ Fjern bogmærke
+ Tilmeld
+ Skjul
+ Udvid
+ Vis hele kollektionen
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Bogmærket kunne ikke opdateres
+ Kunne ikke tilmelde sig elementet
+ Vis mere
+ I gang
+ Fuldført
+ Bedømmelse
+ Opgave
+ Program
+ Fag
+ Eksternt værktøj
+ Eksternt link
+ Fil
+ Side
+ Kunne ikke indlæse samlingen
+ Søg i samlingen
+ Vis mere
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Bogmærker
+ Kunne ikke indlæse samlingselementer
+ Søg
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+
+ - %1$d element
+ - %1$d elementer
+
+
+ - %1$d min.
+ - %1$d minutter
+
+
+ - %1$d enhed
+ - %1$d enheder
+
+ Enhver type
+ Fag
+ Programmer
+ Vurderinger
+ Opgaver
+ Eksterne links
+ Eksterne værktøjer
+ Filer
+ Sider
+ Søg
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Enhver status
+ Fuldført
+ Bogmærket
+ Kunne ikke indlæse samlinger
+ Nulstil filtre
+ Ryd søgeforespørgsel
+ Oversigt
+ Klar til at deltage?
+ Ikke nu
+ Tilmeld
+ Tilmeld dig for at få adgang til faget og begynde at lære.
+ Kunne ikke tilmelde
+ Ingen elementer i denne samling
+ Anbefalet
+ Populær blandt studerende i din organisation
+ Et næste trin efter %1$s
+ Relateret til indhold, du er interesseret i
+ For at uddybe dine færdigheder inden for %1$s
+ du
+ Anbefales til %1$s
+ Forrige element
+ Næste element
+ Samlinger
+ Filtrer og sorter
+ Sorter efter
+ Elementtype
+ Anvend filtre
+ Nulstil filtre
+ Seneste
+ Seneste nylige
+ Navn: A-Z
+ Navn: Z-A
+ Filter
+ Fag
+ Program
+
+ - %1$d fag
+ - %1$d fag
+
+ Kunne ikke indlæse elementer
+ Begynd at lære
+ Genoptag læring
+ I gang
+ Fuldført
+ Gemt
+ Søg
+ Mit indhold
+ Vis mere
+ Fag
+
+ - %1$d element
+ - %1$d elementer
+
+ %1$d timer %2$d min.
+ %1$d timer
+ %1$d min.
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Kunne ikke opdatere
diff --git a/libs/horizon/src/main/res/values-b+en+AU+unimelb/strings.xml b/libs/horizon/src/main/res/values-b+en+AU+unimelb/strings.xml
index 2f6d4e7d29..b00486ce63 100644
--- a/libs/horizon/src/main/res/values-b+en+AU+unimelb/strings.xml
+++ b/libs/horizon/src/main/res/values-b+en+AU+unimelb/strings.xml
@@ -515,6 +515,7 @@
%1$s, marked as %2$s, double tap to edit note
Subjects
Programs
+ Browse
File a ticket for a personal response from our support team.
Enter a prompt
Loading response
@@ -545,4 +546,117 @@
Error: %1$s
Required
+ Search
+ Bookmarked items
+ Completed items
+ Completed
+ Bookmark
+ Remove bookmark
+ Enrol
+ Collapse
+ Expand
+ View full collection
+ No results found. Try adjusting your search terms.
+ Failed to update the bookmark
+ Failed to enrol in item
+ Show more
+ In progress
+ Completed
+ Assessment
+ Assignment
+ Program
+ Subject
+ External tool
+ External link
+ File
+ Page
+ Failed to load collection
+ Search collection
+ Show more
+ No results found. Try adjusting your search terms.
+ Bookmarks
+ Failed to load collection items
+ Search
+ No results found. Try adjusting your search terms.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unit
+ - %1$d units
+
+ Any type
+ Subjects
+ Programs
+ Assessments
+ Assignments
+ External links
+ External tools
+ Files
+ Pages
+ Search
+ No results found. Try adjusting your search terms.
+ Any status
+ Completed
+ Bookmarked
+ Failed to load collections
+ Clear filters
+ Clear search query
+ Overview
+ Ready to join?
+ Not now
+ Enrol
+ Enrol to access the subject and start learning.
+ Failed to enrol
+ No items in this collection
+ Recommended
+ Popular with learners at your organisation
+ A next step after %1$s
+ Related to content you\'re interested in
+ To deepen your skills in %1$s
+ you
+ Recommended for %1$s
+ Previous item
+ Next item
+ Collections
+ Filter and sort
+ Sort by
+ Item type
+ Apply filters
+ Clear filters
+ Most recent
+ Least recent
+ Name: A-Z
+ Name: Z-A
+ Filter
+ Subject
+ Program
+
+ - %1$d subject
+ - %1$d subjects
+
+ Failed to load items
+ Start learning
+ Resume learning
+ In Progress
+ Completed
+ Saved
+ Search
+ My content
+ Show more
+ Subjects
+
+ - %1$d item
+ - %1$d items
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d min
+ No results found. Try adjusting your search terms.
+ Failed to update
diff --git a/libs/horizon/src/main/res/values-b+en+GB+instukhe/strings.xml b/libs/horizon/src/main/res/values-b+en+GB+instukhe/strings.xml
index 3d874fe76d..af96d4be0e 100644
--- a/libs/horizon/src/main/res/values-b+en+GB+instukhe/strings.xml
+++ b/libs/horizon/src/main/res/values-b+en+GB+instukhe/strings.xml
@@ -515,6 +515,7 @@
%1$s, marked as %2$s, double tap to edit note
Modules
Programmes
+ Browse
File a ticket for a personal response from our support team.
Enter a prompt
Loading response
@@ -545,4 +546,117 @@
Error: %1$s
Required
+ Search
+ Bookmarked items
+ Completed items
+ Completed
+ Bookmark
+ Remove bookmark
+ Enrol
+ Collapse
+ Expand
+ View full collection
+ No results found. Try adjusting your search terms.
+ Failed to update the bookmark
+ Failed to enrol in item
+ Show more
+ In progress
+ Completed
+ Assessment
+ Assignment
+ Programme
+ Module
+ External tool
+ External link
+ File
+ Page
+ Failed to load collection
+ Search collection
+ Show more
+ No results found. Try adjusting your search terms.
+ Bookmarks
+ Failed to load collection items
+ Search
+ No results found. Try adjusting your search terms.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unit
+ - %1$d units
+
+ Any type
+ Modules
+ Programmes
+ Assessments
+ Assignments
+ External links
+ External tools
+ Files
+ Pages
+ Search
+ No results found. Try adjusting your search terms.
+ Any status
+ Completed
+ Bookmarked
+ Failed to load collections
+ Clear filters
+ Clear search query
+ Overview
+ Ready to join?
+ Not now
+ Enrol
+ Enrol to access the module and start learning.
+ Failed to enrol
+ No items in this collection
+ Recommended
+ Popular with learners at your organisation
+ A next step after %1$s
+ Related to content you\'re interested in
+ To deepen your skills in %1$s
+ you
+ Recommended for %1$s
+ Previous item
+ Next item
+ Collections
+ Filter and sort
+ Sort by
+ Item type
+ Apply filters
+ Clear filters
+ Most recent
+ Least recent
+ Name: A-Z
+ Name: Z-A
+ Filter
+ Module
+ Programme
+
+ - %1$d module
+ - %1$d modules
+
+ Failed to load items
+ Start learning
+ Resume learning
+ In progress
+ Completed
+ Saved
+ Search
+ My content
+ Show more
+ Modules
+
+ - %1$d item
+ - %1$d items
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d min
+ No results found. Try adjusting your search terms.
+ Failed to update
diff --git a/libs/horizon/src/main/res/values-b+nb+NO+instk12/strings.xml b/libs/horizon/src/main/res/values-b+nb+NO+instk12/strings.xml
index 28f8dc23f1..f5a156dd1b 100644
--- a/libs/horizon/src/main/res/values-b+nb+NO+instk12/strings.xml
+++ b/libs/horizon/src/main/res/values-b+nb+NO+instk12/strings.xml
@@ -515,6 +515,7 @@
%1$s, merket som %2$s, dobbelttrykk for å redigere notatet
Fag
Programmer
+ Bla gjennom
Send inn en personlig melding for personlig respons fra vårt support-team.
Skriv inn et spørsmål
Laster inn svar
@@ -545,4 +546,117 @@
Feil: %1$s
Obligatorisk
+ Søk
+ Bokmerkede elementer
+ Fullførte elementer
+ Fullført
+ Bokmerk
+ Fjern bokmerke
+ Delta
+ Skjul
+ Utvid
+ Vis fullstendig kolleksjon
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Kunne ikke oppdatere bokmerket
+ Kunne ikke melde deg på i elementet
+ Vis mer
+ Pågår
+ Fullført
+ Vurdering
+ Oppgave
+ Program
+ Fag
+ Eksternt verktøy
+ Ekstern lenke
+ Fil
+ Side
+ Kunne ikke laste inn kolleksjon
+ Søk etter kolleksjon
+ Vis mer
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Bokmerker
+ Kunne ikke laste inn kolleksjonselementer
+ Søk
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+
+ - %1$d element
+ - %1$d elementer
+
+
+ - %1$d min
+ - %1$d min
+
+
+ - %1$d enhet
+ - %1$d enheter
+
+ Alle typer
+ Fag
+ Programmer
+ Vurderinger
+ Oppgaver
+ Eksterne lenker
+ Eksterne verktøy
+ Filer
+ Sider
+ Søk
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Enhver status
+ Fullført
+ Bokmerket
+ Kunne ikke laste inn kolleksjoner
+ Tøm filtre
+ Tøk søkefelt
+ Oversikt
+ Klar til å bli med?
+ Ikke nå
+ Delta
+ Registrer deg for å få tilgang til faget og begynne å lære.
+ Kunne ikke registrere deg
+ Ingen elementer i denne kolleksjonen
+ Anbefalt
+ Populært blant elevene i organisasjonen din
+ Et neste trinn etter %1$s
+ Relatert til innhold du er interessert i
+ For å fordype ferdighetene dine i %1$s
+ deg
+ Anbefalt for %1$s
+ Forrige artikkel
+ Neste objekt
+ Samlinger
+ Filtrer og sorter
+ Sorter etter
+ Elementtype:
+ Bruk filtre
+ Tøm filtre
+ Nyest
+ Minst nylige
+ Navn: A–Z
+ Navn: Z–A
+ Filter
+ Fag
+ Program
+
+ - %1$d fag
+ - %1$d fag
+
+ Kunne ikke laste inn elementer
+ Begynn å lære
+ Fortsett læring
+ Pågår
+ Fullført
+ Lagret
+ Søk
+ Mitt innhold
+ Vis mer
+ Fag
+
+ - %1$d element
+ - %1$d elementer
+
+ %1$d t %2$d min
+ %1$d t
+ %1$d min
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Kunne ikke oppdatere
diff --git a/libs/horizon/src/main/res/values-b+sv+SE+instk12/strings.xml b/libs/horizon/src/main/res/values-b+sv+SE+instk12/strings.xml
index b166667fdc..a8f24d482d 100644
--- a/libs/horizon/src/main/res/values-b+sv+SE+instk12/strings.xml
+++ b/libs/horizon/src/main/res/values-b+sv+SE+instk12/strings.xml
@@ -515,6 +515,7 @@
%1$s, markerad som %2$s, dubbeltryck för att redigera anteckning
Kurser
Program
+ Bläddra
Registrera ett ärende för ett personligt svar från vårt supportteam.
Ange en prompt
Läser in svar
@@ -545,4 +546,117 @@
Fel: %1$s
Obligatorisk
+ Sök
+ Bokmärkta objekt
+ Slutförda objekt
+ Slutförd
+ Bokmärke
+ Ta bort bokmärke
+ Registrera dig
+ Stäng
+ Expandera
+ Visa fullständig samling
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Det gick inte att uppdatera bokmärket
+ Det gick inte att registrera sig i en kurs
+ Visa mer
+ Pågår
+ Slutförd
+ Bedömning
+ Uppgift
+ Program
+ Kurs
+ Externt verktyg
+ Extern länk
+ Fil
+ Sida
+ Det gick inte att läsa in samlingen
+ Sök i samlingen
+ Visa mer
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Bokmärken
+ Det gick inte att läsa in samlingsobjekt
+ Sök
+ Inga resultat hittades. Prova att ändra söktermerna.
+
+ - %1$d objekt
+ - %1$d objekt
+
+
+ - %1$d min.
+ - %1$d minuter
+
+
+ - %1$d enhet
+ - %1$d enheter
+
+ Valfri typ
+ Kurser
+ Program
+ Bedömningar
+ Uppgifter
+ Externa länkar
+ Externa verktyg
+ Filer
+ Sidor
+ Sök
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Valfri status
+ Slutförd
+ Bokmärkta
+ Det gick inte att läsa in samlingarna
+ Rensa filter
+ Rensa sökfrågan
+ Översikt
+ Är du redo att gå med?
+ Inte nu
+ Registrera dig
+ Registrera dig för att få åtkomst till kursen och börja lära.
+ Det gick inte att registrera
+ Inga objekt i den här samlingen
+ Rekommenderad
+ Populär hos studenter i din organisation
+ Ett nästa steg efter %1$s
+ Relaterat till innehåll som intresserar dig
+ Så att du kan fördjupa dina kunskaper inom %1$s
+ du
+ Rekommenderas för %1$s
+ Föregående objekt
+ Nästa objekt
+ Samlingar
+ Filtrera och sortera
+ Sortera efter
+ Objekttyp
+ Tillämpa filter
+ Rensa filter
+ Senaste
+ Äldst
+ Namn: A–Ö
+ Namn: Ö–A
+ Filtrera
+ Kurs
+ Program
+
+ - %1$d kurs
+ - %1$d kurser
+
+ Det gick inte att läsa in objekt
+ Börja inlärningen
+ Återuppta lärande
+ Pågående
+ Slutförd
+ Sparad
+ Sök
+ Mitt innehåll
+ Visa mer
+ Kurser
+
+ - %1$d objekt
+ - %1$d objekt
+
+ %1$d tim. %2$d min.
+ %1$d tim.
+ %1$d min.
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Det gick inte att uppdatera
diff --git a/libs/horizon/src/main/res/values-b+zh+HK/strings.xml b/libs/horizon/src/main/res/values-b+zh+HK/strings.xml
index 2b191ab437..325cb4e84b 100644
--- a/libs/horizon/src/main/res/values-b+zh+HK/strings.xml
+++ b/libs/horizon/src/main/res/values-b+zh+HK/strings.xml
@@ -505,6 +505,7 @@
%1$s 標記為 %2$s,點選兩下以編輯筆記
課程
項目
+ 瀏覽
提交票證,以獲取支援團隊親自回覆。
輸入提示
載入回應
@@ -534,4 +535,112 @@
錯誤:%1$s
必填
+ 搜尋
+ 已加入書籤的項目
+ 完成的項目
+ 已完成
+ 書籤
+ 移除書籤
+ 註冊
+ 收起
+ 展開
+ 檢視完整收藏
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 無法更新書籤
+ 無法註冊項目
+ 顯示更多
+ 進行中
+ 已完成
+ 評估
+ 作業
+ 方案
+ 課程
+ 外部工具
+ 外部連結
+ 檔案
+ 頁面
+ 無法載入收藏
+ 搜尋收藏
+ 顯示更多
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 書籤
+ 無法載入收藏項目
+ 搜尋
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+
+ - %1$d 項目
+
+
+ - %1$d 分鐘
+
+
+ - %1$d 個單位
+
+ 任何類型
+ 課程
+ 方案
+ 評估
+ 作業列表
+ 外部連結
+ 外部工具
+ 檔案
+ 內容頁
+ 搜尋
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 任何狀態
+ 已完成
+ 已加入書籤
+ 無法載入收藏
+ 清除篩選器
+ 清除搜尋查詢
+ 概覽
+ 準備好加入?
+ 暫不
+ 註冊
+ 立即註冊以存取課程並開始學習。
+ 無法註冊
+ 此收藏中沒有項目
+ 推薦
+ 深受貴組織學員歡迎
+ %1$s 後的下一個步驟
+ 與您感興趣的內容有關
+ 強化您在 %1$s 方面的技能
+ 您
+ 推薦 %1$s
+ 上一個項目
+ 下一個項目
+ 收藏
+ 篩選和排序
+ 排序依據
+ 項目類型
+ 套用篩選器
+ 清除篩選器
+ 最新
+ 最近
+ 名稱:A-Z
+ 名稱:Z-A
+ 篩選器
+ 課程
+ 方案
+
+ - %1$d 個課程
+
+ 無法載入項目
+ 開始學習
+ 繼續學習
+ 進行中
+ 已完成
+ 已儲存
+ 搜尋
+ 我的內容
+ 顯示更多
+ 課程
+
+ - %1$d 項目
+
+ %1$d 小時 %2$d 分鐘
+ %1$d 小時
+ %1$d 分鐘
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 無法更新
diff --git a/libs/horizon/src/main/res/values-b+zh+Hans/strings.xml b/libs/horizon/src/main/res/values-b+zh+Hans/strings.xml
index 0c947df97a..c013e9dca4 100644
--- a/libs/horizon/src/main/res/values-b+zh+Hans/strings.xml
+++ b/libs/horizon/src/main/res/values-b+zh+Hans/strings.xml
@@ -505,6 +505,7 @@
%1$s,标记为%2$s,双击以编辑笔记
课程
项目
+ 浏览
向我们的支持团队提问。
输入提示
加载回应
@@ -534,4 +535,112 @@
错误:%1$s
必填
+ 搜索
+ 书签项目
+ 已完成项目
+ 已完成
+ 书签
+ 删除书签
+ 注册
+ 折叠
+ 展开
+ 查看完整合集
+ 未找到结果。尝试调整搜索词
+ 更新书签失败
+ 注册项目失败
+ 显示更多
+ 进行中
+ 已完成
+ 评估
+ 作业
+ 项目
+ 课程
+ 外部工具
+ 外部链接
+ 文件
+ 页面
+ 加载合集失败
+ 搜索合集
+ 显示更多
+ 未找到结果。尝试调整搜索词
+ 书签
+ 加载合集项目失败
+ 搜索
+ 未找到结果。尝试调整搜索词
+
+ - %1$d 个项目
+
+
+ - %1$d 分钟
+
+
+ - %1$d 个单位
+
+ 任意类型
+ 课程
+ 计划
+ 评估
+ 作业
+ 外部链接
+ 外部工具
+ 文件
+ 页面
+ 搜索
+ 未找到结果。尝试调整搜索词
+ 任何状态
+ 已完成
+ 已加入书签
+ 加载合集失败
+ 清除筛选器
+ 清除搜索查询
+ 总览
+ 准备加入?
+ 暂时不用
+ 注册
+ 注册以访问课程并开始学习。
+ 注册失败
+ 此合集中没有项目
+ 推荐
+ 在组织学员中受欢迎
+ %1$s后的下一步
+ 与您感兴趣的内容相关
+ 加上您在%1$s方面的技能
+ 您
+ 针对%1$s推荐
+ 先前的项目
+ 下一个项目
+ 集合
+ 筛选并排序
+ 排序
+ 项目类型
+ 应用过滤器
+ 清除筛选器
+ 最近优先
+ 最早优先
+ 名称:A-Z
+ 名称:Z-A
+ 筛选器
+ 课程
+ 项目
+
+ - %1$d 门课程
+
+ 加载项目失败
+ 开始学习
+ 恢复学习
+ 进行中
+ 已完成
+ 已保存
+ 搜索
+ 我的内容
+ 显示更多
+ 课程
+
+ - %1$d 个项目
+
+ %1$d 小时 %2$d 分钟
+ %1$d 小时
+ 最少 %1$d
+ 未找到结果。尝试调整搜索词
+ 更新失败
diff --git a/libs/horizon/src/main/res/values-b+zh+Hant/strings.xml b/libs/horizon/src/main/res/values-b+zh+Hant/strings.xml
index 2b191ab437..325cb4e84b 100644
--- a/libs/horizon/src/main/res/values-b+zh+Hant/strings.xml
+++ b/libs/horizon/src/main/res/values-b+zh+Hant/strings.xml
@@ -505,6 +505,7 @@
%1$s 標記為 %2$s,點選兩下以編輯筆記
課程
項目
+ 瀏覽
提交票證,以獲取支援團隊親自回覆。
輸入提示
載入回應
@@ -534,4 +535,112 @@
錯誤:%1$s
必填
+ 搜尋
+ 已加入書籤的項目
+ 完成的項目
+ 已完成
+ 書籤
+ 移除書籤
+ 註冊
+ 收起
+ 展開
+ 檢視完整收藏
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 無法更新書籤
+ 無法註冊項目
+ 顯示更多
+ 進行中
+ 已完成
+ 評估
+ 作業
+ 方案
+ 課程
+ 外部工具
+ 外部連結
+ 檔案
+ 頁面
+ 無法載入收藏
+ 搜尋收藏
+ 顯示更多
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 書籤
+ 無法載入收藏項目
+ 搜尋
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+
+ - %1$d 項目
+
+
+ - %1$d 分鐘
+
+
+ - %1$d 個單位
+
+ 任何類型
+ 課程
+ 方案
+ 評估
+ 作業列表
+ 外部連結
+ 外部工具
+ 檔案
+ 內容頁
+ 搜尋
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 任何狀態
+ 已完成
+ 已加入書籤
+ 無法載入收藏
+ 清除篩選器
+ 清除搜尋查詢
+ 概覽
+ 準備好加入?
+ 暫不
+ 註冊
+ 立即註冊以存取課程並開始學習。
+ 無法註冊
+ 此收藏中沒有項目
+ 推薦
+ 深受貴組織學員歡迎
+ %1$s 後的下一個步驟
+ 與您感興趣的內容有關
+ 強化您在 %1$s 方面的技能
+ 您
+ 推薦 %1$s
+ 上一個項目
+ 下一個項目
+ 收藏
+ 篩選和排序
+ 排序依據
+ 項目類型
+ 套用篩選器
+ 清除篩選器
+ 最新
+ 最近
+ 名稱:A-Z
+ 名稱:Z-A
+ 篩選器
+ 課程
+ 方案
+
+ - %1$d 個課程
+
+ 無法載入項目
+ 開始學習
+ 繼續學習
+ 進行中
+ 已完成
+ 已儲存
+ 搜尋
+ 我的內容
+ 顯示更多
+ 課程
+
+ - %1$d 項目
+
+ %1$d 小時 %2$d 分鐘
+ %1$d 小時
+ %1$d 分鐘
+ 找不到結果。請嘗試調整您的搜尋詞彙。
+ 無法更新
diff --git a/libs/horizon/src/main/res/values-ca/strings.xml b/libs/horizon/src/main/res/values-ca/strings.xml
index f7e7c1be36..7a62fe7693 100644
--- a/libs/horizon/src/main/res/values-ca/strings.xml
+++ b/libs/horizon/src/main/res/values-ca/strings.xml
@@ -515,6 +515,7 @@
%1$s, s’ha marcat com a %2$s, toqueu-hi dues vegades per editar la nota
Assignatures
Programes
+ Explora-ho
Presenteu una sol·licitud de resposta personal del nostre equip de suport tècnic.
Introduïu una sol·licitud
S’està carregant la resposta
@@ -545,4 +546,117 @@
Error: %1$s
Obligatori
+ Cerca-ho
+ Elements afegits als preferits
+ Elements completats
+ S’ha completat
+ Afegeix-ho als preferits
+ Elimineu l\'adreça d\'interès
+ Inscriu-t’hi
+ Contrau-ho
+ Desplega-ho
+ Mostreu la col·lecció completa
+ No s\'ha trobat cap resultat. Proveu d’ajustar els termes de cerca.
+ No s’ha pogut actualitzar l\'adreça d’interès
+ No s\'ha pogut inscriure en l’element
+ Mostreu-ne més
+ En curs
+ S’ha completat
+ Avaluació
+ Activitat
+ Programa
+ Assignatura
+ Eina externa
+ Enllaç extern
+ Fitxer
+ Pàgina
+ No s\'ha pogut carregar la col·lecció
+ Feu una cerca a la col·lecció
+ Mostreu-ne més
+ No s\'ha trobat cap resultat. Proveu d’ajustar els termes de cerca.
+ Adreces d’interès
+ No s’han pogut carregar els elements de la col·lecció
+ Cerca-ho
+ No s\'ha trobat cap resultat. Proveu d’ajustar els termes de cerca.
+
+ - %1$d element
+ - %1$d elements
+
+
+ - %1$d com a mínim
+ - %1$d minuts
+
+
+ - %1$d unitat
+ - %1$d unitats
+
+ Qualsevol tipus
+ Assignatures
+ Programes
+ Avaluacions
+ Activitats
+ Enllaços externs
+ Eines externes
+ Fitxers
+ Pàgines
+ Cerca-ho
+ No s\'ha trobat cap resultat. Proveu d’ajustar els termes de cerca.
+ Qualsevol estat
+ S’ha completat
+ S’ha afegit als preferits
+ No s\'han pogut carregar les col·leccions
+ Esborreu els filtres
+ Esborreu la consulta de cerca
+ Vista general
+ Esteu a punt per unir-vos-hi?
+ Ara mateix no
+ Inscriu-t’hi
+ Inscriviu-vos-hi per accedir a l’assignatura i començar a aprendre.
+ No s\'ha pogut fer la inscripció
+ No hi ha cap element en aquesta col·lecció
+ Recomanat
+ És popular entre els alumnes de la vostra organització
+ Un pas següent després de %1$s
+ Està relacionat amb el contingut que us interessa
+ Per intensificar les vostres habilitats en %1$s
+ vós
+ Recomanat per a %1$s
+ L\'element anterior
+ L\'element següent
+ Col·leccions
+ Filtreu-ho i ordeneu-ho
+ Ordena-ho per
+ Tipus d\'element
+ Apliqueu els filtres
+ Esborreu els filtres
+ La més recent
+ La menys recent
+ Nom: A–Z
+ Nom: Z–A
+ Filtra-ho
+ Assignatura
+ Programa
+
+ - %1$d assignatura
+ - %1$d assignatures
+
+ No s’han pogut carregar els elements
+ Comenceu a aprendre
+ Repreneu l’aprenentatge
+ En curs
+ S’ha completat
+ S’ha desat
+ Cerca-ho
+ El meu contingut
+ Mostreu-ne més
+ Assignatures
+
+ - %1$d element
+ - %1$d elements
+
+ %1$d h %2$d min
+ %1$d h
+ %1$d min
+ No s\'ha trobat cap resultat. Proveu d’ajustar els termes de cerca.
+ No s\'ha pogut fer l’actualització
diff --git a/libs/horizon/src/main/res/values-cy/strings.xml b/libs/horizon/src/main/res/values-cy/strings.xml
index bd9862ce01..ac759bb9c1 100644
--- a/libs/horizon/src/main/res/values-cy/strings.xml
+++ b/libs/horizon/src/main/res/values-cy/strings.xml
@@ -515,6 +515,7 @@
%1$s, wedi’i farcio fel %2$s, tapiwch ddwywaith i olygu’r nodyn
Cyrsiau
Rhaglenni
+ Pori
Gallwch ffeilio tocyn i gael ymateb personol gan ein tîm cymorth.
Rhowch awgrym
Wrthi’n llwytho ymateb
@@ -545,4 +546,117 @@
Gwall: %1$s
Gofynnol
+ Chwilio
+ Eitemau â nod tudalen
+ Eitemau wedi’u cwblhau
+ Wedi cwblhau
+ Nod tudalen
+ Tynnu nod tudalen
+ Ymrestru
+ Crebachu
+ Ehangu
+ Gweld y casgliad llawn
+ Heb ddod o hyd i ganlyniadau. Rhowch gynnig ar newid eich termau chwilio.
+ Wedi methu diweddaru’r nod tudalen
+ Wedi methu cofrestru ar gyfer yr eitem
+ Dangos mwy
+ Ar y gweill
+ Wedi cwblhau
+ Asesiad
+ Aseiniad
+ Rhaglen
+ Cwrs
+ Adnodd allanol
+ Dolen allanol
+ Ffeil
+ Tudalen
+ Wedi methu llwytho casgliad
+ Chwilio am gasgliad
+ Dangos mwy
+ Heb ddod o hyd i ganlyniadau. Rhowch gynnig ar newid eich termau chwilio.
+ Nodau tudalen
+ Wedi methu llwytho eitemau’r casgliad
+ Chwilio
+ Heb ddod o hyd i ganlyniadau. Rhowch gynnig ar newid eich termau chwilio.
+
+ - %1$d eitem
+ - %1$d eitem
+
+
+ - %1$d isafswm
+ - %1$d munud
+
+
+ - %1$d uned
+ - %1$d uned
+
+ Unrhyw fath
+ Cyrsiau
+ Rhaglenni
+ Asesiadau
+ Aseiniadau
+ Dolenni allanol
+ Adnoddau allanol
+ Ffeiliau
+ Tudalennau
+ Chwilio
+ Heb ddod o hyd i ganlyniadau. Rhowch gynnig ar newid eich termau chwilio.
+ Unrhyw statws
+ Wedi cwblhau
+ Wedi gosod Nod Tudalen
+ Wedi methu llwytho\'r casgliadau
+ Clirio’r hidlyddion
+ Clirio\'r ymholiad chwilio
+ Trosolwg
+ Barod i ymuno?
+ Dim nawr
+ Cofrestru
+ Cofrestrwch i gael mynediad at y cwrs a dechrau dysgu.
+ Wedi methu cofrestru
+ Dim eitemau yn y casgliad hwn
+ Argymelledig
+ Poblogaidd ymysg dysgwyr yn eich sefydliad
+ Cam nesaf ar ôl %1$s
+ Yn gysylltiedig â chynnwys sydd o ddiddordeb i chi
+ Er mwyn dyfnhau eich sgiliau mewn %1$s
+ chi
+ Argymhellir i chi %1$s
+ Eitem flaenorol
+ Eitem nesaf
+ Casgliadau
+ Hidlo a threfnu
+ Trefnu yn ôl
+ Math o eitem
+ Rhoi hidlyddion ar waith
+ Clirio’r hidlyddion
+ Mwyaf diweddar
+ Lleiaf diweddar
+ Enw: A-Z
+ Enw: Z-A
+ Hidlo
+ Cwrs
+ Rhaglen
+
+ - %1$d cwrs
+ - %1$d o gyrsiau
+
+ Wedi methu i llwytho’r eitemau
+ Dechrau dysgu
+ Ailddechrau dysgu
+ Ar y Gweill
+ Wedi cwblhau
+ Wedi Cadw
+ Chwilio
+ Fy Nghynnwys
+ Dangos mwy
+ Cyrsiau
+
+ - %1$d eitem
+ - %1$d eitem
+
+ %1$d awr %2$d munud
+ %1$d awr
+ %1$d isafswm
+ Heb ddod o hyd i ganlyniadau. Rhowch gynnig ar newid eich termau chwilio.
+ Wedi methu diweddaru
diff --git a/libs/horizon/src/main/res/values-da/strings.xml b/libs/horizon/src/main/res/values-da/strings.xml
index 6e82e1f30d..64d5ae72a0 100644
--- a/libs/horizon/src/main/res/values-da/strings.xml
+++ b/libs/horizon/src/main/res/values-da/strings.xml
@@ -515,6 +515,7 @@
%1$s, markeret som %2$s, dobbelttryk for at redigere noten
Fag
Programmer
+ Gennemse
Indsend besked for et personligt svar fra vores supportteam
Indtast en prompt
Indlæser svar
@@ -545,4 +546,117 @@
Fejl: %1$s
Påkrævet
+ Søg
+ Bogmærkede elementer
+ Fuldførte elementer
+ Fuldført
+ Bogmærke
+ Fjern bogmærke
+ Tilmeld
+ Skjul
+ Udvid
+ Vis hele kollektionen
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Bogmærket kunne ikke opdateres
+ Kunne ikke tilmelde sig elementet
+ Vis mere
+ I gang
+ Fuldført
+ Bedømmelse
+ Opgave
+ Program
+ Fag
+ Eksternt værktøj
+ Eksternt link
+ Fil
+ Side
+ Kunne ikke indlæse samlingen
+ Søg i samlingen
+ Vis mere
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Bogmærker
+ Kunne ikke indlæse samlingselementer
+ Søg
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+
+ - %1$d element
+ - %1$d elementer
+
+
+ - %1$d min.
+ - %1$d minutter
+
+
+ - %1$d enhed
+ - %1$d enheder
+
+ Enhver type
+ Fag
+ Programmer
+ Vurderinger
+ Opgaver
+ Eksterne links
+ Eksterne værktøjer
+ Filer
+ Sider
+ Søg
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Enhver status
+ Fuldført
+ Bogmærket
+ Kunne ikke indlæse samlinger
+ Nulstil filtre
+ Ryd søgeforespørgsel
+ Oversigt
+ Klar til at deltage?
+ Ikke nu
+ Tilmeld
+ Tilmeld dig for at få adgang til faget og begynde at lære.
+ Kunne ikke tilmelde
+ Ingen elementer i denne samling
+ Anbefalet
+ Populær blandt studerende i din organisation
+ Et næste trin efter %1$s
+ Relateret til indhold, du er interesseret i
+ For at uddybe dine færdigheder inden for %1$s
+ du
+ Anbefales til %1$s
+ Forrige element
+ Næste element
+ Samlinger
+ Filtrer og sorter
+ Sorter efter
+ Elementtype
+ Anvend filtre
+ Nulstil filtre
+ Seneste
+ Seneste nylige
+ Navn: A-Z
+ Navn: Z-A
+ Filter
+ Fag
+ Program
+
+ - %1$d fag
+ - %1$d fag
+
+ Kunne ikke indlæse elementer
+ Begynd at lære
+ Genoptag læring
+ I gang
+ Fuldført
+ Gemt
+ Søg
+ Mit indhold
+ Vis mere
+ Fag
+
+ - %1$d element
+ - %1$d elementer
+
+ %1$d timer %2$d min.
+ %1$d timer
+ %1$d min.
+ Ingen resultater fundet. Prøv at justere dine søgeord.
+ Kunne ikke opdatere
diff --git a/libs/horizon/src/main/res/values-de/strings.xml b/libs/horizon/src/main/res/values-de/strings.xml
index e98e246395..a4f9035b4b 100644
--- a/libs/horizon/src/main/res/values-de/strings.xml
+++ b/libs/horizon/src/main/res/values-de/strings.xml
@@ -515,6 +515,7 @@
%1$s, markiert als %2$s, Doppeltippen zum Bearbeiten der Notiz
Kurse
Programme
+ Durchsuchen
Eine Anfrage an unser Supportteam senden
Aufforderung eingeben
Antwort wird geladen
@@ -545,4 +546,117 @@
Fehler: %1$s
Erforderlich
+ Suchen
+ Mit Lesezeichen versehene Elemente
+ Abgeschlossene Elemente
+ Fertiggestellt
+ Lesezeichen
+ Lesezeichen entfernen
+ Anmelden
+ Ausblenden
+ Erweitern
+ Gesamte Sammlung anzeigen
+ Keine Ergebnisse gefunden. Versuchen Sie, Ihre Suchbegriffe anzupassen.
+ Aktualisierung der Lesezeichen ist fehlgeschlagen
+ Anmeldung für das Element ist fehlgeschlagen
+ Mehr anzeigen
+ In Bearbeitung
+ Fertiggestellt
+ Bewertung
+ Aufgabe
+ Programm
+ Kurs
+ Externes Tool
+ Externer Link
+ Datei
+ Seite
+ Sammlung konnte nicht geladen werden
+ Sammlung durchsuchen
+ Mehr anzeigen
+ Keine Ergebnisse gefunden. Versuchen Sie, Ihre Suchbegriffe anzupassen.
+ Lesezeichen
+ Sammlungselemente konnten nicht geladen werden
+ Suchen
+ Keine Ergebnisse gefunden. Versuchen Sie, Ihre Suchbegriffe anzupassen.
+
+ - %1$d Objekt
+ - %1$d Objekte
+
+
+ - %1$d Min.
+ - %1$d Min.
+
+
+ - %1$d Einheit
+ - %1$d Einheiten
+
+ Beliebiger Typ
+ Kurse
+ Programme
+ Bewertungen
+ Aufgaben
+ Externe Links
+ Externe Tools
+ Dateien
+ Seiten
+ Suchen
+ Keine Ergebnisse gefunden. Versuchen Sie, Ihre Suchbegriffe anzupassen.
+ Beliebiger Status
+ Fertiggestellt
+ Mit Lesezeichen versehen
+ Sammlungen konnten nicht geladen werden
+ Filter löschen
+ Suchanfrage löschen
+ Überblick
+ Sind Sie bereit, beizutreten?
+ Nicht jetzt
+ Anmelden
+ Schreiben Sie sich ein, um auf den Kurs zuzugreifen und mit dem Lernen zu beginnen.
+ Einschreibung fehlgeschlagen
+ Keine Elemente in dieser Sammlung
+ Empfohlen
+ Beliebt bei Lernenden in Ihrer Organisation
+ Ein nächster Schritt nach %1$s
+ Verwandt mit Inhalten, die Sie interessieren
+ Um Ihre Fähigkeiten in %1$s zu vertiefen
+ Sie
+ Empfohlen für %1$s
+ Vorheriges Element
+ Nächstes Element
+ Sammlungen
+ Filtern und sortieren
+ Sortieren nach
+ Elementtyp
+ Filter anwenden
+ Filter löschen
+ Neueste
+ Älteste
+ Name: A–Z
+ Name: Z–A
+ Filter
+ Kurs
+ Programm
+
+ - %1$d Kurs
+ - %1$d Kurse
+
+ Elemente konnten nicht geladen werden
+ Mit dem Lernen beginnen
+ Lernen fortsetzen
+ In Arbeit
+ Fertiggestellt
+ Gespeichert
+ Suchen
+ Meine Inhalte
+ Mehr anzeigen
+ Kurse
+
+ - %1$d Objekt
+ - %1$d Objekte
+
+ %1$d Std. %2$d Min.
+ %1$d Std.
+ %1$d Min.
+ Keine Ergebnisse gefunden. Versuchen Sie, Ihre Suchbegriffe anzupassen.
+ Aktualisierung fehlgeschlagen
diff --git a/libs/horizon/src/main/res/values-en-rAU/strings.xml b/libs/horizon/src/main/res/values-en-rAU/strings.xml
index 8fab9e3e58..c418b0f504 100644
--- a/libs/horizon/src/main/res/values-en-rAU/strings.xml
+++ b/libs/horizon/src/main/res/values-en-rAU/strings.xml
@@ -515,6 +515,7 @@
%1$s, marked as %2$s, double tap to edit note
Courses
Programs
+ Browse
File a ticket for a personal response from our support team.
Enter a prompt
Loading response
@@ -545,4 +546,117 @@
Error: %1$s
Required
+ Search
+ Bookmarked items
+ Completed items
+ Completed
+ Bookmark
+ Remove bookmark
+ Enrol
+ Collapse
+ Expand
+ View full collection
+ No results found. Try adjusting your search terms.
+ Failed to update the bookmark
+ Failed to enrol in item
+ Show more
+ In progress
+ Completed
+ Assessment
+ Assignment
+ Program
+ Course
+ External tool
+ External link
+ File
+ Page
+ Failed to load collection
+ Search collection
+ Show more
+ No results found. Try adjusting your search terms.
+ Bookmarks
+ Failed to load collection items
+ Search
+ No results found. Try adjusting your search terms.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unit
+ - %1$d units
+
+ Any type
+ Courses
+ Programs
+ Assessments
+ Assignments
+ External links
+ External tools
+ Files
+ Pages
+ Search
+ No results found. Try adjusting your search terms.
+ Any status
+ Completed
+ Bookmarked
+ Failed to load collections
+ Clear filters
+ Clear search query
+ Overview
+ Ready to join?
+ Not now
+ Enrol
+ Enrol to access the course and start learning.
+ Failed to enrol
+ No items in this collection
+ Recommended
+ Popular with learners at your organisation
+ A next step after %1$s
+ Related to content you\'re interested in
+ To deepen your skills in %1$s
+ you
+ Recommended for %1$s
+ Previous item
+ Next item
+ Collections
+ Filter and sort
+ Sort by
+ Item type
+ Apply filters
+ Clear filters
+ Most recent
+ Least recent
+ Name: A-Z
+ Name: Z-A
+ Filter
+ Course
+ Program
+
+ - %1$d course
+ - %1$d courses
+
+ Failed to load items
+ Start learning
+ Resume learning
+ In Progress
+ Completed
+ Saved
+ Search
+ My content
+ Show more
+ Courses
+
+ - %1$d item
+ - %1$d items
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d min
+ No results found. Try adjusting your search terms.
+ Failed to update
diff --git a/libs/horizon/src/main/res/values-en-rCY/strings.xml b/libs/horizon/src/main/res/values-en-rCY/strings.xml
index 3d874fe76d..af96d4be0e 100644
--- a/libs/horizon/src/main/res/values-en-rCY/strings.xml
+++ b/libs/horizon/src/main/res/values-en-rCY/strings.xml
@@ -515,6 +515,7 @@
%1$s, marked as %2$s, double tap to edit note
Modules
Programmes
+ Browse
File a ticket for a personal response from our support team.
Enter a prompt
Loading response
@@ -545,4 +546,117 @@
Error: %1$s
Required
+ Search
+ Bookmarked items
+ Completed items
+ Completed
+ Bookmark
+ Remove bookmark
+ Enrol
+ Collapse
+ Expand
+ View full collection
+ No results found. Try adjusting your search terms.
+ Failed to update the bookmark
+ Failed to enrol in item
+ Show more
+ In progress
+ Completed
+ Assessment
+ Assignment
+ Programme
+ Module
+ External tool
+ External link
+ File
+ Page
+ Failed to load collection
+ Search collection
+ Show more
+ No results found. Try adjusting your search terms.
+ Bookmarks
+ Failed to load collection items
+ Search
+ No results found. Try adjusting your search terms.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unit
+ - %1$d units
+
+ Any type
+ Modules
+ Programmes
+ Assessments
+ Assignments
+ External links
+ External tools
+ Files
+ Pages
+ Search
+ No results found. Try adjusting your search terms.
+ Any status
+ Completed
+ Bookmarked
+ Failed to load collections
+ Clear filters
+ Clear search query
+ Overview
+ Ready to join?
+ Not now
+ Enrol
+ Enrol to access the module and start learning.
+ Failed to enrol
+ No items in this collection
+ Recommended
+ Popular with learners at your organisation
+ A next step after %1$s
+ Related to content you\'re interested in
+ To deepen your skills in %1$s
+ you
+ Recommended for %1$s
+ Previous item
+ Next item
+ Collections
+ Filter and sort
+ Sort by
+ Item type
+ Apply filters
+ Clear filters
+ Most recent
+ Least recent
+ Name: A-Z
+ Name: Z-A
+ Filter
+ Module
+ Programme
+
+ - %1$d module
+ - %1$d modules
+
+ Failed to load items
+ Start learning
+ Resume learning
+ In progress
+ Completed
+ Saved
+ Search
+ My content
+ Show more
+ Modules
+
+ - %1$d item
+ - %1$d items
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d min
+ No results found. Try adjusting your search terms.
+ Failed to update
diff --git a/libs/horizon/src/main/res/values-en-rGB/strings.xml b/libs/horizon/src/main/res/values-en-rGB/strings.xml
index 442dde6197..5ae131782e 100644
--- a/libs/horizon/src/main/res/values-en-rGB/strings.xml
+++ b/libs/horizon/src/main/res/values-en-rGB/strings.xml
@@ -515,6 +515,7 @@
%1$s, marked as %2$s, double tap to edit note
Courses
Programmes
+ Browse
File a ticket for a personal response from our support team.
Enter a prompt
Loading response
@@ -545,4 +546,117 @@
Error: %1$s
Required
+ Search
+ Bookmarked items
+ Completed items
+ Completed
+ Bookmark
+ Remove bookmark
+ Enrol
+ Collapse
+ Expand
+ View full collection
+ No results found. Try adjusting your search terms.
+ Failed to update the bookmark
+ Failed to enrol in item
+ Show more
+ In progress
+ Completed
+ Assessment
+ Assignment
+ Programme
+ Course
+ External tool
+ External link
+ File
+ Page
+ Failed to load collection
+ Search collection
+ Show more
+ No results found. Try adjusting your search terms.
+ Bookmarks
+ Failed to load collection items
+ Search
+ No results found. Try adjusting your search terms.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unit
+ - %1$d units
+
+ Any type
+ Courses
+ Programmes
+ Assessments
+ Assignments
+ External links
+ External tools
+ Files
+ Pages
+ Search
+ No results found. Try adjusting your search terms.
+ Any status
+ Completed
+ Bookmarked
+ Failed to load collections
+ Clear filters
+ Clear search query
+ Overview
+ Ready to join?
+ Not now
+ Enrol
+ Enrol to access the course and start learning.
+ Failed to enrol
+ No items in this collection
+ Recommended
+ Popular with learners at your organisation
+ A next step after %1$s
+ Related to content you\'re interested in
+ To deepen your skills in %1$s
+ you
+ Recommended for %1$s
+ Previous item
+ Next item
+ Collections
+ Filter and sort
+ Sort by
+ Item type
+ Apply filters
+ Clear filters
+ Most recent
+ Least recent
+ Name: A-Z
+ Name: Z-A
+ Filter
+ Course
+ Programme
+
+ - %1$d course
+ - %1$d courses
+
+ Failed to load items
+ Start learning
+ Resume learning
+ In progress
+ Completed
+ Saved
+ Search
+ My content
+ Show more
+ Courses
+
+ - %1$d item
+ - %1$d items
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d min
+ No results found. Try adjusting your search terms.
+ Failed to update
diff --git a/libs/horizon/src/main/res/values-en/strings.xml b/libs/horizon/src/main/res/values-en/strings.xml
index a5eca76fbf..870f4f606d 100644
--- a/libs/horizon/src/main/res/values-en/strings.xml
+++ b/libs/horizon/src/main/res/values-en/strings.xml
@@ -514,6 +514,7 @@
%1$s, marked as %2$s, double tap to edit note
Courses
Programs
+ Browse
File a ticket for a personal response from our support team.
Enter a prompt
Loading response
@@ -544,4 +545,117 @@
Error: %1$s
Required
+ Search
+ Bookmarked items
+ Completed items
+ Completed
+ Bookmark
+ Remove bookmark
+ Enroll
+ Collapse
+ Expand
+ View full collection
+ No results found. Try adjusting your search terms.
+ Failed to update the bookmark
+ Failed to enroll in item
+ Show more
+ In progress
+ Completed
+ Assessment
+ Assignment
+ Program
+ Course
+ External tool
+ External link
+ File
+ Page
+ Failed to load collection
+ Search collection
+ Show more
+ No results found. Try adjusting your search terms.
+ Bookmarks
+ Failed to load collection items
+ Search
+ No results found. Try adjusting your search terms.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unit
+ - %1$d units
+
+ Any type
+ Courses
+ Programs
+ Assessments
+ Assignments
+ External links
+ External tools
+ Files
+ Pages
+ Search
+ No results found. Try adjusting your search terms.
+ Any status
+ Completed
+ Bookmarked
+ Failed to load collections
+ Clear filters
+ Clear search query
+ Overview
+ Ready to join?
+ Not now
+ Enroll
+ Enroll to access the course and start learning.
+ Failed to enroll
+ No items in this collection
+ Recommended
+ Popular with learners at your organization
+ A next step after %1$s
+ Related to content you\'re interested in
+ To deepen your skills in %1$s
+ you
+ Recommended for %1$s
+ Previous item
+ Next item
+ Collections
+ Filter and sort
+ Sort by
+ Item type
+ Apply filters
+ Clear filters
+ Most recent
+ Least recent
+ Name: A-Z
+ Name: Z-A
+ Filter
+ Course
+ Program
+
+ - %1$d course
+ - %1$d courses
+
+ Failed to load items
+ Start learning
+ Resume learning
+ In Progress
+ Completed
+ Saved
+ Search
+ My content
+ Show more
+ Courses
+
+ - %1$d item
+ - %1$d items
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d min
+ No results found. Try adjusting your search terms.
+ Failed to update
\ No newline at end of file
diff --git a/libs/horizon/src/main/res/values-es-rES/strings.xml b/libs/horizon/src/main/res/values-es-rES/strings.xml
index 01a6174dd3..e5a1bceffc 100644
--- a/libs/horizon/src/main/res/values-es-rES/strings.xml
+++ b/libs/horizon/src/main/res/values-es-rES/strings.xml
@@ -515,6 +515,7 @@
%1$s, marcado como %2$s, toca dos veces para editar la anotación
Asignaturas
Programas
+ Explorar
Crea un ticket para obtener una respuesta personal de nuestro equipo de asistencia técnica.
Introducir un mensaje
Carga de la respuesta
@@ -545,4 +546,117 @@
Error: %1$s
Obligatorio
+ Buscar
+ Ítems favoritos
+ Ítems completados
+ Completado
+ Marcar como favorito
+ Quitar de favoritos
+ Inscribir
+ Colapsar
+ Expandir
+ Ver colección completa
+ No se han encontrado resultados. Intenta ajustar tus términos de búsqueda.
+ No se ha podido actualizar el favorito
+ No se ha podido realizar la inscripción en el ítem
+ Mostrar más
+ En curso
+ Completado
+ Evaluación
+ Actividad
+ Programa
+ Asignatura
+ Herramienta externa
+ Enlace externo
+ Archivo
+ Página
+ No se ha podido cargar la colección
+ Buscar colección
+ Mostrar más
+ No se han encontrado resultados. Intenta ajustar tus términos de búsqueda.
+ Favoritos
+ No se han podido cargar los ítems de la colección
+ Buscar
+ No se han encontrado resultados. Intenta ajustar tus términos de búsqueda.
+
+ - %1$d ítem
+ - %1$d ítems
+
+
+ - %1$d min
+ - %1$d minutos
+
+
+ - %1$d unidad
+ - %1$d unidades
+
+ Cualquier tipo
+ Asignaturas
+ Programas
+ Evaluaciones
+ Actividades
+ Enlaces externos
+ Herramientas externas
+ Archivos
+ Páginas
+ Buscar
+ No se han encontrado resultados. Intenta ajustar tus términos de búsqueda.
+ Cualquier estado
+ Completado
+ En favoritos
+ No se han podido cargar las colecciones
+ Borrar filtros
+ Borrar consulta de búsqueda
+ Resumen
+ ¿Listo para unirte?
+ Ahora no
+ Inscribir
+ Inscríbete para acceder a la asignatura y empezar a aprender.
+ No se ha podido realizar la inscripción
+ No hay ítems en esta colección
+ Recomendado
+ Popular entre los estudiantes de tu organización
+ Un paso después de %1$s
+ Relacionado con contenido que te interesa
+ Para profundizar en tus habilidades de %1$s
+ tú
+ Recomendado para %1$s
+ Ítem anterior
+ Siguiente ítem
+ Colecciones
+ Filtrar y ordenar
+ Ordenar por
+ Tipo de ítem
+ Aplicar filtros
+ Borrar filtros
+ Más reciente
+ Menos reciente
+ Nombre: A-Z
+ Nombre: Z-A
+ Filtrar
+ Asignatura
+ Programa
+
+ - %1$d asignatura
+ - %1$d asignaturas
+
+ No se han podido cargar los ítems
+ Comenzar a aprender
+ Reanudar el aprendizaje
+ En curso
+ Completado
+ Guardado
+ Buscar
+ Mi contenido
+ Mostrar más
+ Asignaturas
+
+ - %1$d ítem
+ - %1$d ítems
+
+ %1$d horas %2$d min
+ %1$d horas
+ %1$d min
+ No se han encontrado resultados. Intenta ajustar tus términos de búsqueda.
+ No se ha podido actualizar
diff --git a/libs/horizon/src/main/res/values-es/strings.xml b/libs/horizon/src/main/res/values-es/strings.xml
index 4f7142a044..942343f40e 100644
--- a/libs/horizon/src/main/res/values-es/strings.xml
+++ b/libs/horizon/src/main/res/values-es/strings.xml
@@ -515,6 +515,7 @@
%1$s, marcado como %2$s, toque dos veces para editar la nota
Cursos
Programas
+ Examinar
Presentar un ticket para obtener una respuesta personal de nuestro equipo de asistencia técnica.
Ingresar un mensaje
Cargando respuesta
@@ -545,4 +546,117 @@
Error: %1$s
Obligatorio
+ Buscar
+ Ítems marcados como favoritos
+ Ítems completados
+ Completado
+ Marcar como favorito
+ Eliminar el ítem marcado como favorito
+ Inscribir
+ Colapsar
+ Expandir
+ Ver toda la colección
+ No se encontraron resultados. Ajuste los términos de búsqueda.
+ No se pudo actualizar el marcador
+ No se pudo inscribir en el ítem
+ Mostrar más
+ En progreso
+ Completado
+ Evaluación
+ Tarea
+ Programa
+ Curso
+ Herramienta externa
+ Enlace externo
+ Archivo
+ Página
+ No se pudo cargar la colección
+ Buscar colección
+ Mostrar más
+ No se encontraron resultados. Ajuste los términos de búsqueda.
+ Favoritos
+ No se pudieron cargar los ítems de la colección
+ Buscar
+ No se encontraron resultados. Ajuste los términos de búsqueda.
+
+ - %1$d ítem
+ - %1$d ítems
+
+
+ - %1$d min
+ - %1$d min
+
+
+ - %1$d unidad
+ - %1$d unidades
+
+ Cualquier tipo
+ Cursos
+ Programas
+ Evaluaciones
+ Tareas
+ Enlaces externos
+ Herramientas externas
+ Archivos
+ Páginas
+ Buscar
+ No se encontraron resultados. Ajuste los términos de búsqueda.
+ Cualquier estado
+ Completado
+ Marcado como favorito
+ No se pudieron cargar las colecciones
+ Borrar filtros
+ Borrar la consulta de búsqueda
+ Descripción general
+ ¿Está listo para unirse?
+ Ahora no
+ Inscribir
+ Inscríbase para acceder al curso y empezar a aprender.
+ No se pudo realizar la inscripción
+ No hay ítems en esta colección
+ Recomendado
+ Popular entre los estudiantes de su organización
+ Un paso más allá de %1$s
+ Relacionado con el contenido que le interesa
+ Para profundizar sus conocimientos en %1$s
+ usted
+ Recomendado para %1$s
+ Ítem anterior
+ Ítem siguiente
+ Colecciones
+ Filtrar y ordenar
+ Ordenar por
+ Tipo de ítem
+ Aplicar filtros
+ Borrar filtros
+ Más reciente
+ Menos reciente
+ Nombre: A-Z
+ Nombre: Z-A
+ Filtrar
+ Curso
+ Programa
+
+ - %1$d curso
+ - %1$d cursos
+
+ No se pudieron cargar los ítems
+ Comenzar a aprender
+ Reanudar aprendizaje
+ En progreso
+ Completado
+ Guardada
+ Buscar
+ Mi contenido
+ Mostrar más
+ Cursos
+
+ - %1$d ítem
+ - %1$d ítems
+
+ %1$d h %2$d min
+ %1$d h
+ %1$d min
+ No se encontraron resultados. Ajuste los términos de búsqueda.
+ No se pudo actualizar
diff --git a/libs/horizon/src/main/res/values-fi/strings.xml b/libs/horizon/src/main/res/values-fi/strings.xml
index a06fe125e8..89e181e3c4 100644
--- a/libs/horizon/src/main/res/values-fi/strings.xml
+++ b/libs/horizon/src/main/res/values-fi/strings.xml
@@ -515,6 +515,7 @@
%1$s, merkitty %2$s, muokkaa huomautusta kaksoisnapsauttamalla
Kurssit
Ohjelmat
+ Selaa
Lähetä palvelupyyntö ja pyydä henkilökohtainen vastaus tukitiimiltämme.
Syötä kehote
Vastausta ladataan
@@ -545,4 +546,117 @@
Virhe: %1$s
Pakollinen
+ Hae
+ Kirjanmerkkeihin merkityt kohteet
+ Valmistuneet kohteet
+ Suoritettu
+ Lisää kirjanmerkki
+ Poista kirjanmerkki
+ Ilmoittaudu
+ Kutista
+ Laajenna
+ Näytä koko kokelma
+ Tuloksia ei löytynyt. Kokeile muokata hakusanojasi.
+ Kirjanmerkin päivittäminen epäonnistui
+ Kohteen rekisteröiminen epäonnistui
+ Näytä lisää
+ Käynnissä
+ Suoritettu
+ Arviointi
+ Tehtävä
+ Ohjelma
+ Kurssi
+ Ulkoinen työkalu
+ Ulkoinen linkki
+ Tiedosto
+ Sivu
+ Kokoelman lataus epäonnistui
+ Hae kokoelmaa
+ Näytä lisää
+ Tuloksia ei löytynyt. Kokeile muokata hakusanojasi.
+ Kirjanmerkit
+ Kokoelmakohteiden nouto epäonnistui
+ Hae
+ Tuloksia ei löytynyt. Kokeile muokata hakusanojasi.
+
+ - %1$d kohde
+ - %1$d kohdetta
+
+
+ - %1$d min.
+ - %1$d min.
+
+
+ - %1$d yksikkö
+ - %1$d yksikköä
+
+ Mikä tahansa tyyppi
+ Kurssit
+ Ohjelmat
+ Arvioinnit
+ Tehtävät
+ Ulkoiset linkit
+ Ulkoiset työkalut
+ Tiedostot
+ Sivut
+ Hae
+ Tuloksia ei löytynyt. Kokeile muokata hakusanojasi.
+ Mikä tahansa tila
+ Suoritettu
+ Lisää kirjanmerkkeihin
+ Kokoelmien lataus epäonnistui
+ Tyhjennä suodattimet
+ Tyhjennä hakukysely
+ Yleiskuva
+ Oletko valmis liittymään?
+ Ei nyt
+ Ilmoittaudu
+ Ilmoittaudu kurssille ja aloita oppiminen.
+ Ilmoittautuminen epäonnistui
+ Tässä kokoelmassa ei ole kohteita
+ Suositeltu
+ Suosittu organisaatiosi oppijoiden keskuudessa
+ Seuraava vaihe %1$s jälkeen
+ Liittyy sisältöön, josta olet kiinnostunut
+ Syventääksesi taitojasi %1$s
+ sinä
+ Suositeltu %1$s
+ Edellinen kohde
+ Seuraava kohde
+ Kokoelmat
+ Suodata ja lajittele
+ Lajitteluperuste
+ Kohteen tyyppi
+ Suodattimien käyttö
+ Tyhjennä suodattimet
+ Viimeisin
+ Uusin
+ Nimi: A-Z
+ Nimi: Z-A
+ Suodatin
+ Kurssi
+ Ohjelma
+
+ - %1$d kurssi
+ - %1$d kurssia
+
+ Kohteiden lataus epäonnistui
+ Aloita oppiminen
+ Palaa opiskeluun
+ Käynnissä
+ Suoritettu
+ Tallennettu
+ Hae
+ Oma sisältö
+ Näytä lisää
+ Kurssit
+
+ - %1$d kohde
+ - %1$d kohdetta
+
+ %1$d h %2$d min.
+ %1$d h
+ %1$d min.
+ Tuloksia ei löytynyt. Kokeile muokata hakusanojasi.
+ Päivitys epäonnistui
diff --git a/libs/horizon/src/main/res/values-fr-rCA/strings.xml b/libs/horizon/src/main/res/values-fr-rCA/strings.xml
index 5846eca283..036e79b321 100644
--- a/libs/horizon/src/main/res/values-fr-rCA/strings.xml
+++ b/libs/horizon/src/main/res/values-fr-rCA/strings.xml
@@ -515,6 +515,7 @@
%1$s, marqué comme %2$s, taper à 2 reprises pour éditer la note
Cours
Programmes
+ Rechercher
Déposer un ticket pour obtenir une réponse personnelle de notre équipe de soutien.
Saisir une invite
Chargement de la réponse
@@ -545,4 +546,117 @@
Erreur : %1$s
Requis
+ Rechercher
+ Élément marqués d’un signet
+ Éléments terminés
+ Terminé
+ Signet
+ Retirer le signet
+ S’inscrire
+ Réduire
+ Développer
+ Voir la collection complète
+ Aucun résultat trouvé Essayez d\'adapter vos termes de recherche.
+ Échec de la mise à jour du signet
+ Échec de l’inscription de l’élément
+ En montrer plus
+ En cours
+ Terminé
+ Évaluation
+ Travail
+ Programme
+ Cours
+ Outil externe
+ Lien externe
+ Fichier
+ Page
+ Échec du chargement de la collection
+ Rechercher la collection
+ En montrer plus
+ Aucun résultat trouvé Essayez d\'adapter vos termes de recherche.
+ Signets
+ Échec du chargement des éléments de collection
+ Rechercher
+ Aucun résultat trouvé Essayez d\'adapter vos termes de recherche.
+
+ - %1$d élément
+ - %1$d éléments
+
+
+ - %1$d min
+ - %1$d mins
+
+
+ - %1$d unité
+ - %1$d unités
+
+ Tout type
+ Cours
+ Programmes
+ Évaluations
+ Travaux
+ Liens externes
+ Outils externes
+ Fichiers
+ Pages
+ Rechercher
+ Aucun résultat trouvé Essayez d\'adapter vos termes de recherche.
+ Tout statut
+ Terminé
+ Marqué d’un signet
+ Échec du chargement des collections
+ Effacer les filtres
+ Effacer la requête de recherche
+ Aperçu
+ Prêt à rejoindre?
+ Pas maintenant
+ S’inscrire
+ Inscrivez-vous pour accéder au cours et commencer l’apprentissage.
+ Échec de l\'inscription
+ Aucun élément dans cette collection.
+ Recommandé
+ Populaire auprès des apprenants de votre organisation.
+ Prochaine étape après %1$s
+ Concernant le contenu qui vous intéresse
+ Pour approfondir vos compétences dans %1$s
+ vous
+ Recommandé pour %1$s
+ Élément précédent
+ Élément suivant
+ Collections
+ Filtre et tri
+ Trier par
+ Type d’élément
+ Appliquer les filtres.
+ Effacer les filtres
+ Les plus récents
+ Moins récents
+ Nom : A-Z
+ Nom : Z-A
+ Filtre
+ Cours
+ Programme
+
+ - %1$d cours
+ - %1$d cours
+
+ Échec du chargement des éléments.
+ Commencer l’apprentissage
+ Continuer l’apprentissage
+ En cours
+ Terminé
+ Enregistré
+ Rechercher
+ Mon contenu
+ En montrer plus
+ Cours
+
+ - %1$d élément
+ - %1$d éléments
+
+ %1$d hres %2$d min
+ %1$d hres
+ %1$d min
+ Aucun résultat trouvé Essayez d\'adapter vos termes de recherche.
+ Échec de la mise à jour
diff --git a/libs/horizon/src/main/res/values-fr/strings.xml b/libs/horizon/src/main/res/values-fr/strings.xml
index 1ef25094cb..338a45493a 100644
--- a/libs/horizon/src/main/res/values-fr/strings.xml
+++ b/libs/horizon/src/main/res/values-fr/strings.xml
@@ -515,6 +515,7 @@
%1$s, marqué comme %2$s, appuyer deux fois pour modifier la note
Cours
Programmes
+ Naviguer
Déposez un ticket pour obtenir une réponse personnelle de notre équipe de support.
Saisir une requête
Chargement de la réponse
@@ -545,4 +546,117 @@
Erreur : %1$s
Requis
+ Rechercher
+ Éléments ajoutés aux favoris
+ Éléments terminés
+ Terminé
+ Ajouter aux favoris
+ Supprimer des favoris
+ S’inscrire
+ Réduire
+ Développer
+ Afficher la collection complète
+ Aucun résultat trouvé. Essayez d’affiner les termes de votre recherche.
+ Impossible de mettre à jour les favoris
+ Impossible de s’inscrire au cours
+ Afficher plus
+ En cours
+ Terminé
+ Évaluation
+ Travail
+ Programme
+ Cours
+ Outil externe
+ Lien externe
+ Fichier
+ Page
+ Impossible de charger la collection
+ Rechercher dans la collection
+ Afficher plus
+ Aucun résultat trouvé. Essayez d’affiner les termes de votre recherche.
+ Favoris
+ Impossible de charger les éléments de la collection
+ Rechercher
+ Aucun résultat trouvé. Essayez d’affiner les termes de votre recherche.
+
+ - %1$d élément
+ - %1$d éléments
+
+
+ - %1$d minute
+ - %1$d minutes
+
+
+ - %1$d unité
+ - %1$d unités
+
+ N’importe quel type
+ Cours
+ Programmes
+ Évaluations
+ Travaux
+ Liens externes
+ Outils externes
+ Fichiers
+ Pages
+ Rechercher
+ Aucun résultat trouvé. Essayez d’affiner les termes de votre recherche.
+ Tout statut
+ Terminé
+ Ajouté aux favoris
+ Impossible de charger les collections
+ Effacer les filtres
+ Effacer la requête de recherche
+ Vue d’ensemble
+ Prêt à rejoindre le cours ?
+ Pas maintenant
+ S’inscrire
+ Inscrivez-vous pour accéder au cours et commencer à apprendre
+ Inscription impossible
+ Aucun élément dans cette collection
+ Recommandé
+ Prisé par les apprenants de votre organisation
+ Une étape suivante après %1$s
+ En rapport avec le contenu qui vous intéresse
+ Pour approfondir vos compétences en %1$s
+ vous
+ Recommandé pour %1$s
+ Élément précédent
+ Élément suivant
+ Collections
+ Filtrer et trier
+ Trier par
+ Type d’élément
+ Appliquer les filtres
+ Effacer les filtres
+ Plus récent
+ Moins récent
+ Nom : A-Z
+ Nom : Z-A
+ Filtre
+ Cours
+ Programme
+
+ - %1$d cours
+ - %1$d cours
+
+ Impossible de charger les éléments
+ Commencer à apprendre
+ Reprendre l’apprentissage
+ En cours
+ Terminé
+ Sauvegardé(e)
+ Rechercher
+ Mon contenu
+ Afficher plus
+ Cours
+
+ - %1$d élément
+ - %1$d éléments
+
+ %1$d h %2$d min
+ %1$d h
+ %1$d min
+ Aucun résultat trouvé. Essayez d’affiner les termes de votre recherche.
+ Mise à jour impossible
diff --git a/libs/horizon/src/main/res/values-ga/strings.xml b/libs/horizon/src/main/res/values-ga/strings.xml
index 25e516c86c..1127c31f4e 100644
--- a/libs/horizon/src/main/res/values-ga/strings.xml
+++ b/libs/horizon/src/main/res/values-ga/strings.xml
@@ -515,6 +515,7 @@
%1$s, marcáilte mar %2$s, tapáil faoi dhó chun nóta a chur in eagar
Cúrsaí
Cláir
+ Brabhsáil
Comhdaigh ticéad le haghaidh freagra pearsanta ónár bhfoireann tacaíochta.
Cuir isteach leid
Freagra á lódáil
@@ -545,4 +546,117 @@
Earráid: %1$s
Ag teastáil
+ Cuardaigh
+ Míreanna leabharmharcáilte
+ Míreanna críochnaithe
+ Críochnaithe
+ Leabharmharcáil
+ Bain an leabharmharc
+ Rollaigh
+ Leacaigh
+ Leathnaigh
+ Féach ar an mbailiúchán iomlán
+ Níor aimsíodh aon torthaí. Bain triail as do théarmaí cuardaigh a choigeartú.
+ Theip ar an leabharmharc a nuashonrú
+ Theip ar rollú sa mhír
+ Taispeáin tuilleadh
+ Ar siúl
+ Críochnaithe
+ Tasc
+ Tasc
+ Clár
+ Cúrsa
+ Uirlis sheachtrach
+ Nasc seachtrach
+ Comhad
+ Leathanach
+ Theip ar lódáil an bhailiúcháin
+ Cuardaigh bailiúchán
+ Taispeáin tuilleadh
+ Níor aimsíodh aon torthaí. Bain triail as do théarmaí cuardaigh a choigeartú.
+ Leabharmharcanna
+ Theip ar lódáil míreanna bailiúcháin
+ Cuardaigh
+ Níor aimsíodh aon torthaí. Bain triail as do théarmaí cuardaigh a choigeartú.
+
+ - %1$d mír
+ - %1$d mír
+
+
+ - %1$d nóim
+ - %1$d nóiméad
+
+
+ - %1$d aonad
+ - %1$d aonad
+
+ Aon chineál
+ Cúrsaí
+ Cláir
+ Tascanna
+ Tascanna
+ Naisc sheachtracha
+ Uirlisí seachtracha
+ Comhaid
+ Leathanaigh
+ Cuardaigh
+ Níor aimsíodh aon torthaí. Bain triail as do théarmaí cuardaigh a choigeartú.
+ Aon stádas
+ Críochnaithe
+ Leabharmharcáilte
+ Theip ar bhailiúcháin a lódáil
+ Glan na scagairí
+ Glan an fiosrúchán cuardaigh
+ Forbhreathnú
+ An bhfuil tú réidh le páirt a ghlacadh?
+ Ní anois
+ Rollaigh
+ Cláraigh chun rochtain a fháil ar an gcúrsa agus tosú ag foghlaim.
+ Theip ar rollú
+ Níl aon mhíreanna sa bhailiúchán seo
+ Molta
+ Coitianta i measc foghlaimeoirí i d\'eagraíocht
+ An chéad chéim eile ina dhiaidh %1$s
+ Gaolmhar le hábhar a bhfuil suim agat ann
+ Chun do scileanna a dhoimhniú i %1$s
+ tusa
+ Molta do %1$s
+ An mhír roimhe seo
+ An chéad mhír eile
+ Bailiúcháin
+ Scag agus sórtáil
+ Sórtáil de réir
+ Cineál míre
+ Cuir scagairí i bhfeidhm
+ Glan na scagairí
+ Is déanaí
+ An ceann is déanaí
+ Ainm: AZ
+ Ainm: ZA
+ Scag
+ Cúrsa
+ Clár
+
+ - %1$d cúrsa
+ - %1$d cúrsa
+
+ Theip ar lódáil míreanna
+ Tosaigh ag foghlaim
+ Lean ar aghaidh ag foghlaim
+ Ar Siúl
+ Críochnaithe
+ Sábháilte
+ Cuardaigh
+ Mo chuid ábhair
+ Taispeáin tuilleadh
+ Cúrsaí
+
+ - %1$d mír
+ - %1$d mír
+
+ %1$d uair an chloig %2$d nóim
+ %1$d uair an chloig
+ %1$d nóim
+ Níor aimsíodh aon torthaí. Bain triail as do théarmaí cuardaigh a choigeartú.
+ Theip ar an nuashonrú
diff --git a/libs/horizon/src/main/res/values-hi/strings.xml b/libs/horizon/src/main/res/values-hi/strings.xml
index 67cc17a585..2d3d1866dd 100644
--- a/libs/horizon/src/main/res/values-hi/strings.xml
+++ b/libs/horizon/src/main/res/values-hi/strings.xml
@@ -515,6 +515,7 @@
%1$s, जिसे %2$s के रूप में चिह्नित किया गया है, नोट संपादित करने के लिए दो बार टैप करें
पाठ्यक्रम
कार्यक्रम
+ ब्राउज़ करें
हमारी सहायता टीम से व्यक्तिगत प्रतिक्रिया पाने के लिए टिकट दाखिल करें।
प्रॉम्प्ट दर्ज करें
प्रतिक्रिया लोड की जा रही है
@@ -545,4 +546,117 @@
त्रुटि: %1$s
आवश्यक
+ खोजें
+ बुकमार्क किए गए आइटम
+ पूरे किए गए आइटम
+ पूरा हुआ
+ बुकमार्क
+ बुकमार्क निकालें
+ नामांकन करें
+ संक्षिप्त करें
+ बढ़ाएं
+ पूरा कलेक्शन देखें
+ कोई नतीजा नहीं मिला। अपने खोज शब्द समायोजित करने की कोशिश करें।
+ बुकमार्क अपडेट नहीं किया जा सका
+ आइटम में नामांकन नहीं किया जा सका
+ और अधिक दिखाएं
+ प्रगति में
+ पूरा हुआ
+ आकलन
+ असाइनमेंट
+ कार्यक्रम
+ पाठ्यक्रम
+ बाहरी उपकरण
+ बाहरी लिंक
+ फ़ाइल
+ पेज
+ कलेक्शन लोड नहीं किया जा सका
+ कलेक्शन खोजें
+ और अधिक दिखाएं
+ कोई नतीजा नहीं मिला। अपने खोज शब्द समायोजित करने की कोशिश करें।
+ बुकमार्क
+ कलेक्शन आइटम्स लोड नहीं की जा सकीं
+ खोजें
+ कोई नतीजा नहीं मिला। अपने खोज शब्द समायोजित करने की कोशिश करें।
+
+ - %1$d आइटम
+ - %1$d आइटम
+
+
+ - %1$d न्यूनतम
+ - %1$d न्यूनतम
+
+
+ - %1$d यूनिट
+ - %1$d यूनिट्स
+
+ कोई भी प्रकार
+ पाठ्यक्रम
+ कार्यक्रम
+ आकलन
+ असाइनमेंट
+ बाहरी लिंक्स
+ बाहरी उपकरण
+ फ़ाइलें
+ पेज
+ खोजें
+ कोई नतीजा नहीं मिला। अपने खोज शब्द समायोजित करने की कोशिश करें।
+ कोई भी स्थिति
+ पूरा हुआ
+ बुकमार्क किया गया
+ कलेक्शन लोड नहीं किए जा सके
+ फ़िल्टर साफ़ करें
+ खोज क्वेरी साफ़ करें
+ अवलोकन
+ शामिल होने के लिए तैयार हैं?
+ अभी नहीं
+ नामांकन करें
+ पाठ्यक्रम तक पहुँचने और सीखना शुरू करने के लिए नामांकन करें।
+ नामांकन नहीं किया जा सका
+ इस कलेक्शन में कोई आइटम नहीं है
+ अनुशंसित
+ आपके संगठन में सीखने वालों के बीच लोकप्रिय
+ %1$s के बाद अगला चरण
+ उस सामग्री से संबंधित जिसमें आपकी रुचि है
+ %1$s में आपका कौशल बढ़ाने के लिए
+ आप
+ %1$s के लिए अनुशंसित
+ पिछली आइटम
+ अगली आइटम
+ कलेक्शन
+ फ़िल्टर और क्रमबद्ध करें
+ इस के आधार पर क्रमबद्ध करें:
+ आइटम प्रकार
+ फ़िल्टर्स लागू करें
+ फ़िल्टर साफ़ करें
+ सबसे हालिया
+ सबसे पुराना
+ नाम: A-Z
+ नाम: Z-A
+ फ़िल्टर
+ पाठ्यक्रम
+ कार्यक्रम
+
+ - %1$d पाठ्यक्रम
+ - %1$d पाठ्यक्रम
+
+ आइटम्स लोड नहीं की जा सकीं
+ सीखना शुरू करें
+ सीखना फिर से शुरू करें
+ प्रगति में
+ पूरा हुआ
+ सहेजा गया
+ खोजें
+ मेरी सामग्री
+ और अधिक दिखाएं
+ पाठ्यक्रम
+
+ - %1$d आइटम
+ - %1$d आइटम
+
+ %1$d घंटे %2$d मिनट
+ %1$d घंटे
+ न्यूनतम %1$d
+ कोई नतीजा नहीं मिला। अपने खोज शब्द समायोजित करने की कोशिश करें।
+ अपडेट नहीं किया जा सका
diff --git a/libs/horizon/src/main/res/values-ht/strings.xml b/libs/horizon/src/main/res/values-ht/strings.xml
index 83f93a938d..9aedb1bac3 100644
--- a/libs/horizon/src/main/res/values-ht/strings.xml
+++ b/libs/horizon/src/main/res/values-ht/strings.xml
@@ -515,6 +515,7 @@
%1$s, make kòm %2$s, Tape de fwa pou modifye nòt la
Kou
Pwogram
+ Pakouri
Depoze yon biyè pou ekip sipò nou an pou yon repons pèsonèl.
Antre yon demann
Chajman repons
@@ -545,4 +546,117 @@
Erè: %1$s
Obligatwa
+ Chèche
+ Make atik
+ Eleman konplete
+ Fini
+ Make
+ Retire mak paj la
+ Enskri
+ Redwi
+ Elaji
+ Gade tout koleksyon an
+ Nou pa jwenn rezilta. Eseye ajiste tèm rechèch ou yo.
+ Mizajou makè a echwe.
+ Enskripsyon nan atik la echwe
+ Afiche plis
+ Ankou
+ Fini
+ Evalyasyon
+ Sesyon
+ Pwogram
+ Kou
+ Zouti ekstèn
+ Lyen Ekstèn
+ Fichye
+ Paj
+ Pa t rive chaje koleksyon an
+ Chèche koleksyon
+ Afiche plis
+ Nou pa jwenn rezilta. Eseye ajiste tèm rechèch ou yo.
+ Preferans
+ Pa t rive chaje atik koleksyon yo
+ Chèche
+ Nou pa jwenn rezilta. Eseye ajiste tèm rechèch ou yo.
+
+ - %1$d atik
+ - %1$d atik
+
+
+ - %1$d minimòm
+ - %1$d min
+
+
+ - %1$d inite
+ - %1$d inite
+
+ Nenpòt kalite
+ Kou
+ Pwogram
+ Evalyasyon
+ Sesyon
+ Lyen ekstèn
+ Zouti ekstèn
+ Fichye
+ Paj
+ Chèche
+ Nou pa jwenn rezilta. Eseye ajiste tèm rechèch ou yo.
+ Nenpòt estati
+ Fini
+ Make
+ Pa t rive chaje koleksyon yo
+ Elimine filtè yo
+ Vide rechèch la
+ Apèsi
+ Ou pare pou w rantre?
+ Pa kounye a
+ Enskri
+ Enskri pou w jwenn aksè nan kou a epi kòmanse aprann.
+ Enskripsyon an echwe
+ Pa gen atik nan koleksyon sa a
+ Rekòmande
+ Popilè pami aprenan yo nan òganizasyon w lan
+ Yon pwochen etap apre %1$s
+ Ki gen rapò ak sa k enterese w
+ Pou apwofondi konpetans ou nan %1$s
+ ou menm
+ Rekòmande pou %1$s
+ Atik pase
+ Pwochen atik
+ Koleksyon
+ Filtre epi klase
+ Klase pa
+ Tip de bagay
+ Aplike filtè
+ Elimine filtè yo
+ Pi resan
+ Ki pa pi resan
+ Non: A-Z
+ Non: Z-A
+ Filtè
+ Kou
+ Pwogram
+
+ - %1$d kou
+ - %1$d kou
+
+ Echwe pou chaje atik yo
+ Kòmanse aprann
+ Rekòmanse aprantisaj
+ Ap Avanse
+ Fini
+ Anrejistre
+ Chèche
+ Kontni mwen
+ Afiche plis
+ Kou
+
+ - %1$d atik
+ - %1$d atik
+
+ %1$d èdtan %2$d min
+ %1$d èdtan
+ %1$d minimòm
+ Nou pa jwenn rezilta. Eseye ajiste tèm rechèch ou yo.
+ Mizajou pa reyisi
diff --git a/libs/horizon/src/main/res/values-id/strings.xml b/libs/horizon/src/main/res/values-id/strings.xml
index 3a6f4cf82c..c2ead3ed54 100644
--- a/libs/horizon/src/main/res/values-id/strings.xml
+++ b/libs/horizon/src/main/res/values-id/strings.xml
@@ -515,6 +515,7 @@
%1$s, ditandai sebagai %2$s, ketuk dua kali untuk mengedit catatan
Kursus
Programs
+ Jelajahi
Ajukan tiket untuk respons pribadi dari tim dukungan kami.
Masukkan prompt
Memuat respons
@@ -545,4 +546,117 @@
Kesalahan: %1$s
Dibutuhkan
+ Cari
+ Item yang dibookmark
+ Item selesai
+ Selesai
+ Bookmark
+ Hapus bookmark
+ Daftar
+ Perkecil
+ Perbesar
+ Lihat koleksi lengkap
+ Hasil tidak ditemukan. Cobalah menyesuaikan istilah pencarian Anda.
+ Gagal memperbarui bookmark
+ Gagal mendaftar di item
+ Tampilkan lebih banyak
+ Sedang berlangsung
+ Selesai
+ Penilaian
+ Tugas
+ Program
+ Kursus
+ Alat eksternal
+ Tautan eksternal
+ File
+ Halaman
+ Gagal memuat koleksi
+ Cari koleksi
+ Tampilkan lebih banyak
+ Hasil tidak ditemukan. Cobalah menyesuaikan istilah pencarian Anda.
+ Bookmark
+ Gagal memuat item koleksi
+ Cari
+ Hasil tidak ditemukan. Cobalah menyesuaikan istilah pencarian Anda.
+
+ - %1$d item
+ - %1$d item
+
+
+ - %1$d mnt
+ - %1$d mnt
+
+
+ - %1$d unit
+ - %1$d unit
+
+ Jenis apa pun
+ Kursus
+ Programs
+ Penilaian
+ Tugas
+ Tautan eksternal
+ Alat eksternal
+ File
+ Halaman
+ Cari
+ Hasil tidak ditemukan. Cobalah menyesuaikan istilah pencarian Anda.
+ Status apa pun
+ Selesai
+ Dibookmark
+ Gagal memuat koleksi
+ Bersihkan filter
+ Kosongkan kueri pencarian
+ Tinjauan Umum
+ Siap bergabung?
+ Jangan sekarang
+ Daftar
+ Daftar untuk mengakses kursus dan mulai belajar.
+ Gagal mendaftar
+ Tidak ada item dalam koleksi ini
+ Dianjurkan
+ Populer di kalangan siswa di organisasi Anda
+ Langkah selanjutnya setelah %1$s
+ Terkait dengan konten yang Anda minati
+ Untuk memperdalam keterampilan Anda di %1$s
+ Anda
+ Direkomendasikan untuk %1$s
+ Item sebelumnya
+ Item Selanjutnya
+ Koleksi
+ Filter dan urutkan
+ Sortir menurut
+ Jenis item
+ Terapkan filter
+ Bersihkan filter
+ Terbaru
+ Paling tidak terbaru
+ Nama: A-Z
+ Nama: Z-A
+ Filter
+ Kursus
+ Program
+
+ - %1$d kursus
+ - Kursus %1$d.
+
+ Gagal memuat item
+ Mulai pembelajaran
+ Lanjutkan pembelajaran
+ Sedang Berlangsung
+ Selesai
+ Disimpan
+ Cari
+ Konten saya
+ Tampilkan lebih banyak
+ Kursus
+
+ - %1$d item
+ - %1$d item
+
+ %1$d jam %2$d mnt
+ %1$d jam
+ %1$d mnt
+ Hasil tidak ditemukan. Cobalah menyesuaikan istilah pencarian Anda.
+ Gagal memperbarui
diff --git a/libs/horizon/src/main/res/values-is/strings.xml b/libs/horizon/src/main/res/values-is/strings.xml
index f6cc8695be..113a76d5e3 100644
--- a/libs/horizon/src/main/res/values-is/strings.xml
+++ b/libs/horizon/src/main/res/values-is/strings.xml
@@ -515,6 +515,7 @@
%1$s, merkt sem %2$s, pikkaðu tvisvar til að breyta glósu
Námskeið
Brautir
+ Vafra
Skrá beiðni um persónulegt svar frá hjálparsveit okkar.
Settu inn kvaðningu
Hleður svar
@@ -545,4 +546,117 @@
Villa: %1$s
Krafist
+ Leita
+ Bókamerkt atriði
+ Lokin atriði
+ Lokið
+ Bókamerki
+ Fjarlægja bókamerki
+ Innrita
+ Fella
+ Stækka
+ Skoða heildarsafn
+ Engar niðurstöður fundust. Prófaðu að breyta leitarorðinu.
+ Mistókst að uppfæra bókamerkið
+ Mistókst að innrita í atriði
+ Sýna meira
+ Í gangi
+ Lokið
+ Mat
+ Verkefni
+ Braut
+ Námskeið
+ Ytra tól
+ Utanaðkomandi tengill
+ Skrá
+ Síða
+ Mistókst að hlaða safni
+ Leita í safni
+ Sýna meira
+ Engar niðurstöður fundust. Prófaðu að breyta leitarorðinu.
+ Bókamerki
+ Mistókst að hlaða atriðum safns
+ Leita
+ Engar niðurstöður fundust. Prófaðu að breyta leitarorðinu.
+
+ - %1$d atriði
+ - %1$d atriði
+
+
+ - %1$d minnst
+ - %1$d mín.
+
+
+ - %1$d eining
+ - %1$d einingar
+
+ Allar gerðir
+ Námskeið
+ Brautir
+ Möt
+ Verkefni
+ Ytri tenglar
+ Ytri verkfæri
+ Skrár
+ Síður
+ Leita
+ Engar niðurstöður fundust. Prófaðu að breyta leitarorðinu.
+ Hvaða staða sem er
+ Lokið
+ Bókamerkt
+ Mistókst að hlaða söfnum
+ Hreinsa síur
+ Hreinsa leitarfyrirspurn
+ Yfirlit
+ Allt til reiðu til að taka þátt?
+ Ekki núna
+ Innrita
+ Innritaðu þig til að fá aðgang að námskeiðinu og byrja að læra.
+ Mistókst að innrita
+ Engin atriði í þessu safni
+ Mælt með
+ Vinsælt meðal nemenda í fyrirtækinu þínu
+ Næsta skref eftir %1$s
+ Tengt efni sem þú hefur áhuga á
+ Til að auka færni þína í %1$s
+ þú
+ Mælt með fyrir %1$s
+ Fyrra atriði
+ Næsta atriði
+ Söfn
+ Sía og flokka
+ Raða eftir
+ Gerð atriðis
+ Nota síur
+ Hreinsa síur
+ Nýjast
+ Elst
+ Nafn: A-Ö
+ Nafn: Ö-A
+ Sía
+ Námskeið
+ Braut
+
+ - %1$d námskeið
+ - %1$d námskeið
+
+ Mistókst að hlaða atriðum
+ Hefja nám
+ Halda áfram námi
+ Í gangi
+ Lokið
+ Vistað
+ Leita
+ Efnið mitt
+ Sýna meira
+ Námskeið
+
+ - %1$d atriði
+ - %1$d atriði
+
+ %1$d klst. %2$d mín
+ %1$d klst.
+ %1$d minnst
+ Engar niðurstöður fundust. Prófaðu að breyta leitarorðinu.
+ Ekki tókst að uppfæra
diff --git a/libs/horizon/src/main/res/values-it/strings.xml b/libs/horizon/src/main/res/values-it/strings.xml
index d15b586481..874184f7c9 100644
--- a/libs/horizon/src/main/res/values-it/strings.xml
+++ b/libs/horizon/src/main/res/values-it/strings.xml
@@ -515,6 +515,7 @@
%1$s, contrassegnato come %2$s, tocca due volte per modificare la nota
Corsi
Programmi
+ Sfoglia
Archivia un ticket per una risposta personale dal nostro team di assistenza.
Inserisci richiesta
Caricamento risposta
@@ -545,4 +546,117 @@
Errore: %1$s
Obbligatorio
+ Cerca
+ Elementi aggiunti ai preferiti
+ Elementi completati
+ Completato
+ Preferiti
+ Rimuovi preferito
+ Iscrivi
+ Comprimi
+ Espandi
+ Visualizza raccolta completa
+ Nessun risultato trovato. Prova a modificare i termini di ricerca.
+ Impossibile aggiornare il preferito
+ Impossibile iscrivere elemento
+ Mostra di più
+ In corso
+ Completato
+ Valutazione
+ Compito
+ Programma
+ Corso
+ Strumento esterno
+ Link esterno
+ File
+ Pagina
+ Impossibile caricare raccolta
+ Cerca raccolta
+ Mostra di più
+ Nessun risultato trovato. Prova a modificare i termini di ricerca.
+ Preferiti
+ Impossibile caricare elementi raccolta
+ Cerca
+ Nessun risultato trovato. Prova a modificare i termini di ricerca.
+
+ - %1$d elemento
+ - %1$d elementi
+
+
+ - Min %1$d
+ - %1$d minuti
+
+
+ - %1$d unità
+ - %1$d unità
+
+ Qualsiasi tipo
+ Corsi
+ Programmi
+ Valutazioni
+ Compiti
+ Link esterni
+ Strumenti esterni
+ File
+ Pagine
+ Cerca
+ Nessun risultato trovato. Prova a modificare i termini di ricerca.
+ Qualsiasi stato
+ Completato
+ Aggiunto ai preferiti
+ Impossibile caricare raccolte
+ Cancella filtri
+ Cancella query di ricerca
+ Panoramica
+ Pronto per unirti?
+ Non ora
+ Iscrivi
+ Iscriviti per accedere al corso e iniziare l’apprendimento.
+ Iscrizione non riuscita
+ Questa raccolta non contiene alcun elemento
+ Consigliato
+ Comune tra gli studenti della tua organizzazione
+ Una prossima fase dopo %1$s
+ Correlato al contenuto a cui sei interessato
+ Per approfondire le tue competenze in %1$s
+ tu
+ Consigliato per %1$s
+ Elemento precedente
+ Elemento successivo
+ Raccolte
+ Filtra e ordina
+ Ordina per
+ Tipo elemento
+ Applica filtri
+ Cancella filtri
+ Più recente
+ Meno recente
+ Nome: A-Z
+ Nome: Z-A
+ Filtra
+ Corso
+ Programma
+
+ - %1$d corso
+ - %1$d corsi
+
+ Impossibile caricare elementi
+ Inizia apprendimento
+ Riprendi apprendimento
+ In corso
+ Completato
+ Salvato
+ Cerca
+ Il mio contenuto
+ Mostra di più
+ Corsi
+
+ - %1$d elemento
+ - %1$d elementi
+
+ %1$d h %2$d min
+ %1$d h
+ %1$d min
+ Nessun risultato trovato. Prova a modificare i termini di ricerca.
+ Impossibile aggiornare
diff --git a/libs/horizon/src/main/res/values-ja/strings.xml b/libs/horizon/src/main/res/values-ja/strings.xml
index 1ea2563fe3..3cc2f5a81b 100644
--- a/libs/horizon/src/main/res/values-ja/strings.xml
+++ b/libs/horizon/src/main/res/values-ja/strings.xml
@@ -505,6 +505,7 @@
%1$s、%2$sは未読としてマーク、ダブルタップしてノートを編集する
コース
プログラム
+ ブラウズ
サポート チームからの個人向け応答のチケットを保存する。
プロンプトを入力
応答を読み込み中
@@ -534,4 +535,112 @@
エラー: %1$s
必須
+ 検索
+ ブックマークされた項目
+ 完了した項目
+ 完了
+ ブックマーク
+ 消去したブックマーク
+ 登録
+ 折りたたみ
+ 展開
+ 全コレクションを表示する
+ 検索結果が見つかりません。検索項目を調整してみてください。
+ ブックマークの更新に失敗
+ 項目に登録できませんでした。
+ 多く表示
+ 進行中
+ 完了
+ アセスメント
+ 課題
+ プログラム
+ コース
+ 外部ツール
+ 外部リンク
+ ファイル
+ ページ
+ コレクションの読み込みに失敗しました
+ コレクションを検索する
+ 多く表示
+ 検索結果が見つかりません。検索項目を調整してみてください。
+ ブックマーク
+ コレクション項目の読み込に失敗しました
+ 検索
+ 検索結果が見つかりません。検索項目を調整してみてください。
+
+ - %1$dアイテム
+
+
+ - %1$d分
+
+
+ - %1$d単位
+
+ 任意のタイプ
+ コース
+ プログラム
+ アセスメント
+ 課題
+ 外部リンク
+ 外部ツール
+ ファイル
+ ページ
+ 検索
+ 検索結果が見つかりません。検索項目を調整してみてください。
+ 任意の状態
+ 完了
+ ブックマーク済み
+ コレクションの読み込みに失敗しました
+ フィルターをクリア
+ 検索クエリ取り消す
+ 概要
+ 参加する準備はいいですか?
+ 後で
+ 登録
+ 登録コースにアクセスして、学習を開始しましょう。
+ 登録方法
+ このコレクションには項目がありません
+ おすすめ
+ あなたの組織の学習者に人気
+ %1$sの次のステップ:
+ 興味のあるコンテンツに関連
+ %1$sのスキルを深める:
+ あなた
+ %1$sにおすすめ
+ 前の項目
+ 次の項目
+ コレクション
+ フィルタリングして並べ替える
+ 並べ替え基準
+ 項目の種類
+ フィルターを適用する
+ フィルターをクリア
+ 最新
+ 最古
+ 名前:A - Z
+ 名前:Z - A
+ フィルタ
+ コース
+ プログラム
+
+ - %1$dコース
+
+ 項目を読み込めませんでした
+ 学習を開始する
+ 学習を再開する
+ 進行中
+ 完了
+ 保存済み
+ 検索
+ 私のコンテンツ
+ 多く表示
+ コース
+
+ - %1$dアイテム
+
+ %1$d時間%2$d分
+ %1$d時間
+ %1$d 最小
+ 検索結果が見つかりません。検索項目を調整してみてください。
+ 更新できませんでした
diff --git a/libs/horizon/src/main/res/values-ko/strings.xml b/libs/horizon/src/main/res/values-ko/strings.xml
index 75921440af..a44d46637b 100644
--- a/libs/horizon/src/main/res/values-ko/strings.xml
+++ b/libs/horizon/src/main/res/values-ko/strings.xml
@@ -505,6 +505,7 @@
%1$s이(가) %2$s(으)로 표시됨. 두 번 탭하여 메모를 편집
과목
프로그램
+ 탐색
지원 팀에게 개인 응답에 대해 티켓을 제출합니다.
프롬프트 입력
응답 로드
@@ -534,4 +535,112 @@
오류: %1$s
필수
+ 검색
+ 북마크된 문항
+ 완료된 문항
+ 완료됨
+ 북마크
+ 북마크를 제거
+ 등록
+ 접기
+ 펼치기
+ 전체 컬렉션 보기
+ 찾은 결과가 없습니다. 검색어를 조정해 보세요.
+ 북마크를 업데이트하지 못함
+ 항목에 등록하지 못함
+ 자세히 표시
+ 진행 중
+ 완료됨
+ 평가
+ 과제
+ 프로그램
+ 과목
+ 외부 도구
+ 외부 링크
+ 파일
+ 페이지
+ 컬렉션을 로드하지 못함
+ 컬렉션 검색
+ 자세히 표시
+ 찾은 결과가 없습니다. 검색어를 조정해 보세요.
+ 북마크
+ 컬렉션 항목을 로드하지 못함
+ 검색
+ 찾은 결과가 없습니다. 검색어를 조정해 보세요.
+
+ - %1$d개 항목
+
+
+ - %1$d분
+
+
+ - %1$d개 단위
+
+ 모든 유형
+ 과목
+ 프로그램
+ 평가
+ 과제
+ 외부 링크
+ 외부 도구
+ 파일
+ 페이지
+ 검색
+ 찾은 결과가 없습니다. 검색어를 조정해 보세요.
+ 모든 상태
+ 완료됨
+ 북마크됨
+ 컬렉션을 로드하지 못함
+ 필터링 지우기
+ 검색 쿼리 지우기
+ 개요
+ 참여할 준비가 되었습니까?
+ 지금은 아님
+ 등록
+ 등록하여 과목에 액세스하고 학습을 시작합니다.
+ 등록하지 못함
+ 이 컬렉션에 항목 없음
+ 추천
+ 내 조직에 학습자들에게 인기
+ %1$s 이후에 다음 단계
+ 내가 관심이 있는 콘텐츠에 관련
+ %1$s에 대한 기술을 심화
+ 나
+ %1$s에게 추천
+ 이전 항목
+ 다음 항목
+ 컬렉션
+ 필터 및 정렬
+ 정렬 기준
+ 항목 유형
+ 필터링을 적용
+ 필터링 지우기
+ 최근
+ 이전
+ 이름: A-Z
+ 이름: Z-A
+ 필터
+ 과목
+ 프로그램
+
+ - %1$d개 과목
+
+ 항목을 로드하지 못함
+ 학습 시작
+ 학습 다시 시작
+ 진행 중
+ 완료됨
+ 저장됨
+ 검색
+ 내 콘텐츠
+ 자세히 표시
+ 과목
+
+ - %1$d개 항목
+
+ %1$d시간 %2$d분
+ %1$d시간
+ %1$d분
+ 찾은 결과가 없습니다. 검색어를 조정해 보세요.
+ 업로드하지 못함
diff --git a/libs/horizon/src/main/res/values-mi/strings.xml b/libs/horizon/src/main/res/values-mi/strings.xml
index 223d0114ad..abb8f451f5 100644
--- a/libs/horizon/src/main/res/values-mi/strings.xml
+++ b/libs/horizon/src/main/res/values-mi/strings.xml
@@ -515,6 +515,7 @@
%1$s, kua tohua hei %2$s, pato rua hei whakatika i te tuhipoka
Ngā Akoranga
Ngā Hōtaka
+ Tirotiro
Kōnae he tīkiti mo te whakautu whaiaro i to tatou rōpū tautoko.
Whakauruhia he tohu
Utaina ana te whakautu
@@ -545,4 +546,117 @@
Hapa: %1$s
E Hiahiatia Ana
+ Rapu
+ Ngā tūemi kua tohua
+ Ngā tūemi kua oti
+ Kua Oti
+ Tohuwāhi
+ Tangohia te tohuwāhi
+ Whakauru
+ Tiango
+ Whakawhānui
+ Tirohia te kohinga katoa
+ Kāore i kitea he hua. Ngāna ki te whakarerekē i ō kupu rapu.
+ Kāore i taea te whakahou i te tohuwāhi
+ Kāore i taea te rēhita ki te tūemi
+ Whakāturia mai ētahi atu
+ Kei te ahu whakamua
+ Kua Oti
+ Aromatawai
+ Taumahi
+ Hōtaka
+ Akoranga
+ Taputapu waho
+ Hono o waho
+ Kōnae
+ Whārangi
+ Kāore i taea te uta i te kohinga
+ Rapu kohinga
+ Whakāturia mai ētahi atu
+ Kāore i kitea he hua. Ngāna ki te whakarerekē i ō kupu rapu.
+ Tohuwāhi
+ I rahua te uta i ngā tūemi kohinga
+ Rapu
+ Kāore i kitea he hua. Ngāna ki te whakarerekē i ō kupu rapu.
+
+ - %1$d tuemi
+ - %1$d ngā tūemi
+
+
+ - %1$d min
+ - %1$d meneti
+
+
+ - %1$d waeine
+ - %1$d ngā waeine
+
+ Tetahi momo
+ Ngā Akoranga
+ Ngā Hōtaka
+ Ngā aromatawai
+ Whakataunga
+ Ngā hononga o waho
+ Ngā taputapu o waho
+ Ngā Kōnae
+ Ngā Whārangi
+ Rapu
+ Kāore i kitea he hua. Ngāna ki te whakarerekē i ō kupu rapu.
+ Tetahi tūnga
+ Kua Oti
+ Kua tohua
+ I rahua te uta i ngā kohinga
+ Ūkui tātari
+ Ūkui te rapunga
+ Tirohanga whānui
+ Kua rite koe ki te whakauru mai?
+ Kāore i nāianei
+ Whakauru
+ Rēhita hei uru atu ki te akoranga me te tīmata ako.
+ Kāore i taea te rēhita
+ Kāore he tūemi i roto i tēnei kohinga
+ E taunakitia ana
+ He rongonui ki ngā ākonga i tō whakahaere
+ He taahiraa e whai ake nei i muri i te %1$s
+ E pā ana ki ngā ihirangi e hiahia ana koe
+ Hei whakahōhonu ake i ō pūkenga ki %1$s
+ koe
+ I tūtohutia mō %1$s
+ Tūemi o mua
+ Tūemi e heke mai nei
+ Ngā Kohikohinga
+ Tātari me te whakaraupapa
+ Kōmaka i te
+ Momo tūemi
+ Hoatu nga whiriwhiringa
+ Ūkui tātari
+ Ngā mea hou rawa atu
+ Ngā mea hou rawa atu
+ Ingoa: A-Z
+ Ingoa: Z-A
+ Tātari
+ Akoranga
+ Hōtaka
+
+ - %1$d akoranga
+ - %1$d ngā akoranga
+
+ I rahua te uta i ngā tūemi
+ Tīmata te ako
+ Whakahokia te ako
+ I roto i te ahunga whakamua
+ Kua Oti
+ Kua Ora
+ Rapu
+ Aku ihirangi
+ Whakāturia mai ētahi atu
+ Ngā Akoranga
+
+ - %1$d tuemi
+ - %1$d ngā tūemi
+
+ %1$d ngā hāora %2$d meneti
+ %1$d ngā hāora
+ %1$d min
+ Kāore i kitea he hua. Ngāna ki te whakarerekē i ō kupu rapu.
+ Kāore i taea te whakahōu
diff --git a/libs/horizon/src/main/res/values-ms/strings.xml b/libs/horizon/src/main/res/values-ms/strings.xml
index 5805b69022..ed7483053b 100644
--- a/libs/horizon/src/main/res/values-ms/strings.xml
+++ b/libs/horizon/src/main/res/values-ms/strings.xml
@@ -515,6 +515,7 @@
%1$s, ditandakan sebagai %2$s, ketik dua kali untuk mengedit nota
Kursus
Program
+ Semak seimbas
Failkan tiket untuk memperoleh maklum balas peribadi daripada pasukan sokongan kami.
Masukkan gesaan
Memuatkan respons
@@ -545,4 +546,117 @@
Ralat: %1$s
Diperlukan
+ Cari
+ Item yang ditandakan
+ Item yang selesai
+ Dilengkapkan
+ Penanda
+ Buang Penanda
+ Daftar
+ Kuncupkan
+ Kembangkan
+ Lihat koleksi penuh
+ Tiada hasil ditemui. Cuba laraskan istilah carian anda.
+ Gagal mengemas kini penanda
+ Gagal mendaftarkan item
+ Tunjuk lagi
+ Sedang berjalan
+ Dilengkapkan
+ Pentaksiran
+ Tugasan
+ Program
+ Kursus
+ Alat luar
+ Pautan luar
+ Fail
+ Halaman
+ Gagal memuatkan koleksi
+ Cari koleksi
+ Tunjuk lagi
+ Tiada hasil ditemui. Cuba laraskan istilah carian anda.
+ Penanda
+ Gagal memuatkan item koleksi
+ Cari
+ Tiada hasil ditemui. Cuba laraskan istilah carian anda.
+
+ - %1$d item
+ - %1$d item
+
+
+ - %1$d min
+ - %1$d min
+
+
+ - %1$d unit
+ - %1$d unit
+
+ Mana-mana jenis
+ Kursus
+ Program
+ Pentaksiran
+ Tugasan
+ Pautan luaran
+ Alatan luaran
+ Fail
+ Halaman
+ Cari
+ Tiada hasil ditemui. Cuba laraskan istilah carian anda.
+ Mana-mana status
+ Dilengkapkan
+ Ditandakan
+ Gagal memuatkan koleksi
+ Kosongkan penapis
+ Kosongkan pertanyaan carian
+ Gambaran Keseluruhan
+ Sedia untuk menyertai?
+ Bukan sekarang
+ Daftar
+ Daftarkan diri untuk mengakses kursus dan mula belajar.
+ Gagal mendaftar
+ Tiada item dalam koleksi ini
+ Disyorkan
+ Popular dalam kalangan pelajar di organisasi anda
+ Langkah seterusnya selepas %1$s
+ Berkaitan dengan kandungan yang anda minati
+ Untuk mendalami kemahiran anda dalam %1$s
+ anda
+ Disyorkan untuk %1$s
+ Item sebelumnya
+ Item Seterusnya
+ Koleksi
+ Tapis dan isih
+ Isih mengikut
+ Jenis item
+ Gunakan penapis
+ Kosongkan penapis
+ Paling baru
+ Paling lama
+ Nama: A-Z
+ Nama: Z-A
+ Tapis
+ Kursus
+ Program
+
+ - %1$d kursus
+ - %1$d kursus
+
+ Gagal memuatkan item
+ Mula belajar
+ Sambung pembelajaran
+ Sedang Berjalan
+ Dilengkapkan
+ Disimpan
+ Cari
+ Kandungan saya
+ Tunjuk lagi
+ Kursus
+
+ - %1$d item
+ - %1$d item
+
+ %1$d jam %2$d min
+ %1$d jam
+ %1$d min
+ Tiada hasil ditemui. Cuba laraskan istilah carian anda.
+ Gagal mengemas kini
diff --git a/libs/horizon/src/main/res/values-nb/strings.xml b/libs/horizon/src/main/res/values-nb/strings.xml
index 1cf3a9caa5..989a6c1445 100644
--- a/libs/horizon/src/main/res/values-nb/strings.xml
+++ b/libs/horizon/src/main/res/values-nb/strings.xml
@@ -515,6 +515,7 @@
%1$s, merket som %2$s, dobbelttrykk for å redigere notatet
Emner
Programmer
+ Bla gjennom
Send inn en personlig melding for personlig respons fra vårt support-team.
Skriv inn et spørsmål
Laster inn svar
@@ -545,4 +546,117 @@
Feil: %1$s
Obligatorisk
+ Søk
+ Bokmerkede elementer
+ Fullførte elementer
+ Godkjent
+ Bokmerk
+ Fjern bokmerke
+ Delta
+ Skjul
+ Utvid
+ Vis fullstendig kolleksjon
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Kunne ikke oppdatere bokmerket
+ Kunne ikke melde deg på i elementet
+ Vis mer
+ Pågår
+ Godkjent
+ Vurdering
+ Oppgave
+ Program
+ Emne
+ Eksternt verktøy
+ Ekstern lenke
+ Fil
+ Side
+ Kunne ikke laste inn kolleksjon
+ Søk etter kolleksjon
+ Vis mer
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Bokmerker
+ Kunne ikke laste inn kolleksjonselementer
+ Søk
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+
+ - %1$d element
+ - %1$d elementer
+
+
+ - %1$d min
+ - %1$d min
+
+
+ - %1$d enhet
+ - %1$d enheter
+
+ Alle typer
+ Emner
+ Programmer
+ Vurderinger
+ Oppgaver
+ Eksterne lenker
+ Eksterne verktøy
+ Filer
+ Sider
+ Søk
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Enhver status
+ Godkjent
+ Bokmerket
+ Kunne ikke laste inn kolleksjoner
+ Tøm filtre
+ Tøk søkefelt
+ Oversikt
+ Klar til å bli med?
+ Ikke nå
+ Registrer deg
+ Registrer deg for å få tilgang til emnet og begynne å lære.
+ Kunne ikke registrere deg
+ Ingen elementer i denne kolleksjonen
+ Anbefalt
+ Populært blant elevene i organisasjonen din
+ Et neste trinn etter %1$s
+ Relatert til innhold du er interessert i
+ For å fordype ferdighetene dine i %1$s
+ deg
+ Anbefalt for %1$s
+ Forrige artikkel
+ Neste objekt
+ Samlinger
+ Filtrer og sorter
+ Sorter etter
+ Elementtype:
+ Bruk filtre
+ Tøm filtre
+ Nyest
+ Minst nylige
+ Navn: A–Z
+ Navn: Z–A
+ Filter
+ Emne
+ Program
+
+ - %1$d emne
+ - %1$d emner
+
+ Kunne ikke laste inn elementer
+ Begynn å lære
+ Fortsett læring
+ Pågår
+ Godkjent
+ Lagret
+ Søk
+ Mitt innhold
+ Vis mer
+ Emner
+
+ - %1$d element
+ - %1$d elementer
+
+ %1$d t %2$d min
+ %1$d t
+ %1$d min
+ Fant ingen resultater. Prøv å endre søkeordene dine.
+ Kunne ikke oppdatere
diff --git a/libs/horizon/src/main/res/values-nl/strings.xml b/libs/horizon/src/main/res/values-nl/strings.xml
index f0d78550d2..41541ecc2a 100644
--- a/libs/horizon/src/main/res/values-nl/strings.xml
+++ b/libs/horizon/src/main/res/values-nl/strings.xml
@@ -515,6 +515,7 @@
%1$s, gemarkeerd als %2$s, tik twee keer om notitie te bewerken
Cursussen
Programma\'s
+ Bladeren
Dien een ticket in en krijg een persoonlijk antwoord van ons ondersteuningsteam.
Een prompt invoeren
Bezig met laden van reactie
@@ -545,4 +546,117 @@
Fout: %1$s
Vereist
+ Zoeken
+ Bladwijzers
+ Voltooide items
+ Voltooid
+ Bladwijzer
+ Bladwijzer verwijderen
+ Inschrijven
+ Samenvouwen
+ Uitvouwen
+ Volledige collectie bekijken
+ Geen resultaten gevonden. Probeer je zoektermen aan te passen.
+ Kan bladwijzer niet bijwerken
+ Kan niet inschrijven voor item
+ Meer weergeven
+ Lopend
+ Voltooid
+ Beoordeling
+ Opdracht
+ Programma
+ Cursus
+ Externe tool
+ Externe link
+ Bestand
+ Pagina
+ Kan verzameling niet laden
+ Verzameling zoeken
+ Meer weergeven
+ Geen resultaten gevonden. Probeer je zoektermen aan te passen.
+ Bladwijzers
+ Kan items van verzameling niet laden
+ Zoeken
+ Geen resultaten gevonden. Probeer je zoektermen aan te passen.
+
+ - %1$d item
+ - %1$d items
+
+
+ - %1$d minuten
+ - %1$d min.
+
+
+ - %1$d eenheid
+ - %1$d eenheden
+
+ Elk type
+ Cursussen
+ Programma\'s
+ Beoordelingen
+ Opdrachten
+ Externe links
+ Externe tools
+ Bestanden
+ Pagina\'s
+ Zoeken
+ Geen resultaten gevonden. Probeer je zoektermen aan te passen.
+ Elke status
+ Voltooid
+ Gebladwijzerd
+ Kan verzamelingen niet laden
+ Filters wissen
+ Zoekopdracht wissen
+ Overzicht
+ Klaar om deel te nemen?
+ Niet nu
+ Inschrijven
+ Schrijf je in om de cursus te openen en met leren te beginnen.
+ Kan niet aanmelden
+ Geen items in deze verzameling
+ Aanbevolen
+ Populair bij cursisten van je organisatie
+ Een volgende stap na %1$s
+ Gerelateerd aan de inhoud waar je geïnteresseerd in bent
+ Om je %1$s-vaardigheden te verdiepen
+ jou
+ Aanbevolen voor %1$s
+ Vorige item
+ Volgende item
+ Verzamelingen
+ Filteren en sorteren
+ Sorteren op
+ Itemtype
+ Filters toepassen
+ Filters wissen
+ Meest recent
+ Minst recent
+ Naam: A-Z
+ Naam: Z-A
+ Filteren
+ Cursus
+ Programma
+
+ - %1$d cursus
+ - %1$d cursussen
+
+ Kan item niet laden
+ Begin met leren
+ Doorgaan met leren
+ Wordt uitgevoerd
+ Voltooid
+ Opgeslagen
+ Zoeken
+ Mijn inhoud
+ Meer weergeven
+ Cursussen
+
+ - %1$d item
+ - %1$d items
+
+ %1$d uur %2$d minuten
+ %1$d uur
+ %1$d minuten
+ Geen resultaten gevonden. Probeer je zoektermen aan te passen.
+ Kan niet bijwerken
diff --git a/libs/horizon/src/main/res/values-pl/strings.xml b/libs/horizon/src/main/res/values-pl/strings.xml
index 9aa2410c8e..da457c032c 100644
--- a/libs/horizon/src/main/res/values-pl/strings.xml
+++ b/libs/horizon/src/main/res/values-pl/strings.xml
@@ -535,6 +535,7 @@
%1$s, oznaczono jako %2$s; stuknij dwukrotnie, aby edytować notatkę
Kursy
Programy
+ Przeglądaj
Wyślij zgłoszenie do naszego zespołu pomocy
Wpisz monit
Wczytywanie odpowiedzi
@@ -567,4 +568,127 @@
Błąd: %1$s
Wymagane
+ Wyszukaj
+ Dodane do zakładek
+ Ukończone elementy
+ Ukończono
+ Dodaj do zakładek
+ Usuń zakładkę
+ Zapisz się
+ Zwiń
+ Rozwiń
+ Wyświetl pełną kolekcję
+ Nie znaleziono żadnych wyników Spróbuj dostosować wyszukiwane wyrażenia.
+ Nie udało się zaktualizować zakładki
+ Nie udało się zapisać
+ Pokaż więcej
+ W toku
+ Ukończono
+ Test
+ Zadanie
+ Program
+ Kurs
+ Narzędzie zewnętrzne
+ Łącze zewnętrzne
+ Plik
+ Strona
+ Nie udało się wczytać kolekcji
+ Wyszukaj kolekcję
+ Pokaż więcej
+ Nie znaleziono żadnych wyników Spróbuj dostosować wyszukiwane wyrażenia.
+ Zakładki
+ Nie udało się wczytać elementów kolekcji.
+ Wyszukaj
+ Nie znaleziono żadnych wyników Spróbuj dostosować wyszukiwane wyrażenia.
+
+ - %1$d element
+ - Elementy: %1$d
+ - Elementy: %1$d
+ - Elementy: %1$d
+
+
+ - %1$d min.
+ - %1$d min
+ - %1$d min
+ - %1$d min
+
+
+ - %1$d jednostka
+ - Jednostki: %1$d
+ - Jednostki: %1$d
+ - Jednostki: %1$d
+
+ Dowolny typ
+ Kursy
+ Programy
+ Testy
+ Zadania
+ Łącza zewnętrzne
+ Narzędzia zewnętrzne
+ Pliki
+ Strony
+ Wyszukaj
+ Nie znaleziono żadnych wyników Spróbuj dostosować wyszukiwane wyrażenia.
+ Dowolny status
+ Ukończono
+ Dodane do zakładek
+ Nie udało się wczytać kolekcji
+ Wyczyść filtry
+ Wyczyść wyszukiwanie
+ Omówienie
+ Gotowy na dołączenie?
+ Nie teraz
+ Zapisz się
+ Zapisz się, aby uzyskać dostęp do kursu i rozpocząć naukę.
+ Nie udało się zapisać
+ Brak elementów w tej kolekcji
+ Zalecane
+ Popularne wśród uczestników w Twojej organizacji
+ Kolejny etap po %1$s
+ Związane z interesującą Cię zawartością
+ Aby poszerzyć Twoje umiejętności w zakresie %1$s
+ Ty
+ Polecane dla %1$s
+ Poprzednia pozycja
+ Kolejna pozycja
+ Kolekcje
+ Filtruj i sortuj
+ Sortuj wg
+ Typ elementu
+ Zastosuj filtry
+ Wyczyść filtry
+ Najnowsze
+ Najstarsze
+ Nazwa: A-Z
+ Nazwa: Z-A
+ Filtruj
+ Kurs
+ Program
+
+ - %1$d kurs
+ - Kursy: %1$d
+ - Kursy: %1$d
+ - Kursy: %1$d
+
+ Nie udało się wczytać elementów
+ Rozpocznij naukę
+ Wznów naukę
+ W toku
+ Ukończono
+ Zapisano
+ Wyszukaj
+ Moja zawartość
+ Pokaż więcej
+ Kursy
+
+ - %1$d element
+ - Elementy: %1$d
+ - Elementy: %1$d
+ - Elementy: %1$d
+
+ %1$d godz. %2$d min.
+ %1$d godz.
+ %1$d min.
+ Nie znaleziono żadnych wyników Spróbuj dostosować wyszukiwane wyrażenia.
+ Nie udało się zaktualizować
diff --git a/libs/horizon/src/main/res/values-pt-rBR/strings.xml b/libs/horizon/src/main/res/values-pt-rBR/strings.xml
index 25abcfdcd6..817b564d76 100644
--- a/libs/horizon/src/main/res/values-pt-rBR/strings.xml
+++ b/libs/horizon/src/main/res/values-pt-rBR/strings.xml
@@ -515,6 +515,7 @@
%1$s, marcado como %2$s, toque duas vezes para editar a nota
Cursos
Trilhas
+ Navegar
Apresentar um pedido de resposta pessoal da nossa equipe de suporte.
Inserir um prompt
Carregando resposta
@@ -545,4 +546,117 @@
Erro: %1$s
Obrigatório
+ Pesquisar
+ Itens adicionado aos favoritos
+ Itens concluídos
+ Completo
+ Adicionar aos favoritos
+ Remover marcador
+ Matricular
+ Recolher
+ Expandir
+ Veja a coleção completa
+ Nenhum resultado foi encontrado. Tente ajustar seus termos de pesquisa.
+ Falha ao atualizar o marcador
+ Falha ao se inscrever no item
+ Mostrar mais
+ Em andamento
+ Completo
+ Avaliação
+ Tarefa
+ Programa
+ Curso
+ Ferramenta externa
+ Link externo
+ Arquivo
+ Página
+ Fracassado para carregar coleção
+ Pesquisar coleção
+ Mostrar mais
+ Nenhum resultado foi encontrado. Tente ajustar seus termos de pesquisa.
+ Favoritos
+ Falha ao carregar os itens da coleção
+ Pesquisar
+ Nenhum resultado foi encontrado. Tente ajustar seus termos de pesquisa.
+
+ - %1$d item
+ - %1$d itens
+
+
+ - %1$d min
+ - %1$d minutos
+
+
+ - %1$d unidade
+ - %1$d unidades
+
+ Qualquer tipo
+ Cursos
+ Trilhas
+ Avaliações
+ Tarefas
+ Links externos
+ Ferramentas externas
+ Arquivos
+ Páginas
+ Pesquisar
+ Nenhum resultado foi encontrado. Tente ajustar seus termos de pesquisa.
+ Qualquer status
+ Completo
+ Adicionado aos favoritos
+ Fracassado para carregar coleções
+ Limpar filtros
+ Limpar consulta de pesquisa
+ Visão geral
+ Preparar para entrar?
+ Agora não
+ Matricular
+ Inscreva-se para acessar o curso e começar a aprender.
+ Falha na matrícula
+ Não há itens nesta coleção
+ Recomendado
+ Popular entre os alunos da sua organização
+ Um próximo passo depois %1$s
+ Conteúdo relacionado ao seu interesse
+ Para aprofundar suas habilidades em %1$s
+ você
+ Recomendado para %1$s
+ Item anterior
+ Próximo item
+ Coleções
+ Filtrar e organizar
+ Ordenar por
+ Tipo de item
+ Aplique filtros
+ Limpar filtros
+ Mais recente
+ Ao menos recente
+ Nome: A-Z
+ Nome: Z-A
+ Filtrar
+ Curso
+ Programa
+
+ - %1$d curso
+ - %1$d cursos
+
+ Falha ao carregar itens
+ Comece a aprender
+ Retomar aprendizagem
+ Em progresso
+ Completo
+ Salvo
+ Pesquisar
+ Meu conteúdo
+ Mostrar mais
+ Cursos
+
+ - %1$d item
+ - %1$d itens
+
+ %1$d horas %2$d min
+ %1$d horas
+ %1$d min
+ Nenhum resultado foi encontrado. Tente ajustar seus termos de pesquisa.
+ Falha ao atualizar
diff --git a/libs/horizon/src/main/res/values-pt-rPT/strings.xml b/libs/horizon/src/main/res/values-pt-rPT/strings.xml
index 085ee3f46c..525396ba4b 100644
--- a/libs/horizon/src/main/res/values-pt-rPT/strings.xml
+++ b/libs/horizon/src/main/res/values-pt-rPT/strings.xml
@@ -515,6 +515,7 @@
%1$s marcado como %2$s, toque duas vezes para editar a nota
Disciplinas
Programas
+ Navegador
Registar um bilhete para obter uma resposta pessoal da nossa equipa de suporte.
Introduzir uma sugestão
A carregar resposta
@@ -545,4 +546,117 @@
Erro: %1$s
Necessário
+ Procurar
+ Itens marcados
+ Itens concluídos
+ Concluído
+ Marcador
+ Remover marcador
+ Participar
+ Recolher
+ Expandir
+ Ver coleção completa
+ Sem resultados Tente ajustar os seus termos de busca.
+ Não foi possível atualizar o marcador
+ Não foi possível adicionar o item
+ Mostrar mais
+ Em curso
+ Concluído
+ Avaliação
+ Tarefa
+ Programa
+ Disciplina
+ Ferramenta externa
+ Ligação externa
+ Ficheiro
+ Página
+ Não foi possível carregar a coleção
+ Procurar coleção
+ Mostrar mais
+ Sem resultados Tente ajustar os seus termos de busca.
+ Marcadores
+ Falha ao carregar itens da coleção:
+ Procurar
+ Sem resultados Tente ajustar os seus termos de busca.
+
+ - %1$d item
+ - %1$d itens
+
+
+ - %1$d mín.
+ - %1$d mins
+
+
+ - %1$d unidade
+ - %1$d unidades
+
+ Qualquer tipo
+ Disciplinas
+ Programas
+ Avaliações
+ Tarefas
+ Ligações externas
+ Ferramentas externas
+ Ficheiros
+ Páginas
+ Procurar
+ Sem resultados Tente ajustar os seus termos de busca.
+ Qualquer estado
+ Concluído
+ Adicionado aos favoritos
+ Não foi possível carregar as coleções
+ Limpar filtros
+ Limpar consulta de busca
+ Visão geral
+ Pronto para aderir?
+ Mais tarde
+ Participar
+ Inscreva-se para aceder à disciplina e começar a aprender.
+ Falha na inscrição
+ Não há itens nesta coleção
+ Recomendado
+ Popular entre os alunos da sua organização
+ Um próximo passo após %1$s
+ Relacionado com conteúdos do seu interesse
+ Para aprofundar as suas competências em %1$s
+ você
+ Recomendado para %1$s
+ Item anterior
+ Próximo item
+ Coleções
+ Filtrar e ordenar
+ Classificar por
+ Tipo de item
+ Aplicar filtros
+ Limpar filtros
+ Mais recente
+ Mais antigo
+ Nome: A-Z
+ Nome: Z-A
+ Filtrar
+ Disciplina
+ Programa
+
+ - %1$d disciplina
+ - %1$d disciplinas
+
+ Falha ao carregar itens
+ Começar a aprender
+ Retomar a aprendizagem
+ Em curso
+ Concluído
+ Guardou
+ Procurar
+ Meu conteúdo
+ Mostrar mais
+ Disciplinas
+
+ - %1$d item
+ - %1$d itens
+
+ %1$d hrs %2$d min
+ %1$d hrs
+ %1$d mín.
+ Sem resultados Tente ajustar os seus termos de busca.
+ Falha ao atualizar
diff --git a/libs/horizon/src/main/res/values-ru/strings.xml b/libs/horizon/src/main/res/values-ru/strings.xml
index 8b60d4d965..b58992d439 100644
--- a/libs/horizon/src/main/res/values-ru/strings.xml
+++ b/libs/horizon/src/main/res/values-ru/strings.xml
@@ -535,6 +535,7 @@
%1$s, отмеченный как %2$s, щелкните дважды, чтобы отредактировать заметку
Курсы
Программы
+ Просмотреть
Заполните заявку на персональный ответ от нашей службы поддержки.
Ввести подсказку
Загрузка ответа
@@ -567,4 +568,127 @@
Ошибка: %1$s
Необходимо
+ Поиск
+ Отмеченные закладкой элементы
+ Завершенные элементы
+ Завершено
+ Закладка
+ Удалить закладку
+ Внести
+ Свернуть
+ Развернуть
+ Просмотреть всю коллекцию
+ Результатов не найдено. Попробуйте уточнить параметры своего поиска.
+ Не удалось обновить закладку
+ Не удалось зарегистрировать элемент
+ Показать больше
+ В процессе выполнения
+ Завершено
+ Тестирование
+ Задание
+ Программа
+ Курс
+ Внешний инструмент
+ Внешняя ссылка
+ Файл
+ Страница
+ Не удалось загрузить коллекцию
+ Поиск коллекции
+ Показать больше
+ Результатов не найдено. Попробуйте уточнить параметры своего поиска.
+ Закладки
+ Не удалось загрузить элементы коллекции
+ Поиск
+ Результатов не найдено. Попробуйте уточнить параметры своего поиска.
+
+ - %1$d элемент
+ - %1$d элементов
+ - %1$d элементов
+ - %1$d элементов
+
+
+ - %1$d мин
+ - %1$d мин
+ - %1$d мин
+ - %1$d мин
+
+
+ - %1$d устройство
+ - %1$d устройства
+ - %1$d устройства
+ - %1$d устройства
+
+ Любой тип
+ Курсы
+ Программы
+ Оценки
+ Задания
+ Внешние ссылки
+ Внешние инструменты
+ Файлы
+ Страницы
+ Поиск
+ Результатов не найдено. Попробуйте уточнить параметры своего поиска.
+ Любой статус
+ Завершено
+ Отмеченный закладкой сообщение
+ Не удалось загрузить коллекции
+ Сбросить фильтры
+ Очистить поисковый запрос
+ Обзор
+ Готовы присоединиться?
+ Не сейчас
+ Зарегистрироваться
+ Зарегистрируйтесь, чтобы получить доступ к курсу и приступить к обучению.
+ Не удалось зарегистрировать
+ В этой коллекции отсутствуют элементы
+ Рекомендовано
+ Популярно среди обучающихся в вашей организации
+ Следующий шаг после %1$s
+ Связано с контентом, который вас интересует
+ Чтобы углубить свои навыки в %1$s
+ вы
+ Рекомендуется для %1$s
+ Предыдущий элемент
+ Следующий элемент
+ Коллекции
+ Фильтровать и сортировать
+ Сортировать по
+ Тип элемента
+ Применить фильтры
+ Сбросить фильтры
+ Последний
+ Самый последний
+ Имя: A-Z
+ Имя: Z-A
+ Фильтровать
+ Курс
+ Программа
+
+ - %1$d курс
+ - %1$d курса(-ов)
+ - %1$d курса(-ов)
+ - %1$d курса(-ов)
+
+ Не удалось загрузить элементы
+ Начать обучение
+ Возобновить обучение
+ Выполняется
+ Завершено
+ Сохранено
+ Поиск
+ Мой контент
+ Показать больше
+ Курсы
+
+ - %1$d элемент
+ - %1$d элементов
+ - %1$d элементов
+ - %1$d элементов
+
+ %1$d часов %2$d минут
+ %1$d часов
+ %1$d мин
+ Результатов не найдено. Попробуйте уточнить параметры своего поиска.
+ Не удалось обновить
diff --git a/libs/horizon/src/main/res/values-sl/strings.xml b/libs/horizon/src/main/res/values-sl/strings.xml
index 9e52241dbd..66dfa07627 100644
--- a/libs/horizon/src/main/res/values-sl/strings.xml
+++ b/libs/horizon/src/main/res/values-sl/strings.xml
@@ -515,6 +515,7 @@
%1$s, označeno kot %2$s, dvakrat tapnite za urejanje opombe
Predmeti
Programi
+ Prebrskaj
Vložite vstopnico za osebni odziv naše ekipe za podporo.
Vnesi poziv
Nalaganje odgovora
@@ -545,4 +546,117 @@
Napaka: %1$s
Zahtevano
+ Iskanje
+ Elementi zaznamkov
+ Zaključeni elementi
+ Zaključeno
+ Zaznamek
+ Odstrani zaznamek
+ Vpis
+ Strni
+ Razširi
+ Prikaži celotno zbirko
+ Rezultatov ni mogoče najti. Poskusite z drugimi iskalnimi izrazi.
+ Posodobitev zaznamka ni uspela
+ Vpis v element ni uspel
+ Prikaži več
+ V poteku
+ Zaključeno
+ Ocena
+ Naloga
+ Program
+ Predmet
+ Zunanje orodje
+ Zunanja povezava
+ Datoteka
+ Stran
+ Nalaganje zbirke ni uspelo
+ Iskanje po zbirki
+ Prikaži več
+ Rezultatov ni mogoče najti. Poskusite z drugimi iskalnimi izrazi.
+ Zaznamki
+ Nalaganje elementov zbirke ni uspelo
+ Iskanje
+ Rezultatov ni mogoče najti. Poskusite z drugimi iskalnimi izrazi.
+
+ - %1$d element
+ - %1$d elementov
+
+
+ - %1$d min
+ - %1$d min
+
+
+ - %1$d enota
+ - %1$d enot
+
+ Katerakoli vrsta
+ Predmeti
+ Programi
+ Ocene
+ Naloge
+ Zunanje povezave
+ Zunanja orodja
+ Datoteke
+ Strani
+ Iskanje
+ Rezultatov ni mogoče najti. Poskusite z drugimi iskalnimi izrazi.
+ Kateri koli status
+ Zaključeno
+ Dodano med zaznamke
+ Nalaganje zbirk ni uspelo
+ Počisti filtre
+ Počisti iskalno poizvedbo
+ Pregled
+ Ste pripravljeni, da se pridružite?
+ Ne zdaj
+ Vpis
+ Vpišite se, da prejmete dostop do predmeta in se začnete učiti.
+ Vpis ni uspel
+ V tej zbirki ni elementov
+ Presežena
+ Priljubljeno med študenti v vaši organizaciji
+ Naslednji korak po %1$s
+ Povezano z vsebino, ki vas zanima
+ Za poglobitev vaših kompetenc na področju %1$s
+ vi
+ Priporočeno za %1$s
+ Prejšnji element
+ Naslednji element
+ Zbirke
+ Filtriraj in razvrščaj
+ Razvrsti glede na
+ Vrsta elementa
+ Uporabi filtre
+ Počisti filtre
+ Najnovejše
+ Najstarejše
+ Ime: A–Z
+ Ime: Ž–A
+ Filter
+ Predmet
+ Program
+
+ - %1$d predmet
+ - %1$d predmetov (-a/-i)
+
+ Nalaganje elementov ni uspelo
+ Začnite z učenjem
+ Nadaljuj z učenjem
+ Poteka
+ Zaključeno
+ Shranjeno
+ Iskanje
+ Moja vsebina
+ Prikaži več
+ Predmeti
+
+ - %1$d element
+ - %1$d elementov
+
+ %1$d ur %2$d min
+ %1$d ur
+ %1$d min
+ Rezultatov ni mogoče najti. Poskusite z drugimi iskalnimi izrazi.
+ Posodabljanje ni uspelo
diff --git a/libs/horizon/src/main/res/values-sv/strings.xml b/libs/horizon/src/main/res/values-sv/strings.xml
index 2f4472f533..25ed1b27e6 100644
--- a/libs/horizon/src/main/res/values-sv/strings.xml
+++ b/libs/horizon/src/main/res/values-sv/strings.xml
@@ -515,6 +515,7 @@
%1$s, markerad som %2$s, dubbeltryck för att redigera anteckning
Kurser
Program
+ Bläddra
Registrera ett ärende för ett personligt svar från vårt supportteam.
Ange en prompt
Läser in svar
@@ -545,4 +546,117 @@
Fel: %1$s
Obligatorisk
+ Sök
+ Bokmärkta objekt
+ Slutförda objekt
+ Färdig
+ Bokmärke
+ Ta bort bokmärke
+ Registrera dig
+ Dölj
+ Visa
+ Visa fullständig samling
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Det gick inte att uppdatera bokmärket
+ Det gick inte att registrera sig i en kurs
+ Visa mer
+ Pågår
+ Färdig
+ Bedömning
+ Uppgift
+ Program
+ Kurs
+ Externt verktyg
+ Extern länk
+ Fil
+ Sida
+ Det gick inte att läsa in samlingen
+ Sök i samlingen
+ Visa mer
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Bokmärken
+ Det gick inte att läsa in samlingsobjekt
+ Sök
+ Inga resultat hittades. Prova att ändra söktermerna.
+
+ - %1$d objekt
+ - %1$d objekt
+
+
+ - %1$d minut
+ - %1$d minuter
+
+
+ - %1$d enhet
+ - %1$d enheter
+
+ Valfri typ
+ Kurser
+ Program
+ Bedömningar
+ Uppgifter
+ Externa länkar
+ Externa verktyg
+ Filer
+ Sidor
+ Sök
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Valfri status
+ Färdig
+ Bokmärkta
+ Det gick inte att läsa in samlingarna
+ Rensa filter
+ Rensa sökfrågan
+ Översikt
+ Är du redo att gå med?
+ Inte nu
+ Registrera dig
+ Registrera dig för att få åtkomst till kursen och börja lära.
+ Det gick inte att registrera
+ Inga objekt i den här samlingen
+ Rekommenderad
+ Populär hos studenter i din organisation
+ Ett nästa steg efter %1$s
+ Relaterat till innehåll som intresserar dig
+ Så att du kan fördjupa dina kunskaper inom %1$s
+ du
+ Rekommenderas för %1$s
+ Föregående objekt
+ Nästa objekt
+ Samlingar
+ Filtrera och sortera
+ Sortera efter
+ Objekttyp
+ Tillämpa filter
+ Rensa filter
+ Senaste
+ Äldst
+ Namn: A–Ö
+ Namn: Ö–A
+ Filtrera
+ Kurs
+ Program
+
+ - %1$d kurs
+ - %1$d kurser
+
+ Det gick inte att läsa in objekt
+ Börja inlärningen
+ Återuppta lärande
+ Pågående
+ Färdig
+ Sparad
+ Sök
+ Mitt innehåll
+ Visa mer
+ Kurser
+
+ - %1$d objekt
+ - %1$d objekt
+
+ %1$d tim. %2$d min.
+ %1$d tim.
+ %1$d min.
+ Inga resultat hittades. Prova att ändra söktermerna.
+ Det gick inte att uppdatera
diff --git a/libs/horizon/src/main/res/values-th/strings.xml b/libs/horizon/src/main/res/values-th/strings.xml
index 32c5a2b392..4f14f19f90 100644
--- a/libs/horizon/src/main/res/values-th/strings.xml
+++ b/libs/horizon/src/main/res/values-th/strings.xml
@@ -515,6 +515,7 @@
%1$s, กำกับเป็น %2$s กดสองครั้งเพื่อแก้ไขหมายเหตุ
บทเรียน
หลักสูตร
+ เรียกดู
แจ้งตั๋วรับบริการสำหรับการตอบกลับส่วนบุคคลจากทีมงานให้บริการของเรา
กรอกข้อความแจ้ง
กำลังโหลดคำตอบ
@@ -545,4 +546,117 @@
ข้อผิดพลาด: %1$s
บังคับ
+ ค้นหา
+ รายการที่ทำบุ๊กมาร์กไว้
+ รายการที่เสร็จสิ้น
+ เสร็จสิ้นแล้ว
+ บุ๊กมาร์ก
+ ลบบุ๊กมาร์ก
+ ลงทะเบียน
+ ย่อ
+ ขยาย
+ ดูคอลเลคชั่นเต็ม
+ ไม่พบผลลัพธ์ ลองปรับคำค้นหาของคุณ
+ ไม่สามารถอัพเดตบุ๊กมาร์ก
+ ไม่สามารถลงทะเบียนรายการได้
+ แสดงเพิ่มเติม
+ กำลังดำเนินการ
+ เสร็จสิ้นแล้ว
+ การประเมิน
+ ภารกิจ
+ โปรแกรม
+ บทเรียน
+ เครื่องมือจากภายนอก
+ ลิงค์จากภายนอก
+ ไฟล์
+ เพจ
+ ไม่สามารถโหลดคอลเลคชั่น
+ ค้นหาคอลเลคชั่น
+ แสดงเพิ่มเติม
+ ไม่พบผลลัพธ์ ลองปรับคำค้นหาของคุณ
+ บุ๊กมาร์ก
+ ไม่สามารถโหลดรายการคอลเลคชั่น:
+ ค้นหา
+ ไม่พบผลลัพธ์ ลองปรับคำค้นหาของคุณ
+
+ - %1$d รายการ
+ - %1$d รายการ
+
+
+ - %1$d นาที
+ - %1$d นาที
+
+
+ - %1$d หน่วย
+ - %1$d หน่วย
+
+ ทำประเภท
+ บทเรียน
+ หลักสูตร
+ การประเมิน
+ ภารกิจ
+ ลิงค์จากภายนอก
+ เครื่องมือจากภายนอก
+ ไฟล์
+ เพจ
+ ค้นหา
+ ไม่พบผลลัพธ์ ลองปรับคำค้นหาของคุณ
+ ทุกสถานะ
+ เสร็จสิ้นแล้ว
+ ทำบุ๊กมาร์กแล้ว
+ ไม่สามารถโหลดคอลเลคชั่น
+ ล้างตัวกรอง
+ ล้างส่วนการสืบค้นเพื่อค้นหา
+ ภาพรวม
+ พร้อมเข้าร่วมหรือไม่
+ ยังก่อน
+ ลงทะเบียน
+ ลงทะเบียนเพื่อสืบค้นบทเรียนและเริ่มการเรียนรู้
+ ไม่สามารถลงทะเบียนได้
+ ไม่มีรายการในคอลเลคชั่นนี้
+ ที่แนะนำ
+ ยอดนิยมในกลุ่มผู้เรียนในหน่วยงานของคุณ
+ ขั้นตอนถัดไปหลังจาก %1$s
+ เกี่ยวกับเนื้อหาที่คุณสนใจ
+ เพื่อพัฒนาทักษะของคุณใน %1$s
+ คุณ
+ แนะนำสำหรับ %1$s
+ รายการก่อนหน้า
+ รายการถัดไป
+ คอลเลคชั่น
+ คัดกรองและจัดเรียง
+ จัดเรียงจาก
+ ประเภทรายการ
+ ปรับใช้ตัวกรอง
+ ล้างตัวกรอง
+ ใหม่สุด
+ เก่าสุด
+ ชื่อ: A-Z
+ ชื่อ: Z-A
+ ตัวกรอง
+ บทเรียน
+ โปรแกรม
+
+ - %1$d บทเรียน
+ - %1$d บทเรียน
+
+ ไม่สามารถโหลดรายการได้
+ เริ่มการเรียนรู้
+ เรียนรู้ต่อ
+ กำลังดำเนินการ
+ เสร็จสิ้นแล้ว
+ บันทึกแล้ว
+ ค้นหา
+ เนื้อหาของฉัน
+ แสดงเพิ่มเติม
+ บทเรียน
+
+ - %1$d รายการ
+ - %1$d รายการ
+
+ %1$d ชม. %2$d นาที
+ %1$d ชม.
+ ต่ำสุด %1$d
+ ไม่พบผลลัพธ์ ลองปรับคำค้นหาของคุณ
+ ไม่สามารถอัพเดตได้
diff --git a/libs/horizon/src/main/res/values-vi/strings.xml b/libs/horizon/src/main/res/values-vi/strings.xml
index fb6ffb53b7..5f525e3eac 100644
--- a/libs/horizon/src/main/res/values-vi/strings.xml
+++ b/libs/horizon/src/main/res/values-vi/strings.xml
@@ -515,6 +515,7 @@
%1$s, được đánh dấu là %2$s, nhấn đúp để chỉnh sửa ghi chú
Các khóa học
Chương Trình
+ Duyệt
Gửi phiếu yêu cầu phản hồi cá nhân từ nhóm hỗ trợ của chúng tôi.
Nhập một lời nhắc
Đang tải phản hồi
@@ -545,4 +546,117 @@
Lỗi: %1$s
Bắt Buộc
+ Tìm kiếm
+ Các mục đã đánh dấu trang
+ Các mục đã hoàn thành
+ Đã hoàn thành
+ Dấu trang
+ Gỡ dấu trang
+ Ghi Danh
+ Thu Gọn
+ Mở Rộng
+ Xem bộ sưu tập đầy đủ
+ Không tìm thấy kết quả. Thử điều chỉnh từ khóa tìm kiếm.
+ Không cập nhật được dấu trang
+ Không ghi danh được vào mục
+ Hiển thị thêm
+ Trong tiến trình
+ Đã hoàn thành
+ Đánh Giá
+ Bài Tập
+ Chương Trình
+ Khóa Học
+ Công cụ ngoài
+ Liên kết bên ngoài
+ Tập tin
+ Trang
+ Không tải được bộ sưu tập
+ Tìm kiếm bộ sưu tập
+ Hiển thị thêm
+ Không tìm thấy kết quả. Thử điều chỉnh từ khóa tìm kiếm.
+ Dấu Trang
+ Không tải được các mục bộ sưu tập
+ Tìm kiếm
+ Không tìm thấy kết quả. Thử điều chỉnh từ khóa tìm kiếm.
+
+ - %1$d mục
+ - %1$d mục
+
+
+ - Tối thiểu %1$d
+ - %1$d phút
+
+
+ - %1$d bài
+ - %1$d bài
+
+ Bất kỳ loại nào
+ Các khóa học
+ Chương Trình
+ Đánh Giá
+ Bài Tập
+ Liên kết bên ngoài
+ Công cụ ngoài
+ Tập Tin
+ Trang
+ Tìm kiếm
+ Không tìm thấy kết quả. Thử điều chỉnh từ khóa tìm kiếm.
+ Bất kỳ trạng thái nào
+ Đã hoàn thành
+ Đã Đánh Dấu Trang
+ Không tải được các bộ sưu tập
+ Xóa bỏ bộ lọc
+ Xóa truy vấn tìm kiếm
+ Tổng Quan
+ Bạn đã sẵn sàng tham gia?
+ Không phải bây giờ
+ Ghi Danh
+ Ghi danh để truy cập khóa học và bắt đầu học.
+ Không ghi danh được
+ Không có mục nào trong bộ sưu tập này
+ Được Đề Xuất
+ Phổ biến với người học tại tổ chức của bạn
+ Bước tiếp theo sau %1$s
+ Liên quan đến nội dung bạn quan tâm
+ Để nâng cao kỹ năng của bạn trong %1$s
+ bạn
+ Được đề xuất cho %1$s
+ Mục trước
+ Mục tiếp theo
+ Bộ Sưu Tập
+ Lọc và sắp xếp
+ Sắp xếp theo
+ Loại mục
+ Áp dụng các bộ lọc
+ Xóa bỏ bộ lọc
+ Mới nhất
+ Gần đây nhất
+ Tên: A-Z
+ Tên: Z-A
+ Bộ lọc
+ Khóa Học
+ Chương Trình
+
+ - %1$d khóa học
+ - %1$d khóa học
+
+ Không tải được các mục
+ Bắt đầu học
+ Tiếp tục học
+ Trong Tiến Trình
+ Đã hoàn thành
+ Đã Lưu
+ Tìm kiếm
+ Nội dung của tôi
+ Hiển thị thêm
+ Các khóa học
+
+ - %1$d mục
+ - %1$d mục
+
+ %1$d giờ %2$d phút
+ %1$d giờ
+ Tối thiểu %1$d
+ Không tìm thấy kết quả. Thử điều chỉnh từ khóa tìm kiếm.
+ Không cập nhật được
diff --git a/libs/horizon/src/main/res/values-zh/strings.xml b/libs/horizon/src/main/res/values-zh/strings.xml
index 0c947df97a..c013e9dca4 100644
--- a/libs/horizon/src/main/res/values-zh/strings.xml
+++ b/libs/horizon/src/main/res/values-zh/strings.xml
@@ -505,6 +505,7 @@
%1$s,标记为%2$s,双击以编辑笔记
课程
项目
+ 浏览
向我们的支持团队提问。
输入提示
加载回应
@@ -534,4 +535,112 @@
错误:%1$s
必填
+ 搜索
+ 书签项目
+ 已完成项目
+ 已完成
+ 书签
+ 删除书签
+ 注册
+ 折叠
+ 展开
+ 查看完整合集
+ 未找到结果。尝试调整搜索词
+ 更新书签失败
+ 注册项目失败
+ 显示更多
+ 进行中
+ 已完成
+ 评估
+ 作业
+ 项目
+ 课程
+ 外部工具
+ 外部链接
+ 文件
+ 页面
+ 加载合集失败
+ 搜索合集
+ 显示更多
+ 未找到结果。尝试调整搜索词
+ 书签
+ 加载合集项目失败
+ 搜索
+ 未找到结果。尝试调整搜索词
+
+ - %1$d 个项目
+
+
+ - %1$d 分钟
+
+
+ - %1$d 个单位
+
+ 任意类型
+ 课程
+ 计划
+ 评估
+ 作业
+ 外部链接
+ 外部工具
+ 文件
+ 页面
+ 搜索
+ 未找到结果。尝试调整搜索词
+ 任何状态
+ 已完成
+ 已加入书签
+ 加载合集失败
+ 清除筛选器
+ 清除搜索查询
+ 总览
+ 准备加入?
+ 暂时不用
+ 注册
+ 注册以访问课程并开始学习。
+ 注册失败
+ 此合集中没有项目
+ 推荐
+ 在组织学员中受欢迎
+ %1$s后的下一步
+ 与您感兴趣的内容相关
+ 加上您在%1$s方面的技能
+ 您
+ 针对%1$s推荐
+ 先前的项目
+ 下一个项目
+ 集合
+ 筛选并排序
+ 排序
+ 项目类型
+ 应用过滤器
+ 清除筛选器
+ 最近优先
+ 最早优先
+ 名称:A-Z
+ 名称:Z-A
+ 筛选器
+ 课程
+ 项目
+
+ - %1$d 门课程
+
+ 加载项目失败
+ 开始学习
+ 恢复学习
+ 进行中
+ 已完成
+ 已保存
+ 搜索
+ 我的内容
+ 显示更多
+ 课程
+
+ - %1$d 个项目
+
+ %1$d 小时 %2$d 分钟
+ %1$d 小时
+ 最少 %1$d
+ 未找到结果。尝试调整搜索词
+ 更新失败
diff --git a/libs/horizon/src/main/res/values/strings.xml b/libs/horizon/src/main/res/values/strings.xml
index 870f4f606d..e832668f68 100644
--- a/libs/horizon/src/main/res/values/strings.xml
+++ b/libs/horizon/src/main/res/values/strings.xml
@@ -20,7 +20,7 @@
Learn
Skillspace
Account
- IgniteAI
+ Study Tools
%1$s\%%
Resume learning
Assignment
@@ -199,10 +199,13 @@
Download file
Open with
File couldn’t be downloaded.
+ Study tools
+ Dismiss Study tools
IgniteAI
Dismiss IgniteAI
- Rate IgniteAI with positive feedback
- Rate IgniteAI with negative feedback
+ AI Information
+ Rate Study tools with positive feedback
+ Rate Study tools with negative feedback
Enter a prompt
Submit prompt
Check answer
@@ -506,7 +509,7 @@
Unread
Previous module item
Previous module
- Open IgniteAI
+ Open Study tools
Open notebook
Open more options
Next module item
@@ -516,9 +519,9 @@
Programs
Browse
File a ticket for a personal response from our support team.
- Enter a prompt
- Loading response
- Flip the card
+ Enter a prompt
+ Loading response
+ Flip the card
Failed to load courses
All courses
Not started
@@ -658,4 +661,70 @@
%1$d min
No results found. Try adjusting your search terms.
Failed to update
+ Study tools
+ Permission Level
+ LEVEL 1
+ We utilize off-the-shelf AI models and customer data as input to provide AI-powered features. No data is used for training this model.
+ Permission Levels
+ Base Model
+ Claude 3.5 Haiku by Anthropic and Cohere multi-language v3
+ View AI Nutrition Facts
+ Data Permission Levels
+ Current Feature:
+ Study tools
+ Close
+ LEVEL 1
+ Descriptive Analytics and Research
+ We leverage anonymized aggregate data for detailed analytics to inform model development and product improvements. No AI models are used at this level.
+ LEVEL 2
+ AI-Powered Features Without Data Training
+ We utilize off-the-shelf AI models and customer data as input to provide AI-powered features. No data is used for training this model.
+ LEVEL 3
+ AI Customization for Individual Institutions
+ We customize AI solutions tailored to the unique needs and resources of educational institutions. We use customer data to fine-tune data and train AI models that only serve your institution. Your institution\'s data only serves them through trained models.
+ LEVEL 4
+ Collaborative AI Consortium
+ We established a consortium with educational institutions that shares anonymized data, best practices, and research findings. This fosters collaboration and accelerates the responsible development of AI in education. Specialized AI models are created for better outcomes in education, cost savings, and more.
+ Nutrition Facts
+ Study tools
+ Model & Data
+ Privacy & Compliance
+ Outputs
+ Value
+ Description
+ Base Model
+ The foundational AI on which further training and customizations are built.
+ Trained with User Data
+ Indicates the AI model has been given customer data in order to improve its results.
+ No
+ Data Shared with Model
+ Indicates which training or operational content was given to the model.
+ Course content
+ Data Retention
+ How long the model stores customer data.
+ No
+ Data Logging
+ Recording the AI\'s performance for auditing, analysis, and improvement.
+ Chat logs are retained for 30 days for troubleshooting and debugging
+ Regions Supported
+ The locations where the AI model is officially available and supported.
+ Global
+ PII
+ Sensitive data that can be used to identify an individual.
+ Not Exposed
+ AI Settings Control
+ The ability to turn the AI on or off within the product.
+ No
+ Human in the Loop
+ Indicates if a human is involved in the AI\'s process or output.
+ Yes
+ Guardrails
+ Preventative safety mechanisms or limitations built into the AI model.
+ Yes
+ Expected Risks
+ Any risks the model may pose to the user.
+ Low risk
+ Intended Outcomes
+ The specific results the AI model is meant to achieve.
+ AI Generated content may contain mistakes or inaccurate information and should always be verified
\ No newline at end of file
diff --git a/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModelTest.kt b/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModelTest.kt
index 3a4a6de482..591e12b71b 100644
--- a/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModelTest.kt
+++ b/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/chat/AiAssistChatViewModelTest.kt
@@ -16,8 +16,6 @@
*/
package com.instructure.horizon.features.aiassistant.chat
-import androidx.compose.ui.text.input.TextFieldValue
-import com.instructure.canvasapi2.models.journey.assist.JourneyAssistChipOption
import com.instructure.canvasapi2.models.journey.assist.JourneyAssistRole
import com.instructure.canvasapi2.models.journey.assist.JourneyAssistState
import com.instructure.horizon.features.aiassistant.common.AiAssistContextProvider
@@ -26,11 +24,9 @@ import com.instructure.horizon.features.aiassistant.common.AiAssistResponse
import com.instructure.horizon.features.aiassistant.common.model.AiAssistContext
import com.instructure.horizon.features.aiassistant.common.model.AiAssistMessage
import io.mockk.coEvery
-import io.mockk.coVerify
import io.mockk.every
import io.mockk.mockk
import io.mockk.unmockkAll
-import io.mockk.verify
import junit.framework.TestCase.assertEquals
import junit.framework.TestCase.assertFalse
import junit.framework.TestCase.assertTrue
@@ -106,233 +102,6 @@ class AiAssistChatViewModelTest {
assertFalse(viewModel.uiState.value.isLoading)
}
- @Test
- fun `Text input change updates state`() = runTest {
- val viewModel = getViewModel()
-
- val newText = TextFieldValue("Test input")
- viewModel.uiState.value.onInputTextChanged(newText)
-
- assertEquals("Test input", viewModel.uiState.value.inputTextValue.text)
- }
-
- @Test
- fun `Text submission sends message and clears input`() = runTest {
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Test message"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- assertTrue(viewModel.uiState.value.messages.any {
- it.role == JourneyAssistRole.User && it.text == "Test message"
- })
- assertEquals("", viewModel.uiState.value.inputTextValue.text)
- }
-
- @Test
- fun `Text submission receives response from repository`() = runTest {
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Test message"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- coVerify { repository.answerPrompt("Test message", any(), any()) }
- assertTrue(viewModel.uiState.value.messages.any {
- it.role == JourneyAssistRole.Assistant && it.text == "Test response"
- })
- assertFalse(viewModel.uiState.value.isLoading)
- }
-
- @Test
- fun `Loading state is set during message submission`() = runTest {
- coEvery {
- repository.answerPrompt(any(), any(), any())
- } coAnswers {
- kotlinx.coroutines.delay(100)
- val message = AiAssistMessage(
- text = "Response",
- role = JourneyAssistRole.Assistant
- )
- AiAssistResponse(message, testState)
- }
-
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Test message"))
- viewModel.uiState.value.onInputTextSubmitted()
-
- assertTrue(viewModel.uiState.value.isLoading)
-
- testDispatcher.scheduler.advanceUntilIdle()
-
- assertFalse(viewModel.uiState.value.isLoading)
- }
-
- @Test
- fun `Messages are appended in correct order`() = runTest {
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("First message"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Second message"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- val messages = viewModel.uiState.value.messages
- assertEquals(4, messages.size)
- assertEquals(JourneyAssistRole.User, messages[0].role)
- assertEquals("First message", messages[0].text)
- assertEquals(JourneyAssistRole.Assistant, messages[1].role)
- assertEquals(JourneyAssistRole.User, messages[2].role)
- assertEquals("Second message", messages[2].text)
- assertEquals(JourneyAssistRole.Assistant, messages[3].role)
- }
-
- @Test
- fun `Chip click sends prompt and receives response`() = runTest {
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onChipClicked("Suggested prompt")
- testDispatcher.scheduler.advanceUntilIdle()
-
- assertTrue(viewModel.uiState.value.messages.any {
- it.role == JourneyAssistRole.User && it.text == "Suggested prompt"
- })
- coVerify { repository.answerPrompt("Suggested prompt", any(), any()) }
- assertTrue(viewModel.uiState.value.messages.any {
- it.role == JourneyAssistRole.Assistant
- })
- }
-
- @Test
- fun `Clear chat history updates context provider`() = runTest {
- val existingMessage = AiAssistMessage(
- text = "Existing message",
- role = JourneyAssistRole.User
- )
- val contextWithHistory = testContext.copy(chatHistory = listOf(existingMessage))
- every { aiAssistContextProvider.aiAssistContext } returns contextWithHistory
-
- val viewModel = getViewModel()
- viewModel.uiState.value.onClearChatHistory()
-
- verify {
- aiAssistContextProvider.aiAssistContext = match {
- it.chatHistory.isEmpty()
- }
- }
- }
-
- @Test
- fun `Navigate to cards updates context and removes last message`() = runTest {
- val responseMessage = AiAssistMessage(
- text = "Response with cards",
- role = JourneyAssistRole.Assistant,
- chipOptions = listOf(JourneyAssistChipOption("Option 1", "prompt1"))
- )
- coEvery {
- repository.answerPrompt(any(), any(), any())
- } returns AiAssistResponse(responseMessage, testState)
-
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Generate cards"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- val messageCountBefore = viewModel.uiState.value.messages.size
- viewModel.uiState.value.onNavigateToCards()
-
- assertEquals(messageCountBefore - 1, viewModel.uiState.value.messages.size)
- verify { aiAssistContextProvider.aiAssistContext = any() }
- }
-
- @Test
- fun `Repository is called with conversation history`() = runTest {
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("First"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Second"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- coVerify(exactly = 2) {
- repository.answerPrompt(any(), any(), any())
- }
-
- coVerify {
- repository.answerPrompt(
- "Second",
- match { history ->
- history.any { it.role == JourneyAssistRole.User && it.text == "First" } &&
- history.any { it.role == JourneyAssistRole.Assistant } &&
- history.any { it.role == JourneyAssistRole.User && it.text == "Second" }
- },
- any()
- )
- }
- }
-
- @Test
- fun `State is updated from repository response`() = runTest {
- val updatedState = JourneyAssistState(
- courseID = "456",
- fileID = "789",
- pageID = "101"
- )
- val message = AiAssistMessage(
- text = "Response",
- role = JourneyAssistRole.Assistant
- )
- coEvery {
- repository.answerPrompt(any(), any(), any())
- } returns AiAssistResponse(message, updatedState)
-
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Test"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Second"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- coVerify {
- repository.answerPrompt(
- "Second",
- any(),
- match { state ->
- state.courseID == "456" &&
- state.fileID == "789" &&
- state.pageID == "101"
- }
- )
- }
- }
-
- @Test
- fun `Error handling sets loading to false`() = runTest {
- coEvery {
- repository.answerPrompt(any(), any(), any())
- } throws Exception("Network error")
-
- val viewModel = getViewModel()
-
- viewModel.uiState.value.onInputTextChanged(TextFieldValue("Test"))
- viewModel.uiState.value.onInputTextSubmitted()
- testDispatcher.scheduler.advanceUntilIdle()
-
- assertFalse(viewModel.uiState.value.isLoading)
- }
-
private fun getViewModel(): AiAssistChatViewModel {
return AiAssistChatViewModel(repository, aiAssistContextProvider)
}
diff --git a/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepositoryTest.kt b/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepositoryTest.kt
index f63d58bcf7..618396771c 100644
--- a/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepositoryTest.kt
+++ b/libs/horizon/src/test/java/com/instructure/horizon/features/aiassistant/common/AiAssistRepositoryTest.kt
@@ -91,7 +91,7 @@ class AiAssistRepositoryTest {
)
coEvery {
- journeyAssistAPI.answerPrompt(any())
+ journeyAssistAPI.answerPrompt(any(), true)
} returns apiResponse
val result = repository.answerPrompt(
@@ -117,7 +117,7 @@ class AiAssistRepositoryTest {
)
coEvery {
- journeyAssistAPI.answerPrompt(any())
+ journeyAssistAPI.answerPrompt(any(), true)
} returns apiResponse
val result = repository.answerPrompt(
@@ -144,7 +144,7 @@ class AiAssistRepositoryTest {
)
coEvery {
- journeyAssistAPI.answerPrompt(any())
+ journeyAssistAPI.answerPrompt(any(), true)
} returns JourneyAssistResponse(response = "Response")
repository.answerPrompt(prompt, history, testState)
@@ -155,7 +155,8 @@ class AiAssistRepositoryTest {
requestBody.prompt == prompt &&
requestBody.history == history &&
requestBody.state == testState
- }
+ },
+ true
)
}
}
@@ -169,7 +170,7 @@ class AiAssistRepositoryTest {
)
coEvery {
- journeyAssistAPI.answerPrompt(any())
+ journeyAssistAPI.answerPrompt(any(), true)
} returns JourneyAssistResponse(
response = "Response",
state = updatedState
@@ -187,7 +188,7 @@ class AiAssistRepositoryTest {
@Test
fun `answerPrompt handles null state in response`() = runTest {
coEvery {
- journeyAssistAPI.answerPrompt(any())
+ journeyAssistAPI.answerPrompt(any(), true)
} returns JourneyAssistResponse(
response = "Response",
state = null
@@ -205,7 +206,7 @@ class AiAssistRepositoryTest {
@Test
fun `answerPrompt with empty history`() = runTest {
coEvery {
- journeyAssistAPI.answerPrompt(any())
+ journeyAssistAPI.answerPrompt(any(), true)
} returns JourneyAssistResponse(response = "Response")
repository.answerPrompt(
@@ -216,7 +217,8 @@ class AiAssistRepositoryTest {
coVerify {
journeyAssistAPI.answerPrompt(
- match { it.history.isEmpty() }
+ match { it.history.isEmpty() },
+ true
)
}
}
diff --git a/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assessment/AssessmentRepositoryTest.kt b/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assessment/AssessmentRepositoryTest.kt
index 5ba75ef571..f4c665e3af 100644
--- a/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assessment/AssessmentRepositoryTest.kt
+++ b/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assessment/AssessmentRepositoryTest.kt
@@ -95,13 +95,13 @@ class AssessmentRepositoryTest {
fun `authenticateUrl returns authenticated URL for LTI tool`() = runTest {
val session = AuthenticatedSession(sessionUrl = "https://authenticated.lti.url")
coEvery { launchDefinitionsApi.getLtiFromAuthenticationUrl(any(), any()) } returns DataResult.Success(testLTITool)
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Success(session)
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(session)
val result = repository.authenticateUrl("https://example.com/quiz")
assertEquals("https://authenticated.lti.url", result)
coVerify { launchDefinitionsApi.getLtiFromAuthenticationUrl("https://example.com/quiz", any()) }
- coVerify { oAuthInterface.getAuthenticatedSession("https://lti.example.com/tool", any()) }
+ coVerify { oAuthInterface.getAuthenticatedSession("https://lti.example.com/tool", any(), any()) }
}
@Test
@@ -118,7 +118,7 @@ class AssessmentRepositoryTest {
fun `authenticateUrl returns original URL when session URL is null`() = runTest {
val session = AuthenticatedSession(sessionUrl = "https://example.com/quiz/authenticated")
coEvery { launchDefinitionsApi.getLtiFromAuthenticationUrl(any(), any()) } returns DataResult.Success(testLTITool)
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Success(session)
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(session)
val result = repository.authenticateUrl("https://example.com/quiz")
@@ -128,7 +128,7 @@ class AssessmentRepositoryTest {
@Test
fun `authenticateUrl returns original URL when authentication fails`() = runTest {
coEvery { launchDefinitionsApi.getLtiFromAuthenticationUrl(any(), any()) } returns DataResult.Success(testLTITool)
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Fail()
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Fail()
val result = repository.authenticateUrl("https://example.com/quiz")
@@ -139,12 +139,12 @@ class AssessmentRepositoryTest {
fun `authenticateUrl always uses forceNetwork`() = runTest {
val session = AuthenticatedSession(sessionUrl = "https://authenticated.url")
coEvery { launchDefinitionsApi.getLtiFromAuthenticationUrl(any(), any()) } returns DataResult.Success(testLTITool)
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Success(session)
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(session)
repository.authenticateUrl("https://example.com")
coVerify { launchDefinitionsApi.getLtiFromAuthenticationUrl(any(), match { it.isForceReadFromNetwork }) }
- coVerify { oAuthInterface.getAuthenticatedSession(any(), match { it.isForceReadFromNetwork }) }
+ coVerify { oAuthInterface.getAuthenticatedSession(any(), match { it.isForceReadFromNetwork }, any()) }
}
@Test
diff --git a/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assignment/AssignmentDetailsRepositoryTest.kt b/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assignment/AssignmentDetailsRepositoryTest.kt
index 6f06cfa94d..b7f71ddea0 100644
--- a/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assignment/AssignmentDetailsRepositoryTest.kt
+++ b/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/assignment/AssignmentDetailsRepositoryTest.kt
@@ -74,7 +74,7 @@ class AssignmentDetailsRepositoryTest {
val authenticatedUrl = "https://example.com/file?session=xyz"
val session = AuthenticatedSession(sessionUrl = authenticatedUrl)
- coEvery { oAuthInterface.getAuthenticatedSession(originalUrl, any()) } returns
+ coEvery { oAuthInterface.getAuthenticatedSession(originalUrl, any(), any()) } returns
DataResult.Success(session)
val result = getRepository().authenticateUrl(originalUrl)
@@ -85,7 +85,7 @@ class AssignmentDetailsRepositoryTest {
@Test
fun `Test URL authentication fallback on failure`() = runTest {
val originalUrl = "https://example.com/file"
- coEvery { oAuthInterface.getAuthenticatedSession(originalUrl, any()) } returns DataResult.Fail()
+ coEvery { oAuthInterface.getAuthenticatedSession(originalUrl, any(), any()) } returns DataResult.Fail()
val result = getRepository().authenticateUrl(originalUrl)
@@ -95,7 +95,7 @@ class AssignmentDetailsRepositoryTest {
@Test
fun `Test URL authentication fallback on null session`() = runTest {
val originalUrl = "https://example.com/file"
- coEvery { oAuthInterface.getAuthenticatedSession(originalUrl, any()) } returns DataResult.Fail()
+ coEvery { oAuthInterface.getAuthenticatedSession(originalUrl, any(), any()) } returns DataResult.Fail()
val result = getRepository().authenticateUrl(originalUrl)
diff --git a/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/page/PageDetailsRepositoryTest.kt b/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/page/PageDetailsRepositoryTest.kt
index 2c7e74f30d..304098d217 100644
--- a/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/page/PageDetailsRepositoryTest.kt
+++ b/libs/horizon/src/test/java/com/instructure/horizon/features/moduleitemsequence/content/page/PageDetailsRepositoryTest.kt
@@ -133,17 +133,17 @@ class PageDetailsRepositoryTest {
@Test
fun `authenticateUrl returns authenticated URL`() = runTest {
val session = AuthenticatedSession(sessionUrl = "https://authenticated.url")
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Success(session)
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(session)
val result = repository.authenticateUrl("https://example.com/page")
assertEquals("https://authenticated.url", result)
- coVerify { oAuthInterface.getAuthenticatedSession("https://example.com/page", any()) }
+ coVerify { oAuthInterface.getAuthenticatedSession("https://example.com/page", any(), any()) }
}
@Test
fun `authenticateUrl returns original URL on failure`() = runTest {
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Fail()
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Fail()
val result = repository.authenticateUrl("https://example.com/page")
@@ -153,7 +153,7 @@ class PageDetailsRepositoryTest {
@Test
fun `authenticateUrl returns original URL when session URL is null`() = runTest {
val session = AuthenticatedSession(sessionUrl = "https://example.com/page/authenticated")
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Success(session)
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(session)
val result = repository.authenticateUrl("https://example.com/page")
@@ -200,10 +200,10 @@ class PageDetailsRepositoryTest {
@Test
fun `authenticateUrl always uses forceNetwork`() = runTest {
val session = AuthenticatedSession(sessionUrl = "https://authenticated.url")
- coEvery { oAuthInterface.getAuthenticatedSession(any(), any()) } returns DataResult.Success(session)
+ coEvery { oAuthInterface.getAuthenticatedSession(any(), any(), any()) } returns DataResult.Success(session)
repository.authenticateUrl("https://example.com")
- coVerify { oAuthInterface.getAuthenticatedSession(any(), match { it.isForceReadFromNetwork }) }
+ coVerify { oAuthInterface.getAuthenticatedSession(any(), match { it.isForceReadFromNetwork }, any()) }
}
}
diff --git a/libs/instui/.gitignore b/libs/instui/.gitignore
new file mode 100644
index 0000000000..b3fa1d53dc
--- /dev/null
+++ b/libs/instui/.gitignore
@@ -0,0 +1,37 @@
+node_modules/
+package-lock.json
+
+#built application files
+*.apk
+*.ap_
+
+# files for the dex VM
+*.dex
+
+# Java class files
+*.class
+
+# generated files
+bin/
+gen/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Windows thumbnail db
+Thumbs.db
+
+# OSX files
+.DS_Store
+
+# Eclipse project files
+.classpath
+.project
+
+# Android Studio
+.idea
+*.iml
+*.iws
+.gradle
+build/
+/build
diff --git a/libs/instui/build.gradle.kts b/libs/instui/build.gradle.kts
new file mode 100644
index 0000000000..2c7a76f057
--- /dev/null
+++ b/libs/instui/build.gradle.kts
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+ id("com.android.library")
+ id("org.jetbrains.kotlin.android")
+ id("org.jetbrains.kotlin.plugin.compose")
+}
+
+android {
+ namespace = "com.instructure.instui"
+ compileSdk = Versions.COMPILE_SDK
+ buildToolsVersion = Versions.BUILD_TOOLS
+
+ defaultConfig {
+ minSdk = Versions.MIN_SDK
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ debug {
+ isMinifyEnabled = false
+ }
+ release {
+ isMinifyEnabled = false
+ proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
+ }
+ }
+
+ buildFeatures {
+ compose = true
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17.toString()
+ }
+}
+
+dependencies {
+ implementation(platform(Libs.COMPOSE_BOM))
+ implementation(Libs.COMPOSE_UI)
+ implementation(Libs.COMPOSE_FOUNDATION)
+ implementation(Libs.COMPOSE_MATERIAL_3)
+ implementation(Libs.COMPOSE_PREVIEW)
+ debugImplementation(Libs.COMPOSE_TOOLING)
+}
+
+/**
+ * Gradle task to generate InstUI tokens from instructure-ui.
+ *
+ * Usage: ./gradlew :libs:instui:generateInstUITokens
+ *
+ * This task:
+ * 1. Installs npm dependencies if needed
+ * 2. Downloads tokens from instructure-ui repository
+ * 3. Generates Kotlin files using Style Dictionary
+ */
+tasks.register("generateInstUITokens") {
+ group = "build"
+ description = "Downloads InstUI tokens and generates Kotlin primitives for Compose"
+ workingDir = file("scripts")
+
+ doFirst {
+ // Ensure npm dependencies are installed
+ if (!file("scripts/node_modules").exists()) {
+ println("Installing npm dependencies...")
+ exec {
+ workingDir = file("scripts")
+ commandLine("npm", "install")
+ }
+ }
+ }
+
+ commandLine("npm", "run", "build")
+}
diff --git a/libs/instui/consumer-rules.pro b/libs/instui/consumer-rules.pro
new file mode 100644
index 0000000000..26aec7bd8b
--- /dev/null
+++ b/libs/instui/consumer-rules.pro
@@ -0,0 +1 @@
+# InstUI Design System - no consumer proguard rules needed
diff --git a/libs/instui/proguard-rules.pro b/libs/instui/proguard-rules.pro
new file mode 100644
index 0000000000..f8c8ac5587
--- /dev/null
+++ b/libs/instui/proguard-rules.pro
@@ -0,0 +1 @@
+# InstUI Design System - no special rules needed
\ No newline at end of file
diff --git a/libs/instui/scripts/README.md b/libs/instui/scripts/README.md
new file mode 100644
index 0000000000..e60f925c9f
--- /dev/null
+++ b/libs/instui/scripts/README.md
@@ -0,0 +1,89 @@
+# InstUI Token Generator
+
+This directory contains scripts to generate Jetpack Compose design token files from the [instructure-ui](https://github.com/instructure/instructure-ui) design system.
+
+## Overview
+
+The generator downloads design tokens from the instructure-ui repository and uses [Style Dictionary](https://styledictionary.com/) to transform them into Kotlin files for Jetpack Compose. It produces three layers of tokens:
+
+1. **Primitives** - Raw design values (colors, sizes, weights, fonts, opacities)
+2. **Semantics** - Theme-aware tokens that reference primitives (light/dark colors, layout, typography)
+3. **Components** - Per-component tokens that reference the semantic layer (auto-discovered, 65 files)
+
+## Generated Files
+
+**⚠️ DO NOT EDIT these files manually!** They are regenerated from the source tokens.
+
+### Primitives (`../src/main/java/com/instructure/instui/token/primitives/`)
+
+- **InstUIColors.kt** - Color primitives (grey, blue, red, etc.)
+- **InstUISizes.kt** - Size/spacing primitives in dp
+- **InstUIFontWeights.kt** - Font weight values (100-900)
+- **InstUIFontFamilies.kt** - Font family definitions
+- **InstUIOpacities.kt** - Opacity values
+
+### Semantics (`../src/main/java/com/instructure/instui/token/semantic/`)
+
+- **InstUISemanticColors.kt** - Theme-aware colors with Light/Dark + @Composable accessors
+- **InstUIElevation.kt** - Shadow values (Level1-4)
+- **InstUILayoutSizes.kt** - Border radius, spacing, interactive sizes, breakpoints
+- **InstUILayoutTypography.kt** - Font families, weights, sizes, line heights
+- **InstUILayoutConfig.kt** - Opacity config, visibility flags
+
+### Components (`../src/main/java/com/instructure/instui/token/component/`)
+
+One file per component, auto-discovered from the instructure-ui repo. Examples:
+- **InstUIText.kt** - Text styles (composed TextStyle objects), font sizes, colors
+- **InstUIHeading.kt** - Heading levels, composed title TextStyles
+- **InstUIBaseButton.kt** - Button variant colors and sizing
+- **InstUIPill.kt** - Status pill styling
+- **InstUIList.kt** - List item spacing and typography
+- ... (65 files total)
+
+Component tokens reference the semantic layer:
+- Color tokens use `@Composable get()` for automatic theme switching
+- Font sizes are in `sp` (not dp) for accessibility correctness
+- Typography composites generate `TextStyle` objects with `sp`/`em` units
+- BoxShadow and Border composites are documented as comments (not directly usable in Compose)
+
+## Usage
+
+### Via Gradle (Recommended)
+
+```bash
+./gradlew :libs:instui:generateInstUITokens
+```
+
+### Via npm directly
+
+```bash
+cd libs/instui/scripts
+npm install
+npm run build
+```
+
+## Updating InstUI Version
+
+To update to a newer version of instructure-ui:
+
+1. Edit `build-instui.js` and change `INSTUI_VERSION`
+2. Run the generator
+3. Verify the generated files
+4. Commit the changes
+
+## Font Files
+
+The generator creates references to font resources that must exist in `../src/main/res/font/`.
+
+Currently required fonts:
+- **Lato** - lato_regular.ttf, lato_semibold.ttf, lato_bold.ttf
+- **Inclusive Sans** - inclusive_sans_regular.ttf, inclusive_sans_semibold.ttf, inclusive_sans_bold.ttf
+- **Atkinson Hyperlegible** - atkinson_hyperlegible_next_regular.ttf, etc.
+- **Menlo** - Uses system monospace font, no file needed
+
+If a font file is missing, the app will crash at runtime when that font is used.
+
+## Dependencies
+
+- Node.js 18+
+- style-dictionary ^4.0.0
diff --git a/libs/instui/scripts/build-instui-icons.js b/libs/instui/scripts/build-instui-icons.js
new file mode 100644
index 0000000000..5452224dfd
--- /dev/null
+++ b/libs/instui/scripts/build-instui-icons.js
@@ -0,0 +1,389 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * InstUI Icon Generator for Android
+ *
+ * Downloads SVG icons from the instructure-ui repository and generates
+ * Compose ImageVector Kotlin files with delta support.
+ *
+ * Features:
+ * - Fetches all icons from Line, Solid, and Custom categories
+ * - Generates one Kotlin file per icon as lazy ImageVector extension properties
+ * - Delta sync: only downloads/generates icons that changed (SHA-based manifest)
+ * - Handles multi-path SVGs
+ *
+ * Generated files go to: ../src/main/java/com/instructure/instui/token/icon/
+ */
+
+const fs = require('fs')
+const path = require('path')
+
+const LICENSE_HEADER = `/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens`
+
+const BUILD_PATH = '../src/main/java/com/instructure/instui/token/icon/'
+const BASE_PACKAGE = 'com.instructure.instui.token.icon'
+const MANIFEST_PATH = path.join(__dirname, 'icons-manifest.json')
+const CATEGORIES = ['Line', 'Solid', 'Custom']
+const ICONS_REPO_PATH = 'packages/ui-icons/svg'
+
+// ---------------------------------------------------------------------------
+// Naming
+// ---------------------------------------------------------------------------
+
+/**
+ * Convert SVG filename to PascalCase Kotlin identifier.
+ * "arrow-left.svg" → "ArrowLeft"
+ * "aI-info.svg" → "AiInfo"
+ * "a11y.svg" → "A11y"
+ */
+function svgToKotlinName(filename) {
+ const base = filename.replace('.svg', '')
+ return base
+ .split('-')
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
+ .join('')
+}
+
+/**
+ * Category name to Kotlin package segment.
+ * "Line" → "line", "Solid" → "solid", "Custom" → "custom"
+ */
+function categoryToPackage(category) {
+ return category.toLowerCase()
+}
+
+/**
+ * Check if an icon name represents a directional icon that should
+ * be mirrored in RTL layouts.
+ */
+const DIRECTIONAL_PATTERNS = [
+ /^arrow/i, /^back/i, /^forward/i, /^chevron/i,
+ /^indent/i, /^outdent/i, /^redo/i, /^undo/i,
+ /^reply/i, /^share/i, /^exit/i, /^external-link/i,
+ /^mini-arrow/i, /^drop-down/i,
+]
+
+function isDirectionalIcon(filename) {
+ const base = filename.replace('.svg', '')
+ return DIRECTIONAL_PATTERNS.some(pattern => pattern.test(base))
+}
+
+// ---------------------------------------------------------------------------
+// SVG Parsing
+// ---------------------------------------------------------------------------
+
+/**
+ * Extract viewBox dimensions from SVG content.
+ * Returns { width, height } or defaults to 1920x1920.
+ */
+function parseViewBox(svg) {
+ const match = svg.match(/viewBox=["'](\d+)\s+(\d+)\s+(\d+)\s+(\d+)["']/)
+ if (match) {
+ return { width: parseFloat(match[3]), height: parseFloat(match[4]) }
+ }
+ return { width: 1920, height: 1920 }
+}
+
+/**
+ * Extract all elements from SVG.
+ * Returns array of { pathData, fillRule }.
+ */
+function parsePaths(svg) {
+ const paths = []
+ const pathRegex = /]*?)\/?\s*>/g
+ let match
+
+ while ((match = pathRegex.exec(svg)) !== null) {
+ const attrs = match[1]
+
+ // Extract d attribute (path data)
+ const dMatch = attrs.match(/\bd=["']([^"']+)["']/)
+ if (!dMatch) continue
+
+ // Extract fill-rule (default to evenOdd since most InstUI icons use it)
+ const fillRuleMatch = attrs.match(/fill-rule=["']([^"']+)["']/)
+ const fillRule = fillRuleMatch ? fillRuleMatch[1] : 'evenodd'
+
+ paths.push({
+ pathData: dMatch[1].trim(),
+ fillRule: fillRule === 'evenodd' ? 'EvenOdd' : 'NonZero',
+ })
+ }
+
+ return paths
+}
+
+// ---------------------------------------------------------------------------
+// Kotlin Code Generation
+// ---------------------------------------------------------------------------
+
+/**
+ * Generate a Kotlin file for a single icon.
+ */
+function generateIconKotlin(category, kotlinName, svg, filename) {
+ const viewBox = parseViewBox(svg)
+ const paths = parsePaths(svg)
+ const pkg = categoryToPackage(category)
+
+ if (paths.length === 0) {
+ console.warn(` Warning: no paths found in ${category}/${kotlinName}`)
+ return null
+ }
+
+ const pathCalls = paths.map(p => {
+ // Escape backslashes and quotes in path data
+ const escaped = p.pathData.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
+ return ` .addPath(
+ pathData = PathParser().parsePathString(
+ "${escaped}"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.${p.fillRule},
+ )`
+ }).join('\n')
+
+ return `${LICENSE_HEADER}
+
+package ${BASE_PACKAGE}.${pkg}
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import ${BASE_PACKAGE}.InstUIIcons
+
+val InstUIIcons.${category}.${kotlinName}: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "${category}.${kotlinName}",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = ${viewBox.width}f,
+ viewportHeight = ${viewBox.height}f,${isDirectionalIcon(filename) ? `\n autoMirror = true,` : ''}
+ )
+${pathCalls}
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ${kotlinName}Preview() {
+ Icon(
+ imageVector = InstUIIcons.${category}.${kotlinName},
+ contentDescription = "${kotlinName}",
+ modifier = Modifier.size(48.dp),
+ )
+}
+`
+}
+
+/**
+ * Generate the top-level InstUIIcons.kt accessor object.
+ */
+function generateIconsObject() {
+ return `${LICENSE_HEADER}
+
+package ${BASE_PACKAGE}
+
+/**
+ * InstUI Icons.
+ *
+ * Generated from instructure-ui SVG icons.
+ * Access icons as extension properties: InstUIIcons.Line.ArrowLeft
+ *
+ * Categories:
+ * - [Line]: Outline/stroke icons (386 icons)
+ * - [Solid]: Filled icons (386 icons)
+ * - [Custom]: Special-purpose icons (85 icons)
+ */
+object InstUIIcons {
+ object Line
+ object Solid
+ object Custom
+}
+`
+}
+
+// ---------------------------------------------------------------------------
+// Manifest & Delta
+// ---------------------------------------------------------------------------
+
+function readManifest() {
+ try {
+ return JSON.parse(fs.readFileSync(MANIFEST_PATH, 'utf8'))
+ } catch {
+ return { version: null, icons: {} }
+ }
+}
+
+function writeManifest(manifest) {
+ fs.writeFileSync(MANIFEST_PATH, JSON.stringify(manifest, null, 2) + '\n')
+}
+
+// ---------------------------------------------------------------------------
+// File System Helpers
+// ---------------------------------------------------------------------------
+
+function ensureDir(dirPath) {
+ if (!fs.existsSync(dirPath)) {
+ fs.mkdirSync(dirPath, { recursive: true })
+ }
+}
+
+function kotlinFilePath(category, kotlinName) {
+ const pkg = categoryToPackage(category)
+ return path.join(__dirname, BUILD_PATH, pkg, `${kotlinName}.kt`)
+}
+
+// ---------------------------------------------------------------------------
+// Main Build Function (exported for use by build-instui.js)
+// ---------------------------------------------------------------------------
+
+/**
+ * Build icons with delta support.
+ *
+ * @param {function} download - The download(url, options) function from build-instui.js
+ * @param {string} version - The INSTUI_VERSION string (e.g., "v11.7.1")
+ */
+async function buildIcons(download, version) {
+ const ICONS_BASE_URL = `https://raw.githubusercontent.com/instructure/instructure-ui/${version}/${ICONS_REPO_PATH}`
+ const API_BASE = `https://api.github.com/repos/instructure/instructure-ui/contents/${ICONS_REPO_PATH}`
+ const apiHeaders = { 'User-Agent': 'instui-icon-generator' }
+ if (process.env.GITHUB_TOKEN) {
+ apiHeaders['Authorization'] = `token ${process.env.GITHUB_TOKEN}`
+ }
+
+ // Read existing manifest
+ const manifest = readManifest()
+ const isVersionChange = manifest.version !== version
+ if (isVersionChange && manifest.version) {
+ console.log(` Version changed from ${manifest.version} to ${version} — full re-sync`)
+ }
+
+ const newManifest = { version, icons: {} }
+ let stats = { added: 0, updated: 0, deleted: 0, unchanged: 0 }
+
+ // Ensure output directories exist
+ ensureDir(path.join(__dirname, BUILD_PATH))
+ for (const cat of CATEGORIES) {
+ ensureDir(path.join(__dirname, BUILD_PATH, categoryToPackage(cat)))
+ }
+
+ // Generate the top-level InstUIIcons.kt
+ const iconsObjPath = path.join(__dirname, BUILD_PATH, 'InstUIIcons.kt')
+ fs.writeFileSync(iconsObjPath, generateIconsObject())
+
+ // Process each category
+ for (const category of CATEGORIES) {
+ console.log(` Fetching ${category} icon listing...`)
+ const listUrl = `${API_BASE}/${category}?ref=${version}`
+ const listResponse = await download(listUrl, { headers: apiHeaders })
+ const files = JSON.parse(listResponse).filter(f => f.name.endsWith('.svg'))
+
+ // Build lookup of remote SHAs
+ const remoteShas = {}
+ for (const f of files) {
+ remoteShas[`${category}/${f.name}`] = f.sha
+ }
+
+ // Determine what to download
+ const toDownload = []
+ for (const f of files) {
+ const key = `${category}/${f.name}`
+ newManifest.icons[key] = f.sha
+
+ if (isVersionChange || !manifest.icons[key] || manifest.icons[key] !== f.sha) {
+ toDownload.push(f)
+ } else {
+ stats.unchanged++
+ }
+ }
+
+ // Download and generate in batches
+ const BATCH_SIZE = 15
+ for (let i = 0; i < toDownload.length; i += BATCH_SIZE) {
+ const batch = toDownload.slice(i, i + BATCH_SIZE)
+ const results = await Promise.all(
+ batch.map(async (f) => {
+ const url = `${ICONS_BASE_URL}/${category}/${f.name}`
+ const svg = await download(url)
+ return { name: f.name, svg }
+ })
+ )
+
+ for (const { name, svg } of results) {
+ const kotlinName = svgToKotlinName(name)
+ const kotlin = generateIconKotlin(category, kotlinName, svg, name)
+ if (kotlin) {
+ const filePath = kotlinFilePath(category, kotlinName)
+ fs.writeFileSync(filePath, kotlin)
+
+ const key = `${category}/${name}`
+ if (manifest.icons[key]) {
+ stats.updated++
+ } else {
+ stats.added++
+ }
+ }
+ }
+ }
+
+ // Handle deletions: files in old manifest but not in remote
+ for (const key of Object.keys(manifest.icons)) {
+ if (key.startsWith(`${category}/`) && !remoteShas[key]) {
+ const oldName = key.split('/')[1]
+ const kotlinName = svgToKotlinName(oldName)
+ const filePath = kotlinFilePath(category, kotlinName)
+ if (fs.existsSync(filePath)) {
+ fs.unlinkSync(filePath)
+ stats.deleted++
+ }
+ }
+ }
+ }
+
+ // Write updated manifest
+ writeManifest(newManifest)
+
+ const total = Object.keys(newManifest.icons).length
+ console.log(` Icons: ${total} total (${stats.added} added, ${stats.updated} updated, ${stats.deleted} deleted, ${stats.unchanged} unchanged)`)
+}
+
+module.exports = { buildIcons }
diff --git a/libs/instui/scripts/build-instui.js b/libs/instui/scripts/build-instui.js
new file mode 100644
index 0000000000..a888d70780
--- /dev/null
+++ b/libs/instui/scripts/build-instui.js
@@ -0,0 +1,194 @@
+#!/usr/bin/env node
+
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * InstUI Token Generator for Android
+ *
+ * Usage: npm run build
+ *
+ * Downloads design tokens from the instructure-ui repository (pinned to INSTUI_VERSION)
+ * and generates Jetpack Compose source files for the InstUI Android library.
+ *
+ * Generated files (DO NOT EDIT manually):
+ * Primitives:
+ * ../src/main/java/com/instructure/instui/primitives/InstUIColors.kt
+ * ../src/main/java/com/instructure/instui/primitives/InstUISizes.kt
+ * ../src/main/java/com/instructure/instui/primitives/InstUIFontWeights.kt
+ * ../src/main/java/com/instructure/instui/primitives/InstUIFontFamilies.kt
+ * ../src/main/java/com/instructure/instui/primitives/InstUIOpacities.kt
+ * Semantic:
+ * ../src/main/java/com/instructure/instui/semantic/InstUISemanticColors.kt
+ * ../src/main/java/com/instructure/instui/semantic/InstUIElevation.kt
+ * ../src/main/java/com/instructure/instui/semantic/InstUILayoutSizes.kt
+ * ../src/main/java/com/instructure/instui/semantic/InstUILayoutTypography.kt
+ * ../src/main/java/com/instructure/instui/semantic/InstUILayoutConfig.kt
+ * Components (one file per component, e.g.):
+ * ../src/main/java/com/instructure/instui/component/InstUIText.kt
+ * ../src/main/java/com/instructure/instui/component/InstUIHeading.kt
+ * ../src/main/java/com/instructure/instui/component/InstUIBaseButton.kt
+ * ../src/main/java/com/instructure/instui/component/InstUIPill.kt
+ * ... (65 files total, auto-discovered from instructure-ui)
+ *
+ * To update to a newer version of instructure-ui, bump INSTUI_VERSION below and re-run.
+ */
+
+const https = require('https')
+const buildPrimitivesConfig = require('./sd.config.primitives')
+const buildSemanticConfig = require('./sd.config.semantic')
+const buildComponentsConfig = require('./sd.config.components')
+const { buildIcons } = require('./build-instui-icons')
+
+const INSTUI_VERSION = 'v11.7.1'
+const TOKENS_BASE_URL = `https://raw.githubusercontent.com/instructure/instructure-ui/${INSTUI_VERSION}/packages/ui-scripts/lib/build/tokensStudio`
+const COMPONENT_PATH = 'packages/ui-scripts/lib/build/tokensStudio/rebrand/component'
+
+function download(url, options = {}) {
+ return new Promise((resolve, reject) => {
+ https.get(url, options, res => {
+ if (res.statusCode === 301 || res.statusCode === 302) {
+ return download(res.headers.location, options).then(resolve).catch(reject)
+ }
+ if (res.statusCode !== 200) {
+ reject(new Error(`HTTP ${res.statusCode}: ${url}`))
+ return
+ }
+ let data = ''
+ res.on('data', chunk => { data += chunk })
+ res.on('end', () => resolve(data))
+ res.on('error', reject)
+ }).on('error', reject)
+ })
+}
+
+/**
+ * List all JSON files in the component token directory via GitHub API.
+ */
+async function listComponentFiles() {
+ const apiUrl = `https://api.github.com/repos/instructure/instructure-ui/contents/${COMPONENT_PATH}?ref=${INSTUI_VERSION}`
+ const headers = { 'User-Agent': 'instui-token-generator' }
+ if (process.env.GITHUB_TOKEN) {
+ headers['Authorization'] = `token ${process.env.GITHUB_TOKEN}`
+ }
+ const response = await download(apiUrl, { headers })
+ const files = JSON.parse(response)
+ return files
+ .filter(f => f.name.endsWith('.json'))
+ .map(f => f.name)
+}
+
+async function buildPrimitives() {
+ const url = `${TOKENS_BASE_URL}/primitives/default.json`
+ console.log(`Downloading primitive tokens from ${url}...`)
+ const primitives = JSON.parse(await download(url))
+ console.log('Building Jetpack Compose primitives...')
+ const sd = await buildPrimitivesConfig(primitives)
+ await sd.buildAllPlatforms()
+}
+
+async function buildSemantics() {
+ const lightUrl = `${TOKENS_BASE_URL}/rebrand/semantic/color/rebrandLight.json`
+ const darkUrl = `${TOKENS_BASE_URL}/rebrand/semantic/color/rebrandDark.json`
+ const layoutUrl = `${TOKENS_BASE_URL}/rebrand/semantic/layout/default.json`
+
+ console.log(`Downloading semantic color tokens (light)...`)
+ const lightColors = JSON.parse(await download(lightUrl))
+
+ console.log(`Downloading semantic color tokens (dark)...`)
+ const darkColors = JSON.parse(await download(darkUrl))
+
+ console.log(`Downloading semantic layout tokens...`)
+ const layout = JSON.parse(await download(layoutUrl))
+
+ console.log('Building Jetpack Compose semantic tokens...')
+ const sd = await buildSemanticConfig(lightColors, darkColors, layout)
+ await sd.buildAllPlatforms()
+}
+
+async function buildComponents() {
+ // Download primitives, layout, and semantic light colors for reference chain resolution
+ const primitivesUrl = `${TOKENS_BASE_URL}/primitives/default.json`
+ const layoutUrl = `${TOKENS_BASE_URL}/rebrand/semantic/layout/default.json`
+ const lightColorsUrl = `${TOKENS_BASE_URL}/rebrand/semantic/color/rebrandLight.json`
+
+ console.log('Downloading primitives for reference resolution...')
+ const primitives = JSON.parse(await download(primitivesUrl))
+
+ console.log('Downloading layout tokens for reference resolution...')
+ const layout = JSON.parse(await download(layoutUrl))
+
+ console.log('Downloading semantic light colors for reference resolution...')
+ const semanticLightColors = JSON.parse(await download(lightColorsUrl))
+
+ console.log('Listing component token files...')
+ const componentFiles = await listComponentFiles()
+ console.log(`Found ${componentFiles.length} component token files`)
+
+ // Download all component JSONs in batches
+ const componentBaseUrl = `${TOKENS_BASE_URL}/rebrand/component`
+ const components = {}
+ const BATCH_SIZE = 10
+
+ for (let i = 0; i < componentFiles.length; i += BATCH_SIZE) {
+ const batch = componentFiles.slice(i, i + BATCH_SIZE)
+ const results = await Promise.all(
+ batch.map(async (filename) => {
+ const url = `${componentBaseUrl}/${filename}`
+ console.log(` Downloading ${filename}...`)
+ const json = JSON.parse(await download(url))
+ return { filename, json }
+ })
+ )
+ results.forEach(({ filename, json }) => {
+ components[filename] = json
+ })
+ }
+
+ console.log('Building Jetpack Compose component tokens...')
+ const sd = await buildComponentsConfig(components, layout, primitives, semanticLightColors)
+ await sd.buildAllPlatforms()
+}
+
+async function main() {
+ console.log(`InstUI Token Generator for Android`)
+ console.log(`Using instructure-ui ${INSTUI_VERSION}`)
+ console.log('')
+
+ await buildPrimitives()
+ console.log('')
+
+ await buildSemantics()
+ console.log('')
+
+ await buildComponents()
+ console.log('')
+
+ console.log('Building InstUI icons...')
+ await buildIcons(download, INSTUI_VERSION)
+
+ console.log('')
+ console.log('Done! Generated files are in:')
+ console.log(' ../src/main/java/com/instructure/instui/token/primitives/')
+ console.log(' ../src/main/java/com/instructure/instui/token/semantic/')
+ console.log(' ../src/main/java/com/instructure/instui/token/component/')
+ console.log(' ../src/main/java/com/instructure/instui/token/icon/')
+}
+
+main().catch(err => {
+ console.error('Error:', err.message)
+ process.exit(1)
+})
diff --git a/libs/instui/scripts/icons-manifest.json b/libs/instui/scripts/icons-manifest.json
new file mode 100644
index 0000000000..5d9591bdf7
--- /dev/null
+++ b/libs/instui/scripts/icons-manifest.json
@@ -0,0 +1,862 @@
+{
+ "version": "v11.7.1",
+ "icons": {
+ "Line/Arc.svg": "f9af654884cee3b6edb7f76769685f39b537ca03",
+ "Line/a11y.svg": "02fe03fbf541b0675d9521700661e00898c7accc",
+ "Line/aI-info.svg": "854222a9a0571902ac194bf239a192f6d02bc096",
+ "Line/add-folder.svg": "bea24af100b40f53fc12baf3be93731adf5d0832",
+ "Line/add-media.svg": "5d87fefbe739efa0167e7b16badb0c1cbca7c8f6",
+ "Line/add.svg": "4c13d1be11b2bc88879e940416e811edda0ab1f0",
+ "Line/address-book.svg": "a53ced501f5ca57c0de626ce08f73332c8a4b629",
+ "Line/admin-tools.svg": "684470d11c603a63a712c3b80537c9cd64c0ba92",
+ "Line/admin.svg": "c2330e7462222ac6e7e6435e8df221069001563b",
+ "Line/ai-colored.svg": "ca946dbcd97e242304273e6c8c58fa3f776c497b",
+ "Line/ai.svg": "83cb7058fd1bf644f37b2ae2938ba53ea9b95507",
+ "Line/alerts.svg": "6835ad9ea36e11a591a3ab06816fbb197b36a4b5",
+ "Line/analytics.svg": "6624f58a8f3fcdc539e04244f62bcc3f08a94c9e",
+ "Line/android.svg": "130eccb1bb8427a0ee155a4f0d9ce53c75295ff3",
+ "Line/annotate.svg": "106a52496d55d29a56487561f50c1c11b7698344",
+ "Line/announcement.svg": "4ab2055fd0a38ee1666b374b5ea30d7a32e36474",
+ "Line/apple.svg": "9c2d7339fd74a108828acbc64a62d31c0e7d91d9",
+ "Line/archive.svg": "e43825fdd04e7266169392d043e23355a54e87ce",
+ "Line/arrow-double-end.svg": "8fc5c8426ae7457e08ac7509e0910d5d94a5c1a8",
+ "Line/arrow-double-start.svg": "cc4a4bdeffc5ccc8971d934a134f2396d86155a4",
+ "Line/arrow-down.svg": "a925a64546a8d356dd79fe737931b0029852e92b",
+ "Line/arrow-end.svg": "e96f37935eb5b852ea4ad5cac0b1838c6902a75c",
+ "Line/arrow-left.svg": "a051fb944f8c69410b61906836bbdede193af529",
+ "Line/arrow-nest.svg": "dae6cb422edd478ceaa9493806bb0d96e9cc5c50",
+ "Line/arrow-open-down.svg": "6fbb24196c2b920fbf3ff3c0d8439fd0ec1be010",
+ "Line/arrow-open-end.svg": "427280dbc5b92a7c1267a2d7898fdbbcafd06c4c",
+ "Line/arrow-open-left.svg": "da1933a7001bc00ab9e94b8930c7b4d5066501af",
+ "Line/arrow-open-right.svg": "427280dbc5b92a7c1267a2d7898fdbbcafd06c4c",
+ "Line/arrow-open-start.svg": "da1933a7001bc00ab9e94b8930c7b4d5066501af",
+ "Line/arrow-open-up.svg": "8c2b0a91eb804f28ec4c4d11b28a94ba69999155",
+ "Line/arrow-right.svg": "e96f37935eb5b852ea4ad5cac0b1838c6902a75c",
+ "Line/arrow-start.svg": "a051fb944f8c69410b61906836bbdede193af529",
+ "Line/arrow-up.svg": "d36f0edebdd97bcf708c6d5e537932fd36e97749",
+ "Line/assignment.svg": "a8c4e3a3302198f6ef187fa0e9a6a810947d2426",
+ "Line/attach-media.svg": "140ba3995a8db43f2fdd401650325c179270511b",
+ "Line/audio-off.svg": "2f8ab7d92e687e308e85c3fd63972deea47b27b9",
+ "Line/audio.svg": "5ad67e72fe836712c044f47e0456d3444189f685",
+ "Line/award.svg": "7726196858b19cd9e8c995d1e10fa051e5860839",
+ "Line/bank.svg": "29a29f265b0ad33d4530db8abe609ca37790b78a",
+ "Line/blueprint-lock.svg": "e296f6fe0df5fcf797262883a42b3f5f2a42c715",
+ "Line/blueprint.svg": "3f5d5bfe103f44ff93e1d13a10606f1b317ad530",
+ "Line/bold.svg": "ac8daf8ccbd06f668fedf51d95485ba3f1fbc6e6",
+ "Line/bookmark.svg": "4f158aa7ab400adb2f5214d852655180491dce69",
+ "Line/box.svg": "a6cf8bd481fb6d6f8aac2725387f9f4f3ffe4331",
+ "Line/bullet-list-alpha.svg": "6d786ec9eac754eb9645bd47b6c31de7c1d9378d",
+ "Line/bullet-list-circle-outline.svg": "6c869ae65d4ff9fb39dad7900cf49dbe3b029156",
+ "Line/bullet-list-roman.svg": "c5cdfc00f5a959a3de5f51d1640270337649f6bb",
+ "Line/bullet-list-square.svg": "a314b7b34f428e573ce340c243dc67e882006806",
+ "Line/bullet-list.svg": "331684581f3b087e516acd61af9389e2ad5f7357",
+ "Line/button-and-icon-maker.svg": "ee2f99d9a455c2b6ccb81e14859ed7dbb7da9bbe",
+ "Line/calculator-desmos.svg": "923a569320a664c87f6391321e89a6da9d4b1309",
+ "Line/calculator.svg": "120e0d9ca2948fcfc95ef8d7ae21a427cb1aea64",
+ "Line/calendar-add.svg": "86e6775b3809a7846c2272e8166c0bd2c17528ef",
+ "Line/calendar-clock.svg": "f29b49de68f3648a23b5d5cdbef81dd68b6104c6",
+ "Line/calendar-day.svg": "059eb69556b6cb1a1ad4045c3c059217c208f3c9",
+ "Line/calendar-days.svg": "059eb69556b6cb1a1ad4045c3c059217c208f3c9",
+ "Line/calendar-month.svg": "f0b87e9e436b6dd78df0d947a98f6132b343a538",
+ "Line/calendar-reserved.svg": "b2183606550857a77ad6b4375190daaa57d9b850",
+ "Line/canvas-logo.svg": "4a984d908f80686e08e9988359893001608c3ef6",
+ "Line/certified.svg": "11c4b96fd6503e4d2cd1303b1b93b6940baea5a8",
+ "Line/chart-line.svg": "331bb44db5551138268ddcc8693405c7d8fb4391",
+ "Line/chart-pie.svg": "190f320dbbcc4a86a93b05c15e0b389e143300ad",
+ "Line/chart-scatter.svg": "a08053a044b6bce18f26f6bc57db57fefc2a54a1",
+ "Line/chat.svg": "6926c6c7f3555214513ce202160043ca609817b7",
+ "Line/check-dark.svg": "291cc0735860fb54dc82bba1d35a4ffdd4d78f87",
+ "Line/check-mark-indeterminate.svg": "423ff1a32bf6f53dc764e3860fad1d265fcfaa34",
+ "Line/check-mark.svg": "291cc0735860fb54dc82bba1d35a4ffdd4d78f87",
+ "Line/check-plus.svg": "a0d7c5c14389295c04288f598bd4a94791a5a32a",
+ "Line/check.svg": "291cc0735860fb54dc82bba1d35a4ffdd4d78f87",
+ "Line/circle-arrow-down.svg": "db561dc91dcb8351d1bee88b6b17e905f4600565",
+ "Line/circle-arrow-up.svg": "1ed4b16562413cdfa1e16e125c4b6e550f6473fd",
+ "Line/clear-text-formatting.svg": "d62bade39cd81b3a0da4741d8df81954afe357ca",
+ "Line/clock.svg": "5d67ba010c4ec1ff7cea691641fb121394686d57",
+ "Line/closed-captioning-off.svg": "23e2548d55f3de0c3b30147da897bf6ba7523881",
+ "Line/closed-captioning-on.svg": "479e51c72b5e2b15557b7c0bfa9205c7e0c3b678",
+ "Line/closed-captioning.svg": "d78d2aa370ceb3d92b6af3c91d1f00f187fcc300",
+ "Line/cloud-download.svg": "2d9b13c2578605fe7088eaf944a8fecdb8c4700f",
+ "Line/cloud-lock.svg": "29b18cbd0896725c5d610a4e07d149a63b10484f",
+ "Line/cloud-upload.svg": "d76982cd7f6b3621e76e30cda6c09c4fc88b709d",
+ "Line/code.svg": "2f841dce53a36ecbeb8f982cfdb1a4edeffa867d",
+ "Line/collapse.svg": "cbb3c6fda11707f1f5075676a9cc5a936f1fa171",
+ "Line/collection-save.svg": "c13e078d979457394bbf45009b4439f90ccf6ee8",
+ "Line/collection.svg": "478470e6bc8d56451df2aa522cabeba4d77c9d77",
+ "Line/comment.svg": "d18971c223a904318cb6268f3baa90564d13aeb9",
+ "Line/comments-off.svg": "22c42b18b94fe7c7e40b95d9ed89f03c67f52257",
+ "Line/comments-on.svg": "c0f237da72ad9a77909193b8576695eb074e77d6",
+ "Line/commons.svg": "e03aa02b7cf5b8f7fb24bcef9f9ec235aca36a2e",
+ "Line/compare.svg": "1de3bdd498bd938f6c56badf0a8521123da80a99",
+ "Line/compass.svg": "83f16a809cdba9ab611a08814585ab61efa8bc19",
+ "Line/complete.svg": "400616ef298ba5c1772a33aa11eb9c6b57188ab9",
+ "Line/compose.svg": "843289289b9515140955a043c6f83ca8f044850b",
+ "Line/configure.svg": "ab6fb4a527224cd26e8b10108058171fcd6d9804",
+ "Line/copy-course.svg": "a94a659f1ab03092e0c3d36c2226841649cb45ef",
+ "Line/copy.svg": "a94a659f1ab03092e0c3d36c2226841649cb45ef",
+ "Line/courses.svg": "8a3a0a35c45c958e2f32e9c0effd4ae776078cac",
+ "Line/crop.svg": "f3111150f9e556ef38c2fdf46f1a392d65c55213",
+ "Line/dashboard.svg": "5eeb71148607fbe29043ee1524ad65470e3549ed",
+ "Line/deactivate-user.svg": "5b51d13e75e7e6f6e0378c59b6193c341dc23084",
+ "Line/discussion-check.svg": "291cc0735860fb54dc82bba1d35a4ffdd4d78f87",
+ "Line/discussion-new.svg": "4c13d1be11b2bc88879e940416e811edda0ab1f0",
+ "Line/discussion-reply-2.svg": "75bdb259ffc6cc1a844087b55fa033c66ab1272c",
+ "Line/discussion-reply-dark.svg": "32af38f462f59d9af226b65aa8f940b4f976d93d",
+ "Line/discussion-reply.svg": "32af38f462f59d9af226b65aa8f940b4f976d93d",
+ "Line/discussion-search.svg": "2d8bead36ed49bb6ae5fc9071de10d5a48124531",
+ "Line/discussion-x.svg": "d4d8132d17b9afe0bbec0c269cb5ec0f097907c9",
+ "Line/discussion.svg": "cd155d8938312aee4ac21cb8164b942df03769c2",
+ "Line/document.svg": "fc6a41d804929020b1d23f59c640fb1e195c81b6",
+ "Line/download.svg": "a4b81570769f1e37bbe00c46a14427e6b4864354",
+ "Line/drag-handle.svg": "f9cd8cd1711c2bc0bdd18c3c10f855aa78887019",
+ "Line/drop-down.svg": "b44044be463c6440ab8c4935258ca06aee7279c4",
+ "Line/duplicate.svg": "713bcd64b6e7d63562037041f484d883ab982237",
+ "Line/edit.svg": "994f14b2183c269a3c4a48085dd551dec1c4b6b2",
+ "Line/educators.svg": "ac7f44a66c0fa42a7e4b8b1a1b3aed75da9c3367",
+ "Line/elevate-logo.svg": "755c47ec8db821c39c5e9a6e894f8885f0d2426e",
+ "Line/email.svg": "f1f349d90cad39fcdb77b8d4ef73af75eadee4f9",
+ "Line/empty.svg": "7927e2c7722c26620f993c5356c2e6e7006e2181",
+ "Line/end.svg": "6e8d960e03267d10082c7a38be95aeade9e79f59",
+ "Line/eportfolio.svg": "77794d0239da72cb8ba3ea3460b237aa6ca933b7",
+ "Line/equation.svg": "dd1a39a4d9e7b9d766b3e22ea820ea632ab61df9",
+ "Line/equella.svg": "2d2bc6435bfce30a10f28d14b9179edacb24add1",
+ "Line/essay.svg": "9a00444ef80008ce4a203f8109107597abd447a6",
+ "Line/exit-full-screen.svg": "3de9eff75e15dfafad82bc1c24f8ef77339291b5",
+ "Line/expand-items.svg": "12a4ff88a005201e3c7120d6d6556e1ea11de2c0",
+ "Line/expand-left.svg": "e4d9059fed5930ef5689fc8edf138ae387d38274",
+ "Line/expand-start.svg": "807a270ed543da20e3b8d5a208516e97e694e685",
+ "Line/expand.svg": "63b8dd75e0bbe264c97765aaab88b7a4c0454461",
+ "Line/export-content.svg": "de451cc822c6dfe148c6604d7dfa183ba5abaa22",
+ "Line/export.svg": "de451cc822c6dfe148c6604d7dfa183ba5abaa22",
+ "Line/external-link.svg": "4caed7521b44f4fb53bd54a668de040d92042ce1",
+ "Line/eye.svg": "9a647b7a59b8139207159e5372e899cbd4c17126",
+ "Line/facebook-boxed.svg": "2316c1af5aa0150dc4d99a7b81b0f5534593728d",
+ "Line/facebook.svg": "2316c1af5aa0150dc4d99a7b81b0f5534593728d",
+ "Line/fast-forward.svg": "18dba1a2ecfba4715ed3cf6fff00bf16a778228f",
+ "Line/feedback.svg": "c7c3a008d86b068aea808954bfceebd0b3c1663e",
+ "Line/file-locked.svg": "bedd703b895053c6191caaa99fbc3f3a086993e7",
+ "Line/files-copyright.svg": "7a36a4a926dd64f4b7e197190a21ad56fc5b3214",
+ "Line/files-creative-commons.svg": "54f885d0e64487f9e65a990db7cc674789b4aaa2",
+ "Line/files-fair-use.svg": "4c645a623b76812cc3cc2ea51e4449f2b52f9859",
+ "Line/files-obtained-permission.svg": "dd612b9e522119b668f7c2bd6071de5f346b2459",
+ "Line/files-public-domain.svg": "00b906181bc38a3cc964e7eca08e6feb3c9f1270",
+ "Line/filmstrip.svg": "5553f56fd28071bd5eb6e0ab85737c99c61dfbba",
+ "Line/filter.svg": "ffe20dfcba7d6fdae33056fc5bf3eaf2aa2c33ad",
+ "Line/flag.svg": "ccde8aecf211a4b81b751cd9c43eee3f8fb365a7",
+ "Line/folder-locked.svg": "bedd703b895053c6191caaa99fbc3f3a086993e7",
+ "Line/folder.svg": "47fe46728f628ec09127b4eab16d2e75cfc3eeb7",
+ "Line/forward.svg": "7e0baa3196f12fef5653d1d5cde9962bb8b7028f",
+ "Line/full-screen.svg": "5d9e78b924a2feccee1008f6136bfb266ade367c",
+ "Line/github.svg": "36069caf9f68c694605dd22fc61ad0b315980740",
+ "Line/give-award.svg": "aeb7c87983844d7cb75a9674aea32720e387886c",
+ "Line/gradebook-export.svg": "de451cc822c6dfe148c6604d7dfa183ba5abaa22",
+ "Line/gradebook-import.svg": "628efd7e84d9c6b7febd73467b42eb9c636d2f17",
+ "Line/gradebook.svg": "5c7c48740611bab053967ac4dbb2594e265eb644",
+ "Line/grid-view.svg": "134515408bfa63a8687660dd5bd7d3c2ce8810e7",
+ "Line/group-dark-new.svg": "4c13d1be11b2bc88879e940416e811edda0ab1f0",
+ "Line/group-new.svg": "4c13d1be11b2bc88879e940416e811edda0ab1f0",
+ "Line/group.svg": "a9897abdd4cbe3d80646e291f1deafbf5a0db645",
+ "Line/hamburger.svg": "e97e08763bc9e5f14c7632087842c61ba5705c2c",
+ "Line/header.svg": "be43bf7dd31002e54fe11247294ff36963c51e0b",
+ "Line/heart.svg": "da09b8a98c2f3c3f46aab22c74ca79b5fead5cee",
+ "Line/highlighter.svg": "d181db446002651f537f2e5c6f191a906fc54931",
+ "Line/home.svg": "529661e6e5b78543e1c2596971420a36f0405168",
+ "Line/hour-glass.svg": "b391c7dc748a94b6075f245f619eea43180b6bf9",
+ "Line/image.svg": "c9273445a41f8704b8a05c3fd422308ac14d841f",
+ "Line/immersive-reader.svg": "a4d5e7dd06b2121cc66d53414ddbb0881d53ab42",
+ "Line/impact-logo.svg": "2a62e2baba2888f800c63db68fe8b757869a6870",
+ "Line/import-content.svg": "628efd7e84d9c6b7febd73467b42eb9c636d2f17",
+ "Line/import.svg": "628efd7e84d9c6b7febd73467b42eb9c636d2f17",
+ "Line/important-dates.svg": "9aca9fe605dc482f2ca009ce4844fdceb4825045",
+ "Line/inbox.svg": "c34cdb0f6c3594df6d904d9be377f708ee6b8b6e",
+ "Line/indent-2.svg": "f4ad5076124d6aee260b47d0750eaf224e4e4f9a",
+ "Line/indent.svg": "f4ad5076124d6aee260b47d0750eaf224e4e4f9a",
+ "Line/info-borderless.svg": "d5fcce062b2027b8b72dead9a6ba167936115a46",
+ "Line/info.svg": "fd5996dcda66c55755de60283a8354a1d5d5923e",
+ "Line/instructure-1-dot.svg": "3af0d0ec382a2d2c219561cc98950a19c1ec3c22",
+ "Line/instructure-3-dot.svg": "fa6fa6cdf5a4f077db71d431b23d974c4d36d88b",
+ "Line/instructure-logo.svg": "92d325a063c164cf47cf24b0a3b93afde3f597f0",
+ "Line/instructure.svg": "7c21d97317d00a443d8a1054766ac32f7d78908a",
+ "Line/integrations.svg": "8eea9fa2ad08d04a3b9c2d38765b9f8eca73e81b",
+ "Line/invitation.svg": "70647a1afb7a13b6b26c556759529364046da6af",
+ "Line/italic.svg": "377989853f1d9ff700e60a588a7763217f322f59",
+ "Line/keyboard-shortcuts.svg": "8530b44dafc8ebeba7942c7318932eadc95e87d9",
+ "Line/launch.svg": "54705886e5f7e6c5aa85a1bb99eb53a302cfa985",
+ "Line/learnplatform.svg": "2f6dee0876a13bece8be44f8f4f709551076b305",
+ "Line/life-preserver.svg": "06672cdb0ab9bbd8606070a4ca3ca15688b01700",
+ "Line/like.svg": "2275bc2a8e585550c3225be9c0f459bab91ce889",
+ "Line/line-reader.svg": "3f712be8965b4b7f65791a1ce726951cb492dbce",
+ "Line/link.svg": "53ddec7fe49792c1aef5872eb3367887e8195747",
+ "Line/linkedin.svg": "8cb69e339b27cf72ede4b942a5c15a77acb603d3",
+ "Line/list-view.svg": "2375d9426ef3e15b6d05b4a10aff8300f54d97bb",
+ "Line/lock.svg": "bae175cb8fcd74a8725f9782f28593f95b063593",
+ "Line/lti.svg": "8eea9fa2ad08d04a3b9c2d38765b9f8eca73e81b",
+ "Line/mark-as-read.svg": "7927e2c7722c26620f993c5356c2e6e7006e2181",
+ "Line/marker.svg": "961578a3ba287481d98f7d389d4bbc46c694a64d",
+ "Line/masquerade.svg": "65d558eac77f07aaad5e1ec68f8831844aa64768",
+ "Line/mastery-logo.svg": "3d26bb602d07650757aa90e95a11562c9d0c3a73",
+ "Line/mastery-paths.svg": "434e2b72e3f9e08ad05579d7f779d5cfe7b18eae",
+ "Line/materials-required-light.svg": "42a00639d220bccd5a06879d7775e041ea3dcb3e",
+ "Line/materials-required.svg": "42a00639d220bccd5a06879d7775e041ea3dcb3e",
+ "Line/mature-light.svg": "4ba39bc7e60a44d46d7be4b79a24900e54c08eb6",
+ "Line/mature.svg": "4ba39bc7e60a44d46d7be4b79a24900e54c08eb6",
+ "Line/media.svg": "5553f56fd28071bd5eb6e0ab85737c99c61dfbba",
+ "Line/message.svg": "f1f349d90cad39fcdb77b8d4ef73af75eadee4f9",
+ "Line/mic-off.svg": "f49537b37e92fa9738f3539a0e94cd3c4c96355e",
+ "Line/mic.svg": "78b24cec17f67d1bdb911b4808b638f81ad3b2dc",
+ "Line/mini-arrow-double.svg": "9d52873bd3e02664ff8425c80b4654ef6ae6a62c",
+ "Line/mini-arrow-down.svg": "238779055d3238a39e11a5c1577570fcae07eef9",
+ "Line/mini-arrow-end.svg": "b053754d8ed32ddb376ee4dddab371409e10ccc1",
+ "Line/mini-arrow-left.svg": "4fcbaa449c47c57aaeb682ee8627d2ee40d66078",
+ "Line/mini-arrow-right.svg": "b053754d8ed32ddb376ee4dddab371409e10ccc1",
+ "Line/mini-arrow-start.svg": "4fcbaa449c47c57aaeb682ee8627d2ee40d66078",
+ "Line/mini-arrow-up.svg": "9d859b296073e9831d74d8fdf58d95c10c8450f9",
+ "Line/minimize.svg": "4a35933028a75dbb10aa54d9297d89e3e19d6dce",
+ "Line/module.svg": "ffff7d31eb06ebb85fbb35b076d127f7f573dfe0",
+ "Line/more.svg": "32af38f462f59d9af226b65aa8f940b4f976d93d",
+ "Line/move-down-bottom.svg": "f3a879d1a8980a8a570222704131527315c2ce1f",
+ "Line/move-down.svg": "474d2a171dfc113cbd4f19a2c033369dc6afa5f8",
+ "Line/move-end.svg": "0242893b491989e164688b8e554d9acdc81a21a5",
+ "Line/move-left.svg": "a2632e59e09e104f4a06534d6a7faddb52382615",
+ "Line/move-right.svg": "0242893b491989e164688b8e554d9acdc81a21a5",
+ "Line/move-start.svg": "a2632e59e09e104f4a06534d6a7faddb52382615",
+ "Line/move-up-top.svg": "1f17216c86eae301dac4dd076b3a2277d4dc238d",
+ "Line/move-up.svg": "3f2a475a2d6dcdb99c6627313e0c496ce6fa00b6",
+ "Line/ms-excel.svg": "980f344d922bb8cc9c024fa963b09d18e85ff037",
+ "Line/ms-ppt.svg": "032129df187fc3cfc626d98d5a60c00982b505e0",
+ "Line/ms-word.svg": "a28f2e26c6259caf1ccce85ccf3d29377f4c4c0d",
+ "Line/muted.svg": "63f0aa3716340bc56e9b15127834c2bc2fabf5f3",
+ "Line/neutral.svg": "12aff07061b81500ea0695950ca43d799b8f7f10",
+ "Line/next-unread.svg": "8ade5138e471b492de45e3b25c7abe31b3b27717",
+ "Line/no.svg": "507818ec68850c69bb20f19a90e143e79e6c7cda",
+ "Line/not-graded.svg": "0e7316ac5630d22e94eddc7e4745b012de5b5083",
+ "Line/note-dark.svg": "c5ac81f5a4379035d7441e6b900574675b2684a5",
+ "Line/note-light.svg": "c5ac81f5a4379035d7441e6b900574675b2684a5",
+ "Line/note.svg": "c5ac81f5a4379035d7441e6b900574675b2684a5",
+ "Line/notepad.svg": "a35871f70a1843518b403594b2946756483c01ad",
+ "Line/numbered-list.svg": "b2a26a20bc3a6e5d0cf735a7f87059834997adf3",
+ "Line/off.svg": "0b28e6c36a79925f43f245081cb6912fac46d28f",
+ "Line/open-folder.svg": "9a3d9cb6d0dd29419c2b9d6763535b80734a82cb",
+ "Line/outcomes.svg": "f7009ac825e018a0db93a3f89085a569cb058374",
+ "Line/outdent.svg": "e476d43f888c2a519449ec8583fa040dc38a0b9a",
+ "Line/outdent2.svg": "e476d43f888c2a519449ec8583fa040dc38a0b9a",
+ "Line/oval-half.svg": "0b01d917b83067573c007844f25c2bed828cb346",
+ "Line/page-down.svg": "0f0b86f9ce01a3532a627144445988434f2971b6",
+ "Line/page-up.svg": "06a05d4485e02e3130bbccf30aac8a5b000ea7e3",
+ "Line/paint.svg": "b57c2045ad81e5c435791a65b6047ebbd458a836",
+ "Line/paperclip.svg": "6e411b815261d602a60a7f38d3364b2955f382b9",
+ "Line/partial.svg": "4a35933028a75dbb10aa54d9297d89e3e19d6dce",
+ "Line/password-reset.svg": "e7952b0c248b211a681607751ca0f67d45d10606",
+ "Line/pause.svg": "ac8a9de86c0ccecfa4b20706f34703b3797bcc23",
+ "Line/pdf.svg": "9291c1b1109167ed97a9fe5db46c7757c17edc0e",
+ "Line/peer-graded.svg": "1032cc516b16a8095bec8d7fb2a34fcf1f8729b4",
+ "Line/peer-review.svg": "f2fcb3b8664c7690bec7eab0600b175c61b13fc7",
+ "Line/permissions.svg": "4dfea8851566c5e253187c24651367dc3471b9f9",
+ "Line/pin.svg": "e69ccb88fe09ddaf88b7ef74fdd536562f87421f",
+ "Line/pinterest.svg": "f720e6e8325a6891c53ffcb5652bcdde40a1ec17",
+ "Line/play.svg": "0c6a1ec2b231e81cfd58167ee581430d95925bc4",
+ "Line/plus.svg": "4c13d1be11b2bc88879e940416e811edda0ab1f0",
+ "Line/post-to-sis.svg": "8e63516318f048ed94af06af760b4a0ff6f679e1",
+ "Line/predictive.svg": "14bef90257635e65473987d334b350c2f53076a6",
+ "Line/prerequisite.svg": "45acdddf10598d2212afaf7a50e3914df7b108b7",
+ "Line/printer.svg": "e28e8846bf3cbad2613648ff57b62cb5e55a4ad2",
+ "Line/progress.svg": "2c4808816ec1e77fcab90fa89184135e902dfaf4",
+ "Line/protractor.svg": "a3a29f8f371484b3d715694bb463e047ac83ff7e",
+ "Line/publish.svg": "400616ef298ba5c1772a33aa11eb9c6b57188ab9",
+ "Line/question.svg": "eaa264ac968b40b28c5476fb44863b1e9b504fb3",
+ "Line/quiz-instructions.svg": "b4889047d0d1d7f98f5ebd08a7647da4512b8fb1",
+ "Line/quiz-stats-avg.svg": "fb97641c05be6b5479ac6eec5b2fd373d8f0241f",
+ "Line/quiz-stats-cronbachs-alpha.svg": "61fed873df8f82cfdaacf379414c8249920ea0e6",
+ "Line/quiz-stats-deviation.svg": "d1de73bcadad2fdd8204e145a3cd784496304252",
+ "Line/quiz-stats-high.svg": "322e819d289feadc2f3b4ea8a287f41bfe36267d",
+ "Line/quiz-stats-low.svg": "2d1733afb3cd2b27a01b765d7262f09c7faf96a2",
+ "Line/quiz-stats-time.svg": "5d67ba010c4ec1ff7cea691641fb121394686d57",
+ "Line/quiz-title.svg": "200b838b633643458d0cc03955e4db88c1618359",
+ "Line/quiz.svg": "09f10f0c6e22193550828693b6fd9b983aa89a76",
+ "Line/record.svg": "0b8684db7f85c9b9e05ef2ce2bd4a9ca9c5b2864",
+ "Line/redo.svg": "7dcc63b0d5fd25ed9fe5cae3a306fbd53467f155",
+ "Line/refresh.svg": "b995f6965bbe88bd697b5df363cb0441171523b2",
+ "Line/remove-bookmark.svg": "bca06a2ab209fd5c5e6c1786abac924172592b53",
+ "Line/remove-from-collection.svg": "2a5e50ac0fc866955d701d23256bef222dfa742f",
+ "Line/remove-link.svg": "eaef010b46d882cbadd7a99412d4c5a89fd8f4ba",
+ "Line/replied.svg": "75bdb259ffc6cc1a844087b55fa033c66ab1272c",
+ "Line/reply-2.svg": "75bdb259ffc6cc1a844087b55fa033c66ab1272c",
+ "Line/reply-all-2.svg": "744022b86a63bfa2949a8f063a0330f19af75e69",
+ "Line/reply.svg": "75bdb259ffc6cc1a844087b55fa033c66ab1272c",
+ "Line/reset.svg": "b995f6965bbe88bd697b5df363cb0441171523b2",
+ "Line/restore.svg": "c47197fd99283b3c24e656d60f1983fd25b65dd8",
+ "Line/review-screen.svg": "1f0592773f8801b40294e2849e11e3e158ad40e7",
+ "Line/rewind.svg": "45a5ffd7b7edc78b341a51a39c2117611ee36f90",
+ "Line/rotate-left.svg": "9e5dc2511fb8e49eeeae92f741c9bec5fe098643",
+ "Line/rotate-right.svg": "452739f57f25121b10369a515176458b225b2ae7",
+ "Line/rss-add.svg": "02eb3850174886828a5d2f4ad9bfea7f27eebb4d",
+ "Line/rss.svg": "88849650aed70ede97c6865f1f5c9245f5a0a06d",
+ "Line/rubric-dark.svg": "2eb36312e5b64c7a2998abe994e3b52af77dada6",
+ "Line/rubric.svg": "2eb36312e5b64c7a2998abe994e3b52af77dada6",
+ "Line/ruler.svg": "a39516ab6a491c77ab5d255463b62de3ab8b8c8e",
+ "Line/save.svg": "87025c5f9d875f23508bc78533a8bb6c306474ec",
+ "Line/screen-capture.svg": "fe965c11ea2c4c4021739092bc1941499528266e",
+ "Line/search-address-book.svg": "2d8bead36ed49bb6ae5fc9071de10d5a48124531",
+ "Line/search-ai.svg": "47231a3fea9a98aa857a8067eab5416199ad1327",
+ "Line/search.svg": "2d8bead36ed49bb6ae5fc9071de10d5a48124531",
+ "Line/settings-2.svg": "3fa74803c3738b0fd4871e9dfd97dfc378c4aadd",
+ "Line/settings.svg": "3fa74803c3738b0fd4871e9dfd97dfc378c4aadd",
+ "Line/shape-oval.svg": "7927e2c7722c26620f993c5356c2e6e7006e2181",
+ "Line/shape-polygon.svg": "57cade619de2467dbc2f795ca6412d4054c66768",
+ "Line/shape-rectangle.svg": "1c873fb4eacb7046eab079ea0652d159c19a786e",
+ "Line/share.svg": "14aabe6dc29e16238fe736abc18a2a37bbcc1e05",
+ "Line/sidebar-right-hide.svg": "dcd197258082d9c2b3602ede74cb82b28505f7e6",
+ "Line/sidebar-right-show.svg": "f282635a9c94332b3c4ff67ade27c05e4bfd7995",
+ "Line/single-metric.svg": "521896c745603cab59ee9517c5f3c3bfe23e8913",
+ "Line/sis-imported.svg": "628efd7e84d9c6b7febd73467b42eb9c636d2f17",
+ "Line/sis-not-synced.svg": "b160506be1c0ff5787399224184fc81dad0d33e8",
+ "Line/sis-synced.svg": "930b5cc2385fe193cc675a0170fe7d6fcee1e9b8",
+ "Line/skype.svg": "0b583533267ec37fd3721002d428520727e3a52d",
+ "Line/sort.svg": "01ea74397009757a4546620b0f182ac51ab3e6b6",
+ "Line/speed-grader.svg": "4073353e51925c0705503fb0865feb47a413e795",
+ "Line/standards.svg": "f2d9c31524180eb08eb2770b5cd262bd3b4ed891",
+ "Line/star-light.svg": "d4b9afef45cc91446cc0f5d3c1ce57ccf53097f7",
+ "Line/star.svg": "8f3cfecfa6991ef41b078572c8fda3c59f449be6",
+ "Line/stats.svg": "6624f58a8f3fcdc539e04244f62bcc3f08a94c9e",
+ "Line/stop.svg": "4e04d0be8316049381707bfe03acb4de38960f65",
+ "Line/strikethrough.svg": "465398158813d65cbecd9db3a2feb55805f386b9",
+ "Line/student-view.svg": "d49137683139b71e76ff9ecd77f254f5471ec901",
+ "Line/studio.svg": "d2e756ce7b2c81dd34fb1102f76064504e1d7888",
+ "Line/subaccounts.svg": "404b2c87f85f42d84d33138865d5aed39b6c09e6",
+ "Line/subtitles.svg": "5cf796608a0e4f42d159e5fec2ee58160c5e9b55",
+ "Line/syllabus.svg": "89941c5f05461d8443eeaaaef28119596f87134a",
+ "Line/table-cell-select-all.svg": "8f87005a2d7046df09ea4802e78c00617c2fde03",
+ "Line/table-delete-column.svg": "9b3dfcfb67645a8019ed400f6249bc97b3df4dde",
+ "Line/table-delete-row.svg": "096c2e5aa2dec6577e031053ab23194a72f364bc",
+ "Line/table-delete-table.svg": "fc61cbb57222e1af8a0bf604efd7c08b7a970004",
+ "Line/table-insert-column-after.svg": "06f72ae22e44e03245523ae4bf78b24587602efc",
+ "Line/table-insert-column-before.svg": "ca88cd3e0b285585fe65803ae9943dbaeb02f807",
+ "Line/table-insert-row-above.svg": "600574c395b3e3c8b6ee78cee724486d60130957",
+ "Line/table-insert-row-after.svg": "7ca992a364a35a05dac1988f1f99084fb2edbde5",
+ "Line/table-left-header.svg": "af4231dc840f168053316c3ad3b67a9e6683b28b",
+ "Line/table-merge-cells.svg": "90085d1cb413bd0570bd54219da7fb8ba9926f92",
+ "Line/table-row-properties.svg": "691b8c37028292008fa93300d0967b5d05787a1d",
+ "Line/table-split-cells.svg": "e84458e18bd6c51a9048928326db55d832719d6d",
+ "Line/table-top-header.svg": "0b3dd2ce0393c50f30a331ca55602918b02fa0a5",
+ "Line/table.svg": "8e5c28f42697838512ba9a1b6a9ca346d40e9056",
+ "Line/tag.svg": "18ed7d38acb61a6b746d8e4d39ac84086d014e6a",
+ "Line/target.svg": "e90196898bff000acfa361fed12e01076b3d69fe",
+ "Line/text-background-color.svg": "a9a9a4ab8da43b45cb87636345dff66e8c54a960",
+ "Line/text-centered.svg": "53f2ff1ff0412534d609b1c8980ef816631bac3f",
+ "Line/text-color.svg": "d520a8c58b7b1bff60b310dc683dce94329df7ca",
+ "Line/text-direction-ltr.svg": "e020828699f24e0aec09b591a4a99ae11a2f2129",
+ "Line/text-direction-rtl.svg": "c24cc89bb7c0bda32fecad3832af6e3e0bf13c88",
+ "Line/text-end.svg": "0fef578c80b1930d7a23c80c187b5228ebf2c604",
+ "Line/text-left.svg": "2f47c5b8c7b2a2a63c530083663435228fdeabe5",
+ "Line/text-right.svg": "0fef578c80b1930d7a23c80c187b5228ebf2c604",
+ "Line/text-start.svg": "2f47c5b8c7b2a2a63c530083663435228fdeabe5",
+ "Line/text-subscript.svg": "91fd9c2c5a9bcf2372625cbb4365c18ac369bf1c",
+ "Line/text-superscript.svg": "acb7e5a3c41c317aab387f955bd2d1e2c8a77198",
+ "Line/text.svg": "64fb90207a2471eb648eabebe6cdcf63960de883",
+ "Line/textarea.svg": "3946decf83d7c323b7ad941fec866a13a571eab9",
+ "Line/timer.svg": "af981056644b1f72104b7fc53a8d4e13db975580",
+ "Line/toggle-end.svg": "0deafa2c423a109c27e0796cef184faf6d6a2ae8",
+ "Line/toggle-left.svg": "03d68c5ab6729db1d8415b298a1f9b2ebfbef40a",
+ "Line/toggle-right.svg": "0deafa2c423a109c27e0796cef184faf6d6a2ae8",
+ "Line/toggle-start.svg": "03d68c5ab6729db1d8415b298a1f9b2ebfbef40a",
+ "Line/trash.svg": "1574b724c13952058f2472d5d856c1ee289a57cd",
+ "Line/trouble.svg": "f831061c82588cda5d6b79a27de79be205618cfd",
+ "Line/twitter-boxed.svg": "7fcfeec0c0692642cfe5b519d9d6a0b0de76e96f",
+ "Line/twitter.svg": "7fcfeec0c0692642cfe5b519d9d6a0b0de76e96f",
+ "Line/unarchive.svg": "ced257ddb1db50b0e98f803a88879f6af731ecca",
+ "Line/underline.svg": "e1d859587f28d99a906cbc603974978a5b5ebe78",
+ "Line/undo.svg": "f4299e82d6497ec4a9a03bb9ef64b2a9aa32d0b4",
+ "Line/unlock.svg": "5b57a7d3d2d6b16c9a8ef2d7999ece2b4d826099",
+ "Line/unmuted.svg": "6835ad9ea36e11a591a3ab06816fbb197b36a4b5",
+ "Line/unpublish.svg": "507818ec68850c69bb20f19a90e143e79e6c7cda",
+ "Line/unpublished.svg": "507818ec68850c69bb20f19a90e143e79e6c7cda",
+ "Line/updown.svg": "12a4ff88a005201e3c7120d6d6556e1ea11de2c0",
+ "Line/upload.svg": "05c228b5448cab1cf2ec08f4575cc74829914cce",
+ "Line/user-add.svg": "02eb3850174886828a5d2f4ad9bfea7f27eebb4d",
+ "Line/user-assign.svg": "eafeb88619cd7ed6dccc91f0d1a4cc912905c53a",
+ "Line/user.svg": "eb324de28487de39f0023a1d8a3152bd36490fb5",
+ "Line/video-camera-off.svg": "957ecfb46624096b6733800f5393e653e44cac0c",
+ "Line/video-camera.svg": "d6838e9b4ef59a5ee12aacbe03bf2150b68a525d",
+ "Line/video.svg": "5553f56fd28071bd5eb6e0ab85737c99c61dfbba",
+ "Line/warning-borderless.svg": "fa77f2f0969c25cb969c131ab54ad6b1cc5d1752",
+ "Line/warning.svg": "d4b96115887879c5b92bf38ea6a8212bcfa8d02c",
+ "Line/windows.svg": "d3016d535718fbdfca88aaf6b8f1fcea0ab343e9",
+ "Line/wordpress.svg": "29a4d5951f51c3731fc236502270b61450f62533",
+ "Line/x.svg": "6e8d960e03267d10082c7a38be95aeade9e79f59",
+ "Line/zipped.svg": "7a13631abac7a04b90fd5234818335f9308c899c",
+ "Line/zoom-in.svg": "bc4458d1d3fcd7788cd3b208986943d3125e376b",
+ "Line/zoom-out.svg": "75cbb4b45a5ead2a4cbc2bef23c0f0e21a770247",
+ "Solid/Arc.svg": "f9af654884cee3b6edb7f76769685f39b537ca03",
+ "Solid/a11y.svg": "28a0e506679919a9de8cff5bb6dafe13a76ffe90",
+ "Solid/aI-info.svg": "513b6ed8c3fcd42b4835cc93a2342a9f83ff73d8",
+ "Solid/add-folder.svg": "ecca3ab760e44cbec12a65b27780f20c8923720e",
+ "Solid/add-media.svg": "5a65ceda9fbf49f829340d2576657876ffa40bc1",
+ "Solid/add.svg": "2030c71877a5c0c4d405c151618e4e3fe110e3c8",
+ "Solid/address-book.svg": "5069a56e34a6410596c5c3f4710c581c3db647b1",
+ "Solid/admin-tools.svg": "3628660abddac5794ed2aa7a3f3dbcc0eb4fa970",
+ "Solid/admin.svg": "593fa73944667eaac37aac820cf3f90c6579ad9c",
+ "Solid/ai-colored.svg": "ca946dbcd97e242304273e6c8c58fa3f776c497b",
+ "Solid/ai.svg": "d7dbbe62151ebdbb197e3e22881141d5db2f891f",
+ "Solid/alerts.svg": "a33e544f933a0f91fa91ea7135b3cefc2b0391e8",
+ "Solid/analytics.svg": "fd0147b82527de7b69c30a53b3f457262978fce4",
+ "Solid/android.svg": "176d72003dd8272916f90eeda80f059aac855f81",
+ "Solid/annotate.svg": "c590e9ea95fe6aeb5db4db046fe9c1f702e47ad5",
+ "Solid/announcement.svg": "3861dc04ba86fcab1b1130367a9a886d2bf93b57",
+ "Solid/apple.svg": "b415b787f152a083e5a131e9fc4682350e839b7e",
+ "Solid/archive.svg": "ce136edae434a8980fd1e8726c3594914676da4b",
+ "Solid/arrow-double-end.svg": "36603271f34d5777f5ca28d2de2a2a241110b2e3",
+ "Solid/arrow-double-start.svg": "5772bcab8a7dec74f1b417f20828c88509ab9c71",
+ "Solid/arrow-down.svg": "f0bcd65f3fac277a8e228cf14602501b03513852",
+ "Solid/arrow-end.svg": "8305502b28617d48645b5a6dca82b78bc0e373c0",
+ "Solid/arrow-left.svg": "7a46db820e32b546ab34205f18919910a4fb7947",
+ "Solid/arrow-nest.svg": "66e72ce0127720b412c99a78494b5f768aae1fa7",
+ "Solid/arrow-open-down.svg": "d20b2713ff508a0259bc3237eff23da72314a511",
+ "Solid/arrow-open-end.svg": "d528ba1dcac8d2ffac436fa166ee832123512713",
+ "Solid/arrow-open-left.svg": "faa5c2721dfde22623ba5063262e8a8c3e8c57cd",
+ "Solid/arrow-open-right.svg": "d528ba1dcac8d2ffac436fa166ee832123512713",
+ "Solid/arrow-open-start.svg": "faa5c2721dfde22623ba5063262e8a8c3e8c57cd",
+ "Solid/arrow-open-up.svg": "e9f3832dd1546c72631306f3c33b69bed5d18447",
+ "Solid/arrow-right.svg": "8305502b28617d48645b5a6dca82b78bc0e373c0",
+ "Solid/arrow-start.svg": "7a46db820e32b546ab34205f18919910a4fb7947",
+ "Solid/arrow-up.svg": "b970a66519f018cfdcc1332550c9561b5c3bb240",
+ "Solid/assignment.svg": "853005199168bb901a1c175dc1f6bcfc4b23be8e",
+ "Solid/attach-media.svg": "13e6ee2280aa4b5a0d143cfb218193b96d17bde2",
+ "Solid/audio-off.svg": "507734c80d61be1608cae05fe15e2fa6632f1521",
+ "Solid/audio.svg": "90a50d8c3f68492b058380351a257b4588716ee4",
+ "Solid/award.svg": "dc672b1048c1d7ab31ac6db80acac482e5bb0681",
+ "Solid/bank.svg": "b9f54dec0ae9546442f7eb0563ed200c9f1bfef9",
+ "Solid/blueprint-lock.svg": "648c53774e79792cb0644a3b0cdea545d011557e",
+ "Solid/blueprint.svg": "3f5d5bfe103f44ff93e1d13a10606f1b317ad530",
+ "Solid/bold.svg": "ac8daf8ccbd06f668fedf51d95485ba3f1fbc6e6",
+ "Solid/bookmark.svg": "a96fcf8723879b5ba60c8ceeec4ce2e4824088c8",
+ "Solid/box.svg": "8a46a295e241f86f8eedf5cca19ef5ef69785ccc",
+ "Solid/bullet-list-alpha.svg": "88bfe1c0af634223c1b9994867a37854ec778f85",
+ "Solid/bullet-list-circle-outline.svg": "bc61ae412c5192199fae5897a39a4ed378b35d86",
+ "Solid/bullet-list-roman.svg": "7bcbe0440bc05e7b93edfd465263a929a70fc5ef",
+ "Solid/bullet-list-square.svg": "197e7ab440fd28bb918dfe6d752f3fd6af30661e",
+ "Solid/bullet-list.svg": "a5d4f38b4c5e227af724bccdf408473f665f1921",
+ "Solid/button-and-icon-maker.svg": "0f676b0dce113b6db77b70dc096a9bffd0cda676",
+ "Solid/calculator-desmos.svg": "bd4501a3c863622914f91971ca1f8d528779448c",
+ "Solid/calculator.svg": "fbaf0420040dd13231c78d7da33ceb1cf215dda9",
+ "Solid/calendar-add.svg": "df0b307a6c754dc02927d5d894024e5127c08db3",
+ "Solid/calendar-clock.svg": "8f272f89916e9be3e1deb7abb84c3f1eb40c0848",
+ "Solid/calendar-day.svg": "528b75f036a44ac249baaf728571a0958ad3fe67",
+ "Solid/calendar-days.svg": "528b75f036a44ac249baaf728571a0958ad3fe67",
+ "Solid/calendar-month.svg": "ba6c67d2f080d205037cdf5450ab1f18856e3536",
+ "Solid/calendar-reserved.svg": "8577d546530b82eb057cd70652768d79bad01078",
+ "Solid/canvas-logo.svg": "4a984d908f80686e08e9988359893001608c3ef6",
+ "Solid/certified.svg": "058a6fe967ded0c7caed8fd8270cad575767283f",
+ "Solid/chart-line.svg": "f9110f1e4e955440ac276180ddf62cdc7f78f739",
+ "Solid/chart-pie.svg": "23ddea23cacd6d74f84680a8cb4a3e931925f045",
+ "Solid/chart-scatter.svg": "143f30967dbda8272fdd23911f0bd4f1e7a20e1b",
+ "Solid/chat.svg": "c64627ab56bfa24a344bfd7cc32e13b403655371",
+ "Solid/check-dark.svg": "65d768ed5360bd218e127bc87146d9f0ac6fe85e",
+ "Solid/check-mark-indeterminate.svg": "423ff1a32bf6f53dc764e3860fad1d265fcfaa34",
+ "Solid/check-mark.svg": "65d768ed5360bd218e127bc87146d9f0ac6fe85e",
+ "Solid/check-plus.svg": "177a504dd5f62c24fbaec3cd7a043da9bb80fcbd",
+ "Solid/check.svg": "65d768ed5360bd218e127bc87146d9f0ac6fe85e",
+ "Solid/circle-arrow-down.svg": "5fa17dd1da0571a90faefac26ffba68ea285e865",
+ "Solid/circle-arrow-up.svg": "bfc32c594e6dffd16dd32f8d5d2acee92e6ce9b2",
+ "Solid/clear-text-formatting.svg": "ee981361256edb3980f4ce974e81255f0deefb7c",
+ "Solid/clock.svg": "d4e4c80f757749907d023a250c8c47307efe369e",
+ "Solid/closed-captioning-off.svg": "23e2548d55f3de0c3b30147da897bf6ba7523881",
+ "Solid/closed-captioning-on.svg": "479e51c72b5e2b15557b7c0bfa9205c7e0c3b678",
+ "Solid/closed-captioning.svg": "ba14f03b87d9cfacabe5e4523cc758169bebff3a",
+ "Solid/cloud-download.svg": "ca07fe5ffed98a907865abf9d4bfc0bd2c86e338",
+ "Solid/cloud-lock.svg": "b9efd0cadc5d1a6e6dc413e20b9df7c7b8e18408",
+ "Solid/cloud-upload.svg": "bbd0c50e0a50dbe5661bc2c039ba01c6eaa6cdc7",
+ "Solid/code.svg": "2ab7e644eb5062cdd248063933334d494ad8bc45",
+ "Solid/collapse.svg": "dedc65ee2ac3b796db421a594705bf9146343360",
+ "Solid/collection-save.svg": "b920c82c404fed2bca81abb09039878555ef887c",
+ "Solid/collection.svg": "0c0d37dc73dbeed348399bc86e3ebda88cc815b0",
+ "Solid/comment.svg": "dd918acd89afb7c4a4d310bcc422fd19870a5286",
+ "Solid/comments-off.svg": "b2b2307a123d0724e256b6d31c0daf6b5e4d231b",
+ "Solid/comments-on.svg": "dc5547ed0dec8d7b8323d962b451966c129f27e5",
+ "Solid/commons.svg": "bc5bfbf283d0ef91a9602d458480cfa18230738f",
+ "Solid/compare.svg": "08108dcdc3dc63daa4ce7aafa4a98e0389f3fa16",
+ "Solid/compass.svg": "91cfb7d124dab6b286d4bfc88d08cd654b85b709",
+ "Solid/complete.svg": "2817354f1f222453bfde0698dbba17bef2f12609",
+ "Solid/compose.svg": "2c55959333dfda51326b790418e6dd258c41a465",
+ "Solid/configure.svg": "16c870805ae44527fd26661efc4d80f3e4bb6f36",
+ "Solid/copy-course.svg": "17650eae7c46eedba2faa798fd9fe79e4283283d",
+ "Solid/copy.svg": "17650eae7c46eedba2faa798fd9fe79e4283283d",
+ "Solid/courses.svg": "e6d3cb21e1dc571f6c2ee73f1203d22ac3b0aae6",
+ "Solid/crop.svg": "47753c626ef8c9cab807161db45a0397046bad0e",
+ "Solid/dashboard.svg": "fc024ccdfdbc381155abf4eb451ff206d79eef80",
+ "Solid/deactivate-user.svg": "90a7a8092eaebf85042619d6ba1bf7efaf3ecfeb",
+ "Solid/discussion-check.svg": "65d768ed5360bd218e127bc87146d9f0ac6fe85e",
+ "Solid/discussion-new.svg": "2030c71877a5c0c4d405c151618e4e3fe110e3c8",
+ "Solid/discussion-reply-2.svg": "fed5fc10f4e4ec89f3279263972001d8bf3c41f9",
+ "Solid/discussion-reply-dark.svg": "32af38f462f59d9af226b65aa8f940b4f976d93d",
+ "Solid/discussion-reply.svg": "32af38f462f59d9af226b65aa8f940b4f976d93d",
+ "Solid/discussion-search.svg": "f9df2dda5cd59e6563c9444e9b455c3c452b6a3c",
+ "Solid/discussion-x.svg": "d27b163a94f37470e29fe179ccf01a0f2eaafe2e",
+ "Solid/discussion.svg": "c64627ab56bfa24a344bfd7cc32e13b403655371",
+ "Solid/document.svg": "0e4a946ab979a9d744d6edec7f99b5c412fa7881",
+ "Solid/download.svg": "1c2d595bee5c813dbab6127327471b87f2d02539",
+ "Solid/drag-handle.svg": "9c8c19042af30b4347187bce3a0380a0084a277c",
+ "Solid/drop-down.svg": "68aa1b70bff7b82daef08a62539b3d99013d23dc",
+ "Solid/duplicate.svg": "35c13fdb6b5cbbbcf252efa45672e5cf60fc4e38",
+ "Solid/edit.svg": "b6e2699c5684bd38816edab64a376d5b25120ee1",
+ "Solid/educators.svg": "99c7899a54493d5bc426ccb5788fc2157f1a3766",
+ "Solid/elevate-logo.svg": "755c47ec8db821c39c5e9a6e894f8885f0d2426e",
+ "Solid/email.svg": "fa59e5f0986d761cac4bdef70d9ccf1ded7b2f97",
+ "Solid/empty.svg": "3b414d5c8794318e85bbf99fd53eff1dbba38b81",
+ "Solid/end.svg": "d07742fb78ef7c6a08368032615217c2d853764b",
+ "Solid/eportfolio.svg": "e262bdad5b82d097bc10928322ba5c1412707463",
+ "Solid/equation.svg": "03d986d6457025b7b28f7f1b22f0f3a6fc0c2739",
+ "Solid/equella.svg": "d5a8695713772c1452c7af1e75a45e50707e6e44",
+ "Solid/essay.svg": "dd3fd7720f1664dc872237c48b2d84d9cb4bbdad",
+ "Solid/exit-full-screen.svg": "6993060a1c53345cb1d3810d951226b5785dbec4",
+ "Solid/expand-items.svg": "10f280ab89bb99b4e06a6e786d1f300d45ea51e7",
+ "Solid/expand-left.svg": "b5cd6aaaaed8dc89f81b2511532d0bc3d1dce246",
+ "Solid/expand-start.svg": "fed0ae5144f19e598b60ad687724fa82b68543bb",
+ "Solid/expand.svg": "0abdee0cbd0f1535e0e21948e7c656c858244875",
+ "Solid/export-content.svg": "caa6a0f8e4b6be974466a10dd4416582877f814f",
+ "Solid/export.svg": "caa6a0f8e4b6be974466a10dd4416582877f814f",
+ "Solid/external-link.svg": "56f67b3a7a65f4762626709840af29c3985849fb",
+ "Solid/eye.svg": "6c22c18d07a1a80f52230c5b8bf065f8968279b3",
+ "Solid/facebook-boxed.svg": "9b81d5bbf47fa353f351a9bc0e2f404dd0339078",
+ "Solid/facebook.svg": "9b81d5bbf47fa353f351a9bc0e2f404dd0339078",
+ "Solid/fast-forward.svg": "115e3d886bddf9e66cdd82a82eaeec40100806a0",
+ "Solid/feedback.svg": "e024a3e88d1597c91a87f7c3780762a548435844",
+ "Solid/file-locked.svg": "b05632bc7005997cfc18e3159644cae818d8a964",
+ "Solid/files-copyright.svg": "7a36a4a926dd64f4b7e197190a21ad56fc5b3214",
+ "Solid/files-creative-commons.svg": "54f885d0e64487f9e65a990db7cc674789b4aaa2",
+ "Solid/files-fair-use.svg": "4c645a623b76812cc3cc2ea51e4449f2b52f9859",
+ "Solid/files-obtained-permission.svg": "dd612b9e522119b668f7c2bd6071de5f346b2459",
+ "Solid/files-public-domain.svg": "00b906181bc38a3cc964e7eca08e6feb3c9f1270",
+ "Solid/filmstrip.svg": "1e96939416a948fbab30fa96356f6fd5219ff096",
+ "Solid/filter.svg": "225af4bb00c4e905c2e09785905265e4b433bab2",
+ "Solid/flag.svg": "fa9fbf00e964fcfd5adb4c9730300aea40a76f5e",
+ "Solid/folder-locked.svg": "b05632bc7005997cfc18e3159644cae818d8a964",
+ "Solid/folder.svg": "1526701ec8a6a278e4057799069edf82a96ad7a7",
+ "Solid/forward.svg": "4386a689932a1ded4a07dc31e94f917874130a68",
+ "Solid/full-screen.svg": "df51300a646a11f8c9a6ee5a4275364c4a333100",
+ "Solid/github.svg": "d01b816bcf8a65b53daf94b1b0adfed99453b891",
+ "Solid/give-award.svg": "c093765bfabb41a7481def9560c3781c5d93bcaa",
+ "Solid/gradebook-export.svg": "caa6a0f8e4b6be974466a10dd4416582877f814f",
+ "Solid/gradebook-import.svg": "a0f7362c8efc410dac917aee00e318d9ae0b0318",
+ "Solid/gradebook.svg": "49659a47e80507be4f1a96da23c8e59d052d1a12",
+ "Solid/grid-view.svg": "db6b58e878244bf59b29ceea278b8b6de415d300",
+ "Solid/group-dark-new.svg": "2030c71877a5c0c4d405c151618e4e3fe110e3c8",
+ "Solid/group-new.svg": "2030c71877a5c0c4d405c151618e4e3fe110e3c8",
+ "Solid/group.svg": "a95aa4263162d68c61df005f4da069ac472ab2a1",
+ "Solid/hamburger.svg": "038913b50f6d99bbec166f1ac73690dd3096e2ad",
+ "Solid/header.svg": "d731d478dcc1437980a9bb3032be10e724543011",
+ "Solid/heart.svg": "ca130dfc1aa5efe3da3ac0b840c8662d76057b72",
+ "Solid/highlighter.svg": "724b20cfde3b86704b5285235f29030f955cc50e",
+ "Solid/home.svg": "92e8f6c68968642a4451356880b40f5440fc9115",
+ "Solid/hour-glass.svg": "74ec5a00394c0a2b2ecad87cadc8dd4d5968bf37",
+ "Solid/image.svg": "2cf891fdcfb46c242e2798d40fc279f83d723524",
+ "Solid/immersive-reader.svg": "fd993b89fb8f85784f503d6e0a3f2cc04f10d8b4",
+ "Solid/impact-logo.svg": "2a62e2baba2888f800c63db68fe8b757869a6870",
+ "Solid/import-content.svg": "a0f7362c8efc410dac917aee00e318d9ae0b0318",
+ "Solid/import.svg": "a0f7362c8efc410dac917aee00e318d9ae0b0318",
+ "Solid/important-dates.svg": "bf07be8909ec5091473b80de4d6d7acb07f8d586",
+ "Solid/inbox.svg": "462d9bd34851aa155e0b257524df9cee3f58b1c2",
+ "Solid/indent-2.svg": "fa5de9bb4d83cddfac53fcc2e40790da019918f4",
+ "Solid/indent.svg": "fa5de9bb4d83cddfac53fcc2e40790da019918f4",
+ "Solid/info-borderless.svg": "40e86a12af65a7da4c58f42c4b23be0560f94bf4",
+ "Solid/info.svg": "a7119b769ad8256f42b148fe199ed33a19a6058e",
+ "Solid/instructure-1-dot.svg": "3af0d0ec382a2d2c219561cc98950a19c1ec3c22",
+ "Solid/instructure-3-dot.svg": "fa6fa6cdf5a4f077db71d431b23d974c4d36d88b",
+ "Solid/instructure-logo.svg": "9ccf12e7b5bb6932caca67a9824424d2b9fb28c1",
+ "Solid/instructure.svg": "7c21d97317d00a443d8a1054766ac32f7d78908a",
+ "Solid/integrations.svg": "6c9d16da6ac02f792d8dca281f5e7f8266dea53f",
+ "Solid/invitation.svg": "289a8535da4bd8fc4d04a30d2dc6766a35b1faa2",
+ "Solid/italic.svg": "eb588df4e2aa91cd6069fa889b182bef5e8615e2",
+ "Solid/keyboard-shortcuts.svg": "d3003964abd70414209fad2bbd324ed922fb7f40",
+ "Solid/launch.svg": "00519b1080aeeb6c05f2597bfec28fa612142202",
+ "Solid/learnplatform.svg": "2f6dee0876a13bece8be44f8f4f709551076b305",
+ "Solid/life-preserver.svg": "d18aa6201349909161bb9182646c0e5ff0ae0eda",
+ "Solid/like.svg": "38eb7c6da847227935d1d72d5c2e75a7660e492a",
+ "Solid/line-reader.svg": "3c2d44bc8b2d55e4e88ee481bfc5f06c848ca96b",
+ "Solid/link.svg": "758d7b0bd7077e15d6e18e02ecf8fea801369026",
+ "Solid/linkedin.svg": "b1896a667d5bfbdb6abd5a6c7f478ea095670862",
+ "Solid/list-view.svg": "101008cc927ed452bd60f70a0cd84b2fab1ded8f",
+ "Solid/lock.svg": "4f38df973c726903715e09c04b6a9e4654e362cb",
+ "Solid/lti.svg": "6c9d16da6ac02f792d8dca281f5e7f8266dea53f",
+ "Solid/mark-as-read.svg": "3b414d5c8794318e85bbf99fd53eff1dbba38b81",
+ "Solid/marker.svg": "84e1fc6ff760da20f320a940e72e64c6e5aff4dd",
+ "Solid/masquerade.svg": "9f98b7e1106f1f86ec955595afc60800ab3344eb",
+ "Solid/mastery-logo.svg": "3d26bb602d07650757aa90e95a11562c9d0c3a73",
+ "Solid/mastery-paths.svg": "cf85c058064384b62a61466cbcbaac27ac2a1d5b",
+ "Solid/materials-required-light.svg": "8d520f9a8a7282f603ad5d94718c5d5d58a6ebc0",
+ "Solid/materials-required.svg": "8d520f9a8a7282f603ad5d94718c5d5d58a6ebc0",
+ "Solid/mature-light.svg": "1e333985678bcf54145f72bcf2504eaf55bb4f55",
+ "Solid/mature.svg": "1e333985678bcf54145f72bcf2504eaf55bb4f55",
+ "Solid/media.svg": "1e96939416a948fbab30fa96356f6fd5219ff096",
+ "Solid/message.svg": "fa59e5f0986d761cac4bdef70d9ccf1ded7b2f97",
+ "Solid/mic-off.svg": "2e7c720b6df6cba1908c3bb126711a26feaf8a2a",
+ "Solid/mic.svg": "54a0e847d0dd15b8d7ba62486e1181419068f7e2",
+ "Solid/mini-arrow-double.svg": "5ae8656c1977e680a5ca4e8a372a01e420b17560",
+ "Solid/mini-arrow-down.svg": "238779055d3238a39e11a5c1577570fcae07eef9",
+ "Solid/mini-arrow-end.svg": "b053754d8ed32ddb376ee4dddab371409e10ccc1",
+ "Solid/mini-arrow-left.svg": "4fcbaa449c47c57aaeb682ee8627d2ee40d66078",
+ "Solid/mini-arrow-right.svg": "b053754d8ed32ddb376ee4dddab371409e10ccc1",
+ "Solid/mini-arrow-start.svg": "4fcbaa449c47c57aaeb682ee8627d2ee40d66078",
+ "Solid/mini-arrow-up.svg": "9d859b296073e9831d74d8fdf58d95c10c8450f9",
+ "Solid/minimize.svg": "47244e667822897280d92b5d02f6f0f48ac8204d",
+ "Solid/module.svg": "ce1adea89fbff38c784d72c93de78c8d1bdb6975",
+ "Solid/more.svg": "32af38f462f59d9af226b65aa8f940b4f976d93d",
+ "Solid/move-down-bottom.svg": "cc3fa09f6a4826bd4a3175032c9848ff5ccffab1",
+ "Solid/move-down.svg": "6e7bf98140ea2ee3e33e0909503778947e4cec51",
+ "Solid/move-end.svg": "31f1bfcb5bcab4cfa9ee4517c49f75d9d12a3c07",
+ "Solid/move-left.svg": "4220338a4e7a923b8614cb14f30e3b933cfcede4",
+ "Solid/move-right.svg": "31f1bfcb5bcab4cfa9ee4517c49f75d9d12a3c07",
+ "Solid/move-start.svg": "4220338a4e7a923b8614cb14f30e3b933cfcede4",
+ "Solid/move-up-top.svg": "e3064feca15a9d90c3de20408f14e213e077eb65",
+ "Solid/move-up.svg": "14c93d1ffea2324bceb416e5a6a97f06071b2ca8",
+ "Solid/ms-excel.svg": "3488512f68a5578a50ab04131daf5e076a4fce2e",
+ "Solid/ms-ppt.svg": "b0150174d405e38f9f487e2a6c3d213a65205458",
+ "Solid/ms-word.svg": "ffc92aa8970dd3bc3add2971aa9052f7c6d1a492",
+ "Solid/muted.svg": "43d3c595b2bb09230f3f09aa1358d54d9669648a",
+ "Solid/neutral.svg": "1e790c952f312fad5dfef931f39a2e950e40d709",
+ "Solid/next-unread.svg": "a11d545999411be33f4bac23aea97c16379ef684",
+ "Solid/no.svg": "561719a4a9c68177ab3c416e6dd1883eb17c83b2",
+ "Solid/not-graded.svg": "6dd42359c56fda77b4379b714417e20e1f2e83f5",
+ "Solid/note-dark.svg": "0a2d8ad0078aa9b83c3a4dfe0d6d80ea6d2fdffe",
+ "Solid/note-light.svg": "0a2d8ad0078aa9b83c3a4dfe0d6d80ea6d2fdffe",
+ "Solid/note.svg": "0a2d8ad0078aa9b83c3a4dfe0d6d80ea6d2fdffe",
+ "Solid/notepad.svg": "704c9ca55145fe15a43a0a9c6499e50b73d20489",
+ "Solid/numbered-list.svg": "8d3d637ac1eb1acef877128ae28e13be1c4f9b0e",
+ "Solid/off.svg": "5b67769b4a85b373ea6cddb0c490dda33ad43c0f",
+ "Solid/open-folder.svg": "82b874a84477891df8666c554e9e084e32d548fb",
+ "Solid/outcomes.svg": "cf3635f5a7fa78dee25c3bd6215a74cab941f12c",
+ "Solid/outdent.svg": "d35f63653d338541d76f6592d9a2b0aefe67dbf4",
+ "Solid/outdent2.svg": "d35f63653d338541d76f6592d9a2b0aefe67dbf4",
+ "Solid/oval-half.svg": "dabae693a605292a1c9ca9de86f3e067219063b2",
+ "Solid/page-down.svg": "33b72d2560cb4d17027bfa5600b4f879e6056b05",
+ "Solid/page-up.svg": "1f569cd04d8249be7722f1c3c631542f329769cc",
+ "Solid/paint.svg": "51c71d5ac35d59463c11c129f21521a123042297",
+ "Solid/paperclip.svg": "9d3510c9bbb44e90dd16e8364ca7c546d7e59a2e",
+ "Solid/partial.svg": "47244e667822897280d92b5d02f6f0f48ac8204d",
+ "Solid/password-reset.svg": "e24164f89d8b02375fea948c5e50ce52e7cfa336",
+ "Solid/pause.svg": "b1711db83005f5e5e5bfa433f490ff0c092efb09",
+ "Solid/pdf.svg": "aca121efed3d801082493c4b716f5bce60ce36b8",
+ "Solid/peer-graded.svg": "92ce21fb620a2f839f78f3e6353fe677b1ad1a4a",
+ "Solid/peer-review.svg": "73912c11fee7bf9bdfc238a500a483aaa1266fab",
+ "Solid/permissions.svg": "bd19fb21b313ab182581b90658f5934152fce8e9",
+ "Solid/pin.svg": "458645ec6c1ce30588dd8f8c232bd427b5086f89",
+ "Solid/pinterest.svg": "0a81b784159a3514b8edb7e3b35119a7b9df217c",
+ "Solid/play.svg": "778b179635eee7ff52139a8faf960072ed568a4e",
+ "Solid/plus.svg": "2030c71877a5c0c4d405c151618e4e3fe110e3c8",
+ "Solid/post-to-sis.svg": "3b82b52b95e0ce006286ab94243583e6237f4623",
+ "Solid/predictive.svg": "265469b4bd4884e4db9c54b6b7169a0e08cc6b37",
+ "Solid/prerequisite.svg": "45acdddf10598d2212afaf7a50e3914df7b108b7",
+ "Solid/printer.svg": "712486b28b96397d1f31048c7ef51d3edcabbfd4",
+ "Solid/progress.svg": "3ee15d0535086b35dc869e13b707983af4776e10",
+ "Solid/protractor.svg": "86e6ae6ef129e1c6cc0146658e3d7bde057ed4f9",
+ "Solid/publish.svg": "392faf7154b9f35d5066bf4db5bdda7f9e7837ab",
+ "Solid/question.svg": "d57bba02fb7b8e8e46b28faccec7e6061892d2b8",
+ "Solid/quiz-instructions.svg": "35d1f377c57fffb8a1ffa81ac6c0c4f1c449e6d8",
+ "Solid/quiz-stats-avg.svg": "1ca07af7b9f11befbfe81ea7a2e07fc989d68c71",
+ "Solid/quiz-stats-cronbachs-alpha.svg": "f93358d39503b583c257facb1ec29ada1ab291a2",
+ "Solid/quiz-stats-deviation.svg": "3c7030e9d9a283209633a6029d7cd01c2d68e037",
+ "Solid/quiz-stats-high.svg": "d61fc156630d929fcd8ff3a1cc155ad20170034e",
+ "Solid/quiz-stats-low.svg": "8e392fca8095f5b54ec1ce36163f20863bdd93ce",
+ "Solid/quiz-stats-time.svg": "d4e4c80f757749907d023a250c8c47307efe369e",
+ "Solid/quiz-title.svg": "83fa257dc0ae2279ea9a3c284bde57c9d2e2d177",
+ "Solid/quiz.svg": "6ca53020c425bb789294c942bb427c1b7df5467a",
+ "Solid/record.svg": "14a1ea3beec71e5920fb74f8a7e9c8858b8c9e59",
+ "Solid/redo.svg": "80368bd1b1e0a2ef513b8eefc1b6035128da9310",
+ "Solid/refresh.svg": "41b76270acbc37ae1f6e5188ce407d0e92d2843b",
+ "Solid/remove-bookmark.svg": "50d3c7e44492c3aa201be413d99b50ea2423d589",
+ "Solid/remove-from-collection.svg": "4d28a1040c855dd108f74da573442faa816c2d7c",
+ "Solid/remove-link.svg": "4e5675b340aa6ebfea6e92c77e80500f6222f979",
+ "Solid/replied.svg": "fed5fc10f4e4ec89f3279263972001d8bf3c41f9",
+ "Solid/reply-2.svg": "fed5fc10f4e4ec89f3279263972001d8bf3c41f9",
+ "Solid/reply-all-2.svg": "39e8749c853a5dc9575fce7bc0540e25db763576",
+ "Solid/reply.svg": "fed5fc10f4e4ec89f3279263972001d8bf3c41f9",
+ "Solid/reset.svg": "41b76270acbc37ae1f6e5188ce407d0e92d2843b",
+ "Solid/restore.svg": "cb725a540e37ab849c8d4217292a881bf0c9dd4b",
+ "Solid/review-screen.svg": "e8e0b403489981677f361d38d7ac7cf15f4682f6",
+ "Solid/rewind.svg": "080e58949cf7465cf388e8e1298839db050824ea",
+ "Solid/rotate-left.svg": "bfc89c34f95aa625c9a48bb190f6b359e083e79c",
+ "Solid/rotate-right.svg": "17ac6b58df9fefd251df813212280028412a5789",
+ "Solid/rss-add.svg": "c9c2540395ec3b44174311117a7f1f6237ea574a",
+ "Solid/rss.svg": "ce6e7ef826fc31b22f922584bf5e67da12363ad2",
+ "Solid/rubric-dark.svg": "6f08e4a48f81f8f3c919ad1466fb94247d2c58a8",
+ "Solid/rubric.svg": "6f08e4a48f81f8f3c919ad1466fb94247d2c58a8",
+ "Solid/ruler.svg": "61d32cb101ce7e4ba459d53e0c895725aad4ddfd",
+ "Solid/save.svg": "45b75165f4e792cbf8c0b9a2508f589e80c5e0cb",
+ "Solid/screen-capture.svg": "850484b9478c0889f7cad4a859ef0fa63d698afb",
+ "Solid/search-address-book.svg": "f9df2dda5cd59e6563c9444e9b455c3c452b6a3c",
+ "Solid/search-ai.svg": "a2fc21d8c8d53f7ceb7a8ea8dbf83be12ee0aadc",
+ "Solid/search.svg": "f9df2dda5cd59e6563c9444e9b455c3c452b6a3c",
+ "Solid/settings-2.svg": "c6d2975a9e9198c4b88332186d3134ecefbafe99",
+ "Solid/settings.svg": "c6d2975a9e9198c4b88332186d3134ecefbafe99",
+ "Solid/shape-oval.svg": "3b414d5c8794318e85bbf99fd53eff1dbba38b81",
+ "Solid/shape-polygon.svg": "0628c59c8b56a9254711aabcb3c6470cff513c3b",
+ "Solid/shape-rectangle.svg": "6990655fcf1f71350eb26619c9e0d87983d0e773",
+ "Solid/share.svg": "2f669b6aaacec5e46def20f303b0b77a7d78da9c",
+ "Solid/sidebar-right-hide.svg": "160c38bb1d6056df38cd3227cc97f77854e3fa03",
+ "Solid/sidebar-right-show.svg": "a66dcfef612458edff282e59388171e7890db13e",
+ "Solid/single-metric.svg": "118204eca00bf5f6b0bf600c4ee3cffdd8cda827",
+ "Solid/sis-imported.svg": "a0f7362c8efc410dac917aee00e318d9ae0b0318",
+ "Solid/sis-not-synced.svg": "e892c1fc097557351a57682bdf016f09f645bed4",
+ "Solid/sis-synced.svg": "ae43580d945bf0760a71f9a5c12242008e44b505",
+ "Solid/skype.svg": "009f52c789455f9cad9339419a830fb85a25952c",
+ "Solid/sort.svg": "a0f71ff5f618594bcb7cd003dac4e5d7c84f3cac",
+ "Solid/speed-grader.svg": "e094c2eeee5f5067570b17952b46f5fc1e60bbcb",
+ "Solid/standards.svg": "6dfdf41cb56b8d6491deadf70fbd4ca4981f020b",
+ "Solid/star-light.svg": "d4b9afef45cc91446cc0f5d3c1ce57ccf53097f7",
+ "Solid/star.svg": "8f3cfecfa6991ef41b078572c8fda3c59f449be6",
+ "Solid/stats.svg": "fd0147b82527de7b69c30a53b3f457262978fce4",
+ "Solid/stop.svg": "72a156fea1cde8c3f565420cd5d92b31f8495915",
+ "Solid/strikethrough.svg": "4a79113978abfa34bc86404cfaae6e0cbfa5fbca",
+ "Solid/student-view.svg": "1b33a72190a51c4e351872defeadcf704f393f2d",
+ "Solid/studio.svg": "8a3731ccce2075546f668b14b2c0df22a603cd27",
+ "Solid/subaccounts.svg": "b28958757586abe7652015e5af2386e8d598b67a",
+ "Solid/subtitles.svg": "2e1ca1114e58a58f06bdf75b6cc2f5e37494bd36",
+ "Solid/syllabus.svg": "60fb86a26f1b15fe10e5dba058e439572d7cfd8d",
+ "Solid/table-cell-select-all.svg": "6ceeba217cb12cd7d1dd1ab509d8c9a1feb4b09d",
+ "Solid/table-delete-column.svg": "92a04356aad3a33059e9f1e715fab915b07acecb",
+ "Solid/table-delete-row.svg": "7c3bd6fc7ab15de339dc7027c6e4ca861f90c9f7",
+ "Solid/table-delete-table.svg": "414f83db4c2490e6d3381f17c1ee58eb94d589ec",
+ "Solid/table-insert-column-after.svg": "5eab1c80ff73ea2a28a132bfae8ff0b502e06049",
+ "Solid/table-insert-column-before.svg": "702d1c9bd96a80abb7cc6385b4c18f5838f43d61",
+ "Solid/table-insert-row-above.svg": "17616c67b4c16bb3bca1434a57c3a03cbec878dc",
+ "Solid/table-insert-row-after.svg": "e1c816547436d79fc00870ca0127aaac9c62fee5",
+ "Solid/table-left-header.svg": "5c34f34fd9d260c287f68db127d911d966bcb3fa",
+ "Solid/table-merge-cells.svg": "689dc6ff41f386835d7a21c783f5a67ad7b8118e",
+ "Solid/table-row-properties.svg": "cbb6f4094e978e0b4a78e0b03a673611437c0f75",
+ "Solid/table-split-cells.svg": "d29f59a83f84caf7ac1700b6636c662889d58458",
+ "Solid/table-top-header.svg": "80d1343f384f16309cd8c464ae8b82bde18f8b88",
+ "Solid/table.svg": "b3828037dc426ebb8bbfb646c9d389ebcfa6cddc",
+ "Solid/tag.svg": "2a89cd0bedfb264e6778a33d41f8d090fc3266e4",
+ "Solid/target.svg": "ca55b4065c6262eff393cd3293030711b425fb5e",
+ "Solid/text-background-color.svg": "ae5265a52191608d2ac1a9949f9cd5fb04925c8c",
+ "Solid/text-centered.svg": "02243312f8d2f5ebbf9ae93c54a1d0f995b9f3da",
+ "Solid/text-color.svg": "9624a01680429ceb598ba4a91aa3f738435970be",
+ "Solid/text-direction-ltr.svg": "1e09fff0d1d14853e5c099bcfab919efd1da2c3f",
+ "Solid/text-direction-rtl.svg": "e0d2bcca6a2d8d70dfd3fa908f33fa93dd7da14d",
+ "Solid/text-end.svg": "c27da1d57d35c7b79fb5d09288392687ac8ab812",
+ "Solid/text-left.svg": "861c1590166b9a50e5b8a6ec043255e7e49c080e",
+ "Solid/text-right.svg": "c27da1d57d35c7b79fb5d09288392687ac8ab812",
+ "Solid/text-start.svg": "861c1590166b9a50e5b8a6ec043255e7e49c080e",
+ "Solid/text-subscript.svg": "391b349f80dd22cb4acd445880ca9e69ea885da2",
+ "Solid/text-superscript.svg": "68c1fa81cfd832a111fe85be7e107d772b69d0d2",
+ "Solid/text.svg": "14bf463feee221006dade28d0f01395c1997c6b0",
+ "Solid/textarea.svg": "9dfca2ebdf5a3d26da424c9d2b3cc8bf34faadfd",
+ "Solid/timer.svg": "bdc30b926dc08db0ab8e58d1be7700a3012c9da4",
+ "Solid/toggle-end.svg": "eb79b59c1926975c0288e6f6b2d08d1f3c0b1ffa",
+ "Solid/toggle-left.svg": "529820da915486324ca8efeee76cf4c260b0d1be",
+ "Solid/toggle-right.svg": "eb79b59c1926975c0288e6f6b2d08d1f3c0b1ffa",
+ "Solid/toggle-start.svg": "529820da915486324ca8efeee76cf4c260b0d1be",
+ "Solid/trash.svg": "de12c91ff5c01c5f09d8ef00303c16600299870c",
+ "Solid/trouble.svg": "abf11c4f1ce6b7ea26f06e45424967c1b4e70f8d",
+ "Solid/twitter-boxed.svg": "405a1058ab356c8fc5e6e173a077553b00d1f0ad",
+ "Solid/twitter.svg": "405a1058ab356c8fc5e6e173a077553b00d1f0ad",
+ "Solid/unarchive.svg": "df87514bc810d0b9f1f72cb4a01c71067ad6567d",
+ "Solid/underline.svg": "2df306e4be5109aa835f4bb21e701662d1a5f06a",
+ "Solid/undo.svg": "4220479403c36968e81c010016ba9b4315e90d37",
+ "Solid/unlock.svg": "56cc05b348fb57ad685809e4f376f57f388ee78e",
+ "Solid/unmuted.svg": "a33e544f933a0f91fa91ea7135b3cefc2b0391e8",
+ "Solid/unpublish.svg": "561719a4a9c68177ab3c416e6dd1883eb17c83b2",
+ "Solid/unpublished.svg": "561719a4a9c68177ab3c416e6dd1883eb17c83b2",
+ "Solid/updown.svg": "10f280ab89bb99b4e06a6e786d1f300d45ea51e7",
+ "Solid/upload.svg": "eb7996ab52f3757b6af3b98668facef4d35146da",
+ "Solid/user-add.svg": "c9c2540395ec3b44174311117a7f1f6237ea574a",
+ "Solid/user-assign.svg": "2bc0d90e6bafbfbf26a03d94b600778452ca8b07",
+ "Solid/user.svg": "ec2e2caeb1f643892fa5522f6ece8d10fcdbb488",
+ "Solid/video-camera-off.svg": "e75429c0980d152b0fae5eb9fbf5ad508869ac57",
+ "Solid/video-camera.svg": "7851ef4f1fd662350889d76ad2a6984480efa440",
+ "Solid/video.svg": "1e96939416a948fbab30fa96356f6fd5219ff096",
+ "Solid/warning-borderless.svg": "8b8d7ab7c0414b0f6952dae1683bdb1669f5cd9c",
+ "Solid/warning.svg": "e20648514b5f747ed691063db621eb1a689a76c3",
+ "Solid/windows.svg": "448c18956845857e0db9a1ad74acec2ac58c21a5",
+ "Solid/wordpress.svg": "12f9df0a611c7eb10f65bf71c12866f3c284a696",
+ "Solid/x.svg": "d07742fb78ef7c6a08368032615217c2d853764b",
+ "Solid/zipped.svg": "e74abdd7583f1b47ee3abfecf81407317ba29f39",
+ "Solid/zoom-in.svg": "14a92e50cbe0a329c2a94abefc9d0866a676f8da",
+ "Solid/zoom-out.svg": "dba6138698c2af76b3a6b7b3ed92bb67e52a9535",
+ "Custom/accessibility-2.svg": "70e0d8131a87dd7ff0739c4d12dc8c57832a705b",
+ "Custom/ai-info.svg": "87f00b9e2f1fce4633c4f21d60344f40c84767b1",
+ "Custom/apps.svg": "c36149ad580ed76468d6553a6fee7939b7b7e077",
+ "Custom/background-color.svg": "bbdd732b4966e1088e8d9b3be657b3f612c9b67e",
+ "Custom/bell-solid.svg": "8a46b69cca729500b56d3033e7c9bca49c9eee89",
+ "Custom/bookmark-solid.svg": "5c61b1cc4dd00322a48da906975f345a41fc7bde",
+ "Custom/calculator-desmos.svg": "b38a395436517b21dbe588e965ac7e8e89e1c9b6",
+ "Custom/canvas-logo.svg": "0f61bbe342a82b7e1b082c0e0a4d3a1622b7c627",
+ "Custom/captions-solid.svg": "843bc982b276de7a02b62d80ad63150322715a93",
+ "Custom/circle-alpha.svg": "81947f249a8f040edf836d7e0edac7b42b8dc721",
+ "Custom/circle-arrow-down-right.svg": "840e2f219db1a8e6c9e2b1d8b73109aad4aa2c9a",
+ "Custom/circle-arrow-in-left.svg": "ccd8fee7335b1cb027f5b46ff4e0441f73061f56",
+ "Custom/circle-arrow-in-right.svg": "2fcdb85f8ef82286abe0c619d9fd6e740d131d5e",
+ "Custom/circle-arrow-up-right.svg": "31297b3f92f8bd0315af76b21b5a70ebdf6831a4",
+ "Custom/circle-mu.svg": "af0bd85bba2606da34ed9a2b48129bec3c81d0b3",
+ "Custom/circle-sigma.svg": "f7aaf06a5ae5850ad50d993b6db54de153dcf7d8",
+ "Custom/closed-caption-check.svg": "95a0c13e77e5c65d24fb79b00235c599bbd277f0",
+ "Custom/closed-caption-solid.svg": "8ba125998f32b855a166e2e77d6e73bcc7983480",
+ "Custom/closed-caption-x.svg": "ee796efefe932aa42e851a94716863a52dcf0e29",
+ "Custom/cloud-lock.svg": "554415b6c00a2548659a62d0275823b95e38b684",
+ "Custom/commons.svg": "b0ad2ac44e3ebdc8e449452e32f8b730bf4ff70b",
+ "Custom/compare.svg": "6510c7809c2e47dd9b350eea210827a9d3d0dc18",
+ "Custom/copyright-fair-use.svg": "7884eb5392e484b9c0f1eab74d1c6c6cb56906d0",
+ "Custom/copyright-obtained-permission.svg": "cf40af11caefa8200ac80e49e3197f7fdb67e546",
+ "Custom/copyright-public-domain.svg": "342218f86bb8d4c5de8eee9f00ab1ecfc9c0945f",
+ "Custom/elevate-logo.svg": "07a41df3fa63570e4a6157fddc350d318a7da292",
+ "Custom/fast-forward-solid.svg": "096e58e0a5ac9aaa8d4b166a7e3f953615badbf0",
+ "Custom/files-x.svg": "8ff08db522f6b9dd925768567063f4c23ad010db",
+ "Custom/flag-solid.svg": "8199e4236e9c80c6827c6a4b460315e74a1baec8",
+ "Custom/heart-solid.svg": "fd77e07eba8541ab225eed20bd56e4a8c0cacff5",
+ "Custom/history-check.svg": "76c70707adaa37ce4ec08d0903f4704e9a92d29a",
+ "Custom/history-x.svg": "be8a82b3429cc3f36a9f90da6329b73030279ab4",
+ "Custom/igniteai-logo.svg": "c9ea56cb61c235b58189793d467ab08daaf96f8f",
+ "Custom/impact-logo.svg": "902b999e337b41f4b04d3c97eb89277199900366",
+ "Custom/instructure-1-dot.svg": "6d3d485285f01d0defc1b5d0af6b8d29b08710b1",
+ "Custom/instructure-3-dot.svg": "ec75a140c05a186ec39a89b6d1bfbf1b142c50fb",
+ "Custom/instructure-logo.svg": "3011f1c1af99e3da82a667090864dc02af4c1859",
+ "Custom/instructure.svg": "05f88802ae56781b152dd1f4d2132b914673f133",
+ "Custom/line-reader.svg": "e4f90685b8c5dc4c80b7a8aed20979e541312d84",
+ "Custom/list-circle.svg": "91d850c610bf946b62d7933a44c12aca4a0c5d70",
+ "Custom/list-down.svg": "4f62509a037046bff54fcb919d6136109f09b220",
+ "Custom/list-ordered-alpha.svg": "c2893edd9b4f43ed970e3f08106202af37cace3d",
+ "Custom/list-ordered-roman.svg": "3a5eb60b83e6b091e4755949b29cdde8d6e1871d",
+ "Custom/list-square.svg": "f54cefbdd2fafbb6e556d99dd198ba818219d422",
+ "Custom/list-up.svg": "971ad6234fa19ef95168401e214ebad517e4d8cb",
+ "Custom/lock-reset.svg": "49d896a8d6d3c2d04af639f61fd54d7327d707cc",
+ "Custom/mail-circle.svg": "a059372ed5068fa34d201db596d607f51bd0c3bf",
+ "Custom/mastery-logo.svg": "2466a476d6605cc566fc3ef39d356405b2bfe749",
+ "Custom/media-attachment.svg": "94effd6503cb6a0ef0d68ad69411307fde5f34ba",
+ "Custom/media-plus.svg": "37f50b8c79aa9bccf2f91194639be03b32ba6902",
+ "Custom/message-square-check.svg": "53c071732e35251e5e6422fe721e91a5762bd6ce",
+ "Custom/message-square-x.svg": "9ef58e4d73d85bd3ec8705da7a0ca35ed107997a",
+ "Custom/pause-solid.svg": "948b6bf43d6c30f54f8c69128b0ba973743c7c97",
+ "Custom/pencil-annotate.svg": "4ff76f562cf3778dfebd504062aeb074b28ff68f",
+ "Custom/play-solid.svg": "8b498fa68a116e41ebc0e1c314e0225ea29c6df1",
+ "Custom/post-sis.svg": "ab7f0fe74f03699354ea34edb9340f4a567f1d16",
+ "Custom/protractor.svg": "a3f28f0301480c8012660226775c66e7fd48213e",
+ "Custom/rewind-solid.svg": "6d8575ac8254dc73c51c8b792ca542d49eaeeb20",
+ "Custom/rocket-solid.svg": "61f0c40b7b3359f1192c39655253c5b99637fe93",
+ "Custom/search-ai.svg": "620b74d2bd43d8778215fa9ea9fb5d84d53a6d94",
+ "Custom/shopping-cart-check.svg": "e5047e1f6bf8dc48934e8b68483a83f9c6711e96",
+ "Custom/speed-grader.svg": "f0381ac8cf9a6e397a35d234912f86bdaba25b57",
+ "Custom/square-solid.svg": "aa61264993b7228003bf272df237b0eb734615e0",
+ "Custom/squares-blueprint-lock.svg": "51e598e1f357a202e03a111810c6af7affceeb86",
+ "Custom/squares-blueprint.svg": "f1ee25a79f5e55cd8f29312ce293476be45f70a5",
+ "Custom/star-solid.svg": "d012c29322a0203668d9b4aac07d5669052fa931",
+ "Custom/studio.svg": "7ab777f7d176c5907ee0b63dae2cad1fe20493b1",
+ "Custom/table-2-check.svg": "f2fb8fe0b32e1d72834770e983a01c02d11fec87",
+ "Custom/table-2-x.svg": "8aff0c75d7f32c8947d31ca9a3ef78b92acb4477",
+ "Custom/table-cog.svg": "f7360e672fed32bde84c9f49a70426f0fc017d69",
+ "Custom/table-column-plus-left.svg": "cee0741c04036ce78a9efe8ab75e06ac10e7401b",
+ "Custom/table-column-plus-right.svg": "5cc2f061adda2850814660cce29eb42ce1ed0679",
+ "Custom/table-column-x.svg": "a18bddc663c7b0920c1a89aa449460343c98f3d0",
+ "Custom/table-column.svg": "70d47c7819afa67e1fa8dc37433e66f5f175f592",
+ "Custom/table-row-plus-bottom.svg": "689e0dd690ab7262228c27d5af75e9eea8c355e6",
+ "Custom/table-row-plus-top.svg": "37fbf35eaa0275c4e24c46a281e3f66000cc31aa",
+ "Custom/table-row-x.svg": "c28e03e9d8da19f47fc843839a507046a3a0ff55",
+ "Custom/table-row.svg": "76fad40240f13f9e07d3d47a5c958f5bc668e927",
+ "Custom/text-color.svg": "51433e6ca060c1781566181b9fcc9092b2afa60b",
+ "Custom/thumbs-down-solid.svg": "14113374223e614ce6c327bd271bf87a924a5b74",
+ "Custom/thumbs-up-solid.svg": "848f5a252e2386bb94b3bbcbbf3802037eb4ed45",
+ "Custom/title.svg": "ef7c0a1ea3522d3f14a8532b4dfbe31a2dd77300",
+ "Custom/user-round-arrow-up.svg": "37326a5e7407e9a6455da133c64a8eef0b835498",
+ "Custom/user-round-blackboard.svg": "238d78e8e9531715fcca6b748db84af31c4f4246",
+ "Custom/user-round-lock.svg": "b39fc9f0b13bb123ceff1675a2fe521e3ac56c8a"
+ }
+}
diff --git a/libs/instui/scripts/package.json b/libs/instui/scripts/package.json
new file mode 100644
index 0000000000..9484abb1c8
--- /dev/null
+++ b/libs/instui/scripts/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "instui-tokens",
+ "version": "1.0.0",
+ "private": true,
+ "description": "Generates InstUI design tokens for Android/Compose from instructure-ui",
+ "scripts": {
+ "build": "node build-instui.js"
+ },
+ "dependencies": {
+ "style-dictionary": "^4.0.0"
+ }
+}
diff --git a/libs/instui/scripts/sd.config.components.js b/libs/instui/scripts/sd.config.components.js
new file mode 100644
index 0000000000..13d85d4c2c
--- /dev/null
+++ b/libs/instui/scripts/sd.config.components.js
@@ -0,0 +1,994 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Style Dictionary configuration for generating Jetpack Compose component tokens.
+ *
+ * Component tokens reference the semantic layer (colors, layout sizes, typography)
+ * and provide per-component design values: colors, spacing, typography composites, etc.
+ *
+ * Key features:
+ * - Color references resolve to @Composable getters delegating to InstUISemanticColors
+ * - Typography composites generate TextStyle objects with sp/em units
+ * - FontSize tokens always emit sp values for Compose compilation correctness
+ * - BoxShadow composites are emitted as documentation comments (not usable in Compose)
+ */
+
+const LICENSE_HEADER = `/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens`
+
+const BUILD_PATH = '../src/main/java/com/instructure/instui/token/component/'
+const PACKAGE_NAME = 'com.instructure.instui.token.component'
+
+// ---------------------------------------------------------------------------
+// Utility functions
+// ---------------------------------------------------------------------------
+
+function capitalize(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+}
+
+function toCamelCase(str) {
+ return str
+ .replace(/[-_](.)/g, (_, c) => c.toUpperCase())
+ .replace(/^(.)/, c => c.toLowerCase())
+}
+
+/**
+ * Convert component filename to Kotlin identifiers.
+ * 'BaseButton.json' -> { objectName: 'InstUIBaseButton', fileName: 'InstUIBaseButton.kt' }
+ */
+function componentNaming(filename) {
+ const baseName = filename.replace('.json', '')
+ return {
+ objectName: `InstUI${baseName}`,
+ fileName: `InstUI${baseName}.kt`
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Direct value parsers
+// ---------------------------------------------------------------------------
+
+/**
+ * Parse a dimension string to a numeric dp value.
+ * "1rem" -> 16, "24px" -> 24, "2.5rem" -> 40
+ */
+function parseDirectValue(value) {
+ if (typeof value === 'number') return value
+ if (typeof value !== 'string') return null
+
+ const numMatch = value.match(/^(-?[\d.]+)(rem|px|em)?$/)
+ if (!numMatch) return null
+
+ let num = parseFloat(numMatch[1])
+ const unit = numMatch[2]
+ if (unit === 'rem' || unit === 'em') num = num * 16
+ return Math.round(num * 100) / 100
+}
+
+/** Convert a literal dimension to Kotlin dp. "24px" -> "24.dp", "2.5rem" -> "40.dp" */
+function dimensionToKotlin(value) {
+ const num = parseDirectValue(value)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ return `${formatted}.dp`
+ }
+ // CSS-specific values that don't map to a single dp (percentages, multi-value shorthand)
+ return null
+}
+
+/** Convert a literal dimension to Kotlin sp. "-0.0625rem" -> "(-1).sp" */
+function dimensionToKotlinSp(value) {
+ const num = parseDirectValue(value)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ if (num < 0) return `(${formatted}).sp`
+ return `${formatted}.sp`
+ }
+ return null
+}
+
+// ---------------------------------------------------------------------------
+// Reference chain resolution (for following refs through layout -> primitives)
+// ---------------------------------------------------------------------------
+
+/**
+ * Follow the full reference chain to get a numeric dp value.
+ * {fontSize.textBase} -> layout['fontSize']['textBase'].value = "{size.size16}"
+ * -> primitives['size']['size16'].value = "1rem" -> 16
+ */
+function resolveToNumericDp(ref, context) {
+ if (typeof ref !== 'string') return parseDirectValue(ref)
+ if (!ref.startsWith('{')) return parseDirectValue(ref)
+
+ const match = ref.match(/^\{(.+)\}$/)
+ if (!match) return parseDirectValue(ref)
+
+ const parts = match[1].split('.')
+
+ // Try layout JSON first
+ let current = context.layout
+ for (const part of parts) {
+ if (current && typeof current === 'object' && part in current) {
+ current = current[part]
+ } else {
+ current = null
+ break
+ }
+ }
+
+ if (current && typeof current === 'object' && 'value' in current) {
+ const val = current.value
+ if (typeof val === 'string' && val.startsWith('{')) {
+ return resolveToNumericDp(val, context)
+ }
+ return parseDirectValue(val)
+ }
+
+ // Try primitives
+ current = context.primitives
+ for (const part of parts) {
+ if (current && typeof current === 'object' && part in current) {
+ current = current[part]
+ } else {
+ return null
+ }
+ }
+
+ if (current && typeof current === 'object' && 'value' in current) {
+ const val = current.value
+ if (typeof val === 'string' && val.startsWith('{')) {
+ return resolveToNumericDp(val, context)
+ }
+ return parseDirectValue(val)
+ }
+
+ return null
+}
+
+/**
+ * Resolve a fontSize reference to an sp value for TextStyle/Compose.
+ * {fontSize.textBase} -> 16.sp
+ */
+function resolveToSpValue(ref, context) {
+ const num = resolveToNumericDp(ref, context)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ return { code: `${formatted}.sp`, isComposable: false, type: 'sp' }
+ }
+ return { code: `/* TODO: resolve ${ref} to sp */ 0.sp`, isComposable: false, type: 'sp' }
+}
+
+/**
+ * Resolve a lineHeight for TextStyle context.
+ * Percentage "150%" -> 1.5.em
+ * Reference to size {size.size24} -> 24.sp
+ * Literal dimension "1.125rem" -> 18.sp
+ */
+function resolveLineHeightForTextStyle(ref, context) {
+ // Direct percentage
+ if (typeof ref === 'string' && !ref.startsWith('{')) {
+ const percentMatch = ref.match(/^([\d.]+)%$/)
+ if (percentMatch) {
+ return { code: `${parseFloat(percentMatch[1]) / 100}.em`, isComposable: false, type: 'em' }
+ }
+ // Numeric ratio
+ if (/^[\d.]+$/.test(ref)) {
+ return { code: `${parseFloat(ref)}.em`, isComposable: false, type: 'em' }
+ }
+ // Dimension literal
+ const num = parseDirectValue(ref)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ return { code: `${formatted}.sp`, isComposable: false, type: 'sp' }
+ }
+ }
+
+ // Reference
+ if (typeof ref === 'string' && ref.startsWith('{')) {
+ const match = ref.match(/^\{lineHeight\.(.+)\}$/)
+ if (match) {
+ const parts = match[1].split('.')
+ // Look up in layout JSON
+ let current = context.layout.lineHeight
+ for (const part of parts) {
+ if (current && typeof current === 'object' && part in current) {
+ current = current[part]
+ } else {
+ current = null
+ break
+ }
+ }
+
+ if (current && typeof current === 'object' && 'value' in current) {
+ const val = current.value
+ // Percentage
+ const percentMatch = typeof val === 'string' && val.match(/^([\d.]+)%$/)
+ if (percentMatch) {
+ return { code: `${parseFloat(percentMatch[1]) / 100}.em`, isComposable: false, type: 'em' }
+ }
+ // Numeric ratio
+ if (typeof val === 'string' && /^[\d.]+$/.test(val)) {
+ return { code: `${parseFloat(val)}.em`, isComposable: false, type: 'em' }
+ }
+ // Reference to a size (absolute lineHeight)
+ if (typeof val === 'string' && val.startsWith('{')) {
+ const num = resolveToNumericDp(val, context)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ return { code: `${formatted}.sp`, isComposable: false, type: 'sp' }
+ }
+ }
+ // Dimension literal
+ const num = parseDirectValue(val)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ return { code: `${formatted}.sp`, isComposable: false, type: 'sp' }
+ }
+ }
+ }
+
+ // Fallback: try generic resolution
+ const num = resolveToNumericDp(ref, context)
+ if (num !== null) {
+ const formatted = Number.isInteger(num) ? num.toString() : num.toString()
+ return { code: `${formatted}.sp`, isComposable: false, type: 'sp' }
+ }
+ }
+
+ return { code: `/* TODO: resolve lineHeight "${ref}" */ TextUnit.Unspecified`, isComposable: false, type: 'unknown' }
+}
+
+// ---------------------------------------------------------------------------
+// Semantic reference resolver
+// ---------------------------------------------------------------------------
+
+/**
+ * Resolve a layout sizes reference, handling singleton nesting.
+ * 1 segment after category: singleton -> Object.name (e.g., Spacing.SpaceSm.spaceSm)
+ * 2+ segments: multi-value -> Object.prop (e.g., Spacing.Gap.sections)
+ */
+function resolveLayoutSizesRef(topLevel, subParts) {
+ if (subParts.length === 0) {
+ return { code: `/* TODO: empty ref for ${topLevel} */`, isComposable: false, type: 'dp' }
+ }
+
+ if (subParts.length === 1) {
+ // Singleton pattern
+ const name = toCamelCase(subParts[0])
+ const objName = capitalize(name)
+ return { code: `InstUILayoutSizes.${topLevel}.${objName}.${name}`, isComposable: false, type: 'dp' }
+ }
+
+ // Multi-value: first part is object, rest join as property
+ const objName = capitalize(toCamelCase(subParts[0]))
+ const propParts = subParts.slice(1).map(p => toCamelCase(p))
+ const propName = propParts.join('_')
+ return { code: `InstUILayoutSizes.${topLevel}.${objName}.${propName}`, isComposable: false, type: 'dp' }
+}
+
+/**
+ * Resolve a layout typography reference, handling singleton nesting.
+ */
+function resolveLayoutTypographyRef(topLevel, subParts) {
+ if (subParts.length === 0) {
+ return { code: `/* TODO: empty ref for ${topLevel} */`, isComposable: false, type: 'other' }
+ }
+
+ const typeMap = {
+ FontFamily: 'fontFamily',
+ FontWeight: 'fontWeight',
+ FontSize: 'dp',
+ LineHeight: 'lineHeightMixed'
+ }
+
+ if (subParts.length === 1) {
+ const name = toCamelCase(subParts[0])
+ const objName = capitalize(name)
+ return {
+ code: `InstUILayoutTypography.${topLevel}.${objName}.${name}`,
+ isComposable: false,
+ type: typeMap[topLevel] || 'other'
+ }
+ }
+
+ const objName = capitalize(toCamelCase(subParts[0]))
+ const propParts = subParts.slice(1).map(p => toCamelCase(p))
+ const propName = propParts.join('_')
+ return {
+ code: `InstUILayoutTypography.${topLevel}.${objName}.${propName}`,
+ isComposable: false,
+ type: typeMap[topLevel] || 'other'
+ }
+}
+
+/**
+ * Main resolver: map a component token reference to Kotlin code.
+ *
+ * @param {string} ref - Reference like "{color.text.base}" or "{spacing.spaceSm}"
+ * @param {Object} context - { layout, primitives }
+ * @param {string|null} targetContext - 'textStyle' for typography composite fields
+ * @returns {{ code: string, isComposable: boolean, type: string }|null}
+ */
+function resolveComponentReference(ref, context, targetContext) {
+ if (!ref || typeof ref !== 'string' || !ref.startsWith('{')) return null
+
+ const match = ref.match(/^\{(.+)\}$/)
+ if (!match) return null
+
+ const parts = match[1].split('.')
+
+ // --- Color references -> @Composable get() ---
+ if (parts[0] === 'color') {
+ const colorParts = parts.slice(1) // remove 'color'
+ if (colorParts.length === 0) return null
+
+ // Standard semantic categories are: background, text, stroke, icon
+ const semanticCategories = ['background', 'text', 'stroke', 'icon']
+ const firstPart = colorParts[0].toLowerCase()
+
+ if (semanticCategories.includes(firstPart)) {
+ // Standard semantic color path
+ const propName = toCamelCase(colorParts[colorParts.length - 1])
+ const objectPath = colorParts.slice(0, -1).map(p => capitalize(toCamelCase(p)))
+ const kotlinPath = objectPath.length > 0
+ ? `InstUISemanticColors.${objectPath.join('.')}.${propName}()`
+ : `InstUISemanticColors.${propName}()`
+ return { code: kotlinPath, isComposable: true, type: 'color' }
+ }
+
+ // Non-standard color (e.g., {color.transparentColor}, {color.white})
+ // These are standalone colors at the semantic level referencing primitives.
+ // Map directly to the primitive color object.
+ const primitiveName = toCamelCase(colorParts[colorParts.length - 1])
+
+ // Check if it's a known primitive standalone color
+ if (context.primitives && context.primitives.color) {
+ // Try to find it in the primitives
+ let current = context.primitives.color
+ for (const part of colorParts) {
+ if (current && typeof current === 'object' && part in current) {
+ current = current[part]
+ } else {
+ current = null
+ break
+ }
+ }
+ if (current && typeof current === 'object' && 'value' in current) {
+ // It's a primitive color — not composable
+ return { code: `InstUIColors.${primitiveName}`, isComposable: false, type: 'primitiveColor' }
+ }
+ }
+
+ // Fallback: try resolving through the semantic chain
+ // {color.transparentColor} -> semantic has value={color.transparent} -> primitive
+ if (context.semanticLightColors) {
+ let current = context.semanticLightColors.color || context.semanticLightColors
+ for (const part of colorParts) {
+ if (current && typeof current === 'object' && part in current) {
+ current = current[part]
+ } else {
+ current = null
+ break
+ }
+ }
+ if (current && typeof current === 'object' && 'value' in current) {
+ const val = current.value
+ if (typeof val === 'string' && val.startsWith('{color.')) {
+ // Recurse to resolve the inner reference
+ return resolveComponentReference(val, context, targetContext)
+ }
+ }
+ }
+
+ // Last resort: assume it's a primitive color
+ return { code: `InstUIColors.${primitiveName}`, isComposable: false, type: 'primitiveColor' }
+ }
+
+ // --- FontSize references -> always sp for Compose correctness ---
+ if (parts[0] === 'fontSize') {
+ return resolveToSpValue(ref, context)
+ }
+
+ // --- LineHeight references ---
+ if (parts[0] === 'lineHeight') {
+ if (targetContext === 'textStyle') {
+ return resolveLineHeightForTextStyle(ref, context)
+ }
+ return resolveLayoutTypographyRef('LineHeight', parts.slice(1))
+ }
+
+ // --- FontFamily references ---
+ if (parts[0] === 'fontFamily') {
+ return resolveLayoutTypographyRef('FontFamily', parts.slice(1))
+ }
+
+ // --- FontWeight references ---
+ if (parts[0] === 'fontWeight') {
+ return resolveLayoutTypographyRef('FontWeight', parts.slice(1))
+ }
+
+ // --- Spacing references ---
+ if (parts[0] === 'spacing') {
+ return resolveLayoutSizesRef('Spacing', parts.slice(1))
+ }
+
+ // --- BorderRadius references ---
+ if (parts[0] === 'borderRadius') {
+ return resolveLayoutSizesRef('BorderRadius', parts.slice(1))
+ }
+
+ // --- BorderWidth references ---
+ if (parts[0] === 'borderWidth') {
+ return resolveLayoutSizesRef('BorderWidth', parts.slice(1))
+ }
+
+ // --- Size references ---
+ if (parts[0] === 'size') {
+ // Check if it's a primitive size reference like {size.size16}
+ if (parts.length === 2 && /^size\d/.test(parts[1])) {
+ return { code: `InstUISizes.${toCamelCase(parts[1])}`, isComposable: false, type: 'dp' }
+ }
+ return resolveLayoutSizesRef('Size', parts.slice(1))
+ }
+
+ // --- Opacity references ---
+ if (parts[0] === 'opacity') {
+ const propName = toCamelCase(parts.slice(1).join('.') || parts[0])
+ return { code: `InstUILayoutConfig.Opacity.${propName}`, isComposable: false, type: 'opacity' }
+ }
+
+ // --- DropShadow references (inside boxShadow composites) ---
+ if (parts[0] === 'dropShadow') {
+ return { code: `/* ${ref} */`, isComposable: false, type: 'dropShadow' }
+ }
+
+ console.warn(` Warning: unknown reference ${ref}`)
+ return { code: `/* TODO: ${ref} */`, isComposable: false, type: 'unknown' }
+}
+
+// ---------------------------------------------------------------------------
+// Token parser
+// ---------------------------------------------------------------------------
+
+/**
+ * Parse all tokens from a component JSON, handling single vs multiple top-level keys.
+ * Returns flat array of { name, value, type, path, description? } tokens.
+ */
+function parseComponentTokens(json) {
+ const topKeys = Object.keys(json)
+ const tokens = []
+
+ // Single top-level key: flatten (skip the wrapper)
+ // Multiple keys: keep as nested objects
+ const root = topKeys.length === 1 ? json[topKeys[0]] : json
+
+ function processObject(obj, path) {
+ for (const [key, value] of Object.entries(obj)) {
+ if (value && typeof value === 'object') {
+ if ('value' in value && 'type' in value) {
+ tokens.push({
+ name: toCamelCase(key),
+ value: value.value,
+ type: value.type,
+ path: [...path, key],
+ description: value.description || null
+ })
+ } else if (!('value' in value)) {
+ // Nested object — recurse
+ processObject(value, [...path, key])
+ }
+ }
+ }
+ }
+
+ processObject(root, [])
+ return tokens
+}
+
+// ---------------------------------------------------------------------------
+// Kotlin code generators
+// ---------------------------------------------------------------------------
+
+/**
+ * Convert a literal (non-reference) token value to Kotlin code.
+ */
+function literalToKotlin(value, type) {
+ if (type === 'boolean') {
+ return value === true || value === 'true' ? 'true' : 'false'
+ }
+
+ if (type === 'opacity') {
+ return `${parseFloat(value)}f`
+ }
+
+ if (['dimension', 'sizing', 'spacing', 'borderRadius', 'borderWidth'].includes(type)) {
+ return dimensionToKotlin(value)
+ }
+
+ if (type === 'fontSizes') {
+ return dimensionToKotlinSp(value)
+ }
+
+ if (type === 'fontWeights') {
+ const num = parseInt(value)
+ if (!isNaN(num)) return `FontWeight(${num})`
+ // Non-numeric fontWeight (e.g., "currentColor" mislabeled in source JSON)
+ return null
+ }
+
+ if (type === 'lineHeights') {
+ if (typeof value === 'string') {
+ const percentMatch = value.match(/^([\d.]+)%$/)
+ if (percentMatch) return `${parseFloat(percentMatch[1]) / 100}f`
+ }
+ return `${parseFloat(value)}f`
+ }
+
+ if (type === 'letterSpacing') {
+ return dimensionToKotlinSp(value)
+ }
+
+ if (type === 'paragraphSpacing') {
+ return `/* "${value}" — not directly usable in Compose */ 0.dp`
+ }
+
+ if (type === 'text') {
+ // Map CSS border-style values to Compose BorderStyle enum
+ const borderStyleMap = { solid: 'BorderStyle.Solid', dashed: 'BorderStyle.Dashed', dotted: 'BorderStyle.Dotted' }
+ const mapped = borderStyleMap[value.toLowerCase()]
+ if (mapped) return mapped
+ return `"${value}"`
+ }
+
+ if (type === 'other') {
+ // CSS keywords and multi-value shorthands don't map to Compose
+ const cssKeywords = ['currentcolor', 'inherit', 'initial', 'unset', 'auto', 'none']
+ if (cssKeywords.includes(value.toLowerCase()) || /\s/.test(value)) {
+ return null
+ }
+ return `"${value}"`
+ }
+
+ // Fallback
+ if (typeof value === 'string') return `"${value}"`
+ return `${value}`
+}
+
+/**
+ * Generate Kotlin code for a single token.
+ * Returns { line: string, isComposable: boolean, imports: Set }
+ */
+function generateTokenKotlin(token, context, indent) {
+ const imports = new Set()
+
+ // --- Typography composite ---
+ if (token.type === 'typography' && typeof token.value === 'object') {
+ return generateTypographyToken(token, context, indent, imports)
+ }
+
+ // --- BoxShadow composite ---
+ if (token.type === 'boxShadow') {
+ return generateBoxShadowToken(token, indent, imports)
+ }
+
+ // --- Border composite ---
+ if (token.type === 'border' && typeof token.value === 'object') {
+ return generateBorderToken(token, indent, imports)
+ }
+
+ const value = token.value
+
+ // --- Reference ---
+ if (typeof value === 'string' && value.startsWith('{')) {
+ const resolved = resolveComponentReference(value, context, null)
+ if (resolved) {
+ if (resolved.isComposable) {
+ imports.add('androidx.compose.runtime.Composable')
+ imports.add('com.instructure.instui.token.semantic.InstUISemanticColors')
+ const descComment = token.description ? `${indent}/** ${token.description} */\n` : ''
+ return {
+ line: `${descComment}${indent}val ${token.name} @Composable get() = ${resolved.code}`,
+ isComposable: true,
+ imports
+ }
+ }
+ addImportsForResolvedType(resolved, imports)
+ const descComment = token.description ? `${indent}/** ${token.description} */\n` : ''
+ return {
+ line: `${descComment}${indent}val ${token.name} = ${resolved.code}`,
+ isComposable: false,
+ imports
+ }
+ }
+ }
+
+ // --- Literal value ---
+ const kotlinLiteral = literalToKotlin(value, token.type)
+ if (kotlinLiteral === null) {
+ // CSS-specific value that doesn't map to Compose
+ return {
+ line: `${indent}// val ${token.name}: "${value}" (CSS-specific, not directly usable in Compose)`,
+ isComposable: false,
+ imports
+ }
+ }
+ addImportsForLiteralType(token.type, imports)
+ const descComment = token.description ? `${indent}/** ${token.description} */\n` : ''
+ return {
+ line: `${descComment}${indent}val ${token.name} = ${kotlinLiteral}`,
+ isComposable: false,
+ imports
+ }
+}
+
+/**
+ * Generate a TextStyle from a typography composite token.
+ */
+function generateTypographyToken(token, context, indent, imports) {
+ imports.add('androidx.compose.ui.text.TextStyle')
+
+ const val = token.value
+ const fields = []
+
+ // fontFamily
+ if (val.fontFamily) {
+ if (typeof val.fontFamily === 'string' && val.fontFamily.startsWith('{')) {
+ const resolved = resolveComponentReference(val.fontFamily, context, null)
+ if (resolved) {
+ addImportsForResolvedType(resolved, imports)
+ fields.push(`${indent} fontFamily = ${resolved.code}`)
+ }
+ }
+ }
+
+ // fontWeight
+ if (val.fontWeight) {
+ if (typeof val.fontWeight === 'string' && val.fontWeight.startsWith('{')) {
+ const resolved = resolveComponentReference(val.fontWeight, context, null)
+ if (resolved) {
+ addImportsForResolvedType(resolved, imports)
+ fields.push(`${indent} fontWeight = ${resolved.code}`)
+ }
+ } else if (typeof val.fontWeight === 'string' && /^\d+$/.test(val.fontWeight)) {
+ imports.add('androidx.compose.ui.text.font.FontWeight')
+ fields.push(`${indent} fontWeight = FontWeight(${parseInt(val.fontWeight)})`)
+ } else {
+ // Non-standard weight like "Medium Italic"
+ fields.push(`${indent} // fontWeight: "${val.fontWeight}" — not directly mappable`)
+ }
+ }
+
+ // fontSize -> must be sp
+ if (val.fontSize) {
+ if (typeof val.fontSize === 'string' && val.fontSize.startsWith('{')) {
+ const resolved = resolveToSpValue(val.fontSize, context)
+ imports.add('androidx.compose.ui.unit.sp')
+ fields.push(`${indent} fontSize = ${resolved.code}`)
+ } else {
+ // Literal like "2rem"
+ imports.add('androidx.compose.ui.unit.sp')
+ fields.push(`${indent} fontSize = ${dimensionToKotlinSp(val.fontSize)}`)
+ }
+ }
+
+ // lineHeight -> sp or em
+ if (val.lineHeight) {
+ const resolved = resolveLineHeightForTextStyle(val.lineHeight, context)
+ if (resolved.type === 'sp') imports.add('androidx.compose.ui.unit.sp')
+ if (resolved.type === 'em') imports.add('androidx.compose.ui.unit.em')
+ fields.push(`${indent} lineHeight = ${resolved.code}`)
+ }
+
+ // letterSpacing (rare in composites but handle it)
+ if (val.letterSpacing) {
+ imports.add('androidx.compose.ui.unit.sp')
+ if (typeof val.letterSpacing === 'string' && val.letterSpacing.startsWith('{')) {
+ const resolved = resolveToSpValue(val.letterSpacing, context)
+ fields.push(`${indent} letterSpacing = ${resolved.code}`)
+ } else {
+ fields.push(`${indent} letterSpacing = ${dimensionToKotlinSp(val.letterSpacing)}`)
+ }
+ }
+
+ const descComment = token.description ? `${indent}/** ${token.description} */\n` : ''
+ const textStyleCode = fields.length > 0
+ ? `TextStyle(\n${fields.join(',\n')},\n${indent})`
+ : `TextStyle()`
+
+ return {
+ line: `${descComment}${indent}val ${token.name} = ${textStyleCode}`,
+ isComposable: false,
+ imports
+ }
+}
+
+/**
+ * Generate a documentation comment for a boxShadow composite.
+ */
+function generateBoxShadowToken(token, indent, imports) {
+ const value = token.value
+ const shadows = Array.isArray(value) ? value : [value]
+
+ const shadowLines = shadows.map((shadow, i) => {
+ const parts = []
+ if (shadow.x) parts.push(`x=${shadow.x}`)
+ if (shadow.y) parts.push(`y=${shadow.y}`)
+ if (shadow.blur) parts.push(`blur=${shadow.blur}`)
+ if (shadow.spread) parts.push(`spread=${shadow.spread}`)
+ if (shadow.color) parts.push(`color=${shadow.color}`)
+ if (shadow.type) parts.push(`type=${shadow.type}`)
+ return `${indent} * Shadow ${i + 1}: ${parts.join(', ')}`
+ })
+
+ const line = [
+ `${indent}/**`,
+ `${indent} * Box shadow (not directly representable in Compose).`,
+ ...shadowLines,
+ `${indent} */`,
+ `${indent}// val ${token.name}: BoxShadow — not supported in Compose`
+ ].join('\n')
+
+ return { line, isComposable: false, imports }
+}
+
+/**
+ * Generate a documentation comment for a border composite.
+ * Border composites have { color, width, style } but Compose's BorderStroke
+ * doesn't support dash style, so we document the values.
+ */
+function generateBorderToken(token, indent, imports) {
+ const value = token.value
+ const parts = []
+ if (value.color) parts.push(`color=${value.color}`)
+ if (value.width) parts.push(`width=${value.width}`)
+ if (value.style) parts.push(`style=${value.style}`)
+
+ const line = [
+ `${indent}/**`,
+ `${indent} * Border: ${parts.join(', ')}`,
+ `${indent} * Use BorderStroke for solid borders; dashed borders need custom drawing.`,
+ `${indent} */`,
+ `${indent}// val ${token.name}: Border(${parts.join(', ')})`
+ ].join('\n')
+
+ return { line, isComposable: false, imports }
+}
+
+// ---------------------------------------------------------------------------
+// Import management
+// ---------------------------------------------------------------------------
+
+function addImportsForResolvedType(resolved, imports) {
+ const code = resolved.code
+ if (code.includes('InstUILayoutSizes')) {
+ imports.add('com.instructure.instui.token.semantic.InstUILayoutSizes')
+ }
+ if (code.includes('InstUILayoutTypography')) {
+ imports.add('com.instructure.instui.token.semantic.InstUILayoutTypography')
+ }
+ if (code.includes('InstUILayoutConfig')) {
+ imports.add('com.instructure.instui.token.semantic.InstUILayoutConfig')
+ }
+ if (code.includes('InstUISemanticColors')) {
+ imports.add('com.instructure.instui.token.semantic.InstUISemanticColors')
+ imports.add('androidx.compose.runtime.Composable')
+ }
+ if (code.includes('InstUISizes')) {
+ imports.add('com.instructure.instui.token.primitives.InstUISizes')
+ }
+ if (code.includes('InstUIColors')) {
+ imports.add('com.instructure.instui.token.primitives.InstUIColors')
+ }
+ if (code.includes('.dp')) {
+ imports.add('androidx.compose.ui.unit.dp')
+ }
+ if (code.includes('.sp')) {
+ imports.add('androidx.compose.ui.unit.sp')
+ }
+ if (code.includes('.em')) {
+ imports.add('androidx.compose.ui.unit.em')
+ }
+}
+
+function addImportsForLiteralType(type, imports) {
+ if (['dimension', 'sizing', 'spacing', 'borderRadius', 'borderWidth', 'paragraphSpacing'].includes(type)) {
+ imports.add('androidx.compose.ui.unit.dp')
+ }
+ if (type === 'fontSizes' || type === 'letterSpacing') {
+ imports.add('androidx.compose.ui.unit.sp')
+ }
+ if (type === 'fontWeights') {
+ imports.add('androidx.compose.ui.text.font.FontWeight')
+ }
+ if (type === 'text') {
+ imports.add('com.instructure.instui.BorderStyle')
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Tree builder and recursive Kotlin generator
+// ---------------------------------------------------------------------------
+
+/**
+ * Build a nested tree from flat token paths.
+ */
+function buildTokenTree(tokens) {
+ const root = { _tokens: [], _children: {} }
+
+ tokens.forEach(token => {
+ if (token.path.length <= 1) {
+ root._tokens.push(token)
+ } else {
+ let current = root
+ for (let i = 0; i < token.path.length - 1; i++) {
+ const key = token.path[i]
+ if (!current._children[key]) {
+ current._children[key] = { _tokens: [], _children: {} }
+ }
+ current = current._children[key]
+ }
+ current._tokens.push({
+ ...token,
+ name: toCamelCase(token.path[token.path.length - 1])
+ })
+ }
+ })
+
+ return root
+}
+
+/**
+ * Recursively generate Kotlin code from a token tree node.
+ */
+function generateFromTree(node, context, indent) {
+ const lines = []
+ const allImports = new Set()
+ let hasComposable = false
+
+ // Generate direct tokens at this level
+ node._tokens.forEach(token => {
+ const result = generateTokenKotlin(token, context, indent)
+ lines.push(result.line)
+ if (result.isComposable) hasComposable = true
+ result.imports.forEach(imp => allImports.add(imp))
+ })
+
+ // Generate nested objects
+ const sortedChildren = Object.keys(node._children).sort()
+ sortedChildren.forEach(key => {
+ if (lines.length > 0) lines.push('')
+ const objectName = capitalize(toCamelCase(key))
+ lines.push(`${indent}object ${objectName} {`)
+
+ const childResult = generateFromTree(node._children[key], context, indent + ' ')
+ lines.push(...childResult.lines)
+ if (childResult.hasComposable) hasComposable = true
+ childResult.imports.forEach(imp => allImports.add(imp))
+
+ lines.push(`${indent}}`)
+ })
+
+ return { lines, imports: allImports, hasComposable }
+}
+
+// ---------------------------------------------------------------------------
+// Full file generator
+// ---------------------------------------------------------------------------
+
+function generateComponentFile(objectName, tokens, context) {
+ const tree = buildTokenTree(tokens)
+ const result = generateFromTree(tree, context, ' ')
+
+ // Sort imports
+ const sortedImports = Array.from(result.imports).sort()
+ const importBlock = sortedImports.length > 0
+ ? sortedImports.map(imp => `import ${imp}`).join('\n') + '\n'
+ : ''
+
+ const componentLabel = objectName.replace('InstUI', '')
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+${importBlock}
+/**
+ * InstUI ${componentLabel} component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object ${objectName} {
+${result.lines.join('\n')}
+}
+`
+}
+
+// ---------------------------------------------------------------------------
+// Style Dictionary integration
+// ---------------------------------------------------------------------------
+
+/**
+ * Build the Style Dictionary configuration for component tokens.
+ *
+ * @param {Object} components - Map of filename -> parsed JSON
+ * @param {Object} layout - Semantic layout JSON (for reference chain resolution)
+ * @param {Object} primitives - Primitives JSON (for reference chain resolution)
+ * @param {Object} semanticLightColors - Semantic light color JSON (for non-standard color resolution)
+ */
+module.exports = function(components, layout, primitives, semanticLightColors) {
+ return (async () => {
+ const StyleDictionary = (await import('style-dictionary')).default
+
+ const context = { layout, primitives, semanticLightColors }
+
+ StyleDictionary.registerFormat({
+ name: 'compose/component',
+ format: function({ dictionary, options }) {
+ const { componentTokens, objectName } = options
+ return generateComponentFile(objectName, componentTokens, context)
+ }
+ })
+
+ // Build one file per component JSON
+ const files = Object.entries(components).map(([filename, json]) => {
+ const { objectName, fileName } = componentNaming(filename)
+ const tokens = parseComponentTokens(json)
+
+ return {
+ destination: fileName,
+ format: 'compose/component',
+ options: {
+ componentTokens: tokens,
+ objectName
+ }
+ }
+ })
+
+ // Style Dictionary requires at least one token
+ const tokens = { _placeholder: { value: 'placeholder', type: 'other' } }
+
+ const sd = new StyleDictionary({
+ tokens,
+ platforms: {
+ compose: {
+ buildPath: BUILD_PATH,
+ files
+ }
+ }
+ })
+
+ return sd
+ })()
+}
\ No newline at end of file
diff --git a/libs/instui/scripts/sd.config.primitives.js b/libs/instui/scripts/sd.config.primitives.js
new file mode 100644
index 0000000000..df03fade90
--- /dev/null
+++ b/libs/instui/scripts/sd.config.primitives.js
@@ -0,0 +1,559 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Style Dictionary configuration for generating Jetpack Compose primitives.
+ *
+ * This file defines custom formatters for each token type:
+ * - Colors: Compose Color objects with hex values (nested by color family)
+ * - Sizes: Dp values (rem * 16 = dp, supports fractional values)
+ * - Font Weights: FontWeight objects
+ * - Font Families: FontFamily objects (requires manual font files)
+ * - Opacities: Float values
+ */
+
+const LICENSE_HEADER = `/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens`
+
+const BUILD_PATH = '../src/main/java/com/instructure/instui/token/primitives/'
+const PACKAGE_NAME = 'com.instructure.instui.token.primitives'
+
+/**
+ * Convert a color string to Compose Color format.
+ * Handles hex (3, 4, 6, 8 char) and rgba() formats.
+ */
+function hexToComposeColor(colorValue) {
+ // Handle rgba() format: rgba(255, 255, 255, 0.1)
+ const rgbaMatch = colorValue.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*([\d.]+))?\s*\)/)
+ if (rgbaMatch) {
+ const r = parseInt(rgbaMatch[1]).toString(16).padStart(2, '0')
+ const g = parseInt(rgbaMatch[2]).toString(16).padStart(2, '0')
+ const b = parseInt(rgbaMatch[3]).toString(16).padStart(2, '0')
+ const a = rgbaMatch[4] !== undefined
+ ? Math.round(parseFloat(rgbaMatch[4]) * 255).toString(16).padStart(2, '0')
+ : 'FF'
+ return `0x${a.toUpperCase()}${r.toUpperCase()}${g.toUpperCase()}${b.toUpperCase()}`
+ }
+
+ // Handle hex format
+ let hex = colorValue.replace(/^#/, '')
+
+ // Expand shorthand (e.g., "FFF" -> "FFFFFF", "FFFA" -> "FFFFFFAA")
+ if (hex.length === 3) {
+ hex = hex.split('').map(c => c + c).join('') + 'FF'
+ } else if (hex.length === 4) {
+ const rgb = hex.slice(0, 3).split('').map(c => c + c).join('')
+ const alpha = hex[3] + hex[3]
+ hex = rgb + alpha
+ } else if (hex.length === 6) {
+ hex = hex + 'FF'
+ }
+ // hex is now 8 characters: RRGGBBAA
+
+ // Compose Color expects AARRGGBB format
+ const alpha = hex.slice(6, 8)
+ const rgb = hex.slice(0, 6)
+ return `0x${alpha.toUpperCase()}${rgb.toUpperCase()}`
+}
+
+/**
+ * Convert rem to dp (1rem = 16dp). Supports fractional values.
+ */
+function remToDp(rem) {
+ const value = parseFloat(rem)
+ const dp = value * 16
+ // Round to avoid floating point issues, but keep up to 2 decimal places
+ return Math.round(dp * 100) / 100
+}
+
+/**
+ * Convert token name to property name.
+ * Preserves underscores for clarity (e.g., size2_5 stays as size2_5).
+ * Only converts hyphens to camelCase.
+ */
+function toPropertyName(name) {
+ return name
+ .replace(/-(.)/g, (_, c) => c.toUpperCase())
+ .replace(/^(.)/, c => c.toLowerCase())
+}
+
+/**
+ * Capitalize first letter for object names
+ */
+function capitalize(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+}
+
+/**
+ * Parse tokens preserving hierarchy for colors.
+ * Returns { colorGroups: { Aurora: [...], Blue: [...] }, standaloneColors: [...], sizes: [...], ... }
+ */
+function parseTokens(obj) {
+ const result = {
+ colorGroups: {}, // Nested color families like Aurora, Blue, etc.
+ standaloneColors: [], // Top-level colors like white, transparent
+ sizes: [],
+ fontWeights: [],
+ fontFamilies: [],
+ opacities: []
+ }
+
+ function processObject(obj, path = []) {
+ for (const [key, value] of Object.entries(obj)) {
+ if (value && typeof value === 'object') {
+ if ('value' in value && 'type' in value) {
+ // This is a token
+ const token = {
+ name: toPropertyName(key),
+ value: value.value,
+ type: value.type,
+ path: [...path, key]
+ }
+
+ if (value.type === 'color') {
+ // Check if it's in a color family (path like ['color', 'aurora', 'aurora10'])
+ if (path.length >= 2 && path[0] === 'color') {
+ const family = capitalize(path[1])
+ if (!result.colorGroups[family]) {
+ result.colorGroups[family] = []
+ }
+ result.colorGroups[family].push(token)
+ } else {
+ // Standalone color (like 'white', 'transparent')
+ result.standaloneColors.push(token)
+ }
+ } else if (value.type === 'dimension') {
+ result.sizes.push(token)
+ } else if (value.type === 'fontWeights') {
+ result.fontWeights.push(token)
+ } else if (value.type === 'fontFamilies') {
+ result.fontFamilies.push(token)
+ } else if (value.type === 'opacity') {
+ result.opacities.push(token)
+ }
+ } else {
+ // Nested object - recurse
+ processObject(value, [...path, key])
+ }
+ }
+ }
+ }
+
+ processObject(obj)
+ return result
+}
+
+/**
+ * Flatten tokens for Style Dictionary (it needs flat structure)
+ */
+function flattenTokens(parsedTokens) {
+ const tokens = {}
+
+ // Add all colors (both grouped and standalone)
+ for (const [family, colorTokens] of Object.entries(parsedTokens.colorGroups)) {
+ colorTokens.forEach(token => {
+ const flatName = `color_${family}_${token.name}`
+ tokens[flatName] = {
+ value: token.value,
+ type: token.type,
+ family: family,
+ originalName: token.name
+ }
+ })
+ }
+
+ parsedTokens.standaloneColors.forEach(token => {
+ tokens[`color_standalone_${token.name}`] = {
+ value: token.value,
+ type: token.type,
+ family: null,
+ originalName: token.name
+ }
+ })
+
+ // Add sizes
+ parsedTokens.sizes.forEach(token => {
+ tokens[`size_${token.name}`] = {
+ value: token.value,
+ type: token.type,
+ originalName: token.name
+ }
+ })
+
+ // Add font weights
+ parsedTokens.fontWeights.forEach(token => {
+ tokens[`fontWeight_${token.name}`] = {
+ value: token.value,
+ type: token.type,
+ originalName: token.name
+ }
+ })
+
+ // Add font families
+ parsedTokens.fontFamilies.forEach(token => {
+ tokens[`fontFamily_${token.name}`] = {
+ value: token.value,
+ type: token.type,
+ originalName: token.name
+ }
+ })
+
+ // Add opacities
+ parsedTokens.opacities.forEach(token => {
+ tokens[`opacity_${token.name}`] = {
+ value: token.value,
+ type: token.type,
+ originalName: token.name
+ }
+ })
+
+ return tokens
+}
+
+// Custom format functions
+const formats = {
+ 'compose/colors': function({ dictionary }) {
+ const tokens = dictionary.allTokens.filter(t => t.type === 'color')
+
+ // Group by family
+ const families = {}
+ const standalone = []
+
+ tokens.forEach(token => {
+ if (token.family) {
+ if (!families[token.family]) {
+ families[token.family] = []
+ }
+ families[token.family].push(token)
+ } else {
+ standalone.push(token)
+ }
+ })
+
+ // Sort families alphabetically
+ const sortedFamilyNames = Object.keys(families).sort()
+
+ // Generate standalone colors
+ const standaloneLines = standalone
+ .sort((a, b) => a.originalName.localeCompare(b.originalName))
+ .map(token => {
+ const colorValue = hexToComposeColor(token.value)
+ return ` val ${token.originalName} = Color(${colorValue})`
+ })
+
+ // Generate nested objects for each family
+ const familyObjects = sortedFamilyNames.map(family => {
+ const colorTokens = families[family]
+ .sort((a, b) => {
+ // Sort by numeric suffix
+ const numA = parseInt(a.originalName.replace(/\D/g, '')) || 0
+ const numB = parseInt(b.originalName.replace(/\D/g, '')) || 0
+ return numA - numB
+ })
+
+ const colorLines = colorTokens.map(token => {
+ const colorValue = hexToComposeColor(token.value)
+ return ` val ${token.originalName} = Color(${colorValue})`
+ })
+
+ return ` object ${family} {
+${colorLines.join('\n')}
+ }`
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.graphics.Color
+
+/**
+ * InstUI Color Primitives.
+ *
+ * These are the raw color values from the InstUI design system.
+ * Colors are organized by family (Aurora, Blue, Grey, etc.).
+ *
+ * Usage: InstUIColors.Blue.blue50
+ */
+object InstUIColors {
+ // Standalone colors
+${standaloneLines.join('\n')}
+
+ // Color families
+${familyObjects.join('\n\n')}
+}
+`
+ },
+
+ 'compose/sizes': function({ dictionary }) {
+ const tokens = dictionary.allTokens
+ .filter(t => t.type === 'dimension')
+ .sort((a, b) => {
+ // Sort by the actual dp value
+ const dpA = remToDp(a.value)
+ const dpB = remToDp(b.value)
+ return dpA - dpB
+ })
+
+ const lines = tokens.map(token => {
+ const dpValue = remToDp(token.value)
+ // Format the dp value - use integer if whole number, otherwise keep decimals
+ const dpStr = Number.isInteger(dpValue) ? dpValue.toString() : dpValue.toString()
+ return ` val ${token.originalName} = ${dpStr}.dp`
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+/**
+ * InstUI Size Primitives.
+ *
+ * Spacing and sizing values converted from rem to dp (1rem = 16dp).
+ * Fractional values are preserved (e.g., size2_5 = 2.5.dp).
+ */
+object InstUISizes {
+${lines.join('\n')}
+}
+`
+ },
+
+ 'compose/fontWeights': function({ dictionary }) {
+ const tokens = dictionary.allTokens
+ .filter(t => t.type === 'fontWeights')
+ .sort((a, b) => parseInt(a.value) - parseInt(b.value))
+
+ const lines = tokens.map(token => {
+ return ` val ${token.originalName} = FontWeight(${token.value})`
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.text.font.FontWeight
+
+/**
+ * InstUI Font Weight Primitives.
+ *
+ * Standard font weight values (100-900).
+ * Use these for consistent typography across the app.
+ */
+object InstUIFontWeights {
+${lines.join('\n')}
+}
+`
+ },
+
+ 'compose/fontFamilies': function({ dictionary }) {
+ const tokens = dictionary.allTokens
+ .filter(t => t.type === 'fontFamilies')
+ .sort((a, b) => a.originalName.localeCompare(b.originalName))
+
+ // All standard font weights
+ const allFontWeights = [
+ { name: 'thin', weight: 'FontWeight.Thin', suffix: 'thin' },
+ { name: 'extralight', weight: 'FontWeight.ExtraLight', suffix: 'extralight' },
+ { name: 'light', weight: 'FontWeight.Light', suffix: 'light' },
+ { name: 'regular', weight: 'FontWeight.Normal', suffix: 'regular' },
+ { name: 'medium', weight: 'FontWeight.Medium', suffix: 'medium' },
+ { name: 'semibold', weight: 'FontWeight.SemiBold', suffix: 'semibold' },
+ { name: 'bold', weight: 'FontWeight.Bold', suffix: 'bold' },
+ { name: 'extrabold', weight: 'FontWeight.ExtraBold', suffix: 'extrabold' },
+ { name: 'black', weight: 'FontWeight.Black', suffix: 'black' },
+ ]
+
+ // Available weights per font family (based on actual font files available)
+ // Fonts not listed here will use all weights
+ const fontWeightsPerFamily = {
+ 'atkinson_hyperlegible_next': ['extralight', 'light', 'regular', 'medium', 'semibold', 'bold', 'extrabold'],
+ 'inclusive_sans': ['light', 'regular', 'medium', 'semibold', 'bold'],
+ 'lato': ['thin', 'light', 'regular', 'bold', 'black'],
+ }
+
+ const lines = tokens.map(token => {
+ // Extract primary font name from CSS fallback stack
+ const primaryFont = token.value.split(',')[0].trim().replace(/"/g, '')
+ const isMonospace = token.value.toLowerCase().includes('monospace')
+
+ if (isMonospace) {
+ return ` /**
+ * Monospace font.
+ * CSS: ${token.value}
+ * Uses system monospace font on Android.
+ */
+ val ${token.originalName} = FontFamily.Monospace`
+ }
+
+ // Generate resource name from primary font
+ const resourceName = primaryFont.toLowerCase().replace(/\s+/g, '_')
+
+ // Get available weights for this font family
+ const availableWeights = fontWeightsPerFamily[resourceName]
+ const fontWeights = availableWeights
+ ? allFontWeights.filter(fw => availableWeights.includes(fw.suffix))
+ : allFontWeights
+
+ // Generate font entries for available weights
+ const fontEntries = fontWeights.map(fw =>
+ ` Font(R.font.${resourceName}_${fw.suffix}, weight = ${fw.weight})`
+ ).join(',\n')
+
+ // Generate expected file list
+ const expectedFiles = fontWeights.map(fw => `${resourceName}_${fw.suffix}.ttf`).join(', ')
+
+ return ` /**
+ * ${primaryFont} typeface.
+ * CSS: ${token.value}
+ *
+ * Note: Font files must be added to res/font/ directory.
+ * Expected: ${expectedFiles}
+ */
+ val ${token.originalName} = FontFamily(
+${fontEntries},
+ )`
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import com.instructure.instui.R
+
+/**
+ * InstUI Font Family Primitives.
+ *
+ * Font families from the InstUI design system.
+ *
+ * IMPORTANT: Font files must be manually added to res/font/ directory.
+ * The generator creates references to font resources that must exist.
+ *
+ * If a requested font weight is not available, Android will use the
+ * closest available weight (e.g., requesting 200 with only 400 available
+ * will use 400).
+ */
+object InstUIFontFamilies {
+${lines.join('\n\n')}
+}
+`
+ },
+
+ 'compose/opacities': function({ dictionary }) {
+ const tokens = dictionary.allTokens
+ .filter(t => t.type === 'opacity')
+ .sort((a, b) => parseFloat(a.value) - parseFloat(b.value))
+
+ const lines = tokens.map(token => {
+ const value = parseFloat(token.value)
+ return ` val ${token.originalName} = ${value}f`
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+/**
+ * InstUI Opacity Primitives.
+ *
+ * Standard opacity values for consistent transparency effects.
+ */
+object InstUIOpacities {
+${lines.join('\n')}
+}
+`
+ }
+}
+
+/**
+ * Build the Style Dictionary configuration from downloaded tokens.
+ */
+module.exports = function(primitives) {
+ // Dynamic import for Style Dictionary v4 (ESM)
+ return (async () => {
+ const StyleDictionary = (await import('style-dictionary')).default
+
+ // Parse tokens preserving hierarchy
+ const parsedTokens = parseTokens(primitives)
+
+ // Flatten for Style Dictionary
+ const tokens = flattenTokens(parsedTokens)
+
+ // Register custom formats
+ for (const [name, format] of Object.entries(formats)) {
+ StyleDictionary.registerFormat({ name, format })
+ }
+
+ const sd = new StyleDictionary({
+ tokens: tokens,
+ platforms: {
+ compose: {
+ buildPath: BUILD_PATH,
+ files: [
+ {
+ destination: 'InstUIColors.kt',
+ format: 'compose/colors',
+ filter: token => token.type === 'color'
+ },
+ {
+ destination: 'InstUISizes.kt',
+ format: 'compose/sizes',
+ filter: token => token.type === 'dimension'
+ },
+ {
+ destination: 'InstUIFontWeights.kt',
+ format: 'compose/fontWeights',
+ filter: token => token.type === 'fontWeights'
+ },
+ {
+ destination: 'InstUIFontFamilies.kt',
+ format: 'compose/fontFamilies',
+ filter: token => token.type === 'fontFamilies'
+ },
+ {
+ destination: 'InstUIOpacities.kt',
+ format: 'compose/opacities',
+ filter: token => token.type === 'opacity'
+ }
+ ]
+ }
+ }
+ })
+
+ return sd
+ })()
+}
diff --git a/libs/instui/scripts/sd.config.semantic.js b/libs/instui/scripts/sd.config.semantic.js
new file mode 100644
index 0000000000..ef5fe4a677
--- /dev/null
+++ b/libs/instui/scripts/sd.config.semantic.js
@@ -0,0 +1,967 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Style Dictionary configuration for generating Jetpack Compose semantic tokens.
+ *
+ * Semantic tokens reference primitive tokens and provide:
+ * - Theme-aware colors (light/dark) with @Composable accessors
+ * - Layout sizing, typography, and configuration values
+ * - Elevation/shadow values
+ */
+
+const LICENSE_HEADER = `/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens`
+
+const BUILD_PATH = '../src/main/java/com/instructure/instui/token/semantic/'
+const PACKAGE_NAME = 'com.instructure.instui.token.semantic'
+
+/**
+ * Capitalize first letter
+ */
+function capitalize(str) {
+ return str.charAt(0).toUpperCase() + str.slice(1)
+}
+
+/**
+ * Convert kebab-case or snake_case to camelCase
+ */
+function toCamelCase(str) {
+ return str
+ .replace(/[-_](.)/g, (_, c) => c.toUpperCase())
+ .replace(/^(.)/, c => c.toLowerCase())
+}
+
+/**
+ * Convert a token reference like "{color.grey.grey170}" to Kotlin code
+ * Maps to our primitive objects: InstUIColors.Grey.grey170
+ */
+function resolveReference(ref) {
+ if (!ref || typeof ref !== 'string') return null
+
+ // Match {namespace.path.to.value} pattern
+ const match = ref.match(/^\{(.+)\}$/)
+ if (!match) return null
+
+ const parts = match[1].split('.')
+
+ // Handle different reference types
+ if (parts[0] === 'color') {
+ if (parts.length === 2) {
+ // {color.white} -> InstUIColors.white
+ return `InstUIColors.${toCamelCase(parts[1])}`
+ } else if (parts.length >= 3) {
+ // {color.grey.grey170} -> InstUIColors.Grey.grey170
+ const family = capitalize(parts[1])
+ const colorName = toCamelCase(parts[2])
+ return `InstUIColors.${family}.${colorName}`
+ }
+ } else if (parts[0] === 'size') {
+ // {size.size20} -> InstUISizes.size20
+ return `InstUISizes.${toCamelCase(parts[1])}`
+ } else if (parts[0] === 'fontFamily') {
+ // {fontFamily.lato} -> InstUIFontFamilies.lato
+ return `InstUIFontFamilies.${toCamelCase(parts[1])}`
+ } else if (parts[0] === 'fontWeight') {
+ // {fontWeight.semiBold} -> InstUIFontWeights.semiBold
+ return `InstUIFontWeights.${toCamelCase(parts[1])}`
+ } else if (parts[0].startsWith('opacity')) {
+ // {opacity50} -> InstUIOpacities.opacity50
+ return `InstUIOpacities.${toCamelCase(parts[0])}`
+ }
+
+ // Unknown reference type
+ console.warn(`Unknown reference type: ${ref}`)
+ return null
+}
+
+/**
+ * Check if a value is a primitive (not a reference)
+ */
+function isPrimitiveValue(value) {
+ if (typeof value !== 'string') return false
+ return !value.startsWith('{')
+}
+
+/**
+ * Convert a raw value to Kotlin code
+ */
+function valueToKotlin(value, type) {
+ // Font sizes must be sp (not dp) for accessibility scaling
+ if (type === 'fontSizes') {
+ // Reference like {size.size16} -> extract the numeric dp value -> emit as sp
+ const sizeRef = typeof value === 'string' && value.match(/^\{size\.size(\d+(?:_\d+)?)\}$/)
+ if (sizeRef) {
+ const num = parseFloat(sizeRef[1].replace('_', '.'))
+ return `${num}.sp`
+ }
+ // Literal like "1rem" or "14px"
+ const numMatch = typeof value === 'string' && value.match(/^([\d.]+)(rem|px|em)?$/)
+ if (numMatch) {
+ let num = parseFloat(numMatch[1])
+ if (numMatch[2] === 'rem' || numMatch[2] === 'em') num = num * 16
+ num = Math.round(num * 100) / 100
+ return `${num}.sp`
+ }
+ }
+
+ // Check if it's a reference
+ const resolved = resolveReference(value)
+ if (resolved) return resolved
+
+ // Handle primitive values
+ if (type === 'dimension' || type === 'sizing' || type === 'spacing' || type === 'borderRadius' || type === 'borderWidth') {
+ // Could be "20rem", "4px", "999rem", "8em", etc.
+ const numMatch = value.match(/^([\d.]+)(rem|px|em)?$/)
+ if (numMatch) {
+ let num = parseFloat(numMatch[1])
+ const unit = numMatch[2]
+ if (unit === 'rem' || unit === 'em') {
+ num = num * 16 // Convert rem/em to dp
+ }
+ // Round to avoid floating point issues
+ num = Math.round(num * 100) / 100
+ // Handle very large values like 999rem -> just use the number
+ if (num > 10000) {
+ return `${num}.dp` // Large border radius for "pill" shapes
+ }
+ return `${num}.dp`
+ }
+ } else if (type === 'lineHeights') {
+ // Could be "150%" or "1.5"
+ const percentMatch = value.match(/^([\d.]+)%$/)
+ if (percentMatch) {
+ const num = parseFloat(percentMatch[1]) / 100
+ return `${num}f`
+ }
+ return `${parseFloat(value)}f`
+ } else if (type === 'boolean') {
+ return value === 'true' || value === true ? 'true' : 'false'
+ } else if (type === 'opacity') {
+ return `${parseFloat(value)}f`
+ }
+
+ // Return as-is for unknown types
+ return `"${value}"`
+}
+
+/**
+ * Parse color tokens from JSON, preserving hierarchy
+ */
+function parseColorTokens(jsonObj, path = []) {
+ const tokens = []
+
+ // Handle root level - if there's a 'color' key, start from there
+ const colorObj = jsonObj.color || jsonObj
+
+ function processObject(obj, currentPath) {
+ for (const [key, value] of Object.entries(obj)) {
+ if (value && typeof value === 'object') {
+ if ('value' in value && 'type' in value && value.type === 'color') {
+ // This is a color token
+ tokens.push({
+ name: toCamelCase(key),
+ value: value.value,
+ type: value.type,
+ path: ['color', ...currentPath, key]
+ })
+ } else if (!('value' in value)) {
+ // Nested object - recurse (skip if it has a value but wrong type)
+ processObject(value, [...currentPath, key])
+ }
+ }
+ }
+ }
+
+ processObject(colorObj, path)
+ return tokens
+}
+
+/**
+ * Build nested object structure from flat tokens
+ */
+function buildNestedStructure(tokens) {
+ const root = {}
+
+ tokens.forEach(token => {
+ let current = root
+ const pathParts = token.path.slice(0, -1) // All but the last part
+
+ pathParts.forEach(part => {
+ const name = toCamelCase(part)
+ const objName = capitalize(name)
+ if (!current[objName]) {
+ current[objName] = { _children: {}, _tokens: [] }
+ }
+ current = current[objName]._children
+ })
+
+ // Add token to current level
+ const parentPath = token.path.slice(0, -1).map(p => capitalize(toCamelCase(p))).join('.')
+ if (!root._tokensByPath) root._tokensByPath = {}
+ if (!root._tokensByPath[parentPath]) root._tokensByPath[parentPath] = []
+ root._tokensByPath[parentPath].push(token)
+ })
+
+ return root
+}
+
+/**
+ * Generate Kotlin code for Light/Dark theme object
+ */
+function generateThemeObject(themeName, colorTokens, indent = ' ') {
+ const grouped = {}
+
+ // Group tokens by their parent path
+ colorTokens.forEach(token => {
+ const parentPath = token.path.slice(1, -1).map(p => capitalize(toCamelCase(p))).join('.')
+ if (!grouped[parentPath]) grouped[parentPath] = []
+ grouped[parentPath].push(token)
+ })
+
+ // Build nested object structure
+ function buildObject(pathPrefix, currentIndent) {
+ const lines = []
+ const matchingPaths = Object.keys(grouped).filter(p => {
+ if (pathPrefix === '') return !p.includes('.')
+ return p.startsWith(pathPrefix + '.') &&
+ p.substring(pathPrefix.length + 1).split('.').length === 1
+ })
+
+ // Add tokens at this level
+ const directTokens = grouped[pathPrefix] || []
+ directTokens.forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(`${currentIndent}val ${token.name} = ${kotlinValue}`)
+ })
+
+ // Add nested objects
+ matchingPaths.forEach(path => {
+ const objectName = pathPrefix === '' ? path : path.substring(pathPrefix.length + 1)
+ if (objectName.includes('.')) return // Skip deeper nesting for now
+
+ const nestedContent = buildObject(path, currentIndent + ' ')
+ if (nestedContent.length > 0) {
+ if (lines.length > 0) lines.push('')
+ lines.push(`${currentIndent}object ${objectName} {`)
+ lines.push(...nestedContent)
+ lines.push(`${currentIndent}}`)
+ }
+ })
+
+ return lines
+ }
+
+ // Start with top-level categories (Background, Text, Stroke, Icon)
+ const topLevel = ['Background', 'Text', 'Stroke', 'Icon']
+ const lines = []
+
+ topLevel.forEach(category => {
+ const categoryTokens = colorTokens.filter(t =>
+ t.path.length >= 2 && capitalize(toCamelCase(t.path[1])) === category
+ )
+
+ if (categoryTokens.length > 0) {
+ if (lines.length > 0) lines.push('')
+ lines.push(`${indent}object ${category} {`)
+
+ // Generate nested structure for this category
+ const categoryLines = generateCategoryObject(categoryTokens, indent + ' ')
+ lines.push(...categoryLines)
+
+ lines.push(`${indent}}`)
+ }
+ })
+
+ return lines
+}
+
+/**
+ * Generate nested objects for a category (Background, Text, etc.)
+ */
+function generateCategoryObject(tokens, indent) {
+ const lines = []
+ const grouped = {}
+
+ // Group by depth level
+ tokens.forEach(token => {
+ // Path is like ['color', 'background', 'base'] or ['color', 'background', 'interactive', 'action', 'primary', 'base']
+ const relativePath = token.path.slice(2) // Remove 'color' and category
+ const depth = relativePath.length - 1
+
+ if (depth === 0) {
+ // Direct token
+ if (!grouped['_direct']) grouped['_direct'] = []
+ grouped['_direct'].push(token)
+ } else {
+ // Nested token - group by first nesting level
+ const key = capitalize(toCamelCase(relativePath[0]))
+ if (!grouped[key]) grouped[key] = []
+ grouped[key].push({
+ ...token,
+ relativePath: relativePath.slice(1)
+ })
+ }
+ })
+
+ // Add direct tokens first
+ if (grouped['_direct']) {
+ grouped['_direct'].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(`${indent}val ${token.name} = ${kotlinValue}`)
+ })
+ }
+
+ // Add nested objects
+ Object.keys(grouped).filter(k => k !== '_direct').sort().forEach(key => {
+ if (lines.length > 0 && lines[lines.length - 1] !== '') lines.push('')
+ lines.push(`${indent}object ${key} {`)
+
+ const nestedLines = generateNestedTokens(grouped[key], indent + ' ')
+ lines.push(...nestedLines)
+
+ lines.push(`${indent}}`)
+ })
+
+ return lines
+}
+
+/**
+ * Recursively generate nested token structure
+ */
+function generateNestedTokens(tokens, indent) {
+ const lines = []
+ const grouped = {}
+
+ tokens.forEach(token => {
+ const path = token.relativePath || token.path.slice(2)
+
+ if (path.length === 1) {
+ // Direct token at this level
+ if (!grouped['_direct']) grouped['_direct'] = []
+ grouped['_direct'].push(token)
+ } else {
+ // Nested - group by first part
+ const key = capitalize(toCamelCase(path[0]))
+ if (!grouped[key]) grouped[key] = []
+ grouped[key].push({
+ ...token,
+ relativePath: path.slice(1)
+ })
+ }
+ })
+
+ // Add direct tokens
+ if (grouped['_direct']) {
+ grouped['_direct'].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(`${indent}val ${token.name} = ${kotlinValue}`)
+ })
+ }
+
+ // Add nested objects
+ Object.keys(grouped).filter(k => k !== '_direct').sort().forEach(key => {
+ if (lines.length > 0 && lines[lines.length - 1] !== '') lines.push('')
+ lines.push(`${indent}object ${key} {`)
+
+ const nestedLines = generateNestedTokens(grouped[key], indent + ' ')
+ lines.push(...nestedLines)
+
+ lines.push(`${indent}}`)
+ })
+
+ return lines
+}
+
+/**
+ * Generate @Composable accessor functions
+ */
+function generateComposableAccessors(lightTokens, darkTokens, indent = ' ') {
+ const lines = []
+
+ // Build a map of dark tokens by path for easy lookup
+ const darkByPath = {}
+ darkTokens.forEach(t => {
+ darkByPath[t.path.join('.')] = t
+ })
+
+ // Group light tokens by category
+ const categories = ['Background', 'Text', 'Stroke', 'Icon']
+
+ categories.forEach(category => {
+ const categoryTokens = lightTokens.filter(t =>
+ t.path.length >= 2 && capitalize(toCamelCase(t.path[1])) === category
+ )
+
+ if (categoryTokens.length > 0) {
+ if (lines.length > 0) lines.push('')
+ lines.push(`${indent}object ${category} {`)
+
+ const accessorLines = generateCategoryAccessors(categoryTokens, darkByPath, category, indent + ' ')
+ lines.push(...accessorLines)
+
+ lines.push(`${indent}}`)
+ }
+ })
+
+ return lines
+}
+
+/**
+ * Generate accessors for a category
+ */
+function generateCategoryAccessors(tokens, darkByPath, category, indent) {
+ const lines = []
+ const grouped = {}
+
+ tokens.forEach(token => {
+ const relativePath = token.path.slice(2)
+ const depth = relativePath.length - 1
+
+ if (depth === 0) {
+ if (!grouped['_direct']) grouped['_direct'] = []
+ grouped['_direct'].push(token)
+ } else {
+ const key = capitalize(toCamelCase(relativePath[0]))
+ if (!grouped[key]) grouped[key] = []
+ grouped[key].push({
+ ...token,
+ relativePath: relativePath.slice(1)
+ })
+ }
+ })
+
+ // Add direct accessors
+ if (grouped['_direct']) {
+ grouped['_direct'].forEach(token => {
+ const pathStr = token.path.join('.')
+ const darkToken = darkByPath[pathStr]
+ const lightPath = `Light.${category}.${token.name}`
+ const darkPath = darkToken ? `Dark.${category}.${token.name}` : lightPath
+
+ lines.push(`${indent}@Composable`)
+ lines.push(`${indent}fun ${token.name}() = if (isSystemInDarkTheme()) ${darkPath} else ${lightPath}`)
+ })
+ }
+
+ // Add nested objects with accessors
+ Object.keys(grouped).filter(k => k !== '_direct').sort().forEach(key => {
+ if (lines.length > 0) lines.push('')
+ lines.push(`${indent}object ${key} {`)
+
+ const nestedLines = generateNestedAccessors(grouped[key], darkByPath, `${category}.${key}`, indent + ' ')
+ lines.push(...nestedLines)
+
+ lines.push(`${indent}}`)
+ })
+
+ return lines
+}
+
+/**
+ * Recursively generate nested accessors
+ */
+function generateNestedAccessors(tokens, darkByPath, pathPrefix, indent) {
+ const lines = []
+ const grouped = {}
+
+ tokens.forEach(token => {
+ const path = token.relativePath
+
+ if (path.length === 1) {
+ if (!grouped['_direct']) grouped['_direct'] = []
+ grouped['_direct'].push(token)
+ } else {
+ const key = capitalize(toCamelCase(path[0]))
+ if (!grouped[key]) grouped[key] = []
+ grouped[key].push({
+ ...token,
+ relativePath: path.slice(1)
+ })
+ }
+ })
+
+ // Add direct accessors
+ if (grouped['_direct']) {
+ grouped['_direct'].forEach(token => {
+ const pathStr = token.path.join('.')
+ const darkToken = darkByPath[pathStr]
+ const lightPath = `Light.${pathPrefix}.${token.name}`
+ const darkPath = darkToken ? `Dark.${pathPrefix}.${token.name}` : lightPath
+
+ lines.push(`${indent}@Composable`)
+ lines.push(`${indent}fun ${token.name}() = if (isSystemInDarkTheme()) ${darkPath} else ${lightPath}`)
+ })
+ }
+
+ // Add nested objects
+ Object.keys(grouped).filter(k => k !== '_direct').sort().forEach(key => {
+ if (lines.length > 0) lines.push('')
+ lines.push(`${indent}object ${key} {`)
+
+ const nestedLines = generateNestedAccessors(grouped[key], darkByPath, `${pathPrefix}.${key}`, indent + ' ')
+ lines.push(...nestedLines)
+
+ lines.push(`${indent}}`)
+ })
+
+ return lines
+}
+
+/**
+ * Parse elevation/shadow tokens
+ */
+function parseElevationTokens(dropShadowObj) {
+ const elevations = {}
+
+ // Structure: { x: { elevation1: {...}, elevation2: {...} }, y: {...}, blur: {...}, spread: {...} }
+ for (const [dimension, levels] of Object.entries(dropShadowObj)) {
+ if (typeof levels !== 'object') continue
+
+ for (const [levelKey, shadows] of Object.entries(levels)) {
+ // levelKey is like "elevation1"
+ const levelNum = levelKey.replace('elevation', '')
+ if (!elevations[levelNum]) elevations[levelNum] = {}
+
+ for (const [shadowKey, token] of Object.entries(shadows)) {
+ // shadowKey is like "dropshadow1" or "dropshadow2"
+ const shadowNum = shadowKey.replace('dropshadow', '')
+ const propName = `shadow${shadowNum}${capitalize(dimension)}`
+
+ if (token && token.value !== undefined) {
+ elevations[levelNum][propName] = {
+ value: token.value,
+ type: token.type || 'dimension'
+ }
+ }
+ }
+ }
+ }
+
+ return elevations
+}
+
+/**
+ * Parse layout tokens from JSON
+ */
+function parseLayoutTokens(layoutObj) {
+ const sizes = []
+ const typography = []
+ const config = []
+
+ function processObject(obj, path = []) {
+ for (const [key, value] of Object.entries(obj)) {
+ if (value && typeof value === 'object') {
+ if ('value' in value && 'type' in value) {
+ // Create a unique name from the full path to avoid duplicates
+ const fullPath = [...path, key]
+ const uniqueName = fullPath.map(p => toCamelCase(p)).join('_')
+
+ const token = {
+ name: toCamelCase(key),
+ uniqueName: uniqueName,
+ value: value.value,
+ type: value.type,
+ path: fullPath
+ }
+
+ // Categorize by type
+ if (['dimension', 'sizing', 'spacing', 'borderRadius', 'borderWidth'].includes(value.type)) {
+ sizes.push(token)
+ } else if (['fontFamilies', 'fontWeights', 'lineHeights', 'fontSizes'].includes(value.type)) {
+ typography.push(token)
+ } else if (value.type === 'boolean') {
+ config.push(token)
+ } else {
+ // Put unknown types in config
+ config.push(token)
+ }
+ } else {
+ processObject(value, [...path, key])
+ }
+ }
+ }
+ }
+
+ processObject(layoutObj)
+ return { sizes, typography, config }
+}
+
+// Format generators
+const formats = {
+ 'compose/semanticColors': function({ dictionary, options }) {
+ const { lightTokens, darkTokens } = options
+
+ const lightLines = generateThemeObject('Light', lightTokens)
+ const darkLines = generateThemeObject('Dark', darkTokens)
+ const accessorLines = generateComposableAccessors(lightTokens, darkTokens)
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import com.instructure.instui.token.primitives.InstUIColors
+
+/**
+ * InstUI Semantic Colors.
+ *
+ * Theme-aware color tokens that reference primitive colors.
+ * Use the @Composable functions for automatic light/dark theme switching.
+ *
+ * Usage:
+ * Box(modifier = Modifier.background(InstUISemanticColors.Background.base()))
+ *
+ * For explicit theme access:
+ * val lightBg = InstUISemanticColors.Light.Background.base
+ */
+object InstUISemanticColors {
+
+ // Light theme values
+ object Light {
+${lightLines.join('\n')}
+ }
+
+ // Dark theme values
+ object Dark {
+${darkLines.join('\n')}
+ }
+
+ // Theme-aware accessors (@Composable)
+${accessorLines.join('\n')}
+}
+`
+ },
+
+ 'compose/elevation': function({ dictionary, options }) {
+ const { elevations } = options
+
+ const levelLines = Object.keys(elevations).sort((a, b) => parseInt(a) - parseInt(b)).map(level => {
+ const props = elevations[level]
+ const propLines = Object.keys(props).sort().map(propName => {
+ const prop = props[propName]
+ const kotlinValue = valueToKotlin(prop.value, prop.type)
+ return ` val ${propName} = ${kotlinValue}`
+ })
+
+ return ` object Level${level} {
+${propLines.join('\n')}
+ }`
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.unit.dp
+
+/**
+ * InstUI Elevation/Shadow Primitives.
+ *
+ * Shadow values organized by elevation level (1-4).
+ * Each level has two shadows (shadow1, shadow2) with x, y, blur, spread dimensions.
+ */
+object InstUIElevation {
+${levelLines.join('\n\n')}
+}
+`
+ },
+
+ 'compose/layoutSizes': function({ dictionary, options }) {
+ const { sizes } = options
+
+ // Use unique names derived from full path to avoid duplicates
+ const lines = []
+ const byTopLevel = {}
+
+ sizes.forEach(token => {
+ const topLevel = token.path.length > 0 ? capitalize(toCamelCase(token.path[0])) : '_root'
+ if (!byTopLevel[topLevel]) byTopLevel[topLevel] = []
+ byTopLevel[topLevel].push(token)
+ })
+
+ Object.keys(byTopLevel).sort().forEach(topLevel => {
+ if (topLevel === '_root') {
+ byTopLevel[topLevel].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${token.uniqueName} = ${kotlinValue}`)
+ })
+ } else {
+ if (lines.length > 0) lines.push('')
+ lines.push(` object ${topLevel} {`)
+
+ // Group by second level
+ const bySecondLevel = {}
+ byTopLevel[topLevel].forEach(token => {
+ const secondLevel = token.path.length > 1 ? capitalize(toCamelCase(token.path[1])) : '_direct'
+ if (!bySecondLevel[secondLevel]) bySecondLevel[secondLevel] = []
+ bySecondLevel[secondLevel].push(token)
+ })
+
+ Object.keys(bySecondLevel).sort().forEach(secondLevel => {
+ if (secondLevel === '_direct') {
+ bySecondLevel[secondLevel].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${token.name} = ${kotlinValue}`)
+ })
+ } else {
+ lines.push(` object ${secondLevel} {`)
+
+ bySecondLevel[secondLevel].forEach(token => {
+ // Use name from path excluding top two levels
+ const nameParts = token.path.slice(2)
+ const propName = nameParts.map(p => toCamelCase(p)).join('_') || token.name
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${propName} = ${kotlinValue}`)
+ })
+
+ lines.push(` }`)
+ }
+ })
+
+ lines.push(` }`)
+ }
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.primitives.InstUISizes
+
+/**
+ * InstUI Layout Sizes.
+ *
+ * Semantic sizing values for interactive elements, spacing, borders, etc.
+ */
+object InstUILayoutSizes {
+${lines.join('\n')}
+}
+`
+ },
+
+ 'compose/layoutTypography': function({ dictionary, options }) {
+ const { typography } = options
+
+ const lines = []
+ const byTopLevel = {}
+
+ typography.forEach(token => {
+ const topLevel = token.path.length > 0 ? capitalize(toCamelCase(token.path[0])) : '_root'
+ if (!byTopLevel[topLevel]) byTopLevel[topLevel] = []
+ byTopLevel[topLevel].push(token)
+ })
+
+ Object.keys(byTopLevel).sort().forEach(topLevel => {
+ if (topLevel === '_root') {
+ byTopLevel[topLevel].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${token.uniqueName} = ${kotlinValue}`)
+ })
+ } else {
+ if (lines.length > 0) lines.push('')
+ lines.push(` object ${topLevel} {`)
+
+ // Group by second level
+ const bySecondLevel = {}
+ byTopLevel[topLevel].forEach(token => {
+ const secondLevel = token.path.length > 1 ? capitalize(toCamelCase(token.path[1])) : '_direct'
+ if (!bySecondLevel[secondLevel]) bySecondLevel[secondLevel] = []
+ bySecondLevel[secondLevel].push(token)
+ })
+
+ Object.keys(bySecondLevel).sort().forEach(secondLevel => {
+ if (secondLevel === '_direct') {
+ bySecondLevel[secondLevel].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${token.name} = ${kotlinValue}`)
+ })
+ } else {
+ lines.push(` object ${secondLevel} {`)
+
+ bySecondLevel[secondLevel].forEach(token => {
+ const nameParts = token.path.slice(2)
+ const propName = nameParts.map(p => toCamelCase(p)).join('_') || token.name
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${propName} = ${kotlinValue}`)
+ })
+
+ lines.push(` }`)
+ }
+ })
+
+ lines.push(` }`)
+ }
+ })
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.primitives.InstUIFontFamilies
+import com.instructure.instui.token.primitives.InstUIFontWeights
+import com.instructure.instui.token.primitives.InstUISizes
+
+/**
+ * InstUI Layout Typography.
+ *
+ * Font configuration including families, weights, sizes, and line heights.
+ */
+object InstUILayoutTypography {
+${lines.join('\n')}
+}
+`
+ },
+
+ 'compose/layoutConfig': function({ dictionary, options }) {
+ const { config } = options
+
+ const lines = []
+ const byTopLevel = {}
+ let needsOpacitiesImport = false
+
+ config.forEach(token => {
+ const topLevel = token.path.length > 0 ? capitalize(toCamelCase(token.path[0])) : '_root'
+ if (!byTopLevel[topLevel]) byTopLevel[topLevel] = []
+ byTopLevel[topLevel].push(token)
+
+ // Check if we need to import InstUIOpacities
+ if (token.value && typeof token.value === 'string' && token.value.includes('opacity')) {
+ needsOpacitiesImport = true
+ }
+ })
+
+ Object.keys(byTopLevel).sort().forEach(topLevel => {
+ if (topLevel === '_root') {
+ byTopLevel[topLevel].forEach(token => {
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${token.uniqueName} = ${kotlinValue}`)
+ })
+ } else {
+ if (lines.length > 0) lines.push('')
+ lines.push(` object ${topLevel} {`)
+
+ byTopLevel[topLevel].forEach(token => {
+ const nameParts = token.path.slice(1)
+ const propName = nameParts.map(p => toCamelCase(p)).join('_') || token.name
+ const kotlinValue = valueToKotlin(token.value, token.type)
+ lines.push(` val ${propName} = ${kotlinValue}`)
+ })
+
+ lines.push(` }`)
+ }
+ })
+
+ const imports = needsOpacitiesImport ? '\nimport com.instructure.instui.token.primitives.InstUIOpacities\n' : ''
+
+ return `${LICENSE_HEADER}
+
+package ${PACKAGE_NAME}
+${imports}
+/**
+ * InstUI Layout Config.
+ *
+ * Boolean flags and miscellaneous configuration values.
+ */
+object InstUILayoutConfig {
+${lines.join('\n')}
+}
+`
+ }
+}
+
+/**
+ * Build the Style Dictionary configuration for semantic tokens.
+ */
+module.exports = function(lightColors, darkColors, layout) {
+ return (async () => {
+ const StyleDictionary = (await import('style-dictionary')).default
+
+ // Parse tokens
+ const lightColorTokens = parseColorTokens(lightColors.color || lightColors)
+ const darkColorTokens = parseColorTokens(darkColors.color || darkColors)
+ const elevations = parseElevationTokens(lightColors.dropShadow || {})
+ const layoutTokens = parseLayoutTokens(layout)
+
+ // Register custom formats
+ for (const [name, format] of Object.entries(formats)) {
+ StyleDictionary.registerFormat({ name, format })
+ }
+
+ // Create a minimal token set (Style Dictionary needs something)
+ const tokens = { _placeholder: { value: 'placeholder', type: 'other' } }
+
+ const sd = new StyleDictionary({
+ tokens: tokens,
+ platforms: {
+ compose: {
+ buildPath: BUILD_PATH,
+ files: [
+ {
+ destination: 'InstUISemanticColors.kt',
+ format: 'compose/semanticColors',
+ options: {
+ lightTokens: lightColorTokens,
+ darkTokens: darkColorTokens
+ }
+ },
+ {
+ destination: 'InstUIElevation.kt',
+ format: 'compose/elevation',
+ options: { elevations }
+ },
+ {
+ destination: 'InstUILayoutSizes.kt',
+ format: 'compose/layoutSizes',
+ options: { sizes: layoutTokens.sizes }
+ },
+ {
+ destination: 'InstUILayoutTypography.kt',
+ format: 'compose/layoutTypography',
+ options: { typography: layoutTokens.typography }
+ },
+ {
+ destination: 'InstUILayoutConfig.kt',
+ format: 'compose/layoutConfig',
+ options: { config: layoutTokens.config }
+ }
+ ]
+ }
+ }
+ })
+
+ return sd
+ })()
+}
diff --git a/libs/instui/src/main/AndroidManifest.xml b/libs/instui/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..0f0261f55d
--- /dev/null
+++ b/libs/instui/src/main/AndroidManifest.xml
@@ -0,0 +1,17 @@
+
+
+
diff --git a/libs/instui/src/main/java/com/instructure/instui/BorderStyle.kt b/libs/instui/src/main/java/com/instructure/instui/BorderStyle.kt
new file mode 100644
index 0000000000..a35fc7a230
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/BorderStyle.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui
+
+import androidx.compose.ui.graphics.PathEffect
+
+/**
+ * Border drawing styles, mapping CSS border-style values to Compose equivalents.
+ *
+ * Use [pathEffect] with a stroke-based drawing call to apply the style.
+ */
+enum class BorderStyle {
+ Solid,
+ Dashed,
+ Dotted;
+
+ /**
+ * Returns the [PathEffect] for this border style, or null for [Solid].
+ *
+ * @param strokeWidth The border width in pixels, used to scale dash/dot patterns.
+ */
+ fun pathEffect(strokeWidth: Float = 1f): PathEffect? = when (this) {
+ Solid -> null
+ Dashed -> PathEffect.dashPathEffect(floatArrayOf(strokeWidth * 6, strokeWidth * 4), 0f)
+ Dotted -> PathEffect.dashPathEffect(floatArrayOf(strokeWidth, strokeWidth * 2), 0f)
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/InstUITheme.kt b/libs/instui/src/main/java/com/instructure/instui/compose/InstUITheme.kt
new file mode 100644
index 0000000000..65c2988983
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/InstUITheme.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose
+
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.material3.LocalTextStyle
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import com.instructure.instui.token.component.InstUIText
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+@Composable
+fun InstUITheme(content: @Composable () -> Unit) {
+ MaterialTheme {
+ CompositionLocalProvider(
+ LocalTextStyle provides InstUIText.content,
+ LocalContentColor provides InstUISemanticColors.Text.base(),
+ content = content
+ )
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/container/Card.kt b/libs/instui/src/main/java/com/instructure/instui/compose/container/Card.kt
new file mode 100644
index 0000000000..35a41bfe80
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/container/Card.kt
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.container
+
+import android.content.res.Configuration
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.CardElevation
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.component.InstUISharedTokens
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.text.Heading
+import com.instructure.instui.compose.text.HeadingLevel
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.semantic.InstUIElevation
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * Maps InstUI elevation levels to Compose elevation values.
+ *
+ * InstUI defines dual CSS-style shadows per level; Compose uses a single
+ * Dp elevation. The mapping uses the primary shadow's Y offset as the
+ * closest approximation.
+ */
+enum class Elevation(val dp: Dp) {
+ None(0.dp),
+ Level1(InstUIElevation.Level1.shadow1Y),
+ Level2(InstUIElevation.Level2.shadow1Y),
+ Level3(InstUIElevation.Level3.shadow1Y),
+ Level4(InstUIElevation.Level4.shadow1Y),
+}
+
+/**
+ * InstUI card container.
+ *
+ * A surface with rounded corners, optional border, and elevation.
+ *
+ * Usage:
+ * ```
+ * Card {
+ * Text(text = "Card content")
+ * }
+ * Card(elevation = Elevation.Level2) {
+ * Text(text = "Elevated card")
+ * }
+ * Card(borderColor = InstUISemanticColors.Stroke.info()) {
+ * Text(text = "With border")
+ * }
+ * ```
+ */
+@Composable
+fun Card(
+ modifier: Modifier = Modifier,
+ backgroundColor: Color = InstUISemanticColors.Background.container(),
+ borderColor: Color = Color.Transparent,
+ borderWidth: Dp = InstUILayoutSizes.BorderWidth.Sm.sm,
+ cornerRadius: Dp = InstUISharedTokens.BorderRadius.Card.md,
+ elevation: Elevation = Elevation.None,
+ contentPadding: Dp = InstUILayoutSizes.Spacing.SpaceMd.spaceMd,
+ content: @Composable () -> Unit,
+) {
+ val shape = RoundedCornerShape(cornerRadius)
+ val border = if (borderColor != Color.Transparent) {
+ BorderStroke(borderWidth, borderColor)
+ } else {
+ null
+ }
+
+ androidx.compose.material3.Card(
+ modifier = modifier,
+ shape = shape,
+ colors = CardDefaults.cardColors(containerColor = backgroundColor),
+ elevation = CardDefaults.cardElevation(defaultElevation = elevation.dp),
+ border = border,
+ ) {
+ Box(modifier = Modifier.padding(contentPadding)) {
+ content()
+ }
+ }
+}
+
+@Preview(name = "Card — Light", showBackground = true)
+@Preview(name = "Card — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun CardPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.page())
+ .padding(16.dp)
+ ) {
+ Card {
+ Heading(text = "Card Title", level = HeadingLevel.H4)
+ Text(text = "Card body content goes here.")
+ }
+ }
+ }
+}
+
+@Preview(name = "Card Elevated — Light", showBackground = true)
+@Preview(name = "Card Elevated — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun CardElevatedPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.page())
+ .padding(16.dp)
+ ) {
+ Card(elevation = Elevation.Level1) {
+ Text(text = "Elevated card (Level 1)")
+ }
+ Column(Modifier.padding(top = 12.dp)) {
+ Card(elevation = Elevation.Level3) {
+ Text(text = "Elevated card (Level 3)")
+ }
+ }
+ }
+ }
+}
+
+@Preview(name = "Card with Border — Light", showBackground = true)
+@Preview(name = "Card with Border — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun CardWithBorderPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.page())
+ .padding(16.dp)
+ ) {
+ Card(borderColor = InstUISemanticColors.Stroke.base()) {
+ Text(text = "Card with visible border")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/indicator/Icon.kt b/libs/instui/src/main/java/com/instructure/instui/compose/indicator/Icon.kt
new file mode 100644
index 0000000000..12e43979b5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/indicator/Icon.kt
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.indicator
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.token.component.InstUIIcon
+import com.instructure.instui.token.icon.InstUIIcons
+import com.instructure.instui.token.icon.line.Check
+import com.instructure.instui.token.icon.line.Warning
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * Token-based icon sizes from the InstUI design system.
+ */
+enum class IconSize(val dp: Dp) {
+ XSmall(InstUIIcon.sizeXs),
+ Small(InstUIIcon.sizeSm),
+ Medium(InstUIIcon.sizeMd),
+ Large(InstUIIcon.sizeLg),
+ XLarge(InstUIIcon.sizeXl),
+ XXLarge(InstUIIcon.size2xl),
+}
+
+/**
+ * Token-based icon colors from the InstUI design system.
+ */
+enum class IconColor(val color: @Composable () -> Color) {
+ Base({ InstUIIcon.baseColor }),
+ Muted({ InstUIIcon.mutedColor }),
+ Success({ InstUIIcon.successColor }),
+ Error({ InstUIIcon.errorColor }),
+ Warning({ InstUIIcon.warningColor }),
+ Info({ InstUIIcon.infoColor }),
+ OnColor({ InstUIIcon.onColor }),
+ Inverse({ InstUIIcon.inverseColor }),
+}
+
+/**
+ * InstUI icon component.
+ *
+ * Renders an icon with token-based sizing and color.
+ *
+ * Usage:
+ * ```
+ * Icon(imageVector = InstUIIcons.Line.Check)
+ * Icon(imageVector = InstUIIcons.Line.Warning, color = IconColor.Error, size = IconSize.Small)
+ * Icon(imageVector = InstUIIcons.Line.Lock, tint = courseColor)
+ * ```
+ */
+@Composable
+fun Icon(
+ imageVector: ImageVector,
+ modifier: Modifier = Modifier,
+ contentDescription: String? = null,
+ size: IconSize = IconSize.Large,
+ color: IconColor = IconColor.Base,
+) {
+ androidx.compose.material3.Icon(
+ imageVector = imageVector,
+ contentDescription = contentDescription,
+ modifier = modifier.size(size.dp),
+ tint = color.color(),
+ )
+}
+
+/**
+ * InstUI icon component with explicit tint color.
+ *
+ * Use this overload when you need a color not in [IconColor],
+ * such as a dynamic course color or accent color.
+ */
+@Composable
+fun Icon(
+ imageVector: ImageVector,
+ tint: Color,
+ modifier: Modifier = Modifier,
+ contentDescription: String? = null,
+ size: IconSize = IconSize.Large,
+) {
+ androidx.compose.material3.Icon(
+ imageVector = imageVector,
+ contentDescription = contentDescription,
+ modifier = modifier.size(size.dp),
+ tint = tint,
+ )
+}
+
+// region Previews
+
+@Preview(name = "Icon Sizes — Light", showBackground = true)
+@Preview(name = "Icon Sizes — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun IconSizesPreview() {
+ InstUITheme {
+ Row(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp),
+ horizontalArrangement = Arrangement.spacedBy(12.dp),
+ ) {
+ Icon(InstUIIcons.Line.Check, size = IconSize.XSmall)
+ Icon(InstUIIcons.Line.Check, size = IconSize.Small)
+ Icon(InstUIIcons.Line.Check, size = IconSize.Medium)
+ Icon(InstUIIcons.Line.Check, size = IconSize.Large)
+ Icon(InstUIIcons.Line.Check, size = IconSize.XLarge)
+ Icon(InstUIIcons.Line.Check, size = IconSize.XXLarge)
+ }
+ }
+}
+
+@Preview(name = "Icon Colors — Light", showBackground = true)
+@Preview(name = "Icon Colors — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun IconColorsPreview() {
+ InstUITheme {
+ Row(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp),
+ horizontalArrangement = Arrangement.spacedBy(12.dp),
+ ) {
+ Icon(InstUIIcons.Line.Warning, color = IconColor.Base)
+ Icon(InstUIIcons.Line.Warning, color = IconColor.Error)
+ Icon(InstUIIcons.Line.Warning, color = IconColor.Warning)
+ Icon(InstUIIcons.Line.Warning, color = IconColor.Success)
+ Icon(InstUIIcons.Line.Warning, color = IconColor.Info)
+ Icon(InstUIIcons.Line.Warning, color = IconColor.Muted)
+ }
+ }
+}
+
+// endregion
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/indicator/Pill.kt b/libs/instui/src/main/java/com/instructure/instui/compose/indicator/Pill.kt
new file mode 100644
index 0000000000..76a914c2d3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/indicator/Pill.kt
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.indicator
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.widthIn
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.component.InstUIPill
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.icon.InstUIIcons
+import com.instructure.instui.token.icon.line.Warning
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * Pill colors resolved from tokens for a given variant.
+ */
+data class PillColors(
+ val textColor: Color,
+ val borderColor: Color,
+)
+
+/**
+ * Pill status variant determining text and border colors.
+ * Each variant carries its own composable color resolver.
+ */
+enum class PillVariant(val colors: @Composable () -> PillColors) {
+ Default(colors = {
+ PillColors(
+ textColor = InstUIPill.baseTextColor,
+ borderColor = InstUIPill.baseBorderColor,
+ )
+ }),
+ Info(colors = {
+ PillColors(
+ textColor = InstUIPill.infoTextColor,
+ borderColor = InstUIPill.infoBorderColor,
+ )
+ }),
+ Error(colors = {
+ PillColors(
+ textColor = InstUIPill.errorTextColor,
+ borderColor = InstUIPill.errorBorderColor,
+ )
+ }),
+ Success(colors = {
+ PillColors(
+ textColor = InstUIPill.successTextColor,
+ borderColor = InstUIPill.successBorderColor,
+ )
+ }),
+ Warning(colors = {
+ PillColors(
+ textColor = InstUIPill.warningTextColor,
+ borderColor = InstUIPill.warningBorderColor,
+ )
+ }),
+}
+
+private val PillTextStyle = TextStyle(
+ fontFamily = InstUIPill.fontFamily,
+ fontWeight = InstUIPill.textFontWeight,
+ fontSize = InstUIPill.textFontSize,
+)
+
+/**
+ * InstUI status pill / badge.
+ *
+ * Displays a short label with colored border indicating status.
+ *
+ * Usage:
+ * ```
+ * Pill(text = "Missing", variant = PillVariant.Error)
+ * Pill(text = "Missing", variant = PillVariant.Error, icon = InstUIIcons.Line.Warning)
+ * ```
+ */
+@Composable
+fun Pill(
+ text: String,
+ modifier: Modifier = Modifier,
+ variant: PillVariant = PillVariant.Default,
+ icon: ImageVector? = null,
+) {
+ val colors = variant.colors()
+ val shape = RoundedCornerShape(InstUIPill.borderRadius)
+
+ Box(
+ modifier = modifier
+ .height(InstUIPill.height)
+ .widthIn(max = InstUIPill.maxWidth)
+ .border(
+ width = InstUIPill.borderWidth,
+ color = colors.borderColor,
+ shape = shape,
+ )
+ .background(
+ color = InstUIPill.backgroundColor,
+ shape = shape,
+ )
+ .padding(horizontal = InstUIPill.paddingHorizontal),
+ contentAlignment = Alignment.Center,
+ ) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(4.dp),
+ ) {
+ if (icon != null) {
+ Icon(
+ imageVector = icon,
+ tint = colors.textColor,
+ size = IconSize.Small,
+ )
+ }
+ Text(
+ text = text,
+ style = PillTextStyle,
+ color = colors.textColor,
+ maxLines = 1,
+ )
+ }
+ }
+}
+
+@Preview(name = "Pill Variants — Light", showBackground = true)
+@Preview(name = "Pill Variants — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun PillVariantsPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp),
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
+ Pill(text = "Default", variant = PillVariant.Default)
+ Pill(text = "Info", variant = PillVariant.Info)
+ Pill(text = "Missing", variant = PillVariant.Error)
+ Pill(text = "Submitted", variant = PillVariant.Success)
+ Pill(text = "Late", variant = PillVariant.Warning)
+ }
+ }
+}
+
+@Preview(name = "Pill with Icon — Light", showBackground = true)
+@Preview(name = "Pill with Icon — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun PillWithIconPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp),
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
+ Pill(
+ text = "Missing",
+ variant = PillVariant.Error,
+ icon = InstUIIcons.Line.Warning,
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/list/ListItem.kt b/libs/instui/src/main/java/com/instructure/instui/compose/list/ListItem.kt
new file mode 100644
index 0000000000..3dbfaff63e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/list/ListItem.kt
@@ -0,0 +1,458 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.list
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.Checkbox
+import androidx.compose.material3.RadioButton
+import androidx.compose.material3.Switch
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.indicator.Icon
+import com.instructure.instui.compose.indicator.IconColor
+import com.instructure.instui.compose.indicator.IconSize
+import com.instructure.instui.compose.indicator.Pill
+import com.instructure.instui.compose.indicator.PillVariant
+import com.instructure.instui.compose.text.Heading
+import com.instructure.instui.compose.text.HeadingLevel
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.component.InstUIHeading
+import com.instructure.instui.token.component.InstUIText as InstUITextTokens
+import com.instructure.instui.token.icon.InstUIIcons
+import com.instructure.instui.token.icon.line.ArrowOpenDown
+import com.instructure.instui.token.icon.line.Assignment
+import com.instructure.instui.token.icon.line.Quiz
+import com.instructure.instui.token.icon.line.Warning
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+// ---------------------------------------------------------------------------
+// Leading variants (maps to Figma ListItem.Leading modes)
+// ---------------------------------------------------------------------------
+
+/**
+ * Leading content for [ListItem].
+ *
+ * Maps to Figma ListItem.Leading component with 4 modes:
+ * Icon (24dp), Radio (24dp), Checkbox (24dp), Avatar (40dp).
+ */
+sealed class ListItemLeading {
+ data class Icon(
+ val imageVector: ImageVector,
+ val color: IconColor = IconColor.Base,
+ ) : ListItemLeading()
+
+ data class Radio(
+ val selected: Boolean,
+ val onClick: () -> Unit,
+ ) : ListItemLeading()
+
+ data class Checkbox(
+ val checked: Boolean,
+ val onClick: () -> Unit,
+ ) : ListItemLeading()
+
+ data class Avatar(
+ val content: @Composable () -> Unit,
+ ) : ListItemLeading()
+}
+
+// ---------------------------------------------------------------------------
+// Trailing variants (maps to Figma ListItem.Tailing modes)
+// ---------------------------------------------------------------------------
+
+/**
+ * Trailing content for [ListItem].
+ *
+ * Maps to Figma ListItem.Tailing component with 5 modes:
+ * Icons, Checkbox, Switch, TextOnly, Accordion.
+ */
+sealed class ListItemTrailing {
+ data class Icons(
+ val icons: List,
+ val data: String? = null,
+ val value: String? = null,
+ ) : ListItemTrailing()
+
+ data class Checkbox(
+ val checked: Boolean,
+ val onClick: () -> Unit,
+ ) : ListItemTrailing()
+
+ data class Switch(
+ val checked: Boolean,
+ val onCheckedChange: (Boolean) -> Unit,
+ ) : ListItemTrailing()
+
+ data class TextOnly(
+ val data: String? = null,
+ val value: String? = null,
+ ) : ListItemTrailing()
+
+ data class Accordion(
+ val expanded: Boolean,
+ val onClick: () -> Unit,
+ ) : ListItemTrailing()
+}
+
+// ---------------------------------------------------------------------------
+// ListItem composable
+// ---------------------------------------------------------------------------
+
+/**
+ * InstUI list item matching the Figma ListItem component structure.
+ *
+ * Content slots (all optional except [title]):
+ * - [supportingText]: Small text above the title
+ * - [title]: Primary heading text (required)
+ * - [text]: Body text below the title (regular weight, base color)
+ * - [subtext1]: First secondary text line (small, muted)
+ * - [subtext2]: Second secondary text line (small, muted)
+ * - [pill]: Status pill composable
+ * - [score]: Score composable (e.g., "-/100" in course color)
+ *
+ * Usage:
+ * ```
+ * // Complex with icon leading and text trailing
+ * ListItem(
+ * title = "Assignment name",
+ * subtext1 = "Due Oct 3, 2023 9:41",
+ * leading = ListItemLeading.Icon(InstUIIcons.Line.Assignment),
+ * trailing = ListItemTrailing.TextOnly(data = "90/100"),
+ * pill = { Pill(text = "Missing", variant = PillVariant.Error) },
+ * )
+ *
+ * // With accordion trailing
+ * ListItem(
+ * title = "Section",
+ * trailing = ListItemTrailing.Accordion(expanded = true, onClick = {}),
+ * )
+ *
+ * // With avatar leading
+ * ListItem(
+ * title = "Student Name",
+ * leading = ListItemLeading.Avatar { AsyncImage(url) },
+ * )
+ * ```
+ */
+@Composable
+fun ListItem(
+ title: String,
+ modifier: Modifier = Modifier,
+ supportingText: String? = null,
+ text: String? = null,
+ subtext1: String? = null,
+ subtext2: String? = null,
+ pill: (@Composable () -> Unit)? = null,
+ score: (@Composable () -> Unit)? = null,
+ leading: ListItemLeading? = null,
+ trailing: ListItemTrailing? = null,
+ onClick: (() -> Unit)? = null,
+) {
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .then(if (onClick != null) Modifier.clickable(onClick = onClick) else Modifier)
+ .padding(InstUILayoutSizes.Spacing.SpaceMd.spaceMd),
+ horizontalArrangement = Arrangement.spacedBy(InstUILayoutSizes.Spacing.SpaceLg.spaceLg),
+ verticalAlignment = Alignment.Top,
+ ) {
+ if (leading != null) {
+ LeadingContent(leading)
+ }
+
+ Column(
+ modifier = Modifier.weight(1f),
+ verticalArrangement = Arrangement.spacedBy(InstUILayoutSizes.Spacing.Space2xs.space2xs),
+ ) {
+ if (supportingText != null) {
+ Text(
+ text = supportingText,
+ style = InstUITextTokens.contentSmall,
+ color = InstUITextTokens.mutedColor,
+ )
+ }
+ Text(
+ text = title,
+ style = InstUIHeading.titleCardMini,
+ color = InstUISemanticColors.Text.base(),
+ )
+ if (text != null) {
+ Text(
+ text = text,
+ style = InstUITextTokens.content,
+ color = InstUISemanticColors.Text.base(),
+ )
+ }
+ if (subtext1 != null) {
+ Text(
+ text = subtext1,
+ style = InstUITextTokens.contentSmall,
+ color = InstUITextTokens.mutedColor,
+ )
+ }
+ if (subtext2 != null) {
+ Text(
+ text = subtext2,
+ style = InstUITextTokens.contentSmall,
+ color = InstUITextTokens.mutedColor,
+ )
+ }
+ if (pill != null) {
+ pill()
+ }
+ if (score != null) {
+ score()
+ }
+ }
+
+ if (trailing != null) {
+ TrailingContent(trailing)
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+// Internal rendering
+// ---------------------------------------------------------------------------
+
+@Composable
+private fun LeadingContent(leading: ListItemLeading) {
+ when (leading) {
+ is ListItemLeading.Icon -> {
+ Icon(
+ imageVector = leading.imageVector,
+ color = leading.color,
+ )
+ }
+ is ListItemLeading.Radio -> {
+ RadioButton(
+ selected = leading.selected,
+ onClick = leading.onClick,
+ modifier = Modifier.size(24.dp),
+ )
+ }
+ is ListItemLeading.Checkbox -> {
+ Checkbox(
+ checked = leading.checked,
+ onCheckedChange = { leading.onClick() },
+ modifier = Modifier.size(24.dp),
+ )
+ }
+ is ListItemLeading.Avatar -> {
+ leading.content()
+ }
+ }
+}
+
+@Composable
+private fun TrailingContent(trailing: ListItemTrailing) {
+ when (trailing) {
+ is ListItemTrailing.Icons -> {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(InstUILayoutSizes.Spacing.SpaceXs.spaceXs),
+ ) {
+ if (trailing.data != null) {
+ Text(
+ text = trailing.data,
+ style = InstUITextTokens.contentSmall,
+ color = InstUITextTokens.mutedColor,
+ )
+ }
+ if (trailing.value != null) {
+ Text(
+ text = trailing.value,
+ style = InstUIHeading.titleCardMini,
+ color = InstUISemanticColors.Text.base(),
+ )
+ }
+ for (icon in trailing.icons) {
+ Icon(imageVector = icon)
+ }
+ }
+ }
+ is ListItemTrailing.Checkbox -> {
+ Checkbox(
+ checked = trailing.checked,
+ onCheckedChange = { trailing.onClick() },
+ modifier = Modifier.size(24.dp),
+ )
+ }
+ is ListItemTrailing.Switch -> {
+ Switch(
+ checked = trailing.checked,
+ onCheckedChange = trailing.onCheckedChange,
+ )
+ }
+ is ListItemTrailing.TextOnly -> {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(InstUILayoutSizes.Spacing.SpaceXs.spaceXs),
+ ) {
+ if (trailing.data != null) {
+ Text(
+ text = trailing.data,
+ style = InstUITextTokens.contentSmall,
+ color = InstUITextTokens.mutedColor,
+ )
+ }
+ if (trailing.value != null) {
+ Text(
+ text = trailing.value,
+ style = InstUIHeading.titleCardMini,
+ color = InstUISemanticColors.Text.base(),
+ )
+ }
+ }
+ }
+ is ListItemTrailing.Accordion -> {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenDown,
+ size = IconSize.Small,
+ )
+ }
+ }
+}
+
+// region Previews
+
+@Preview(name = "ListItem Complex — Light", showBackground = true)
+@Preview(name = "ListItem Complex — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun ListItemComplexPreview() {
+ InstUITheme {
+ Column(modifier = Modifier.background(InstUISemanticColors.Background.base())) {
+ ListItem(
+ title = "Assignment name",
+ supportingText = "Supporting Text",
+ text = "Text",
+ subtext1 = "Subtext 1",
+ subtext2 = "Subtext 2",
+ leading = ListItemLeading.Icon(InstUIIcons.Line.Assignment),
+ pill = { Pill(text = "Missing", variant = PillVariant.Error, icon = InstUIIcons.Line.Warning) },
+ score = {
+ Text(text = "-/100", style = InstUITextTokens.contentImportant, color = Color(0xFF00828E))
+ },
+ trailing = ListItemTrailing.TextOnly(data = "Data"),
+ )
+ }
+ }
+}
+
+@Preview(name = "ListItem Simple — Light", showBackground = true)
+@Preview(name = "ListItem Simple — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun ListItemSimplePreview() {
+ InstUITheme {
+ Column(modifier = Modifier.background(InstUISemanticColors.Background.base())) {
+ ListItem(
+ title = "Title",
+ text = "Text",
+ subtext1 = "Subtext 1",
+ leading = ListItemLeading.Icon(InstUIIcons.Line.Quiz),
+ trailing = ListItemTrailing.TextOnly(data = "Data"),
+ )
+ }
+ }
+}
+
+@Preview(name = "ListItem Trailing Modes — Light", showBackground = true)
+@Preview(name = "ListItem Trailing Modes — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun ListItemTrailingModesPreview() {
+ InstUITheme {
+ Column(modifier = Modifier.background(InstUISemanticColors.Background.base())) {
+ ListItem(
+ title = "With Accordion",
+ trailing = ListItemTrailing.Accordion(expanded = false, onClick = {}),
+ )
+ Separator()
+ ListItem(
+ title = "With Switch",
+ trailing = ListItemTrailing.Switch(checked = true, onCheckedChange = {}),
+ )
+ Separator()
+ ListItem(
+ title = "With Checkbox",
+ trailing = ListItemTrailing.Checkbox(checked = true, onClick = {}),
+ )
+ Separator()
+ ListItem(
+ title = "With Icons",
+ trailing = ListItemTrailing.Icons(
+ icons = listOf(InstUIIcons.Line.Assignment, InstUIIcons.Line.Quiz),
+ data = "Data",
+ ),
+ )
+ }
+ }
+}
+
+@Preview(name = "ListItem Leading Modes — Light", showBackground = true)
+@Preview(name = "ListItem Leading Modes — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun ListItemLeadingModesPreview() {
+ InstUITheme {
+ Column(modifier = Modifier.background(InstUISemanticColors.Background.base())) {
+ ListItem(
+ title = "Icon leading",
+ leading = ListItemLeading.Icon(InstUIIcons.Line.Assignment),
+ )
+ Separator()
+ ListItem(
+ title = "Radio leading",
+ leading = ListItemLeading.Radio(selected = true, onClick = {}),
+ )
+ Separator()
+ ListItem(
+ title = "Checkbox leading",
+ leading = ListItemLeading.Checkbox(checked = false, onClick = {}),
+ )
+ Separator()
+ ListItem(
+ title = "Avatar leading",
+ leading = ListItemLeading.Avatar {
+ androidx.compose.foundation.layout.Box(
+ modifier = Modifier
+ .size(40.dp)
+ .clip(CircleShape)
+ .background(InstUISemanticColors.Background.muted())
+ )
+ },
+ )
+ }
+ }
+}
+
+// endregion
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/list/SectionHeader.kt b/libs/instui/src/main/java/com/instructure/instui/compose/list/SectionHeader.kt
new file mode 100644
index 0000000000..b1b935ab83
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/list/SectionHeader.kt
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.list
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.tooling.preview.Preview
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.indicator.Icon
+import com.instructure.instui.compose.indicator.IconSize
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.component.InstUIToggleDetails
+import com.instructure.instui.token.icon.InstUIIcons
+import com.instructure.instui.token.icon.line.ArrowOpenDown
+import com.instructure.instui.token.icon.line.MiniArrowDown
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+private val SectionHeaderTextStyle = TextStyle(
+ fontFamily = InstUIToggleDetails.fontFamily,
+ fontWeight = InstUIToggleDetails.fontWeight,
+ fontSize = InstUIToggleDetails.fontSizeSmall,
+)
+
+/**
+ * InstUI collapsible section header.
+ *
+ * Displays a label with a built-in chevron icon that rotates based on
+ * expand state. Maps to the Figma SectionHeader component.
+ *
+ * Usage:
+ * ```
+ * SectionHeader(
+ * label = "Overdue Assignments",
+ * expanded = isExpanded,
+ * onClick = { isExpanded = !isExpanded },
+ * )
+ * ```
+ */
+@Composable
+fun SectionHeader(
+ label: String,
+ expanded: Boolean,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier,
+) {
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .clickable(onClick = onClick)
+ .padding(
+ horizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd,
+ vertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm,
+ ),
+ horizontalArrangement = Arrangement.spacedBy(InstUILayoutSizes.Spacing.SpaceLg.spaceLg),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Text(
+ text = label,
+ style = SectionHeaderTextStyle,
+ color = InstUIToggleDetails.textColor,
+ modifier = Modifier.weight(1f),
+ )
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenDown,
+ size = IconSize.Medium,
+ modifier = Modifier.rotate(if (expanded) 180f else 0f),
+ )
+ }
+}
+
+// region Previews
+
+@Preview(name = "SectionHeader — Light", showBackground = true)
+@Preview(name = "SectionHeader — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun SectionHeaderPreview() {
+ InstUITheme {
+ Column(modifier = Modifier.background(InstUISemanticColors.Background.base())) {
+ SectionHeader(label = "Overdue Assignments", expanded = true, onClick = {})
+ Separator()
+ SectionHeader(label = "Upcoming Assignments", expanded = false, onClick = {})
+ }
+ }
+}
+
+// endregion
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/list/Separator.kt b/libs/instui/src/main/java/com/instructure/instui/compose/list/Separator.kt
new file mode 100644
index 0000000000..cdb8d22cba
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/list/Separator.kt
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.list
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI horizontal separator / divider.
+ *
+ * Usage:
+ * ```
+ * Separator()
+ * Separator(modifier = Modifier.padding(horizontal = 16.dp))
+ * ```
+ */
+@Composable
+fun Separator(
+ modifier: Modifier = Modifier,
+ color: Color = InstUISemanticColors.Background.Divider.base(),
+ thickness: Dp = 1.dp,
+) {
+ HorizontalDivider(
+ modifier = modifier,
+ color = color,
+ thickness = thickness,
+ )
+}
+
+@Preview(name = "Separator — Light", showBackground = true)
+@Preview(name = "Separator — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun SeparatorPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp)
+ ) {
+ Text(text = "Above separator")
+ Separator(modifier = Modifier.padding(vertical = 12.dp))
+ Text(text = "Below separator")
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/navigation/TopBar.kt b/libs/instui/src/main/java/com/instructure/instui/compose/navigation/TopBar.kt
new file mode 100644
index 0000000000..60ee0e27a5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/navigation/TopBar.kt
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.navigation
+
+import android.content.res.Configuration
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.RowScope
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.TopAppBar
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.tooling.preview.Preview
+import com.instructure.instui.token.component.InstUIHeading
+import com.instructure.instui.token.component.InstUIText as InstUITextTokens
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI top navigation bar.
+ *
+ * Wraps Material3 TopAppBar with InstUI token colors and typography.
+ * Supports a title, subtitle, navigation icon, and trailing actions.
+ *
+ * Usage:
+ * ```
+ * TopBar(
+ * title = "Page Title",
+ * subtitle = "Course name",
+ * navigationIcon = { IconButton(onClick = { navigateBack() }) { Icon(...) } },
+ * actions = { IconButton(onClick = { }) { Icon(...) } },
+ * )
+ * ```
+ */
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun TopBar(
+ title: String,
+ modifier: Modifier = Modifier,
+ subtitle: String? = null,
+ containerColor: Color = InstUISemanticColors.Background.brand(),
+ contentColor: Color = InstUISemanticColors.Text.inverse(),
+ navigationIcon: @Composable () -> Unit = {},
+ actions: @Composable RowScope.() -> Unit = {},
+) {
+ TopAppBar(
+ title = {
+ Column {
+ Text(
+ text = title,
+ style = InstUIHeading.titleCardMini,
+ color = contentColor,
+ maxLines = 1,
+ overflow = TextOverflow.Ellipsis,
+ )
+ if (subtitle != null) {
+ Text(
+ text = subtitle,
+ style = InstUITextTokens.legend,
+ color = contentColor,
+ maxLines = 1,
+ overflow = TextOverflow.Ellipsis,
+ )
+ }
+ }
+ },
+ modifier = modifier,
+ navigationIcon = navigationIcon,
+ actions = actions,
+ colors = TopAppBarDefaults.topAppBarColors(
+ containerColor = containerColor,
+ titleContentColor = contentColor,
+ navigationIconContentColor = contentColor,
+ actionIconContentColor = contentColor,
+ ),
+ )
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Preview(name = "TopBar — Light", showBackground = true)
+@Preview(name = "TopBar — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun TopBarPreview() {
+ InstUITheme {
+ TopBar(
+ title = "Page Title",
+ subtitle = "Course name longer Placeholder until 45 characters",
+ )
+ }
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Preview(name = "TopBar Title Only — Light", showBackground = true)
+@Preview(name = "TopBar Title Only — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun TopBarTitleOnlyPreview() {
+ InstUITheme {
+ TopBar(title = "Page Title")
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/preview/GradesScreenPreview.kt b/libs/instui/src/main/java/com/instructure/instui/compose/preview/GradesScreenPreview.kt
new file mode 100644
index 0000000000..28071d179d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/preview/GradesScreenPreview.kt
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.preview
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.Scaffold
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.component.InstUIText as InstUITextTokens
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.compose.container.Card
+import com.instructure.instui.compose.container.Elevation
+import com.instructure.instui.compose.indicator.Icon
+import com.instructure.instui.compose.indicator.IconColor
+import com.instructure.instui.compose.indicator.IconSize
+import com.instructure.instui.compose.indicator.Pill
+import com.instructure.instui.compose.indicator.PillVariant
+import com.instructure.instui.compose.list.ListItem
+import com.instructure.instui.compose.list.ListItemLeading
+import com.instructure.instui.compose.list.SectionHeader
+import com.instructure.instui.compose.list.Separator
+import com.instructure.instui.compose.navigation.TopBar
+import com.instructure.instui.compose.text.Text
+import com.instructure.instui.token.icon.InstUIIcons
+import com.instructure.instui.token.icon.line.ArrowLeft
+import com.instructure.instui.token.icon.line.Assignment
+import com.instructure.instui.token.icon.line.Lock
+import com.instructure.instui.token.icon.line.More
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * Dummy Grades screen preview demonstrating InstUI component usage.
+ *
+ * This preview mirrors the Figma "AM Grades" screen design:
+ * - TopBar with course color, title, and subtitle
+ * - Card showing restricted grades info
+ * - Collapsible section headers
+ * - List items with assignment icon, title, due date, status pill, and score
+ */
+
+private val CourseColor = Color(0xFF00828E)
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Preview(
+ name = "Grades Screen — Light",
+ showBackground = true,
+ widthDp = 360,
+ heightDp = 800,
+)
+@Preview(
+ name = "Grades Screen — Dark",
+ showBackground = true,
+ widthDp = 360,
+ heightDp = 800,
+ uiMode = Configuration.UI_MODE_NIGHT_YES,
+)
+@Composable
+private fun GradesScreenPreview() {
+ InstUITheme {
+ Scaffold(
+ topBar = {
+ TopBar(
+ title = "Page Title",
+ subtitle = "Course name longer Placeholder until 45 character",
+ containerColor = CourseColor,
+ navigationIcon = {
+ IconButton(onClick = {}) {
+ Icon(InstUIIcons.Line.ArrowLeft, color = IconColor.Inverse, contentDescription = "Back")
+ }
+ },
+ actions = {
+ IconButton(onClick = {}) {
+ Icon(InstUIIcons.Line.More, color = IconColor.Inverse, contentDescription = "More")
+ }
+ },
+ )
+ },
+ ) { contentPadding ->
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(InstUISemanticColors.Background.container())
+ .verticalScroll(rememberScrollState())
+ .padding(contentPadding)
+ ) {
+ // Restricted grades card on page-colored background
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .background(InstUISemanticColors.Background.page())
+ .padding(16.dp)
+ ) {
+ Card(elevation = Elevation.Level1) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Text(
+ text = "Total grades are restricted",
+ style = InstUITextTokens.contentSmall,
+ color = InstUITextTokens.mutedColor,
+ modifier = Modifier.weight(1f),
+ )
+ Spacer(Modifier.width(8.dp))
+ Icon(InstUIIcons.Line.Lock, size = IconSize.Medium)
+ }
+ }
+ }
+
+ Separator()
+
+ // Collapsed section
+ SectionHeader(
+ label = "Overdue Assignments",
+ expanded = false,
+ onClick = {},
+ )
+
+ // Expanded section
+ SectionHeader(
+ label = "Overdue Assignments",
+ expanded = true,
+ onClick = {},
+ )
+
+ // Assignment list items (no separators between them per Figma)
+ AssignmentListItem()
+ AssignmentListItem()
+ AssignmentListItem()
+ }
+ }
+ }
+}
+
+@Composable
+private fun AssignmentListItem() {
+ ListItem(
+ title = "Assignment name",
+ subtext1 = "Due Oct 3, 2023 9:41",
+ leading = ListItemLeading.Icon(InstUIIcons.Line.Assignment),
+ pill = { Pill(text = "Missing", variant = PillVariant.Error) },
+ score = {
+ Text(
+ text = "-/100",
+ style = InstUITextTokens.contentImportant,
+ color = CourseColor,
+ )
+ },
+ )
+}
+
+/**
+ * Minimal preview showing just the list items without scaffold,
+ * useful for quick iteration on the list item design.
+ */
+@Preview(name = "Assignment Items — Light", showBackground = true)
+@Preview(name = "Assignment Items — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun AssignmentItemsPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier.background(InstUISemanticColors.Background.container())
+ ) {
+ AssignmentListItem()
+ AssignmentListItem()
+ AssignmentListItem()
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/compose/text/Text.kt b/libs/instui/src/main/java/com/instructure/instui/compose/text/Text.kt
new file mode 100644
index 0000000000..20aff72daf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/compose/text/Text.kt
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.instui.compose.text
+
+import android.content.res.Configuration
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.component.InstUIHeading
+import com.instructure.instui.token.component.InstUIText as InstUITextTokens
+import com.instructure.instui.compose.InstUITheme
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI text component.
+ *
+ * Renders text using InstUI design system typography and colors.
+ * Uses [InstUITextTokens.content] as the default style.
+ *
+ * Usage:
+ * ```
+ * Text(text = "Hello world")
+ * Text(text = "Important", style = InstUITextTokens.contentImportant)
+ * Text(text = "Small print", style = InstUITextTokens.contentSmall)
+ * ```
+ */
+@Composable
+fun Text(
+ text: String,
+ modifier: Modifier = Modifier,
+ style: TextStyle = InstUITextTokens.content,
+ color: Color = Color.Unspecified,
+ textAlign: TextAlign? = null,
+ overflow: TextOverflow = TextOverflow.Clip,
+ maxLines: Int = Int.MAX_VALUE,
+) {
+ androidx.compose.material3.Text(
+ text = text,
+ modifier = modifier,
+ style = style,
+ color = color,
+ textAlign = textAlign,
+ overflow = overflow,
+ maxLines = maxLines,
+ )
+}
+
+/**
+ * InstUI text component with [AnnotatedString] support.
+ */
+@Composable
+fun Text(
+ text: AnnotatedString,
+ modifier: Modifier = Modifier,
+ style: TextStyle = InstUITextTokens.content,
+ color: Color = Color.Unspecified,
+ textAlign: TextAlign? = null,
+ overflow: TextOverflow = TextOverflow.Clip,
+ maxLines: Int = Int.MAX_VALUE,
+) {
+ androidx.compose.material3.Text(
+ text = text,
+ modifier = modifier,
+ style = style,
+ color = color,
+ textAlign = textAlign,
+ overflow = overflow,
+ maxLines = maxLines,
+ )
+}
+
+/**
+ * Heading level for [Heading] composable.
+ */
+enum class HeadingLevel {
+ H1, H2, H3, H4, H5, H6
+}
+
+/**
+ * InstUI heading component.
+ *
+ * Renders headings using Inclusive Sans font family with appropriate
+ * size and weight per level.
+ *
+ * Usage:
+ * ```
+ * Heading(text = "Page Title", level = HeadingLevel.H1)
+ * Heading(text = "Section", level = HeadingLevel.H3)
+ * ```
+ */
+@Composable
+fun Heading(
+ text: String,
+ level: HeadingLevel,
+ modifier: Modifier = Modifier,
+ color: Color = InstUISemanticColors.Text.base(),
+ textAlign: TextAlign? = null,
+ overflow: TextOverflow = TextOverflow.Clip,
+ maxLines: Int = Int.MAX_VALUE,
+) {
+ val style = when (level) {
+ HeadingLevel.H1 -> InstUIHeading.titlePageMobile
+ HeadingLevel.H2 -> InstUIHeading.titleSection
+ HeadingLevel.H3 -> InstUIHeading.titleCardRegular
+ HeadingLevel.H4 -> InstUIHeading.titleCardMini
+ HeadingLevel.H5 -> InstUIHeading.label
+ HeadingLevel.H6 -> InstUIHeading.label
+ }
+ androidx.compose.material3.Text(
+ text = text,
+ modifier = modifier,
+ style = style,
+ color = color,
+ textAlign = textAlign,
+ overflow = overflow,
+ maxLines = maxLines,
+ )
+}
+
+@Preview(name = "Text Styles — Light", showBackground = true)
+@Preview(name = "Text Styles — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun TextStylesPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp)
+ ) {
+ Text(text = "Description Page", style = InstUITextTokens.descriptionPage)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Content (default)", style = InstUITextTokens.content)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Content Important", style = InstUITextTokens.contentImportant)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Content Small", style = InstUITextTokens.contentSmall)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Legend", style = InstUITextTokens.legend)
+ }
+ }
+}
+
+@Preview(name = "Text Colors — Light", showBackground = true)
+@Preview(name = "Text Colors — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun TextColorsPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp)
+ ) {
+ Text(text = "Base color", color = InstUITextTokens.baseColor)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Muted color", color = InstUITextTokens.mutedColor)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Error color", color = InstUITextTokens.errorColor)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Success color", color = InstUITextTokens.successColor)
+ Spacer(Modifier.height(8.dp))
+ Text(text = "Warning color", color = InstUITextTokens.warningColor)
+ }
+ }
+}
+
+@Preview(name = "Headings — Light", showBackground = true)
+@Preview(name = "Headings — Dark", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
+@Composable
+private fun HeadingsPreview() {
+ InstUITheme {
+ Column(
+ modifier = Modifier
+ .background(InstUISemanticColors.Background.base())
+ .padding(16.dp)
+ ) {
+ Heading(text = "Heading H1", level = HeadingLevel.H1)
+ Spacer(Modifier.height(8.dp))
+ Heading(text = "Heading H2", level = HeadingLevel.H2)
+ Spacer(Modifier.height(8.dp))
+ Heading(text = "Heading H3", level = HeadingLevel.H3)
+ Spacer(Modifier.height(8.dp))
+ Heading(text = "Heading H4", level = HeadingLevel.H4)
+ Spacer(Modifier.height(8.dp))
+ Heading(text = "Heading H5", level = HeadingLevel.H5)
+ Spacer(Modifier.height(8.dp))
+ Heading(text = "Heading H6", level = HeadingLevel.H6)
+ }
+ }
+}
\ No newline at end of file
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAiInformation.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAiInformation.kt
new file mode 100644
index 0000000000..eac4b8941f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAiInformation.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI AiInformation component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIAiInformation {
+ val bodyPadding = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val headingBottomMargin = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val featureNameBottomMargin = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val permissionLevelTextBottomMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val permissionLevelBottomMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val descriptionBottomMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val modelNameTextBottomMargin = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val modelNameBottomMargin = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val dividerMargin = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val dividerColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val levelColor @Composable get() = InstUISemanticColors.Text.aiColor()
+ val permissionLevelsModalTriggerBottomMargin = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAlert.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAlert.kt
new file mode 100644
index 0000000000..2d006b1d30
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAlert.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Alert component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIAlert {
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+ val borderStyle = "solid"
+ val borderWidth = InstUILayoutSizes.BorderWidth.Md.md
+ val closeButtonMarginRight = "0.5rem"
+ val closeButtonMarginTop = "0.5rem"
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val contentFontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val contentFontSize = 16.sp
+ val contentFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val contentLineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val dangerBorderColor @Composable get() = InstUISemanticColors.Stroke.error()
+ val dangerIconBackground @Composable get() = InstUISemanticColors.Background.error()
+ val iconColor @Composable get() = InstUISemanticColors.Icon.onColor()
+ val infoBorderColor @Composable get() = InstUISemanticColors.Stroke.info()
+ val infoIconBackground @Composable get() = InstUISemanticColors.Background.info()
+ val successBorderColor @Composable get() = InstUISemanticColors.Stroke.success()
+ val successIconBackground @Composable get() = InstUISemanticColors.Background.success()
+ val warningBorderColor @Composable get() = InstUISemanticColors.Stroke.warning()
+ val warningIconBackground @Composable get() = InstUISemanticColors.Background.warning()
+ val contentPaddingVertical = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val contentPaddingHorizontal = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAppNav.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAppNav.kt
new file mode 100644
index 0000000000..b64dea8742
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAppNav.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI AppNav component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIAppNav {
+ object AppNav {
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val borderStyle = "solid"
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val height = 60.dp
+ val horizontalMargin = 6.dp
+ val menuTriggerWidth = 120.dp
+ }
+
+ object AppNavItem {
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val height = 36.dp
+ val padding = InstUILayoutSizes.Spacing.Padding.container_xs
+ val textColor @Composable get() = InstUISemanticColors.Text.Accent.blue()
+ val textColorSelected @Composable get() = InstUISemanticColors.Text.Accent.ash()
+ val fontSize = 18.sp
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAvatar.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAvatar.kt
new file mode 100644
index 0000000000..960f1a6650
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIAvatar.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Avatar component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIAvatar {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.base()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val borderWidthSm = InstUILayoutSizes.BorderWidth.Sm.sm
+ val borderWidthMd = InstUILayoutSizes.BorderWidth.Md.md
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x=0, y=0, blur=1rem, spread=0, color=rgba(45,59,69,0.12), type=innerShadow
+ */
+ // val boxShadow: BoxShadow — not supported in Compose
+ val fontWeight = InstUILayoutTypography.FontWeight.Heading.base
+ val blueBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.blue()
+ val blueTextColor @Composable get() = InstUISemanticColors.Text.Accent.blue()
+ val greenBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.green()
+ val greenTextColor @Composable get() = InstUISemanticColors.Text.Accent.green()
+ val redBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.red()
+ val redTextColor @Composable get() = InstUISemanticColors.Text.Accent.red()
+ val orangeBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.orange()
+ val orangeTextColor @Composable get() = InstUISemanticColors.Text.Accent.orange()
+ val greyBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.grey()
+ val greyTextColor @Composable get() = InstUISemanticColors.Text.Accent.grey()
+ val ashBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.ash()
+ val ashTextColor @Composable get() = InstUISemanticColors.Text.Accent.ash()
+ val aiBottomGradientColor @Composable get() = InstUISemanticColors.Background.aiBottomGradient()
+ val aiTopGradientColor @Composable get() = InstUISemanticColors.Background.aiTopGradient()
+ val textOnColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val size2xs = 24.dp
+ val sizeXs = 32.dp
+ val sizeSm = 40.dp
+ val sizeMd = 48.dp
+ val sizeLg = 56.dp
+ val sizeXl = 64.dp
+ val size2xl = 80.dp
+ val fontSize2xs = 12.sp
+ val fontSizeXs = 12.sp
+ val fontSizeSm = 14.sp
+ val fontSizeMd = 16.sp
+ val fontSizeLg = 20.sp
+ val fontSizeXl = 28.sp
+ val fontSize2xl = 40.sp
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val rectangleRadius = InstUILayoutSizes.BorderRadius.Sm.sm
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBadge.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBadge.kt
new file mode 100644
index 0000000000..9b117a01b8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBadge.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Badge component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIBadge {
+ val borderRadius = InstUILayoutSizes.BorderRadius.Full.full
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val color @Composable get() = InstUISemanticColors.Text.onColor()
+ val colorInverse @Composable get() = InstUISemanticColors.Text.dark()
+ val colorDanger @Composable get() = InstUISemanticColors.Background.error()
+ val colorSuccess @Composable get() = InstUISemanticColors.Background.success()
+ val colorPrimary @Composable get() = InstUISemanticColors.Background.info()
+ val fontSize = 14.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val sizeNotification = 12.dp
+ val size = 20.dp
+ val padding = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val notificationOffset = "0.125rem"
+ val notificationZIndex = "1"
+ val pulseBorderThickness = "0.125rem"
+ val countOffset = "0.5rem"
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBaseButton.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBaseButton.kt
new file mode 100644
index 0000000000..0bd1fa55dd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBaseButton.kt
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutConfig
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI BaseButton component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIBaseButton {
+ val primaryActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.active()
+ val primaryActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Primary.active()
+ val primaryActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Primary.active()
+ val primaryBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.base()
+ val primaryBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Primary.base()
+ val primaryColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Primary.base()
+ val primaryDisabledBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.disabled()
+ val primaryDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Primary.disabled()
+ val primaryDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Primary.disabled()
+ val primaryGhostActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Tertiary.active()
+ val primaryGhostBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Tertiary.base()
+ val primaryGhostColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Tertiary.base()
+ val primaryGhostHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Tertiary.hover()
+ val primaryHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.hover()
+ val primaryHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Primary.hover()
+ val primaryHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Primary.hover()
+ val primaryInverseActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.PrimaryOnColor.active()
+ val primaryInverseBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.PrimaryOnColor.base()
+ val primaryInverseBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.PrimaryOnColor.base()
+ val primaryInverseColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.PrimaryOnColor.base()
+ val primaryInverseGhostActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ghost.OnColor.hover()
+ val primaryInverseGhostBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.SecondaryOnColor.base()
+ val primaryInverseGhostColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SecondaryOnColor.base()
+ val primaryInverseGhostHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ghost.OnColor.hover()
+ val primaryInverseHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.PrimaryOnColor.hover()
+ val primaryOnColorActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.PrimaryOnColor.active()
+ val primaryOnColorActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.PrimaryOnColor.active()
+ val primaryOnColorDisabledBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.PrimaryOnColor.disabled()
+ val primaryOnColorDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.PrimaryOnColor.disabled()
+ val primaryOnColorDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.PrimaryOnColor.disabled()
+ val primaryOnColorHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.PrimaryOnColor.hover()
+ val primaryOnColorHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.PrimaryOnColor.hover()
+ val secondaryActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.active()
+ val secondaryActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.active()
+ val secondaryActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.active()
+ val secondaryBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.base()
+ val secondaryBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.base()
+ val secondaryColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.base()
+ val secondaryDisabledBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.disabled()
+ val secondaryDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.disabled()
+ val secondaryDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.disabled()
+ /** This token is not used in design, kept only for backward compatibility reasons. */
+ val secondaryGhostBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.base()
+ /** This token is not used in design, kept only for backward compatibility reasons. */
+ val secondaryGhostColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.base()
+ /** This token is not used in design, kept only for backward compatibility reasons. */
+ val secondaryGhostHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.hover()
+ val secondaryHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.hover()
+ val secondaryHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.hover()
+ val secondaryHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.hover()
+ val secondaryOnColorActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.SecondaryOnColor.active()
+ val secondaryOnColorActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SecondaryOnColor.active()
+ val secondaryOnColorDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.SecondaryOnColor.disabled()
+ val secondaryOnColorDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SecondaryOnColor.disabled()
+ val secondaryOnColorHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.SecondaryOnColor.hover()
+ val secondaryOnColorHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SecondaryOnColor.hover()
+ val successActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.active()
+ val successActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.active()
+ val successActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.active()
+ val successBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.base()
+ val successBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.base()
+ val successColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.base()
+ val successDisabledBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.disabled()
+ val successDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.disabled()
+ val successDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.disabled()
+ val successGhostActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.Secondary.active()
+ val successGhostBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.Secondary.base()
+ val successGhostColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SuccessSecondary.base()
+ val successGhostHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.Secondary.hover()
+ val successHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.hover()
+ val successHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.hover()
+ val successHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.hover()
+ val successSecondaryActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.Secondary.active()
+ val successSecondaryActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SuccessSecondary.active()
+ val successSecondaryDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.Secondary.disabled()
+ val successSecondaryDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SuccessSecondary.disabled()
+ val successSecondaryHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.Secondary.hover()
+ val successSecondaryHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.SuccessSecondary.hover()
+ val dangerActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.active()
+ val dangerBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.base()
+ val dangerGhostActiveBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.Secondary.active()
+ val dangerGhostBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.base()
+ val dangerGhostColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.DestructiveSecondary.base()
+ val dangerGhostHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.Secondary.hover()
+ val dangerHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.hover()
+ val destructiveActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.active()
+ val destructiveActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.active()
+ val dangerBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.base()
+ val dangerColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.base()
+ val destructiveDisabledBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.disabled()
+ val destructiveDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.disabled()
+ val destructiveDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.disabled()
+ val destructiveHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.hover()
+ val destructiveHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Status.hover()
+ val destructiveSecondaryActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.active()
+ val destructiveSecondaryActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.DestructiveSecondary.active()
+ val destructiveSecondaryDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.disabled()
+ val destructiveSecondaryDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.DestructiveSecondary.disabled()
+ val destructiveSecondaryHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.hover()
+ val destructiveSecondaryHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.DestructiveSecondary.hover()
+ val aiActiveBackgroundBottomGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.BottomGradient.active()
+ val aiActiveBackgroundTopGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.TopGradient.active()
+ val aiActiveBorderBottomGradientColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.BottomGradient.active()
+ val aiActiveBorderTopGradientColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.TopGradient.active()
+ val aiActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Ai.active()
+ val aiBackgroundBottomGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.BottomGradient.base()
+ val aiBackgroundTopGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.TopGradient.base()
+ val aiBaseTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Ai.base()
+ val aiBorderBottomGradientColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.BottomGradient.base()
+ val aiBorderTopGradientColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.TopGradient.base()
+ val aiDisabledBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.disabled()
+ val aiDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.disabled()
+ val aiDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Ai.disabled()
+ val aiHoverBackgroundBottomGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.BottomGradient.hover()
+ val aiHoverBackgroundTopGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Ai.TopGradient.hover()
+ val aiHoverBorderBottomGradientColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.BottomGradient.hover()
+ val aiHoverBorderTopGradientColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Ai.TopGradient.hover()
+ val aiHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Ai.hover()
+ val aiSecondaryActiveBackgroundBottomGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.AiSecondary.Active.bottomGradient()
+ val aiSecondaryActiveBackgroundTopGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.AiSecondary.Active.topGradient()
+ val aiSecondaryDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.AiSecondary.disabled()
+ val aiSecondaryDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.AiSecondary.disabled()
+ val aiSecondaryHoverBackgroundBottomGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.AiSecondary.Hover.bottomGradient()
+ val aiSecondaryHoverBackgroundTopGradientColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.AiSecondary.Hover.topGradient()
+ val aiSecondaryTextBottomGradientColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.AiSecondary.BottomGradient.base()
+ val aiSecondaryTextTopGradientColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.AiSecondary.TopGradient.base()
+ val smallFontSize = 14.sp
+ val mediumFontSize = 16.sp
+ val largeFontSize = 18.sp
+ val largeHeight = InstUILayoutSizes.Size.Interactive.height_lg
+ val largePaddingHorizontal = InstUILayoutSizes.Spacing.Padding.interactive_horizontal_xl
+ val mediumHeight = InstUILayoutSizes.Size.Interactive.height_md
+ val mediumPaddingHorizontal = InstUILayoutSizes.Spacing.Padding.interactive_horizontal_lg
+ val smallHeight = InstUILayoutSizes.Size.Interactive.height_sm
+ val smallPaddingHorizontal = InstUILayoutSizes.Spacing.Padding.interactive_horizontal_md
+ val borderRadius = InstUILayoutSizes.BorderRadius.Interactive.base
+ val borderRadiusFull = InstUILayoutSizes.BorderRadius.Full.full
+ val borderRadiusSm = InstUILayoutSizes.BorderRadius.Sm.sm
+ val borderWidth = InstUILayoutSizes.BorderWidth.Interactive.base
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val gapButtonContentLg = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val gapButtonContentMd = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val gapButtonContentSm = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val heightXs = InstUILayoutSizes.Size.Interactive.height_xs
+ val heightXxs = InstUILayoutSizes.Size.Interactive.height_xxs
+ val opacityBase = InstUILayoutConfig.Opacity.base
+ val opacityDisabled = InstUILayoutConfig.Opacity.base
+ val tertiaryActiveBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Tertiary.active()
+ val tertiaryActiveTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Tertiary.active()
+ val tertiaryDisabledBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Tertiary.disabled()
+ val tertiaryDisabledTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Tertiary.disabled()
+ val tertiaryHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Tertiary.hover()
+ val tertiaryHoverTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Tertiary.hover()
+ val dangerBoxShadow = "none"
+ val dangerGhostBackground = "transparent"
+ val dangerGhostBoxShadow = "none"
+ val dangerGhostHoverBoxShadow = "none"
+ val dangerHoverBoxShadow = "none"
+ val hoverTransform = "none"
+ val letterSpacing = "normal"
+ val primaryBoxShadow = "none"
+ val primaryGhostBackground = "transparent"
+ val primaryHoverBoxShadow = "none"
+ val primaryInverseBoxShadow = "none"
+ val primaryInverseGhostBackground = "transparent"
+ val primaryInverseGhostBoxShadow = "none"
+ val primaryInverseGhostHoverBoxShadow = "none"
+ val primaryInverseHoverBoxShadow = "none"
+ val secondaryBoxShadow = "none"
+ val secondaryGhostActiveBackground = "transparent"
+ val secondaryGhostBackground = "transparent"
+ val secondaryGhostBoxShadow = "none"
+ val secondaryGhostHoverBoxShadow = "none"
+ val secondaryHoverBoxShadow = "none"
+ val successBoxShadow = "none"
+ val successGhostBackground = "transparent"
+ val successGhostBoxShadow = "none"
+ val successGhostHoverBoxShadow = "none"
+ val successHoverBoxShadow = "none"
+ val textTransform = "none"
+ val transform = "none"
+ val borderStyle = "solid"
+ val paddingVertical = 4.dp
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBillboard.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBillboard.kt
new file mode 100644
index 0000000000..b3c1e41e66
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBillboard.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Billboard component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIBillboard {
+ val backgroundColor = InstUIColors.transparent
+ val clickableActiveBg @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.active()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val paddingSmall = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val paddingMedium = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val paddingLarge = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val mediumMargin = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val largeMargin = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val buttonBorderWidth = InstUILayoutSizes.BorderWidth.Md.md
+ val buttonBorderStyle = BorderStyle.Solid
+ val buttonHoverBorderStyle = BorderStyle.Dashed
+ val buttonBorderRadius = 8.dp
+ val messageColor @Composable get() = InstUISemanticColors.Text.muted()
+ val messageColorClickable @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.base()
+ val clickableActiveText @Composable get() = InstUISemanticColors.Text.Interactive.Action.Secondary.active()
+ val messageFontSizeSmall = 14.sp
+ val messageFontSizeMedium = 16.sp
+ val messageFontSizeLarge = 20.sp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBreadcrumb.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBreadcrumb.kt
new file mode 100644
index 0000000000..41d034c5d4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIBreadcrumb.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+
+/**
+ * InstUI Breadcrumb component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIBreadcrumb {
+ val gapSm = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val gapMd = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val gapLg = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIByline.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIByline.kt
new file mode 100644
index 0000000000..ec7bfa9e5c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIByline.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Byline component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIByline {
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val descriptionFontSize = 16.sp
+ val descriptionFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val descriptionLineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val figureMargin = 12.dp
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val titleFontSize = 22.sp
+ val titleFontWeight = InstUILayoutTypography.FontWeight.Heading.base
+ val titleLineHeight = InstUILayoutTypography.LineHeight.Paragraph.textSm
+ // val titleMargin: "0 0 0.5rem 0" (CSS-specific, not directly usable in Compose)
+ val large = "62em"
+ val medium = "48em"
+ val small = "30em"
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUICalendar.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUICalendar.kt
new file mode 100644
index 0000000000..bcf8169113
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUICalendar.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Calendar component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUICalendar {
+ object Calendar {
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val navMargin = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val navWithYearMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val yearPickerMargin = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ val maxHeaderWidth = 24.dp
+ }
+
+ object CalendarDay {
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val outsideMonthColor @Composable get() = InstUISemanticColors.Text.muted()
+ val selectedBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.base()
+ val selectedColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val todayColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val todayBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.base()
+ val fontSize = 16.sp
+ val height = InstUILayoutSizes.Size.Interactive.height_sm
+ val minWidth = InstUILayoutSizes.Size.Interactive.height_sm
+ val selectedBorderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+ val todayBorderRadius = InstUILayoutSizes.BorderRadius.Full.full
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUICheckbox.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUICheckbox.kt
new file mode 100644
index 0000000000..cb1567d8a9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUICheckbox.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Checkbox component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUICheckbox {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val backgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.hover()
+ val backgroundReadonlyColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.readonly()
+ val backgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.disabled()
+ val backgroundCheckedColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.selected()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val borderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val borderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val borderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.disabled()
+ val errorBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.base()
+ val errorBorderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.hover()
+ val asteriskColor @Composable get() = InstUISemanticColors.Text.error()
+ val borderCheckedColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.selected()
+ val fontSizeSm = 14.sp
+ val fontSizeMd = 16.sp
+ val fontSizeLg = 20.sp
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val gap = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val borderRadius = InstUILayoutSizes.BorderRadius.Sm.sm
+ val controlSizeSm = InstUILayoutSizes.Size.ChoiceControl.height_sm
+ val controlSizeMd = InstUILayoutSizes.Size.ChoiceControl.height_md
+ val controlSizeLg = InstUILayoutSizes.Size.ChoiceControl.height_lg
+ val borderWidth = InstUILayoutSizes.BorderWidth.Interactive.base
+ val labelBaseColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelHoverColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Disabled.base()
+ val labelReadonlyColor @Composable get() = InstUISemanticColors.Text.base()
+ val controlVerticalMargin = 0.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorContrast.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorContrast.kt
new file mode 100644
index 0000000000..8b0bcd53ee
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorContrast.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ColorContrast component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIColorContrast {
+ val colorIndicatorRightMargin = 12.dp
+ val colorPreviewBottomMargin = 12.dp
+ val colorPreviewTopMargin = 8.dp
+ val failureColor @Composable get() = InstUISemanticColors.Background.error()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val labelBottomMargin = 6.dp
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.textBase
+ val pickedHexColor @Composable get() = InstUISemanticColors.Text.base()
+ val smallBorder = InstUILayoutSizes.BorderWidth.Sm.sm
+ val statusWrapperBottomMargin = 6.dp
+ val successColor @Composable get() = InstUISemanticColors.Background.success()
+ val width = 272.dp
+ val colorIndicatorLabelColor @Composable get() = InstUISemanticColors.Text.base()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorIndicator.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorIndicator.kt
new file mode 100644
index 0000000000..814d6f17e1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorIndicator.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ColorIndicator component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIColorIndicator {
+ // val backgroundImage: "linear-gradient(45deg, #E8EAEC 25%, transparent 25%), linear-gradient(-45deg, #E8EAEC 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #E8EAEC 75%), linear-gradient(-45deg, transparent 75%, #E8EAEC 75%)" (CSS-specific, not directly usable in Compose)
+ // val backgroundPosition: "0 0, 0 .25rem, .25rem -0.25rem, -0.25rem 0px" (CSS-specific, not directly usable in Compose)
+ // val backgroundSize: "0.5rem 0.5rem" (CSS-specific, not directly usable in Compose)
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val rectangularIndicatorBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val circleIndicatorSize = 24.dp
+ val colorIndicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val rectangleIndicatorSize = 38.dp
+ val rectangularIndicatorBorderRadius = InstUILayoutSizes.BorderRadius.Md.md
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorMixer.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorMixer.kt
new file mode 100644
index 0000000000..056ab510a4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorMixer.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ColorMixer component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIColorMixer {
+ object Palette {
+ val whiteColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val indicatorBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val paletteBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val indicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val paletteBorderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val colorIndicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val disabledOverlayZIndex = "9999"
+ val paletteOffset = "0.5rem"
+ }
+
+ object RgbaInput {
+ val rgbaInputTopMargin = 24.dp
+ val inputContainerTopMargin = 24.dp
+ val tgbInputTopMargin = 8.dp
+ val labelFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val rgbaInputLabel @Composable get() = InstUISemanticColors.Text.base()
+ }
+
+ object Slider {
+ val indicatorBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val sliderBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val indicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val colorIndicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val disabledOverlayZIndex = "9999"
+ val checkerboardBackgroundSize = 8.dp
+ // val checkerboardBackgroundPosition: "0 0, 0 .25rem, .25rem -0.25rem, -0.25rem 0px" (CSS-specific, not directly usable in Compose)
+ val indicatorZIndex = "1"
+ // val checkerboardBackgroundImage: "linear-gradient(45deg, #E8EAEC 25%, transparent 25%), linear-gradient(-45deg, #E8EAEC 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #E8EAEC 75%), linear-gradient(-45deg, transparent 75%, #E8EAEC 75%)" (CSS-specific, not directly usable in Compose)
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorPicker.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorPicker.kt
new file mode 100644
index 0000000000..e2ff3374bf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorPicker.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ColorPicker component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIColorPicker {
+ val checkerboardBackgroundColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val colorIndicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val colorMixerButtonContainerLeftMargin = 8.dp
+ val errorIconsRightPadding = InstUILayoutSizes.Spacing.Padding.container_xs
+ val hashMarkColor @Composable get() = InstUISemanticColors.Text.muted()
+ val hashMarkContainerLeftPadding = 8.dp
+ val hashMarkContainerLineHeight = InstUILayoutTypography.LineHeight.Heading.textLg
+ val hashMarkContainerRightPadding = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val labelRightMargin = 6.dp
+ val popoverContentBlockBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val popoverFooterTopBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val popoverContentPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val popoverFooterPadding = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val popoverSeparatorColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val simpleColorContainerLeftPadding = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val successIconRightPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val xLargeFontSize = 28.sp
+ val xSmallSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val xxxSmallSpacing = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val popoverContentBlockBottomMargin = 8.dp
+ val popoverContentBlockTopMargin = 8.dp
+ val popoverContentBlockTopPadding = 8.dp
+ val popoverFooterColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorPreset.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorPreset.kt
new file mode 100644
index 0000000000..cba2779393
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIColorPreset.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ColorPreset component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIColorPreset {
+ val popoverContentBlockBottomMargin = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val popoverContentBlockTopMargin = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val popoverContentBlockTopPadding = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val popoverDividerColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val popoverFooterColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val selectedIndicatorBackgroundColor @Composable get() = InstUISemanticColors.Background.onColor()
+ val selectedIndicatorBorderColor @Composable get() = InstUISemanticColors.Stroke.Container.dark()
+ val smallBorder = InstUILayoutSizes.BorderWidth.Sm.sm
+ val smallSpacing = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val xxSmallSpacing = 6.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIContextView.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIContextView.kt
new file mode 100644
index 0000000000..a1fe307dc0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIContextView.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ContextView component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIContextView {
+ val arrowSize = 8.dp
+ val arrowBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val arrowBackgroundColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val arrowBackgroundColorInverse @Composable get() = InstUISemanticColors.Background.ElevatedSurface.inverse()
+ val arrowBorderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val arrowBorderColorInverse = InstUIColors.transparent
+ val borderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDataPermissionLevels.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDataPermissionLevels.kt
new file mode 100644
index 0000000000..d6db34c083
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDataPermissionLevels.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI DataPermissionLevels component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIDataPermissionLevels {
+ val cardBorderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+ val contentContainerBorderRadius = 10.dp
+ val cardBorderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val cardBorderWidth = InstUILayoutSizes.BorderWidth.Md.md
+ val currentFeaturePaddingSides = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val currentFeaturePaddingTopBottom = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val permissionTitleBottomMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val levelColor @Composable get() = InstUISemanticColors.Text.aiColor()
+ val aiTextLeftGradientColor @Composable get() = InstUISemanticColors.Background.aiTopGradient()
+ val aiTextRightGradientColor @Composable get() = InstUISemanticColors.Background.aiBottomGradient()
+ val bodyPadding = 0.dp
+ val contentContainerColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDrawerLayout.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDrawerLayout.kt
new file mode 100644
index 0000000000..acd70e89a6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDrawerLayout.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI DrawerLayout component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIDrawerLayout {
+ object DrawerLayoutContent {
+ val duration = "300ms"
+ // val overflowY: "auto" (CSS-specific, not directly usable in Compose)
+ }
+
+ object DrawerLayoutTray {
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val borderStyle = "solid"
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ // val boxShadow: "0 0.375rem 0.4375rem rgba(0, 0, 0, 0.1), 0 0.625rem 1.75rem rgba(0, 0, 0, 0.25)" (CSS-specific, not directly usable in Compose)
+ // val contentOverflowY: "auto" (CSS-specific, not directly usable in Compose)
+ val overflowX = "hidden"
+ // val overflowY: "auto" (CSS-specific, not directly usable in Compose)
+ val zIndex = "9999"
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDrilldown.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDrilldown.kt
new file mode 100644
index 0000000000..986c20733a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIDrilldown.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Drilldown component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIDrilldown {
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val headerActionColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.Primary.base()
+ val headerTitleFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val labelInfoColor @Composable get() = InstUISemanticColors.Text.muted()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val labelInfoPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFileDrop.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFileDrop.kt
new file mode 100644
index 0000000000..7ac660771f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFileDrop.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI FileDrop component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIFileDrop {
+ val acceptedColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.container()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Container.md
+ val borderStyle = BorderStyle.Dashed
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val hoverBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val rejectedColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.base()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFlex.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFlex.kt
new file mode 100644
index 0000000000..29014397d2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFlex.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+
+/**
+ * InstUI Flex component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIFlex {
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFormFieldLayout.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFormFieldLayout.kt
new file mode 100644
index 0000000000..b37f45ad84
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFormFieldLayout.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI FormFieldLayout component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIFormFieldLayout {
+ val textColor @Composable get() = InstUISemanticColors.Text.base()
+ val readonlyTextColor @Composable get() = InstUISemanticColors.Text.muted()
+ val asteriskColor @Composable get() = InstUISemanticColors.Text.error()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val fontSize = 16.sp
+ val lineHeight = InstUILayoutTypography.LineHeight.Label.base
+ val gapPrimitives = InstUILayoutSizes.Spacing.Gap.inputElements
+ val stackedOrInlineBreakpoint = 768.dp
+ val gapInputs = 12.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFormFieldMessage.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFormFieldMessage.kt
new file mode 100644
index 0000000000..d2f80f8afa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIFormFieldMessage.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI FormFieldMessage component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIFormFieldMessage {
+ val hintTextColor @Composable get() = InstUISemanticColors.Text.muted()
+ val errorTextColor @Composable get() = InstUISemanticColors.Text.error()
+ val successTextColor @Composable get() = InstUISemanticColors.Text.success()
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val fontSize = 14.sp
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.textSm
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIGrid.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIGrid.kt
new file mode 100644
index 0000000000..802758c296
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIGrid.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+
+/**
+ * InstUI Grid component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIGrid {
+ object Grid {
+ val mediumMin = InstUILayoutSizes.Size.Media.mediumMin
+ val largeMin = InstUILayoutSizes.Size.Media.largeMin
+ val xLargeMin = InstUILayoutSizes.Size.Media.xLargeMin
+ }
+
+ object GridCol {
+ val mediumMin = InstUILayoutSizes.Size.Media.mediumMin
+ val largeMin = InstUILayoutSizes.Size.Media.largeMin
+ val xLargeMin = InstUILayoutSizes.Size.Media.xLargeMin
+ val spacingLarge = 36.dp
+ val spacingMedium = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val spacingSmall = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+
+ object GridRow {
+ val mediumMin = InstUILayoutSizes.Size.Media.mediumMin
+ val largeMin = InstUILayoutSizes.Size.Media.largeMin
+ val xLargeMin = InstUILayoutSizes.Size.Media.xLargeMin
+ val spacingLarge = 36.dp
+ val spacingMedium = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val spacingSmall = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIHeading.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIHeading.kt
new file mode 100644
index 0000000000..64bdf6425c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIHeading.kt
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Heading component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIHeading {
+ val h1FontSize = 40.sp
+ val h2FontSize = 28.sp
+ val h3FontSize = 20.sp
+ val h4FontSize = 16.sp
+ val h5FontSize = 14.sp
+ val h6FontSize = 12.sp
+ val h1FontWeight = InstUILayoutTypography.FontWeight.Heading.strong
+ val h2FontWeight = InstUILayoutTypography.FontWeight.Heading.base
+ val h3FontWeight = InstUILayoutTypography.FontWeight.Heading.strong
+ val h4FontWeight = InstUILayoutTypography.FontWeight.Heading.strong
+ val h5FontWeight = InstUILayoutTypography.FontWeight.Heading.base
+ val h6FontWeight = InstUILayoutTypography.FontWeight.Heading.base
+ val h1FontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val h2FontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val h3FontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val h4FontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val h5FontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val h6FontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val lineHeight = InstUILayoutTypography.LineHeight.Heading.base
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val baseColor @Composable get() = InstUISemanticColors.Text.base()
+ val baseOnColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val mutedColor @Composable get() = InstUISemanticColors.Text.muted()
+ val mutedOnColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val inverseColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val aiTextTopGradientColor @Composable get() = InstUISemanticColors.Text.Accent.violet()
+ val aiTextBottomGradientColor @Composable get() = InstUISemanticColors.Text.Accent.sea()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val borderStyle = BorderStyle.Solid
+ val borderPadding = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val titlePageDesktop = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 40.sp,
+ lineHeight = 1.25.em,
+ )
+ val titlePageMobile = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 32.sp,
+ lineHeight = 1.25.em,
+ )
+ val titleSection = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 28.sp,
+ lineHeight = 1.25.em,
+ )
+ val titleCardSection = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 28.sp,
+ lineHeight = 1.25.em,
+ )
+ val titleModule = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 24.sp,
+ lineHeight = 1.25.em,
+ )
+ val titleCardLarge = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 24.sp,
+ lineHeight = 1.25.em,
+ )
+ val titleCardRegular = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 20.sp,
+ lineHeight = 1.25.em,
+ )
+ val titleCardMini = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 16.sp,
+ lineHeight = 1.25.em,
+ )
+ val label = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 16.sp,
+ lineHeight = 1.25.em,
+ )
+ val labelInline = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Heading.heading,
+ fontWeight = InstUILayoutTypography.FontWeight.Heading.strong,
+ fontSize = 16.sp,
+ lineHeight = 1.25.em,
+ )
+ val gapIconSm = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val gapIconMd = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val gapIconLg = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIIcon.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIIcon.kt
new file mode 100644
index 0000000000..d0eca5657e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIIcon.kt
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Icon component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIIcon {
+ val sizeXs = 12.dp
+ val sizeSm = 16.dp
+ val sizeMd = 20.dp
+ val sizeLg = 24.dp
+ val sizeXl = 32.dp
+ val size2xl = 36.dp
+ val illuSm = 48.dp
+ val illuMd = 80.dp
+ val illuLg = 160.dp
+ val strokeWidthXs = 1.dp
+ val strokeWidthSm = 1.25.dp
+ val strokeWidthMd = 1.5.dp
+ val strokeWidthLg = 2.dp
+ val strokeWidthXl = 2.5.dp
+ val strokeWidth2xl = 3.dp
+ val strokeWidthIlluSm = 4.dp
+ val strokeWidthIlluMd = 8.dp
+ val strokeWidthIlluLg = 12.dp
+ val baseColor @Composable get() = InstUISemanticColors.Icon.base()
+ val mutedColor @Composable get() = InstUISemanticColors.Icon.muted()
+ val successColor @Composable get() = InstUISemanticColors.Icon.success()
+ val errorColor @Composable get() = InstUISemanticColors.Icon.error()
+ val warningColor @Composable get() = InstUISemanticColors.Icon.warning()
+ val infoColor @Composable get() = InstUISemanticColors.Icon.info()
+ val onColor @Composable get() = InstUISemanticColors.Icon.onColor()
+ val inverseColor @Composable get() = InstUISemanticColors.Icon.inverse()
+ val disabledBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Disabled.base()
+ val disabledOnColor @Composable get() = InstUISemanticColors.Icon.Interactive.Disabled.onColor()
+ val dark @Composable get() = InstUISemanticColors.Icon.dark()
+ val sideNavColor @Composable get() = InstUISemanticColors.Icon.brand()
+ val sideNavActiveColor @Composable get() = InstUISemanticColors.Icon.inverse()
+ val navigationPrimaryBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Navigation.Primary.base()
+ val navigationPrimaryHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Navigation.Primary.hover()
+ val navigationPrimaryActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Navigation.Primary.active()
+ val navigationPrimaryOnColorBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Navigation.PrimaryOnColor.base()
+ val navigationPrimaryOnColorHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Navigation.PrimaryOnColor.hover()
+ val navigationPrimaryOnColorActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Navigation.PrimaryOnColor.active()
+ val actionSecondaryBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Secondary.base()
+ val actionSecondaryHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Secondary.hover()
+ val actionSecondaryActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Secondary.active()
+ val actionSecondaryDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Secondary.disabled()
+ val actionStatusBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Status.base()
+ val actionStatusHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Status.hover()
+ val actionStatusActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Status.active()
+ val actionStatusDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Status.disabled()
+ val actionAiSecondaryTopGradientBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.AiSecondary.TopGradient.base()
+ val actionAiSecondaryBottomGradientBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.AiSecondary.BottomGradient.base()
+ val actionAiBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Ai.base()
+ val actionAiHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Ai.hover()
+ val actionAiActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Ai.active()
+ val actionAiDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Ai.disabled()
+ val actionPrimaryBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Primary.base()
+ val actionPrimaryHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Primary.hover()
+ val actionPrimaryActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Primary.active()
+ val actionPrimaryDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Primary.disabled()
+ val actionPrimaryOnColorBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.PrimaryOnColor.base()
+ val actionTertiaryBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Tertiary.base()
+ val actionTertiaryHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Tertiary.hover()
+ val actionTertiaryActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Tertiary.active()
+ val actionPrimaryOnColorHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.PrimaryOnColor.hover()
+ val actionPrimaryOnColorActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.PrimaryOnColor.active()
+ val actionPrimaryOnColorDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.PrimaryOnColor.disabled()
+ val actionTertiaryDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.Tertiary.disabled()
+ val actionSuccessSecondaryBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SuccessSecondary.base()
+ val actionSuccessSecondaryHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SuccessSecondary.hover()
+ val actionSuccessSecondaryActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SuccessSecondary.active()
+ val actionSuccessSecondaryDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SuccessSecondary.disabled()
+ val actionDestructiveSecondaryBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.DestructiveSecondary.base()
+ val actionDestructiveSecondaryHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.DestructiveSecondary.hover()
+ val actionDestructiveSecondaryActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.DestructiveSecondary.active()
+ val actionDestructiveSecondaryDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.DestructiveSecondary.disabled()
+ val accentBlueColor @Composable get() = InstUISemanticColors.Icon.Accent.blue()
+ val accentGreenColor @Composable get() = InstUISemanticColors.Icon.Accent.green()
+ val accentRedColor @Composable get() = InstUISemanticColors.Icon.Accent.red()
+ val accentOrangeColor @Composable get() = InstUISemanticColors.Icon.Accent.orange()
+ val accentGreyColor @Composable get() = InstUISemanticColors.Icon.Accent.grey()
+ val accentAshColor @Composable get() = InstUISemanticColors.Icon.Accent.ash()
+ val accentPlumColor @Composable get() = InstUISemanticColors.Icon.Accent.plum()
+ val accentVioletColor @Composable get() = InstUISemanticColors.Icon.Accent.violet()
+ val accentStoneColor @Composable get() = InstUISemanticColors.Icon.Accent.stone()
+ val accentSkyColor @Composable get() = InstUISemanticColors.Icon.Accent.sky()
+ val accentHoneyColor @Composable get() = InstUISemanticColors.Icon.Accent.honey()
+ val accentSeaColor @Composable get() = InstUISemanticColors.Icon.Accent.sea()
+ val accentAuroraColor @Composable get() = InstUISemanticColors.Icon.Accent.aurora()
+ val actionAiSecondaryDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.AiSecondary.disabled()
+ val actionSecondaryOnColorBaseColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SecondaryOnColor.base()
+ val actionSecondaryOnColorHoverColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SecondaryOnColor.hover()
+ val actionSecondaryOnColorActiveColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SecondaryOnColor.active()
+ val actionSecondaryOnColorDisabledColor @Composable get() = InstUISemanticColors.Icon.Interactive.Action.SecondaryOnColor.disabled()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIInlineList.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIInlineList.kt
new file mode 100644
index 0000000000..2a2555a223
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIInlineList.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI InlineList component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIInlineList {
+ val arrowSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val delimiterColor @Composable get() = InstUISemanticColors.Text.muted()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSizeLarge = 20.sp
+ val fontSizeMedium = 16.sp
+ val fontSizeSmall = 14.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val noneSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val pipeSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val slashSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val spacingLarge = 36.dp
+ val spacingMedium = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val spacingSmall = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val spacingXLarge = 48.dp
+ val spacingXSmall = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val spacingXXLarge = 60.dp
+ val spacingXXSmall = 6.dp
+ val spacingXXXSmall = InstUILayoutSizes.Spacing.Space2xs.space2xs
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUILink.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUILink.kt
new file mode 100644
index 0000000000..3b334e1be7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUILink.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Link component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUILink {
+ val textColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.Primary.base()
+ val textHoverColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.Primary.hover()
+ val textDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Disabled.base()
+ val onColorTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.PrimaryOnColor.base()
+ val onColorTextHoverColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.PrimaryOnColor.hover()
+ val onColorTextDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Disabled.onColor()
+ val fontSizeSm = 14.sp
+ val fontSizeMd = 16.sp
+ val fontSizeLg = 28.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Interactive.interactive
+ val gapSm = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val gapMd = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val gapLg = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val lineHeightSm = InstUILayoutTypography.LineHeight.Standalone.textSm
+ val lineHeightMd = InstUILayoutTypography.LineHeight.Standalone.textBase
+ val lineHeightLg = InstUILayoutTypography.LineHeight.Standalone.textXl
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val textDecorationWithinText = "underline"
+ val textDecorationOutsideText = "none"
+ val unstyledTextColor @Composable get() = InstUISemanticColors.Text.base()
+
+ object InlineLink {
+ val small = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.strong,
+ fontSize = 14.sp,
+ lineHeight = 14.sp,
+ )
+ val medium = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.strong,
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ )
+ val large = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.strong,
+ fontSize = 28.sp,
+ lineHeight = 24.sp,
+ )
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIList.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIList.kt
new file mode 100644
index 0000000000..8a8ab74cfc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIList.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI List component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIList {
+ object List {
+ val listPadding = 36.dp
+ val orderedNumberMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val orderedNumberFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ }
+
+ object ListItem {
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSizeLarge = 20.sp
+ val fontSizeMedium = 16.sp
+ val fontSizeSmall = 14.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ val spacingXXXSmall = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val spacingXXSmall = 6.dp
+ val spacingXSmall = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val spacingSmall = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val spacingMedium = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val spacingLarge = 36.dp
+ val spacingXLarge = 48.dp
+ val spacingXXLarge = 60.dp
+ /**
+ * Border: color={color.stroke.muted}, width={borderWidth.sm}, style=dashed
+ * Use BorderStroke for solid borders; dashed borders need custom drawing.
+ */
+ // val delimiterDashedBorder: Border(color={color.stroke.muted}, width={borderWidth.sm}, style=dashed)
+ /**
+ * Border: color={color.stroke.muted}, width={borderWidth.sm}, style=solid
+ * Use BorderStroke for solid borders; dashed borders need custom drawing.
+ */
+ // val delimiterSolidBorder: Border(color={color.stroke.muted}, width={borderWidth.sm}, style=solid)
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMask.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMask.kt
new file mode 100644
index 0000000000..e9a5735432
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMask.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Mask component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIMask {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.Overlay.base()
+ val darkBackgroundColor @Composable get() = InstUISemanticColors.Background.Overlay.dark()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMenu.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMenu.kt
new file mode 100644
index 0000000000..839919909c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMenu.kt
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Menu component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIMenu {
+ object Menu {
+ val maxWidth = 256.dp
+ val minWidth = 128.dp
+ }
+
+ object MenuGroup {
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ }
+
+ object MenuItem {
+ val activeBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.base()
+ val activeLabelColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Primary.base()
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ /** code only token */
+ val iconPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val labelColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelInfoColor @Composable get() = InstUISemanticColors.Text.muted()
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.textSm
+ /** code only token */
+ val labelPadding = 0.dp
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val highlightedBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Tertiary.hover()
+ val selectedHighlightedBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.hover()
+ val highlightedLabelColor @Composable get() = InstUISemanticColors.Text.base()
+ val highlightedLabelInfoColor @Composable get() = InstUISemanticColors.Text.base()
+ }
+
+ object MenuSeparator {
+ val background @Composable get() = InstUISemanticColors.Stroke.muted()
+ val height = 1.dp
+ /** code only token */
+ val marginVertical = 0.dp
+ /** code only token */
+ val marginHorizontal = 12.dp
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMetric.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMetric.kt
new file mode 100644
index 0000000000..5ea6be94ab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIMetric.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Metric component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIMetric {
+ val labelColor @Composable get() = InstUISemanticColors.Text.muted()
+ val labelFontSize = 12.sp
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val valueColor @Composable get() = InstUISemanticColors.Text.base()
+ val valueFontSize = 28.sp
+ val gapTexts = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val labelLineHeight = InstUILayoutTypography.LineHeight.Standalone.textXs
+ val valueLineHeight = InstUILayoutTypography.LineHeight.Standalone.text2xl
+ val labelFontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val valueFontFamily = InstUILayoutTypography.FontFamily.Heading.heading
+ val labelFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val valueFontWeight = InstUILayoutTypography.FontWeight.Heading.base
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIModal.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIModal.kt
new file mode 100644
index 0000000000..fc5b0a98c5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIModal.kt
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Modal component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIModal {
+ object Modal {
+ val autoMinWidth = 256.dp
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.container()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Container.base()
+ val inverseBackgroundColor @Composable get() = InstUISemanticColors.Background.dark()
+ val inverseBorderColor @Composable get() = InstUISemanticColors.Stroke.Container.dark()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Xl.xl
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val textColor @Composable get() = InstUISemanticColors.Text.base()
+ val inverseTextColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val largeMaxWidth = 992.dp
+ val mediumMaxWidth = 768.dp
+ val smallMaxWidth = 480.dp
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation4.dropshadow1}, y={dropShadow.y.elevation4.dropshadow1}, blur={dropShadow.blur.elevation4.dropshadow1}, spread={dropShadow.spread.elevation4.dropshadow1}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation4.dropshadow2}, y={dropShadow.y.elevation4.dropshadow2}, blur={dropShadow.blur.elevation4.dropshadow2}, spread={dropShadow.spread.elevation4.dropshadow2}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ */
+ // val boxShadow: BoxShadow — not supported in Compose
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ }
+
+ object ModalBody {
+ val inverseBackgroundColor @Composable get() = InstUISemanticColors.Background.dark()
+ val padding = InstUILayoutSizes.Spacing.Padding.container_md
+ val paddingCompact = InstUILayoutSizes.Spacing.Padding.container_xs
+ }
+
+ object ModalFooter {
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Container.base()
+ val inverseBorderColor @Composable get() = InstUISemanticColors.Stroke.Container.dark()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Xl.xl
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.container()
+ val inverseBackgroundColor @Composable get() = InstUISemanticColors.Background.dark()
+ val padding = InstUILayoutSizes.Spacing.Padding.container_md
+ val paddingCompact = InstUILayoutSizes.Spacing.Padding.container_xs
+ }
+
+ object ModalHeader {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.container()
+ val inverseBackgroundColor @Composable get() = InstUISemanticColors.Background.dark()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Container.base()
+ val inverseBorderColor @Composable get() = InstUISemanticColors.Stroke.Container.dark()
+ val padding = InstUILayoutSizes.Spacing.Padding.container_md
+ val paddingCompact = InstUILayoutSizes.Spacing.Padding.container_xs
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUINutritionFacts.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUINutritionFacts.kt
new file mode 100644
index 0000000000..50db13a37e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUINutritionFacts.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI NutritionFacts component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUINutritionFacts {
+ val borderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+ val cardBorderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val cardBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val cardPadding = InstUILayoutSizes.Spacing.Gap.cards_sm
+ val cardExplainerContainerBottomMargin = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val cardGap = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val bodyPadding = InstUILayoutSizes.Spacing.Padding.container_md
+ val blockGap = InstUILayoutSizes.Spacing.Gap.cards_md
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIOptions.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIOptions.kt
new file mode 100644
index 0000000000..b8fde51b18
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIOptions.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Options component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIOptions {
+ object Options {
+ val labelColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val nestedLabelPaddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val nestedLabelPaddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+
+ object OptionsItem {
+ val afterLabelContentVOffset = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val background @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ /** code only token */
+ val beforeLabelContentVOffset = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val descriptionColor @Composable get() = InstUISemanticColors.Text.muted()
+ val descriptionFontSize = 14.sp
+ val descriptionFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val descriptionLineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val fontWeightSelected = InstUILayoutTypography.FontWeight.Body.base
+ val highlightedBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Tertiary.hover()
+ val highlightedLabelColor @Composable get() = InstUISemanticColors.Text.base()
+ /** code only token */
+ val iconPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val selectedBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.base()
+ val selectedHighlightedBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.hover()
+ val selectedLabelColor @Composable get() = InstUISemanticColors.Text.Interactive.Action.Primary.base()
+ val descriptionPaddingStart = 0.dp
+ val nestedPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+
+ object OptionsSeparator {
+ val background @Composable get() = InstUISemanticColors.Stroke.base()
+ /** code only token */
+ val marginVertical = 0.dp
+ val height = InstUILayoutSizes.BorderWidth.Sm.sm
+ /** code only token */
+ val marginHorizontal = 12.dp
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPagination.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPagination.kt
new file mode 100644
index 0000000000..ede57494e3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPagination.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Pagination component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIPagination {
+ object Pagination {
+ val pageIndicatorGap = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ }
+
+ object PaginationPageInput {
+ val inputSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val inputWidth = 72.dp
+ val labelColor @Composable get() = InstUISemanticColors.Text.base()
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPill.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPill.kt
new file mode 100644
index 0000000000..00b7f0569f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPill.kt
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Pill component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIPill {
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val height = 24.dp
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.base()
+ val textFontSize = 14.sp
+ val textFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val statusLabelFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val maxWidth = 240.dp
+ val baseTextColor @Composable get() = InstUISemanticColors.Text.base()
+ val baseBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val infoTextColor @Composable get() = InstUISemanticColors.Text.info()
+ val infoBorderColor @Composable get() = InstUISemanticColors.Stroke.info()
+ val errorTextColor @Composable get() = InstUISemanticColors.Text.error()
+ val errorBorderColor @Composable get() = InstUISemanticColors.Stroke.error()
+ val successTextColor @Composable get() = InstUISemanticColors.Text.success()
+ val successBorderColor @Composable get() = InstUISemanticColors.Stroke.success()
+ val warningTextColor @Composable get() = InstUISemanticColors.Text.warning()
+ val warningBorderColor @Composable get() = InstUISemanticColors.Stroke.warning()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.textSm
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val borderStyle = BorderStyle.Solid
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPopover.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPopover.kt
new file mode 100644
index 0000000000..cb1d781233
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIPopover.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Popover component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIPopover {
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIProgressBar.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIProgressBar.kt
new file mode 100644
index 0000000000..618d52a985
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIProgressBar.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ProgressBar component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIProgressBar {
+ val borderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Heading.base
+ val xSmallHeight = 8.dp
+ val smallHeight = 16.dp
+ val mediumHeight = 24.dp
+ val meterColorAlert @Composable get() = InstUISemanticColors.Background.brand()
+ val meterColorAlertInverse @Composable get() = InstUISemanticColors.Background.base()
+ val meterColorBrand @Composable get() = InstUISemanticColors.Background.brand()
+ val meterColorBrandInverse @Composable get() = InstUISemanticColors.Background.base()
+ val meterColorDanger @Composable get() = InstUISemanticColors.Background.brand()
+ val meterColorDangerInverse @Composable get() = InstUISemanticColors.Background.base()
+ val meterColorInfo @Composable get() = InstUISemanticColors.Background.brand()
+ val meterColorInfoInverse @Composable get() = InstUISemanticColors.Background.base()
+ val meterColorSuccess @Composable get() = InstUISemanticColors.Background.brand()
+ val meterColorSuccessInverse @Composable get() = InstUISemanticColors.Background.base()
+ val meterColorWarning @Composable get() = InstUISemanticColors.Background.brand()
+ val meterColorWarningInverse @Composable get() = InstUISemanticColors.Background.base()
+ val largeHeight = 32.dp
+ val trackBottomBorderColor = InstUIColors.transparent
+ val trackBottomBorderColorInverse = InstUIColors.transparent
+ val trackBottomBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val trackColor = InstUIColors.transparent
+ val trackColorInverse = InstUIColors.transparent
+ val valuePadding = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val textColor @Composable get() = InstUISemanticColors.Text.muted()
+ val textColorInverse @Composable get() = InstUISemanticColors.Text.inverse()
+ val xSmallValueFontSize = 16.sp
+ val smallValueFontSize = 16.sp
+ val mediumValueFontSize = 16.sp
+ val largeValueFontSize = 16.sp
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val borderColorInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIProgressCircle.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIProgressCircle.kt
new file mode 100644
index 0000000000..db31486a29
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIProgressCircle.kt
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ProgressCircle component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIProgressCircle {
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Heading.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Heading.base
+ val xSmallSize = 48.dp
+ val xSmallCircumference = 100.dp
+ val xSmallTransform = 24.dp
+ val xSmallStrokeWidth = 3.2.dp
+ val smallSize = 80.dp
+ val smallCircumference = 176.dp
+ val smallTransform = 40.dp
+ val smallStrokeWidth = 8.dp
+ val mediumSize = 112.dp
+ val mediumCircumference = 276.dp
+ val mediumTransform = 56.dp
+ val mediumStrokeWidth = 10.dp
+ val largeSize = 144.dp
+ val largeCircumference = 352.dp
+ val largeTransform = 72.dp
+ val largeStrokeWidth = 14.dp
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val colorInverse @Composable get() = InstUISemanticColors.Text.inverse()
+ val trackColor @Composable get() = InstUISemanticColors.Background.base()
+ val trackColorInverse = InstUIColors.transparent
+ val trackBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val trackBorderColorInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val meterColorAlert @Composable get() = InstUISemanticColors.Stroke.info()
+ val meterColorAlertInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val meterColorBrand @Composable get() = InstUISemanticColors.Stroke.brand()
+ val meterColorBrandInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val meterColorDanger @Composable get() = InstUISemanticColors.Stroke.error()
+ val meterColorDangerInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val meterColorInfo @Composable get() = InstUISemanticColors.Stroke.info()
+ val meterColorInfoInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val meterColorSuccess @Composable get() = InstUISemanticColors.Stroke.success()
+ val meterColorSuccessInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val meterColorWarning @Composable get() = InstUISemanticColors.Stroke.warning()
+ val meterColorWarningInverse @Composable get() = InstUISemanticColors.Stroke.inverse()
+ val xSmallRadius = 16.dp
+ val smallRadius = 28.8.dp
+ val mediumRadius = 44.dp
+ val largeRadius = 56.dp
+ val xSmallBorderOffset = 15.04.dp
+ val smallBorderOffset = 25.8.dp
+ val mediumBorderOffset = 40.dp
+ val largeBorderOffset = 50.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRadioInput.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRadioInput.kt
new file mode 100644
index 0000000000..c4c6d1591b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRadioInput.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI RadioInput component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIRadioInput {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val backgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.hover()
+ val backgroundReadonlyColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.readonly()
+ val backgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.disabled()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val borderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val borderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val borderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.disabled()
+ val borderSelectedColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.selected()
+ val fontSizeSm = 14.sp
+ val fontSizeMd = 16.sp
+ val fontSizeLg = 20.sp
+ val toggleSmallFontSize = 12.sp
+ val toggleMediumFontSize = 14.sp
+ val toggleLargeFontSize = 16.sp
+ val lineHeightSm = InstUILayoutTypography.LineHeight.Paragraph.textSm
+ val lineHeightMd = InstUILayoutTypography.LineHeight.Paragraph.textBase
+ val lineHeightLg = InstUILayoutTypography.LineHeight.Paragraph.textBase
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val gap = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val borderWidth = InstUILayoutSizes.BorderWidth.Interactive.base
+ val labelBaseColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelHoverColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Disabled.base()
+ val labelReadonlyColor @Composable get() = InstUISemanticColors.Text.base()
+ val controlSizeSm = InstUILayoutSizes.Size.ChoiceControl.height_sm
+ val controlSizeMd = InstUILayoutSizes.Size.ChoiceControl.height_md
+ val controlSizeLg = InstUILayoutSizes.Size.ChoiceControl.height_lg
+ val checkedInsetSm = 6.dp
+ val checkedInsetMd = 6.dp
+ val checkedInsetLg = 6.dp
+ val toggleSmallHeight = InstUILayoutSizes.Size.Interactive.height_sm
+ val toggleMediumHeight = InstUILayoutSizes.Size.Interactive.height_md
+ val toggleLargeHeight = InstUILayoutSizes.Size.Interactive.height_lg
+ val controlVerticalMargin = 0.dp
+ val toggleBackgroundDanger @Composable get() = InstUISemanticColors.Background.warning()
+ val toggleBackgroundOff @Composable get() = InstUISemanticColors.Background.success()
+ val toggleBackgroundSuccess @Composable get() = InstUISemanticColors.Background.success()
+ val toggleBackgroundWarning @Composable get() = InstUISemanticColors.Background.warning()
+ val toggleHandleText @Composable get() = InstUISemanticColors.Text.onColor()
+ val toggleBorderRadius = InstUILayoutSizes.BorderRadius.Sm.sm
+ val toggleBorderWidth = InstUILayoutSizes.BorderWidth.Lg.lg
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation1.dropshadow1}, y={dropShadow.y.elevation1.dropshadow1}, blur={dropShadow.blur.elevation1.dropshadow1}, spread={dropShadow.spread.elevation1.dropshadow1}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation1.dropshadow2}, y={dropShadow.y.elevation1.dropshadow2}, blur={dropShadow.blur.elevation1.dropshadow2}, spread={dropShadow.spread.elevation1.dropshadow2}, color={color.dropShadow.shadowColor2}, type=innerShadow
+ */
+ // val toggleShadow: BoxShadow — not supported in Compose
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRangeInput.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRangeInput.kt
new file mode 100644
index 0000000000..699a92dc81
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRangeInput.kt
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI RangeInput component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIRangeInput {
+ val handleBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.base()
+ val handleHoverBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.hover()
+ val handleFocusBackground @Composable get() = InstUISemanticColors.Background.info()
+ /** Deprecated, remove with "deprecated" thumbVariant */
+ val handleFocusOutlineColor @Composable get() = InstUISemanticColors.Background.info()
+ /** Deprecated, remove with "deprecated" thumbVariant
+ */
+ val handleShadowColor @Composable get() = InstUISemanticColors.Background.brand()
+ val handleBorderColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val handleBorderSize = InstUILayoutSizes.BorderWidth.Md.md
+ val handleFocusInset = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val trackBackground @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val valueFontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val valueFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val valueSmallFontSize = 14.sp
+ val valueMediumFontSize = 16.sp
+ val valueLargeFontSize = 20.sp
+ val valueSmallPadding = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val valueMediumPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val valueLargePadding = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val valueSmallLineHeight = 1.75f
+ val valueMediumLineHeight = 2.375f
+ val valueLargeLineHeight = 3f
+ val trackBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val minWidth = 200.dp
+ val handleSize = 24.dp
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation1.dropshadow1}, y={dropShadow.y.elevation1.dropshadow1}, blur={dropShadow.blur.elevation1.dropshadow1}, spread={dropShadow.spread.elevation1.dropshadow1}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation1.dropshadow2}, y={dropShadow.y.elevation1.dropshadow2}, blur={dropShadow.blur.elevation1.dropshadow2}, spread={dropShadow.spread.elevation1.dropshadow2}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ */
+ // val boxShadow: BoxShadow — not supported in Compose
+ /** Deprecated, remove with "deprecated" thumbVariant */
+ val handleFocusOutlineWidth = 12.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRatingIcon.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRatingIcon.kt
new file mode 100644
index 0000000000..e032773c75
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIRatingIcon.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI RatingIcon component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIRatingIcon {
+ val iconMargin = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val iconEmptyColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val iconFilledColor @Composable get() = InstUISemanticColors.Background.brand()
+ val smallIconFontSize = 16.dp
+ val mediumIconFontSize = 22.dp
+ val largeIconFontSize = 38.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISelect.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISelect.kt
new file mode 100644
index 0000000000..cd98e0f128
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISelect.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+
+/**
+ * InstUI Select component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUISelect {
+ val popoverBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISharedTokens.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISharedTokens.kt
new file mode 100644
index 0000000000..6856485cd3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISharedTokens.kt
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI SharedTokens component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUISharedTokens {
+ object Background {
+ val containerColor @Composable get() = InstUISemanticColors.Background.container()
+ val baseColor @Composable get() = InstUISemanticColors.Background.base()
+ val pageColor @Composable get() = InstUISemanticColors.Background.page()
+ val mutedColor @Composable get() = InstUISemanticColors.Background.muted()
+ val brandColor @Composable get() = InstUISemanticColors.Background.brand()
+ val onColor @Composable get() = InstUISemanticColors.Background.onColor()
+ val inverseColor @Composable get() = InstUISemanticColors.Background.inverse()
+ val successColor @Composable get() = InstUISemanticColors.Background.success()
+ val errorColor @Composable get() = InstUISemanticColors.Background.error()
+ val infoColor @Composable get() = InstUISemanticColors.Background.info()
+ val warningColor @Composable get() = InstUISemanticColors.Background.warning()
+ val aiTopGradientColor @Composable get() = InstUISemanticColors.Background.aiTopGradient()
+ val aiBottomGradientColor @Composable get() = InstUISemanticColors.Background.aiBottomGradient()
+ val aiTextColor @Composable get() = InstUISemanticColors.Background.aiText()
+ val accentAsh @Composable get() = InstUISemanticColors.Background.Accent.ash()
+ val accentAurora @Composable get() = InstUISemanticColors.Background.Accent.aurora()
+ val accentBlue @Composable get() = InstUISemanticColors.Background.Accent.blue()
+ val accentGreen @Composable get() = InstUISemanticColors.Background.Accent.green()
+ val accentGrey @Composable get() = InstUISemanticColors.Background.Accent.grey()
+ val accentHoney @Composable get() = InstUISemanticColors.Background.Accent.honey()
+ val accentOrange @Composable get() = InstUISemanticColors.Background.Accent.orange()
+ val accentPlum @Composable get() = InstUISemanticColors.Background.Accent.plum()
+ val accentRed @Composable get() = InstUISemanticColors.Background.Accent.red()
+ val accentSea @Composable get() = InstUISemanticColors.Background.Accent.sea()
+ val accentSky @Composable get() = InstUISemanticColors.Background.Accent.sky()
+ val accentStone @Composable get() = InstUISemanticColors.Background.Accent.stone()
+ val accentViolet @Composable get() = InstUISemanticColors.Background.Accent.violet()
+ }
+
+ object BorderRadius {
+ val xs = InstUILayoutSizes.BorderRadius.Xs.xs
+ val sm = InstUILayoutSizes.BorderRadius.Sm.sm
+ val md = InstUILayoutSizes.BorderRadius.Md.md
+ val lg = InstUILayoutSizes.BorderRadius.Lg.lg
+ val xl = InstUILayoutSizes.BorderRadius.Xl.xl
+ val xxl = InstUILayoutSizes.BorderRadius.Xxl.xxl
+ val full = 15984.dp
+
+ object Card {
+ val sm = 12.dp
+ val md = InstUILayoutSizes.BorderRadius.Container.md
+ val lg = InstUILayoutSizes.BorderRadius.Container.lg
+
+ object NestedContainer {
+ val sm = InstUILayoutSizes.BorderRadius.Sm.sm
+ val md = InstUILayoutSizes.BorderRadius.Sm.sm
+ val lg = InstUILayoutSizes.BorderRadius.Md.md
+ }
+ }
+ }
+
+ object BoxShadow {
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation1.dropshadow1}, y={dropShadow.y.elevation1.dropshadow1}, blur={dropShadow.blur.elevation1.dropshadow1}, spread={dropShadow.spread.elevation1.dropshadow1}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation1.dropshadow2}, y={dropShadow.y.elevation1.dropshadow2}, blur={dropShadow.blur.elevation1.dropshadow2}, spread={dropShadow.spread.elevation1.dropshadow2}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ */
+ // val elevation1: BoxShadow — not supported in Compose
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation2.dropshadow1}, y={dropShadow.y.elevation2.dropshadow1}, blur={dropShadow.blur.elevation2.dropshadow1}, spread={dropShadow.spread.elevation2.dropshadow1}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation2.dropshadow2}, y={dropShadow.y.elevation2.dropshadow2}, blur={dropShadow.blur.elevation2.dropshadow2}, spread={dropShadow.spread.elevation2.dropshadow2}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ */
+ // val elevation2: BoxShadow — not supported in Compose
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation3.dropshadow1}, y={dropShadow.y.elevation3.dropshadow1}, blur={dropShadow.blur.elevation3.dropshadow1}, spread={dropShadow.spread.elevation3.dropshadow1}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation3.dropshadow2}, y={dropShadow.y.elevation3.dropshadow2}, blur={dropShadow.blur.elevation3.dropshadow2}, spread={dropShadow.spread.elevation3.dropshadow2}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ */
+ // val elevation3: BoxShadow — not supported in Compose
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation4.dropshadow1}, y={dropShadow.y.elevation4.dropshadow1}, blur={dropShadow.blur.elevation4.dropshadow1}, spread={dropShadow.spread.elevation4.dropshadow1}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation4.dropshadow2}, y={dropShadow.y.elevation4.dropshadow2}, blur={dropShadow.blur.elevation4.dropshadow2}, spread={dropShadow.spread.elevation4.dropshadow2}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ */
+ // val elevation4: BoxShadow — not supported in Compose
+ }
+
+ object FocusOutline {
+ val offset = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val inset = 0.dp
+ val width = InstUILayoutSizes.BorderWidth.Md.md
+ val infoColor @Composable get() = InstUISemanticColors.Stroke.Interactive.FocusRing.base()
+ val onColor @Composable get() = InstUISemanticColors.Stroke.Interactive.FocusRing.onColor()
+ val successColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.base()
+ val dangerColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.base()
+ val style = BorderStyle.Solid
+ }
+
+ object Legacy {
+ val radiusSmall = 2.dp
+ val radiusMedium = 4.dp
+ val radiusLarge = 8.dp
+
+ object Spacing {
+ val xxxSmall = 2.dp
+ val xxSmall = 6.dp
+ val xSmall = 8.dp
+ val small = 12.dp
+ val mediumSmall = 16.dp
+ val medium = 24.dp
+ val large = 36.dp
+ val xLarge = 48.dp
+ val xxLarge = 60.dp
+ val space0 = 0.dp
+ val space2 = 2.dp
+ val space4 = 4.dp
+ val space8 = 8.dp
+ val space12 = 12.dp
+ val space16 = 16.dp
+ val space24 = 24.dp
+ val space36 = 36.dp
+ val space48 = 48.dp
+ val space60 = 60.dp
+ val sections = 36.dp
+ val sectionElements = 24.dp
+ val trayElements = 24.dp
+ val modalElements = 24.dp
+ val moduleElements = 16.dp
+ val paddingCardLarge = 24.dp
+ val paddingCardMedium = 16.dp
+ val paddingCardSmall = 12.dp
+ val selects = 16.dp
+ val textareas = 16.dp
+ val inputFields = 16.dp
+ val checkboxes = 16.dp
+ val radios = 16.dp
+ val toggles = 16.dp
+ val buttons = 12.dp
+ val tags = 12.dp
+ val statusIndicators = 12.dp
+ val dataPoints = 12.dp
+ }
+ }
+
+ object Spacing {
+ object Gap {
+ val sections = InstUILayoutSizes.Spacing.Gap.sections
+ val buttons = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+
+ object Cards {
+ val sm = InstUILayoutSizes.Spacing.Gap.cards_sm
+ val md = InstUILayoutSizes.Spacing.Gap.cards_md
+ val lg = InstUILayoutSizes.Spacing.Gap.cards_lg
+
+ object NestedContainers {
+ val sm = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val md = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val lg = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ }
+ }
+
+ object Inputs {
+ val horizontal = InstUILayoutSizes.Spacing.Gap.inputs_horizontal
+ val vertical = InstUILayoutSizes.Spacing.Gap.inputs_vertical
+ }
+ }
+
+ object General {
+ val space2xs = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val spaceXs = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val spaceSm = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val spaceMd = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val spaceLg = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val spaceXl = InstUILayoutSizes.Spacing.SpaceXl.spaceXl
+ val space2xl = InstUILayoutSizes.Spacing.Space2xl.space2xl
+ val spaceNone = 0.dp
+ }
+
+ object Padding {
+ object Card {
+ val sm = InstUILayoutSizes.Spacing.Padding.container_xxs
+ val md = InstUILayoutSizes.Spacing.Padding.container_xs
+ val lg = InstUILayoutSizes.Spacing.Padding.container_sm
+ }
+ }
+ }
+
+ object Stroke {
+ val baseColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val mutedColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val strongColor @Composable get() = InstUISemanticColors.Stroke.strong()
+ val brandColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val successColor @Composable get() = InstUISemanticColors.Stroke.success()
+ val errorColor @Composable get() = InstUISemanticColors.Stroke.error()
+ val warningColor @Composable get() = InstUISemanticColors.Stroke.warning()
+ val infoColor @Composable get() = InstUISemanticColors.Stroke.info()
+ val aiTopGradientColor @Composable get() = InstUISemanticColors.Stroke.aiTopGradient()
+ val aiBottomGradientColor @Composable get() = InstUISemanticColors.Stroke.aiBottomGradient()
+ val accentAsh @Composable get() = InstUISemanticColors.Stroke.Accent.ash()
+ val accentAurora @Composable get() = InstUISemanticColors.Stroke.Accent.aurora()
+ val accentBlue @Composable get() = InstUISemanticColors.Stroke.Accent.blue()
+ val accentGreen @Composable get() = InstUISemanticColors.Stroke.Accent.green()
+ val accentGrey @Composable get() = InstUISemanticColors.Stroke.Accent.grey()
+ val accentHoney @Composable get() = InstUISemanticColors.Stroke.Accent.honey()
+ val accentOrange @Composable get() = InstUISemanticColors.Stroke.Accent.orange()
+ val accentPlum @Composable get() = InstUISemanticColors.Stroke.Accent.plum()
+ val accentRed @Composable get() = InstUISemanticColors.Stroke.Accent.red()
+ val accentSea @Composable get() = InstUISemanticColors.Stroke.Accent.sea()
+ val accentSky @Composable get() = InstUISemanticColors.Stroke.Accent.sky()
+ val accentStone @Composable get() = InstUISemanticColors.Background.Accent.stone()
+ val accentViolet @Composable get() = InstUISemanticColors.Background.Accent.violet()
+ val visualSeparator @Composable get() = InstUISemanticColors.Background.container()
+ }
+
+ object StrokeWidth {
+ val sm = InstUILayoutSizes.BorderWidth.Sm.sm
+ val md = InstUILayoutSizes.BorderWidth.Md.md
+ val lg = InstUILayoutSizes.BorderWidth.Lg.lg
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISideNavBar.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISideNavBar.kt
new file mode 100644
index 0000000000..59ce3598f5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISideNavBar.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI SideNavBar component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUISideNavBar {
+ object SideNavBar {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val fill @Composable get() = InstUISemanticColors.Icon.Interactive.Action.PrimaryOnColor.base()
+ val fontColor @Composable get() = InstUISemanticColors.Text.base()
+ val minimizedWidth = 60.dp
+ val toggleTransition = "300ms"
+ val width = 94.dp
+ val margin = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val minimizedMargin = 6.dp
+ val contentMargin = 6.dp
+ val contentGap = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x=0rem, y=0.0625rem, blur=0.125rem, spread=0rem, color={color.dropShadow.shadowColor1}, type=dropShadow
+ * Shadow 2: x=0rem, y=0.125rem, blur=0.25rem, spread=0.125rem, color={color.dropShadow.shadowColor2}, type=dropShadow
+ */
+ // val boxShadow: BoxShadow — not supported in Compose
+ val borderRadius = InstUILayoutSizes.BorderRadius.Container.md
+ val minimizedBorderRadius = InstUILayoutSizes.BorderRadius.Container.sm
+ }
+
+ object SideNavBarItem {
+ val iconWrapperHeight = 36.dp
+ val borderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+ val backgroundColor = "transparent"
+ val contentPadding = 6.dp
+ val fontColor @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 14.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val hoverBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Tertiary.hover()
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ // val linkTextDecoration: "none" (CSS-specific, not directly usable in Compose)
+ val selectedBackgroundColor @Composable get() = InstUISemanticColors.Background.brand()
+ val selectedFontColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val innerFocusOutlineColor @Composable get() = InstUISemanticColors.Stroke.Interactive.FocusRing.base()
+ val selectedInnerFocusOutlineColor @Composable get() = InstUISemanticColors.Icon.inverse()
+ val outerFocusOutlineColor = InstUIColors.transparent
+ val selectedOuterFocusOutlineColor = InstUIColors.transparent
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISideNavBarNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISideNavBarNew.kt
new file mode 100644
index 0000000000..3dbf79d368
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISideNavBarNew.kt
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI SideNavBarNew component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUISideNavBarNew {
+ object SideNavBarItemNew {
+ val iconWrapperHeight = 36.dp
+ val borderRadius = InstUILayoutSizes.BorderRadius.Lg.lg
+ val backgroundColor = "transparent"
+ val contentPadding = 6.dp
+ val fontColor @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 14.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val hoverBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Tertiary.hover()
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ // val linkTextDecoration: "none" (CSS-specific, not directly usable in Compose)
+ val selectedBackgroundColor @Composable get() = InstUISemanticColors.Background.brand()
+ val selectedFontColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val innerFocusOutlineColor @Composable get() = InstUISemanticColors.Stroke.Interactive.FocusRing.base()
+ val selectedInnerFocusOutlineColor @Composable get() = InstUISemanticColors.Icon.inverse()
+ val outerFocusOutlineColor = InstUIColors.transparent
+ val selectedOuterFocusOutlineColor = InstUIColors.transparent
+ }
+
+ object SideNavBarNew {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val fill @Composable get() = InstUISemanticColors.Icon.Interactive.Action.PrimaryOnColor.base()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val fontColor @Composable get() = InstUISemanticColors.Text.base()
+ val minimizedWidth = 60.dp
+ val toggleTransition = "300ms"
+ val width = 94.dp
+ val margin = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val minimizedMargin = 6.dp
+ val contentMargin = 6.dp
+ val contentGap = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x=0rem, y=0.0625rem, blur=0.125rem, spread=0rem, color={color.dropShadow.shadowColor1}, type=dropShadow
+ * Shadow 2: x=0rem, y=0.125rem, blur=0.25rem, spread=0.125rem, color={color.dropShadow.shadowColor2}, type=dropShadow
+ */
+ // val boxShadow: BoxShadow — not supported in Compose
+ val borderRadius = InstUILayoutSizes.BorderRadius.Container.md
+ val minimizedBorderRadius = InstUILayoutSizes.BorderRadius.Container.sm
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISourceCodeEditor.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISourceCodeEditor.kt
new file mode 100644
index 0000000000..d2e81610df
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISourceCodeEditor.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI SourceCodeEditor component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUISourceCodeEditor {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Code.code
+ val fontSize = 14.sp
+ val gutterBackground @Composable get() = InstUISemanticColors.Background.muted()
+ val horizontalPadding = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val verticalPadding = 6.dp
+ val focusedSelectionBackgroundColor = "rgba(90,75,227,0.2)"
+ val placeholderBackgroundColor @Composable get() = InstUISemanticColors.Text.Accent.stone()
+ val tagKeywordColor @Composable get() = InstUISemanticColors.Text.Accent.violet()
+ val tagLiteralColor @Composable get() = InstUISemanticColors.Text.Accent.green()
+ val tagStringColor @Composable get() = InstUISemanticColors.Text.Accent.red()
+ val tagDefinitionVariableNameColor @Composable get() = InstUISemanticColors.Text.Accent.blue()
+ val tagLocalVariableNameColor @Composable get() = InstUISemanticColors.Text.Accent.sky()
+ val tagClassNameColor @Composable get() = InstUISemanticColors.Text.Accent.sea()
+ val tagSpecialVariableNameColor @Composable get() = InstUISemanticColors.Text.Accent.sea()
+ val tagDefinitionPropertyNameColor @Composable get() = InstUISemanticColors.Text.Accent.blue()
+ val tagCommentColor @Composable get() = InstUISemanticColors.Text.Accent.orange()
+ val tagMetaColor @Composable get() = InstUISemanticColors.Text.muted()
+ val tagRegExpColor @Composable get() = InstUISemanticColors.Text.Accent.orange()
+ val tagTypeNameColor @Composable get() = InstUISemanticColors.Text.Accent.aurora()
+ val tagInvalidColor @Composable get() = InstUISemanticColors.Text.error()
+ val tagAtomColor @Composable get() = InstUISemanticColors.Text.Accent.blue()
+ val activeLineColor = "#99999912"
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISpinner.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISpinner.kt
new file mode 100644
index 0000000000..73650ca4ea
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUISpinner.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Spinner component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUISpinner {
+ val color @Composable get() = InstUISemanticColors.Icon.info()
+ val inverseColor @Composable get() = InstUISemanticColors.Icon.onColor()
+ val trackColor @Composable get() = InstUISemanticColors.Background.opacity()
+ val strokeWidthXs = 4.dp
+ val strokeWidthSm = 6.dp
+ val strokeWidthMd = 8.dp
+ val strokeWidthLg = 12.dp
+ val containerSizeXs = 24.dp
+ val containerSizeSm = 48.dp
+ val containerSizeMd = 80.dp
+ val containerSizeLg = 112.dp
+ val spinnerSizeXs = 16.dp
+ val spinnerSizeSm = 32.dp
+ val spinnerSizeMd = 56.dp
+ val spinnerSizeLg = 72.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITable.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITable.kt
new file mode 100644
index 0000000000..479e0568c5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITable.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Table component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITable {
+ object Table {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ }
+
+ object TableBody {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ }
+
+ object TableCell {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+
+ object TableColHeader {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+
+ object TableHead {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ }
+
+ object TableRow {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val hoverBorderColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val paddingHorizontal = 0.dp
+ }
+
+ object TableRowHeader {
+ val background @Composable get() = InstUISemanticColors.Background.base()
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val paddingVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val paddingHorizontal = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITabs.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITabs.kt
new file mode 100644
index 0000000000..fa33c0d7e5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITabs.kt
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.primitives.InstUIColors
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Tabs component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITabs {
+ object Tabs {
+ val defaultBackground = InstUIColors.transparent
+ val scrollFadeColor @Composable get() = InstUISemanticColors.Background.base()
+ val scrollOverlayWidthDefault = 80.dp
+ val scrollOverlayWidthSecondary = 48.dp
+ val tabVerticalOffset = 1.dp
+ val zIndex = "1"
+ }
+
+ object TabsPanel {
+ val background = InstUIColors.transparent
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val textColor @Composable get() = InstUISemanticColors.Text.base()
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val defaultOverflowY = "auto"
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ }
+
+ object TabsTab {
+ val defaultTextColor @Composable get() = InstUISemanticColors.Text.base()
+ val defaultHoverBorderColor @Composable get() = InstUISemanticColors.Stroke.base()
+ val defaultSelectedBorderColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSize = 16.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val secondaryTextColor @Composable get() = InstUISemanticColors.Text.base()
+ val secondarySelectedTextColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val secondarySelectedBackground @Composable get() = InstUISemanticColors.Background.brand()
+ val secondarySelectedBorderColor @Composable get() = InstUISemanticColors.Stroke.brand()
+ val zIndex = "1"
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITag.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITag.kt
new file mode 100644
index 0000000000..5d056b04ab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITag.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Tag component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITag {
+ val defaultBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.base()
+ val defaultBackgroundHover @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.hover()
+ val defaultBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.base()
+ val defaultBorderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val defaultBorderStyle = BorderStyle.Solid
+ val inlineBorderStyle = BorderStyle.Solid
+ val defaultBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val inlineBorderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val defaultColor @Composable get() = InstUISemanticColors.Text.base()
+ val inlineColor @Composable get() = InstUISemanticColors.Text.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSizeLarge = 16.sp
+ val fontSizeMedium = 14.sp
+ val fontSizeSmall = 12.sp
+ val heightLarge = 32.dp
+ val heightMedium = 28.dp
+ val heightSmall = 24.dp
+ val iconMargin = 8.dp
+ val inlineBackground @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.base()
+ val inlineBackgroundHover @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.hover()
+ val inlineBorderColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.base()
+ val inlineBorderRadius = InstUILayoutSizes.BorderRadius.Sm.sm
+ val maxWidth = 160.dp
+ val paddingHorizontal = InstUILayoutSizes.Spacing.Padding.container_xxs
+ val paddingHorizontalSmall = InstUILayoutSizes.Spacing.Padding.container_xxs
+ val transitionTiming = "0.2s"
+ val inlineIconColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.base()
+ val inlineIconHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Primary.hover()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIText.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIText.kt
new file mode 100644
index 0000000000..0f05b6e5f2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIText.kt
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Text component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIText {
+ /** Used for introductory or overview text that explains the purpose or context of an entire page. */
+ val descriptionPage = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.base,
+ fontSize = 20.sp,
+ lineHeight = 1.5.em,
+ )
+ /** Used for text that introduces or summarizes a specific section within a page. */
+ val descriptionSection = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.base,
+ fontSize = 16.sp,
+ lineHeight = 1.5.em,
+ )
+ /** Used for standard descriptive body text that provides detailed information. */
+ val content = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.base,
+ fontSize = 16.sp,
+ lineHeight = 1.5.em,
+ )
+ /** Used to highlight key statements or essential information within descriptive text. */
+ val contentImportant = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.strong,
+ fontSize = 16.sp,
+ lineHeight = 1.5.em,
+ )
+ /** Used to style quoted or referenced text distinct from the main content. */
+ val contentQuote = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ // fontWeight: "Medium Italic" — not directly mappable,
+ fontSize = 16.sp,
+ lineHeight = 1.5.em,
+ )
+ /** Used for fine-print or secondary descriptions such as notes or disclaimers. */
+ val contentSmall = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.base,
+ fontSize = 14.sp,
+ lineHeight = 1.5.em,
+ )
+ /** Used for short explanatory text accompanying data visualizations, icons, or UI elements. */
+ val legend = TextStyle(
+ fontFamily = InstUILayoutTypography.FontFamily.Base.base,
+ fontWeight = InstUILayoutTypography.FontWeight.Body.base,
+ fontSize = 12.sp,
+ lineHeight = 1.5.em,
+ )
+ val fontSizeXSmall = 12.sp
+ val fontSizeSmall = 14.sp
+ val fontSizeMedium = 16.sp
+ val fontSizeLarge = 28.sp
+ val fontSizeXLarge = 40.sp
+ val fontSizeXXLarge = 38.sp
+ val fontWeightLight = FontWeight(300)
+ val fontWeightNormal = InstUILayoutTypography.FontWeight.Body.base
+ val fontWeightBold = InstUILayoutTypography.FontWeight.Body.strong
+ val fontWeightImportant = InstUILayoutTypography.FontWeight.Body.strong
+ val fontWeightRegular = InstUILayoutTypography.FontWeight.Body.base
+ val lineHeight = 1.5f
+ val lineHeight100 = 1f
+ val lineHeight125 = 1.25f
+ val lineHeight150 = 1.5f
+ val lineHeightCondensed = 1.25f
+ val lineHeightDouble = 2f
+ val lineHeightFit = 1.125f
+ val paragraphMargin = /* "1.5rem 0rem" — not directly usable in Compose */ 0.dp
+ val letterSpacingCondensed = (-1).sp
+ val letterSpacingExpanded = 1.sp
+ val letterSpacingNormal = 0.sp
+ val aiBackgroundColor @Composable get() = InstUISemanticColors.Background.aiText()
+ val aiColor @Composable get() = InstUISemanticColors.Text.aiColor()
+ val primaryColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.Primary.base()
+ val errorColor @Composable get() = InstUISemanticColors.Text.error()
+ val baseColor @Composable get() = InstUISemanticColors.Text.base()
+ val baseOnColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val inverseColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val mutedColor @Composable get() = InstUISemanticColors.Text.muted()
+ val mutedOnColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val successColor @Composable get() = InstUISemanticColors.Text.success()
+ val warningColor @Composable get() = InstUISemanticColors.Text.warning()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontFamilyMonospace = InstUILayoutTypography.FontFamily.Code.code
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITextArea.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITextArea.kt
new file mode 100644
index 0000000000..824ad595d4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITextArea.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI TextArea component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITextArea {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val backgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.hover()
+ val backgroundReadonlyColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.readonly()
+ val backgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.disabled()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val borderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val borderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val borderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.disabled()
+ val errorBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.base()
+ val successBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.Secondary.base()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Interactive.base
+ val borderWidth = InstUILayoutSizes.BorderWidth.Interactive.base
+ val textColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.base()
+ val textReadonlyColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.readonly()
+ val textDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.disabled()
+ val placeholderColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.placeholder()
+ val placeholderHoverColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.hover()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val fontSizeSm = 14.sp
+ val fontSizeMd = 16.sp
+ val fontSizeLg = 20.sp
+ val gapContent = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val padding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val gapPrimitives = InstUILayoutSizes.Spacing.Gap.inputElements
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITextInput.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITextInput.kt
new file mode 100644
index 0000000000..4cd651c475
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITextInput.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI TextInput component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITextInput {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val backgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.hover()
+ val backgroundReadonlyColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.readonly()
+ val backgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.disabled()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val borderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val borderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val borderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.disabled()
+ val errorBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.base()
+ val successBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.Secondary.base()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Interactive.base
+ val borderWidth = InstUILayoutSizes.BorderWidth.Interactive.base
+ val textColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.base()
+ val textReadonlyColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.readonly()
+ val textDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.disabled()
+ val placeholderColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.placeholder()
+ val placeholderHoverColor @Composable get() = InstUISemanticColors.Text.Interactive.Input.hover()
+ val arrowsContainerWidth = 32.dp
+ val arrowsBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.base()
+ val arrowsBackgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.hover()
+ val arrowsBackgroundActiveColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.active()
+ val arrowsBackgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Secondary.disabled()
+ val arrowsBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.base()
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val fontSizeSm = 14.sp
+ val fontSizeMd = 16.sp
+ val fontSizeLg = 20.sp
+ val heightSm = InstUILayoutSizes.Size.Interactive.height_sm
+ val heightMd = InstUILayoutSizes.Size.Interactive.height_md
+ val heightLg = InstUILayoutSizes.Size.Interactive.height_lg
+ val gapContent = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val paddingHorizontalSm = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val paddingHorizontalMd = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val paddingHorizontalLg = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val arrowsBorderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.hover()
+ val arrowsBorderActiveColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.active()
+ val arrowsBorderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Secondary.disabled()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggle.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggle.kt
new file mode 100644
index 0000000000..b59bc40846
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggle.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutConfig
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Toggle component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIToggle {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val backgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.hover()
+ val backgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.disabled()
+ val backgroundReadonlyColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.readonly()
+ val errorBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.base()
+ val errorBackgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Destructive.Secondary.hover()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val borderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val borderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.disabled()
+ val borderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val borderRadius = InstUILayoutSizes.BorderRadius.Full.full
+ val errorBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.base()
+ val checkedBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.base()
+ val checkedBorderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.hover()
+ val checkedBorderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.disabled()
+ val checkedBorderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val checkedBackgroundColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.base()
+ val checkedBackgroundHoverColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.hover()
+ val checkedBackgroundDisabledColor @Composable get() = InstUISemanticColors.Background.Interactive.Action.Success.disabled()
+ val checkedBackgroundReadonlyColor @Composable get() = InstUISemanticColors.Background.Interactive.Input.readonly()
+ val labelColor @Composable get() = InstUISemanticColors.Text.base()
+ val labelDisabledColor @Composable get() = InstUISemanticColors.Text.Interactive.Disabled.base()
+ val uncheckedIconBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.base()
+ val uncheckedIconErrorBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Destructive.Secondary.base()
+ val uncheckedIconBorderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.hover()
+ val uncheckedIconBorderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.disabled()
+ val uncheckedIconBorderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val checkedIconBorderColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.base()
+ val checkedIconBorderHoverColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.hover()
+ val checkedIconBorderDisabledColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Action.Success.disabled()
+ val marginStart = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val marginEnd = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val marginVertical = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val toggleSize = InstUILayoutSizes.Size.ChoiceControl.height_md
+ val labelFontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val labelFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val labelLineHeightSm = InstUILayoutTypography.LineHeight.Paragraph.textSm
+ val labelLineHeightMd = InstUILayoutTypography.LineHeight.Paragraph.textBase
+ val labelLineHeightLg = InstUILayoutTypography.LineHeight.Paragraph.textBase
+ val labelFontSizeMd = 16.sp
+ val labelFontSizeLg = 20.sp
+ val labelFontSizeSm = 14.sp
+ val checkedIconBorderReadonlyColor @Composable get() = InstUISemanticColors.Stroke.Interactive.Input.readonly()
+ val toggleBackground @Composable get() = InstUISemanticColors.Background.base()
+ val toggleWidth = 40.dp
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation1.dropshadow1}, y={dropShadow.y.elevation1.dropshadow1}, blur={dropShadow.blur.elevation1.dropshadow1}, spread={dropShadow.spread.elevation1.dropshadow1}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation1.dropshadow2}, y={dropShadow.y.elevation1.dropshadow2}, blur={dropShadow.blur.elevation1.dropshadow2}, spread={dropShadow.spread.elevation1.dropshadow2}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ */
+ // val toggleShadow: BoxShadow — not supported in Compose
+ val disabledOpacity = InstUILayoutConfig.Opacity.base
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggleDetails.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggleDetails.kt
new file mode 100644
index 0000000000..78985c36ab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggleDetails.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ToggleDetails component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIToggleDetails {
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontSizeLarge = 20.sp
+ val fontSizeMedium = 16.sp
+ val fontSizeSmall = 14.sp
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val iconMargin = 6.dp
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+ val textColor @Composable get() = InstUISemanticColors.Text.base()
+ val toggleBorderRadius = InstUILayoutSizes.BorderRadius.Interactive.base
+ val toggleBorderStyle = BorderStyle.Solid
+ val toggleBorderWidth = InstUILayoutSizes.BorderWidth.Md.md
+ val togglePadding = 6.dp
+ val contentPaddingSmall = 18.dp
+ val contentPaddingMedium = 18.dp
+ val contentPaddingLarge = 22.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggleGroup.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggleGroup.kt
new file mode 100644
index 0000000000..4d599fd826
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIToggleGroup.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI ToggleGroup component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIToggleGroup {
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.base()
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITooltip.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITooltip.kt
new file mode 100644
index 0000000000..56fa814836
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITooltip.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+
+/**
+ * InstUI Tooltip component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITooltip {
+ val padding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val fontSize = 14.sp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITopNavBar.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITopNavBar.kt
new file mode 100644
index 0000000000..8a6c648cf9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITopNavBar.kt
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI TopNavBar component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITopNavBar {
+ object TopNavBarActionItems {
+ val smallViewportActionItemContainerMargin = 60.dp
+ // val smallViewportActionItemContainerMaxWidth: "50%" (CSS-specific, not directly usable in Compose)
+ val smallViewportDropdownMenuActiveOptionFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val smallViewportDropdownMenuActiveOptionIndicatorSpacing = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val smallViewportDropdownMenuActiveOptionIndicatorWidth = InstUILayoutSizes.BorderWidth.Lg.lg
+ val activeIndicatorWidth = InstUILayoutSizes.BorderWidth.Md.md
+ }
+
+ object TopNavBarBrand {
+ val logoHeight = 36.dp
+ val iconPadding = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val focusOutlineInset = -4.dp
+ }
+
+ object TopNavBarItem {
+ val fontSize = 16.sp
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val fontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val color @Composable get() = InstUISemanticColors.Text.inverse()
+ val colorInverse @Composable get() = InstUISemanticColors.Text.base()
+ val itemInlinePadding = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val itemSpacing = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val iconTextGap = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val activeItemFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ val activeItemIndicatorSpacing = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val activeIndicatorColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val activeIndicatorColorInverse @Composable get() = InstUISemanticColors.Text.base()
+ val smallViewportFontSize = 16.sp
+ }
+
+ object TopNavBarLayout {
+ val desktopBackground @Composable get() = InstUISemanticColors.Background.container()
+ val desktopBackgroundInverse @Composable get() = InstUISemanticColors.Background.container()
+ // val desktopBottomBorder: "none" (CSS-specific, not directly usable in Compose)
+ val desktopFontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val desktopFontSize = 16.sp
+ val desktopFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val desktopHeight = 64.dp
+ val desktopInlinePadding = InstUILayoutSizes.Spacing.Padding.container_xs
+ // val desktopMenuItemsContainerInlineMargin: "0 2.25rem" (CSS-specific, not directly usable in Compose)
+ // val desktopUserContainerInlineMargin: "0.5rem 0" (CSS-specific, not directly usable in Compose)
+ val desktopUserSeparatorColor @Composable get() = InstUISemanticColors.Stroke.muted()
+ val desktopUserSeparatorColorInverse @Composable get() = InstUISemanticColors.Stroke.muted()
+ val desktopUserSeparatorGap = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val desktopUserSeparatorHeight = 24.dp
+ val desktopUserSeparatorWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val desktopZIndex = "9998"
+ val smallViewportAlternativeTitleBlockMargin = "0rem"
+ val smallViewportAlternativeTitleInlineMargin = "0.375rem"
+ val smallViewportBackground @Composable get() = InstUISemanticColors.Background.dark()
+ val smallViewportBackgroundInverse @Composable get() = InstUISemanticColors.Background.muted()
+ // val smallViewportBottomBorder: "none" (CSS-specific, not directly usable in Compose)
+ // val smallViewportBottomBorderInverse: "0.0625rem solid #E8EAEC" (CSS-specific, not directly usable in Compose)
+ val smallViewportDropdownMenuActiveOptionFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ // val smallViewportDropdownMenuActiveOptionIndicatorColor: "currentColor" (CSS-specific, not directly usable in Compose)
+ val smallViewportDropdownMenuActiveOptionIndicatorSpacing = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val smallViewportDropdownMenuActiveOptionIndicatorWidth = InstUILayoutSizes.BorderWidth.Lg.lg
+ val smallViewportFontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val smallViewportFontWeight = InstUILayoutTypography.FontWeight.Body.base
+ val smallViewportHeight = "3.5rem"
+ val smallViewportInlinePadding = 4.dp
+ val smallViewportTrayPosition = "fixed"
+ val smallViewportTrayZIndex = "9998"
+ val smallViewportZIndex = "10000"
+ }
+
+ object TopNavBarMenuItems {
+ val desktopItemSpacing = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val desktopMaxWidth = "100%"
+ val desktopSubmenuActiveOptionFontWeight = InstUILayoutTypography.FontWeight.Body.strong
+ // val desktopSubmenuActiveOptionIndicatorColor: "currentColor" (CSS-specific, not directly usable in Compose)
+ val desktopSubmenuActiveOptionIndicatorSpacing = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val desktopSubmenuActiveOptionIndicatorWidth = 2.dp
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITray.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITray.kt
new file mode 100644
index 0000000000..38720050cc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITray.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI Tray component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITray {
+ val backgroundColor @Composable get() = InstUISemanticColors.Background.container()
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.Container.base()
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ /**
+ * Box shadow (not directly representable in Compose).
+ * Shadow 1: x={dropShadow.x.elevation4.dropshadow1}, y={dropShadow.y.elevation4.dropshadow1}, blur={dropShadow.blur.elevation4.dropshadow1}, spread={dropShadow.spread.elevation4.dropshadow1}, color={color.dropShadow.shadowColor2}, type=dropShadow
+ * Shadow 2: x={dropShadow.x.elevation4.dropshadow2}, y={dropShadow.y.elevation4.dropshadow2}, blur={dropShadow.blur.elevation4.dropshadow2}, spread={dropShadow.spread.elevation4.dropshadow2}, color={color.dropShadow.shadowColor1}, type=dropShadow
+ */
+ // val boxShadow: BoxShadow — not supported in Compose
+ val widthXs = 256.dp
+ val widthSm = 320.dp
+ val widthMd = 480.dp
+ val widthLg = 768.dp
+ val widthXl = 992.dp
+ val padding = InstUILayoutSizes.Spacing.Padding.container_md
+ val zIndex = "9999"
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITreeBrowser.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITreeBrowser.kt
new file mode 100644
index 0000000000..09c114a79e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITreeBrowser.kt
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.semantic.InstUILayoutSizes
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI TreeBrowser component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITreeBrowser {
+ object TreeBrowser {
+ val borderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ }
+
+ object TreeBrowserTreeButton {
+ val baseSpacingLarge = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val baseSpacingMedium = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val baseSpacingSmall = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.strong()
+ val borderRadius = InstUILayoutSizes.BorderRadius.Md.md
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val descriptorFontSizeLarge = 14.sp
+ val descriptorFontSizeMedium = 12.sp
+ val descriptorFontSizeSmall = 12.sp
+ val descriptorMarginTop = InstUILayoutSizes.Spacing.Space2xs.space2xs
+ val descriptorTextColor @Composable get() = InstUISemanticColors.Text.base()
+ val hoverBackgroundColor @Composable get() = InstUISemanticColors.Background.brand()
+ val hoverTextColor @Composable get() = InstUISemanticColors.Text.inverse()
+ val nameFontSizeLarge = 16.sp
+ val nameFontSizeMedium = 14.sp
+ val nameFontSizeSmall = 12.sp
+ val nameTextColor @Composable get() = InstUISemanticColors.Text.Interactive.Navigation.Primary.base()
+ val selectedBackgroundColor @Composable get() = InstUISemanticColors.Background.Accent.grey()
+ val selectedTextColor @Composable get() = InstUISemanticColors.Text.onColor()
+ val textLineHeight = InstUILayoutTypography.LineHeight.Standalone.base
+ val iconsMarginRightSmall = InstUILayoutSizes.Spacing.SpaceXs.spaceXs
+ val iconsMarginRightMedium = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val iconsMarginRightLarge = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ }
+
+ object TreeBrowserTreeCollection {
+ val baseSpacingLarge = InstUILayoutSizes.Spacing.SpaceLg.spaceLg
+ val baseSpacingMedium = InstUILayoutSizes.Spacing.SpaceMd.spaceMd
+ val baseSpacingSmall = InstUILayoutSizes.Spacing.SpaceSm.spaceSm
+ val borderColor @Composable get() = InstUISemanticColors.Stroke.strong()
+ val borderWidth = InstUILayoutSizes.BorderWidth.Sm.sm
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITruncateText.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITruncateText.kt
new file mode 100644
index 0000000000..39bcbfe379
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUITruncateText.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+
+/**
+ * InstUI TruncateText component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUITruncateText {
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val lineHeight = InstUILayoutTypography.LineHeight.Paragraph.base
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIView.kt b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIView.kt
new file mode 100644
index 0000000000..85f4c93406
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/component/InstUIView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.component
+
+import androidx.compose.runtime.Composable
+import com.instructure.instui.BorderStyle
+import com.instructure.instui.token.semantic.InstUILayoutTypography
+import com.instructure.instui.token.semantic.InstUISemanticColors
+
+/**
+ * InstUI View component tokens.
+ *
+ * Generated from instructure-ui component token definitions.
+ * These tokens reference the semantic layer for theme-aware values.
+ */
+object InstUIView {
+ val fontFamily = InstUILayoutTypography.FontFamily.Base.base
+ val color @Composable get() = InstUISemanticColors.Text.base()
+ val colorPrimaryInverse @Composable get() = InstUISemanticColors.Text.inverse()
+ val borderColorPrimary @Composable get() = InstUISemanticColors.Stroke.muted()
+ val borderColorSecondary @Composable get() = InstUISemanticColors.Stroke.base()
+ val borderColorSuccess @Composable get() = InstUISemanticColors.Stroke.success()
+ val borderColorBrand @Composable get() = InstUISemanticColors.Stroke.brand()
+ val borderColorInfo @Composable get() = InstUISemanticColors.Stroke.info()
+ val borderColorAlert @Composable get() = InstUISemanticColors.Stroke.info()
+ val borderColorWarning @Composable get() = InstUISemanticColors.Stroke.warning()
+ val borderColorDanger @Composable get() = InstUISemanticColors.Stroke.error()
+ val borderColorTransparent = "#00000000"
+ val debugOutlineColor @Composable get() = InstUISemanticColors.Stroke.error()
+ val backgroundPrimary @Composable get() = InstUISemanticColors.Background.ElevatedSurface.base()
+ val backgroundSecondary @Composable get() = InstUISemanticColors.Background.muted()
+ val backgroundPrimaryInverse @Composable get() = InstUISemanticColors.Background.ElevatedSurface.inverse()
+ val backgroundBrand @Composable get() = InstUISemanticColors.Background.brand()
+ val backgroundInfo @Composable get() = InstUISemanticColors.Background.info()
+ val backgroundAlert @Composable get() = InstUISemanticColors.Background.info()
+ val backgroundSuccess @Composable get() = InstUISemanticColors.Background.success()
+ val backgroundDanger @Composable get() = InstUISemanticColors.Background.error()
+ val backgroundWarning @Composable get() = InstUISemanticColors.Background.warning()
+ val stackingTopmost = "9999"
+ val stackingAbove = "1"
+ val stackingBelow = "-1"
+ val stackingDeepest = "-9999"
+ val borderStyle = BorderStyle.Solid
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/InstUIIcons.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/InstUIIcons.kt
new file mode 100644
index 0000000000..539c2595fe
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/InstUIIcons.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon
+
+/**
+ * InstUI Icons.
+ *
+ * Generated from instructure-ui SVG icons.
+ * Access icons as extension properties: InstUIIcons.Line.ArrowLeft
+ *
+ * Categories:
+ * - [Line]: Outline/stroke icons (386 icons)
+ * - [Solid]: Filled icons (386 icons)
+ * - [Custom]: Special-purpose icons (85 icons)
+ */
+object InstUIIcons {
+ object Line
+ object Solid
+ object Custom
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Accessibility2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Accessibility2.kt
new file mode 100644
index 0000000000..ab58e546bf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Accessibility2.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Accessibility2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Accessibility2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M8.91353 18.0682C8.66654 18.5621 8.86676 19.1628 9.36074 19.4098C9.85472 19.6568 10.4554 19.4566 10.7024 18.9626L9.80795 18.5154L8.91353 18.0682ZM13.3903 18.9626C13.6373 19.4566 14.2379 19.6568 14.7319 19.4098C15.2259 19.1628 15.4261 18.5621 15.1791 18.0682L14.2847 18.5154L13.3903 18.9626ZM7.88581 8.61321C7.36186 8.43856 6.79554 8.72172 6.6209 9.24566C6.44625 9.76961 6.72941 10.3359 7.25335 10.5106L7.56958 9.56189L7.88581 8.61321ZM16.8393 10.5106C17.3632 10.3359 17.6464 9.76961 17.4718 9.24566C17.2971 8.72172 16.7308 8.43856 16.2068 8.61321L16.5231 9.56189L16.8393 10.5106ZM22 12H21C21 16.9706 16.9706 21 12 21V22V23C18.0751 23 23 18.0751 23 12H22ZM12 22V21C7.02944 21 3 16.9706 3 12H2H1C1 18.0751 5.92487 23 12 23V22ZM2 12H3C3 7.02944 7.02944 3 12 3V2V1C5.92487 1 1 5.92487 1 12H2ZM12 2V3C16.9706 3 21 7.02944 21 12H22H23C23 5.92487 18.0751 1 12 1V2ZM13 6.48462H12C12 6.4637 12.0026 6.44843 12.0047 6.43952C12.0068 6.43075 12.0086 6.42737 12.0079 6.42892C12.0072 6.43046 12.0047 6.43524 11.9997 6.44232C11.9947 6.44938 11.9882 6.45721 11.9804 6.46501C11.9726 6.47281 11.9648 6.47931 11.9577 6.48432C11.9506 6.48934 11.9458 6.49178 11.9443 6.4925C11.9428 6.49322 11.9461 6.49144 11.9549 6.48935C11.9638 6.48723 11.9791 6.48462 12 6.48462V7.48462V8.48462C12.5752 8.48462 13.0668 8.20707 13.3946 7.87923C13.7225 7.55138 14 7.05985 14 6.48462H13ZM12 7.48462V6.48462C12.0205 6.48462 12.0355 6.48717 12.0442 6.48924C12.0528 6.49128 12.0561 6.49301 12.0546 6.49229C12.053 6.49158 12.0483 6.48917 12.0413 6.48425C12.0344 6.47934 12.0267 6.47297 12.0191 6.46533C12.0114 6.4577 12.0051 6.45004 12.0002 6.44317C11.9953 6.43628 11.9929 6.43165 11.9923 6.43021C11.9916 6.42877 11.9934 6.43213 11.9954 6.44074C11.9975 6.44949 12 6.46436 12 6.48462H11H10C10 7.06033 10.277 7.55217 10.6059 7.88063C10.9347 8.20888 11.4262 8.48462 12 8.48462V7.48462ZM11 6.48462H12C12 6.50415 11.9976 6.51844 11.9956 6.52684C11.9937 6.5351 11.992 6.53828 11.9927 6.53685C11.9933 6.53542 11.9956 6.53092 12.0003 6.52425C12.005 6.5176 12.0111 6.51021 12.0185 6.50287C12.0258 6.49553 12.0331 6.48944 12.0397 6.48478C12.0463 6.48009 12.0508 6.47785 12.0521 6.47723C12.0534 6.47661 12.0502 6.4783 12.0419 6.48025C12.0335 6.48224 12.0193 6.48462 12 6.48462V5.48462V4.48462C11.4253 4.48462 10.9332 4.75926 10.6033 5.08964C10.2735 5.41984 10 5.9116 10 6.48462H11ZM12 5.48462V6.48462C11.9803 6.48462 11.9658 6.48218 11.9572 6.48014C11.9488 6.47813 11.9454 6.4764 11.9468 6.47702C11.9481 6.47765 11.9526 6.47993 11.9593 6.4847C11.966 6.48946 11.9735 6.49568 11.981 6.50319C11.9885 6.5107 11.9947 6.51826 11.9996 6.5251C12.0044 6.53195 12.0068 6.53661 12.0075 6.53814C12.0082 6.53968 12.0065 6.53647 12.0045 6.52805C12.0025 6.5195 12 6.5048 12 6.48462H13H14C14 5.91207 13.7259 5.42063 13.3973 5.09105C13.0683 4.76107 12.5761 4.48462 12 4.48462V5.48462ZM9.80795 18.5154L10.7024 18.9626L12.9408 14.4858L12.0463 14.0386L11.1519 13.5914L8.91353 18.0682L9.80795 18.5154ZM12.0463 14.0386L11.1519 14.4858L13.3903 18.9626L14.2847 18.5154L15.1791 18.0682L12.9408 13.5914L12.0463 14.0386ZM7.56958 9.56189L7.25335 10.5106L11.7301 12.0028L12.0463 11.0541L12.3626 10.1055L7.88581 8.61321L7.56958 9.56189ZM12.0463 11.0541L12.3626 12.0028L16.8393 10.5106L16.5231 9.56189L16.2068 8.61321L11.7301 10.1055L12.0463 11.0541ZM12.0463 11.0541H11.0463V14.0386H12.0463H13.0463V11.0541H12.0463Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Accessibility2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Accessibility2,
+ contentDescription = "Accessibility2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/AiInfo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/AiInfo.kt
new file mode 100644
index 0000000000..d783a523ee
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/AiInfo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.AiInfo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.AiInfo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M15.6215 9.09155V15.0597M7.25786 15.0598L9.19423 9.4645C9.24716 9.31141 9.34651 9.17864 9.47844 9.08467C9.61037 8.99069 9.76832 8.94019 9.9303 8.94019C10.0923 8.94019 10.2502 8.99069 10.3822 9.08467C10.5141 9.17864 10.6134 9.31141 10.6664 9.4645L12.6027 15.0598M7.79008 13.5327H12.0706M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiInfoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.AiInfo,
+ contentDescription = "AiInfo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Apps.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Apps.kt
new file mode 100644
index 0000000000..3dd17b4890
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Apps.kt
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Apps: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Apps",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.2 3H3.8C3.35817 3 3 3.35817 3 3.8V6.2C3 6.64183 3.35817 7 3.8 7H6.2C6.64183 7 7 6.64183 7 6.2V3.8C7 3.35817 6.64183 3 6.2 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.2 10H3.8C3.35817 10 3 10.3582 3 10.8V13.2C3 13.6418 3.35817 14 3.8 14H6.2C6.64183 14 7 13.6418 7 13.2V10.8C7 10.3582 6.64183 10 6.2 10Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.2 17H3.8C3.35817 17 3 17.3582 3 17.8V20.2C3 20.6418 3.35817 21 3.8 21H6.2C6.64183 21 7 20.6418 7 20.2V17.8C7 17.3582 6.64183 17 6.2 17Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M13.2 3H10.8C10.3582 3 10 3.35817 10 3.8V6.2C10 6.64183 10.3582 7 10.8 7H13.2C13.6418 7 14 6.64183 14 6.2V3.8C14 3.35817 13.6418 3 13.2 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M13.2 10H10.8C10.3582 10 10 10.3582 10 10.8V13.2C10 13.6418 10.3582 14 10.8 14H13.2C13.6418 14 14 13.6418 14 13.2V10.8C14 10.3582 13.6418 10 13.2 10Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M13.2 17H10.8C10.3582 17 10 17.3582 10 17.8V20.2C10 20.6418 10.3582 21 10.8 21H13.2C13.6418 21 14 20.6418 14 20.2V17.8C14 17.3582 13.6418 17 13.2 17Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M20.2 3H17.8C17.3582 3 17 3.35817 17 3.8V6.2C17 6.64183 17.3582 7 17.8 7H20.2C20.6418 7 21 6.64183 21 6.2V3.8C21 3.35817 20.6418 3 20.2 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M20.2 10H17.8C17.3582 10 17 10.3582 17 10.8V13.2C17 13.6418 17.3582 14 17.8 14H20.2C20.6418 14 21 13.6418 21 13.2V10.8C21 10.3582 20.6418 10 20.2 10Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M20.2 17H17.8C17.3582 17 17 17.3582 17 17.8V20.2C17 20.6418 17.3582 21 17.8 21H20.2C20.6418 21 21 20.6418 21 20.2V17.8C21 17.3582 20.6418 17 20.2 17Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AppsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Apps,
+ contentDescription = "Apps",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BackgroundColor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BackgroundColor.kt
new file mode 100644
index 0000000000..5238d68ee1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BackgroundColor.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.BackgroundColor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.BackgroundColor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M7.5 16.9988L11.539 7.30882C11.577 7.21772 11.6411 7.13991 11.7232 7.08517C11.8053 7.03043 11.9018 7.00122 12.0005 7.00122C12.0992 7.00122 12.1957 7.03043 12.2778 7.08517C12.3599 7.13991 12.424 7.21772 12.462 7.30882L16.5 16.9988M8.80402 13.9988H15.196M5 3H19C20.1046 3 21 3.89543 21 5V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V5C3 3.89543 3.89543 3 5 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BackgroundColorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.BackgroundColor,
+ contentDescription = "BackgroundColor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BellSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BellSolid.kt
new file mode 100644
index 0000000000..3d73dcb740
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BellSolid.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.BellSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.BellSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10.2679 21C10.4435 21.304 10.696 21.5565 11 21.732C11.304 21.9075 11.6489 21.9999 11.9999 21.9999C12.351 21.9999 12.6959 21.9075 12.9999 21.732C13.3039 21.5565 13.5564 21.304 13.7319 21"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M3.262 15.326C3.13137 15.4692 3.04516 15.6472 3.01386 15.8385C2.98256 16.0298 3.00752 16.226 3.08571 16.4034C3.1639 16.5807 3.29194 16.7316 3.45426 16.8375C3.61658 16.9434 3.80618 16.9999 4 17H20C20.1938 17.0001 20.3834 16.9438 20.5459 16.8381C20.7083 16.7324 20.8365 16.5817 20.9149 16.4045C20.9933 16.2273 21.0185 16.0311 20.9874 15.8398C20.9564 15.6485 20.8704 15.4703 20.74 15.327C19.41 13.956 18 12.499 18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 12.499 4.589 13.956 3.262 15.326Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10.2679 21C10.4435 21.304 10.696 21.5565 11 21.732C11.304 21.9075 11.6489 21.9999 11.9999 21.9999C12.351 21.9999 12.6959 21.9075 12.9999 21.732C13.3039 21.5565 13.5564 21.304 13.7319 21M3.262 15.326C3.13137 15.4692 3.04516 15.6472 3.01386 15.8385C2.98256 16.0298 3.00752 16.226 3.08571 16.4034C3.1639 16.5807 3.29194 16.7316 3.45426 16.8375C3.61658 16.9434 3.80618 16.9999 4 17H20C20.1938 17.0001 20.3834 16.9438 20.5459 16.8381C20.7083 16.7324 20.8365 16.5817 20.9149 16.4045C20.9933 16.2273 21.0185 16.0311 20.9874 15.8398C20.9564 15.6485 20.8704 15.4703 20.74 15.327C19.41 13.956 18 12.499 18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 12.499 4.589 13.956 3.262 15.326Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BellSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.BellSolid,
+ contentDescription = "BellSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BookmarkSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BookmarkSolid.kt
new file mode 100644
index 0000000000..61e655bd86
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/BookmarkSolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.BookmarkSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.BookmarkSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M19 21L12 17L5 21V5C5 4.46957 5.21071 3.96086 5.58579 3.58579C5.96086 3.21071 6.46957 3 7 3H17C17.5304 3 18.0391 3.21071 18.4142 3.58579C18.7893 3.96086 19 4.46957 19 5V21Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BookmarkSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.BookmarkSolid,
+ contentDescription = "BookmarkSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CalculatorDesmos.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CalculatorDesmos.kt
new file mode 100644
index 0000000000..dc586afaf7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CalculatorDesmos.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CalculatorDesmos: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CalculatorDesmos",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M8 6C8 6 10 4.5 12 6C14 7.5 16 6 16 6M16 14V18M16 10H16.01M12 10H12.01M8 10H8.01M12 14H12.01M8 14H8.01M12 18H12.01M8 18H8.01M6 2H18C19.1046 2 20 2.89543 20 4V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20V4C4 2.89543 4.89543 2 6 2Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalculatorDesmosPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CalculatorDesmos,
+ contentDescription = "CalculatorDesmos",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CanvasLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CanvasLogo.kt
new file mode 100644
index 0000000000..8605515d36
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CanvasLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CanvasLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CanvasLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M958.568 277.97C1100.42 277.97 1216.48 171.94 1233.67 34.3881 1146.27 12.8955 1054.57 0 958.568 0 864.001 0 770.867 12.8955 683.464 34.3881 700.658 171.94 816.718 277.97 958.568 277.97ZM35.8207 682.031C173.373 699.225 279.403 815.285 279.403 957.136 279.403 1098.99 173.373 1215.05 35.8207 1232.24 12.8953 1144.84 1.43262 1051.7 1.43262 957.136 1.43262 862.569 12.8953 769.434 35.8207 682.031ZM528.713 957.142C528.713 1005.41 489.581 1044.55 441.31 1044.55 393.038 1044.55 353.907 1005.41 353.907 957.142 353.907 908.871 393.038 869.74 441.31 869.74 489.581 869.74 528.713 908.871 528.713 957.142ZM1642.03 957.136C1642.03 1098.99 1748.06 1215.05 1885.61 1232.24 1908.54 1144.84 1920 1051.7 1920 957.136 1920 862.569 1908.54 769.434 1885.61 682.031 1748.06 699.225 1642.03 815.285 1642.03 957.136ZM1567.51 957.142C1567.51 1005.41 1528.38 1044.55 1480.11 1044.55 1431.84 1044.55 1392.71 1005.41 1392.71 957.142 1392.71 908.871 1431.84 869.74 1480.11 869.74 1528.38 869.74 1567.51 908.871 1567.51 957.142ZM958.568 1640.6C816.718 1640.6 700.658 1746.63 683.464 1884.18 770.867 1907.11 864.001 1918.57 958.568 1918.57 1053.14 1918.57 1146.27 1907.11 1233.67 1884.18 1216.48 1746.63 1100.42 1640.6 958.568 1640.6ZM1045.98 1480.11C1045.98 1528.38 1006.85 1567.51 958.575 1567.51 910.304 1567.51 871.172 1528.38 871.172 1480.11 871.172 1431.84 910.304 1392.71 958.575 1392.71 1006.85 1392.71 1045.98 1431.84 1045.98 1480.11ZM1045.98 439.877C1045.98 488.148 1006.85 527.28 958.575 527.28 910.304 527.28 871.172 488.148 871.172 439.877 871.172 391.606 910.304 352.474 958.575 352.474 1006.85 352.474 1045.98 391.606 1045.98 439.877ZM1441.44 1439.99C1341.15 1540.29 1333.98 1697.91 1418.52 1806.8 1579 1712.23 1713.68 1577.55 1806.82 1418.5 1699.35 1332.53 1541.74 1339.7 1441.44 1439.99ZM1414.21 1325.37C1414.21 1373.64 1375.08 1412.77 1326.8 1412.77 1278.53 1412.77 1239.4 1373.64 1239.4 1325.37 1239.4 1277.1 1278.53 1237.97 1326.8 1237.97 1375.08 1237.97 1414.21 1277.1 1414.21 1325.37ZM478.577 477.145C578.875 376.846 586.039 219.234 501.502 110.339 341.024 204.906 206.338 339.592 113.203 498.637 220.666 584.607 378.278 576.01 478.577 477.145ZM679.155 590.32C679.155 638.591 640.024 677.723 591.752 677.723 543.481 677.723 504.349 638.591 504.349 590.32 504.349 542.048 543.481 502.917 591.752 502.917 640.024 502.917 679.155 542.048 679.155 590.32ZM1440 475.712C1540.3 576.01 1697.91 583.174 1806.8 498.637 1712.24 338.159 1577.55 203.473 1418.51 110.339 1332.54 217.801 1341.13 375.413 1440 475.712ZM1414.21 590.32C1414.21 638.591 1375.08 677.723 1326.8 677.723 1278.53 677.723 1239.4 638.591 1239.4 590.32 1239.4 542.048 1278.53 502.917 1326.8 502.917 1375.08 502.917 1414.21 542.048 1414.21 590.32ZM477.145 1438.58C376.846 1338.28 219.234 1331.12 110.339 1415.65 204.906 1576.13 339.593 1710.82 498.637 1805.39 584.607 1696.49 577.443 1538.88 477.145 1438.58ZM679.155 1325.37C679.155 1373.64 640.024 1412.77 591.752 1412.77 543.481 1412.77 504.349 1373.64 504.349 1325.37 504.349 1277.1 543.481 1237.97 591.752 1237.97 640.024 1237.97 679.155 1277.1 679.155 1325.37Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CanvasLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CanvasLogo,
+ contentDescription = "CanvasLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CaptionsSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CaptionsSolid.kt
new file mode 100644
index 0000000000..5f0d31a3d6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CaptionsSolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CaptionsSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CaptionsSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M19 4C20.6569 4 22 5.34315 22 7V17C22 18.6569 20.6569 20 19 20H5C3.34315 20 2 18.6569 2 17V7C2 5.34315 3.34315 4 5 4H19ZM7 14C6.44772 14 6 14.4477 6 15C6 15.5523 6.44772 16 7 16H11C11.5523 16 12 15.5523 12 15C12 14.4477 11.5523 14 11 14H7ZM15 14C14.4477 14 14 14.4477 14 15C14 15.5523 14.4477 16 15 16H17C17.5523 16 18 15.5523 18 15C18 14.4477 17.5523 14 17 14H15ZM7 10C6.44772 10 6 10.4477 6 11C6 11.5523 6.44772 12 7 12H9C9.55228 12 10 11.5523 10 11C10 10.4477 9.55228 10 9 10H7ZM13 10C12.4477 10 12 10.4477 12 11C12 11.5523 12.4477 12 13 12H17C17.5523 12 18 11.5523 18 11C18 10.4477 17.5523 10 17 10H13Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CaptionsSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CaptionsSolid,
+ contentDescription = "CaptionsSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleAlpha.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleAlpha.kt
new file mode 100644
index 0000000000..e59b6a15f1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleAlpha.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleAlpha: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleAlpha",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M16.553 10.2424C15.5104 12.6825 11.6378 16.2708 8.95667 14.5484C6.27557 12.826 9.85038 7.22826 12.0846 8.08946C14.3188 8.95065 14.3189 12.2518 14.3189 13.6871C14.7656 14.5483 15.2125 14.9789 17 14.1177"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleAlphaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleAlpha,
+ contentDescription = "CircleAlpha",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowDownRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowDownRight.kt
new file mode 100644
index 0000000000..4f44037b54
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowDownRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleArrowDownRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleArrowDownRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9.17157 14.8284H14.8284M14.8284 14.8284V9.17157M14.8284 14.8284L9.17157 9.17157M19.0711 19.0711C15.1658 22.9763 8.83418 22.9763 4.92893 19.0711C1.02369 15.1658 1.02369 8.83418 4.92893 4.92893C8.83418 1.02369 15.1658 1.02369 19.0711 4.92893C22.9763 8.83418 22.9763 15.1658 19.0711 19.0711Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowDownRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleArrowDownRight,
+ contentDescription = "CircleArrowDownRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowInLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowInLeft.kt
new file mode 100644
index 0000000000..72ede4b50d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowInLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleArrowInLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleArrowInLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M19.0711 4.92894C17.6725 3.53041 15.8907 2.578 13.9509 2.19215C12.0111 1.8063 10.0004 2.00433 8.17317 2.76121C6.3459 3.51809 4.78412 4.79981 3.6853 6.4443C2.58649 8.08879 2 10.0222 2 12C2 13.9778 2.58649 15.9112 3.6853 17.5557C4.78412 19.2002 6.3459 20.4819 8.17317 21.2388C10.0004 21.9957 12.0111 22.1937 13.9509 21.8079C15.8907 21.422 17.6725 20.4696 19.0711 19.0711M8.99999 12L22 12.0001M8.99999 12L13.2426 16.2427M8.99999 12L13.2426 7.75738"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowInLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleArrowInLeft,
+ contentDescription = "CircleArrowInLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowInRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowInRight.kt
new file mode 100644
index 0000000000..3b71a4892e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowInRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleArrowInRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleArrowInRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M4.92893 4.92894C6.32746 3.53041 8.10929 2.578 10.0491 2.19215C11.9889 1.8063 13.9996 2.00433 15.8268 2.76121C17.6541 3.51809 19.2159 4.79981 20.3147 6.4443C21.4135 8.08879 22 10.0222 22 12C22 13.9778 21.4135 15.9112 20.3147 17.5557C19.2159 19.2002 17.6541 20.4819 15.8268 21.2388C13.9996 21.9957 11.9889 22.1937 10.0491 21.8079C8.10929 21.422 6.32746 20.4696 4.92893 19.0711M15 12L2 12.0001M15 12L10.7574 16.2427M15 12L10.7574 7.75738"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowInRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleArrowInRight,
+ contentDescription = "CircleArrowInRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowUpRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowUpRight.kt
new file mode 100644
index 0000000000..f02e612602
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleArrowUpRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleArrowUpRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleArrowUpRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M14.8284 14.8285V9.1717M14.8284 9.1717H9.17157M14.8284 9.1717L9.17157 14.8285M19.0711 4.92905C22.9763 8.8343 22.9763 15.1659 19.0711 19.0712C15.1658 22.9764 8.83418 22.9764 4.92893 19.0712C1.02369 15.1659 1.02369 8.8343 4.92893 4.92905C8.83418 1.02381 15.1658 1.02381 19.0711 4.92905Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowUpRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleArrowUpRight,
+ contentDescription = "CircleArrowUpRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleMu.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleMu.kt
new file mode 100644
index 0000000000..1ee558e892
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleMu.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleMu: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleMu",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M14.6857 11.266C14.6853 12.03 14.3964 12.7626 13.8823 13.3028C13.3679 13.8434 12.6703 14.1471 11.9428 14.1471C11.2154 14.1471 10.5177 13.8434 10.0033 13.3028C9.48893 12.7623 9.19995 12.0292 9.19995 11.2647M14.6857 11.266V12.5C14.6857 13.3737 14.5998 13.8822 15.2 14.5M14.6857 11.266L14.6857 8.5M9.19995 11.2647V8.5M9.19995 11.2647V16.5"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleMuPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleMu,
+ contentDescription = "CircleMu",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleSigma.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleSigma.kt
new file mode 100644
index 0000000000..ab65954c6f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CircleSigma.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CircleSigma: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CircleSigma",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 8.5C10.3431 8.5 9 10.067 9 12C9 13.933 10.3431 15.5 12 15.5C13.6569 15.5 15 13.933 15 12C15 10.067 13.6569 8.5 12 8.5ZM12 8.5H16.5"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleSigmaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CircleSigma,
+ contentDescription = "CircleSigma",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionCheck.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionCheck.kt
new file mode 100644
index 0000000000..4ddd37afa3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionCheck.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ClosedCaptionCheck: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ClosedCaptionCheck",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10.0001 9.17C9.54769 9.01087 9.06376 8.96249 8.58885 9.02894C8.11393 9.09538 7.66186 9.2747 7.27054 9.55188C6.87921 9.82905 6.56003 10.196 6.33975 10.6219C6.11947 11.0479 6.00452 11.5205 6.00452 12C6.00452 12.4795 6.11947 12.9521 6.33975 13.3781C6.56003 13.804 6.87921 14.171 7.27054 14.4481C7.66186 14.7253 8.11393 14.9046 8.58885 14.9711C9.06376 15.0375 9.54769 14.9891 10.0001 14.83M13.3398 10.6219C13.1195 11.0479 13.0045 11.5205 13.0045 12C13.0045 12.4795 13.1195 12.9521 13.3398 13.3781C13.56 13.804 13.8792 14.171 14.2705 14.4481C14.6619 14.7253 15.1139 14.9046 15.5888 14.9711C16.0638 15.0375 16.5477 14.9891 17.0001 14.83M12.5888 5H4C2.89543 5 2 5.89543 2 7V17C2 18.1046 2.89543 19 4 19H20C21.1046 19 22 18.1046 22 17V11"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M16 7L18 9L22 5"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptionCheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ClosedCaptionCheck,
+ contentDescription = "ClosedCaptionCheck",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionSolid.kt
new file mode 100644
index 0000000000..040c0e8cb9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionSolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ClosedCaptionSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ClosedCaptionSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M20 4C21.6569 4 23 5.34315 23 7V17C23 18.6569 21.6569 20 20 20H4C2.34315 20 1 18.6569 1 17V7C1 5.34315 2.34315 4 4 4H20ZM10.332 8.22656C9.7291 8.01451 9.08318 7.95058 8.4502 8.03906C7.81751 8.12766 7.21479 8.36623 6.69336 8.73535C6.17181 9.10476 5.74584 9.59447 5.45215 10.1621C5.15844 10.7301 5.00488 11.3606 5.00488 12C5.00488 12.6394 5.15844 13.2699 5.45215 13.8379C5.74584 14.4055 6.17181 14.8952 6.69336 15.2646C7.21479 15.6338 7.81751 15.8723 8.4502 15.9609C9.08318 16.0494 9.7291 15.9855 10.332 15.7734C10.8527 15.59 11.1265 15.0188 10.9434 14.498C10.7601 13.9774 10.1897 13.704 9.66895 13.8867C9.36752 13.9928 9.044 14.0247 8.72754 13.9805C8.41115 13.9362 8.10937 13.8164 7.84863 13.6318C7.58802 13.4472 7.3753 13.2026 7.22852 12.9189C7.08166 12.635 7.00488 12.3197 7.00488 12C7.00488 11.6803 7.08166 11.365 7.22852 11.0811C7.3753 10.7974 7.58802 10.5528 7.84863 10.3682C8.10937 10.1836 8.41115 10.0638 8.72754 10.0195C9.044 9.97533 9.36752 10.0072 9.66895 10.1133C10.1897 10.296 10.7601 10.0226 10.9434 9.50195C11.1265 8.98115 10.8527 8.40998 10.332 8.22656ZM17.332 8.22656C16.7291 8.01451 16.0832 7.95058 15.4502 8.03906C14.8175 8.12766 14.2148 8.36623 13.6934 8.73535C13.1718 9.10476 12.7458 9.59447 12.4521 10.1621C12.1584 10.7301 12.0049 11.3606 12.0049 12C12.0049 12.6394 12.1584 13.2699 12.4521 13.8379C12.7458 14.4055 13.1718 14.8952 13.6934 15.2646C14.2148 15.6338 14.8175 15.8723 15.4502 15.9609C16.0832 16.0494 16.7291 15.9855 17.332 15.7734C17.8527 15.59 18.1265 15.0188 17.9434 14.498C17.7601 13.9774 17.1897 13.704 16.6689 13.8867C16.3675 13.9928 16.044 14.0247 15.7275 13.9805C15.4112 13.9362 15.1094 13.8164 14.8486 13.6318C14.588 13.4472 14.3753 13.2026 14.2285 12.9189C14.0817 12.635 14.0049 12.3197 14.0049 12C14.0049 11.6803 14.0817 11.365 14.2285 11.0811C14.3753 10.7974 14.588 10.5528 14.8486 10.3682C15.1094 10.1836 15.4112 10.0638 15.7275 10.0195C16.044 9.97533 16.3675 10.0072 16.6689 10.1133C17.1897 10.296 17.7601 10.0226 17.9434 9.50195C18.1265 8.98115 17.8527 8.40998 17.332 8.22656Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptionSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ClosedCaptionSolid,
+ contentDescription = "ClosedCaptionSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionX.kt
new file mode 100644
index 0000000000..09403f1138
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ClosedCaptionX.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ClosedCaptionX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ClosedCaptionX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10.0001 9.17C9.54769 9.01087 9.06376 8.96249 8.58885 9.02894C8.11393 9.09538 7.66186 9.2747 7.27054 9.55188C6.87921 9.82905 6.56003 10.196 6.33975 10.6219C6.11947 11.0479 6.00452 11.5205 6.00452 12C6.00452 12.4795 6.11947 12.9521 6.33975 13.3781C6.56003 13.804 6.87921 14.171 7.27054 14.4481C7.66186 14.7253 8.11393 14.9046 8.58885 14.9711C9.06376 15.0375 9.54769 14.9891 10.0001 14.83M13.3398 10.6219C13.1195 11.0479 13.0045 11.5205 13.0045 12C13.0045 12.4795 13.1195 12.9521 13.3398 13.3781C13.56 13.804 13.8792 14.171 14.2705 14.4481C14.6619 14.7253 15.1139 14.9046 15.5888 14.9711C16.0638 15.0375 16.5477 14.9891 17.0001 14.83M13 5H4C2.89543 5 2 5.89543 2 7V17C2 18.1046 2.89543 19 4 19H20C21.1046 19 22 18.1046 22 17V14"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M17 5L22 10M22 5L17 10"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptionXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ClosedCaptionX,
+ contentDescription = "ClosedCaptionX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CloudLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CloudLock.kt
new file mode 100644
index 0000000000..7f43a17cfd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CloudLock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CloudLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CloudLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M4.20002 15.1001C3.51694 14.4561 2.97035 13.6814 2.5928 12.8219C2.21524 11.9624 2.01442 11.0357 2.00229 10.097C1.99016 9.15836 2.16697 8.22682 2.52219 7.35786C2.87741 6.48889 3.40379 5.70026 4.07 5.03887C4.73622 4.37748 5.52867 3.85685 6.40019 3.50797C7.27172 3.15908 8.20452 2.98906 9.14309 3.00802C10.0817 3.02698 11.0068 3.23454 11.8636 3.61834C12.7203 4.00214 13.4911 4.55434 14.13 5.2421C14.8612 6.02812 15.4018 6.97177 15.71 8.0001H17.5C18.4539 8.01296 19.379 8.32862 20.1418 8.90151C20.9046 9.4744 21.4656 10.2749 21.7438 11.1874C22.022 12.0999 22.003 13.0772 21.6896 13.9782C21.3761 14.8792 20.7845 15.6573 20 16.2001M14 16V14C14 13.4696 13.7893 12.9609 13.4142 12.5858C13.0391 12.2107 12.5304 12 12 12C11.4696 12 10.9609 12.2107 10.5858 12.5858C10.2107 12.9609 10 13.4696 10 14V16M9 16H15C15.5523 16 16 16.4477 16 17V20C16 20.5523 15.5523 21 15 21H9C8.44772 21 8 20.5523 8 20V17C8 16.4477 8.44772 16 9 16Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CloudLock,
+ contentDescription = "CloudLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Commons.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Commons.kt
new file mode 100644
index 0000000000..28c9bfc4fc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Commons.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Commons: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Commons",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1063.68 251v282.33H714.24c-238.08 0-432 192.06-432 426.375s192 426.375 430.08 426.375h349.44v282.33H712.32C320.64 1668.41 0 1351.505 0 959.705 0 567.901 320.64 251 712.32 251h351.36Zm282.24 201.668L1920 959.705v.007l-574.08 507.03v-338.024h-604.8c-94.08 0-168.96-74.903-168.96-169.013s74.88-169.013 168.96-169.013h604.8V452.668Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommonsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Commons,
+ contentDescription = "Commons",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Compare.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Compare.kt
new file mode 100644
index 0000000000..22063a691b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Compare.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Compare: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Compare",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.99568 18H3.83333C2.82081 18 2 17.2837 2 16.4V3.6C2 2.71634 2.82081 2 3.83333 2H11.1667C11.9141 2 12.5153 2.30832 12.806 2.73591M11 17.0792V20.4C11 21.2837 11.8208 22 12.8333 22H20.1667C21.1792 22 22 21.2837 22 20.4V7.6C22 6.71634 21.1792 6 20.1667 6H12.8333C12.0623 6 11.4025 6.41535 11.1316 7.00365M18.0441 12.0222H6.0665M18.0441 12.0222L15.6486 9.62671M18.0441 12.0222L15.6486 14.4177M6.0665 12.0222L8.46202 9.62671M6.0665 12.0222L8.46202 14.4177"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ComparePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Compare,
+ contentDescription = "Compare",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightFairUse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightFairUse.kt
new file mode 100644
index 0000000000..50b196654d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightFairUse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CopyrightFairUse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CopyrightFairUse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10.5 15.0598V12.612M10.5 12.612V8.94019H14.1784M10.5 12.612H13.2205M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyrightFairUsePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CopyrightFairUse,
+ contentDescription = "CopyrightFairUse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightObtainedPermission.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightObtainedPermission.kt
new file mode 100644
index 0000000000..491544d6c9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightObtainedPermission.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CopyrightObtainedPermission: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CopyrightObtainedPermission",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12.5671 16.0055V13.0967H12.0039M12.0039 13.0967V11.1575M12.0039 13.0967H11.4406V16.0055M13.1243 12.6365V10.6707L12.0039 11.1575M12.0039 11.1575L10.8757 10.6707V12.6365M11.9853 7.99446H11.9995M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyrightObtainedPermissionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CopyrightObtainedPermission,
+ contentDescription = "CopyrightObtainedPermission",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightPublicDomain.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightPublicDomain.kt
new file mode 100644
index 0000000000..395424d451
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/CopyrightPublicDomain.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.CopyrightPublicDomain: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.CopyrightPublicDomain",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.3226 15.0598V8.94019H8.77044C9.25735 8.94019 9.72432 9.13361 10.0686 9.4779C10.4129 9.8222 10.6063 10.2892 10.6063 10.7761C10.6063 11.263 10.4129 11.7299 10.0686 12.0742C9.72432 12.4185 9.25735 12.612 8.77044 12.612H6.3226M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM13.6035 15.0598V8.94019H16.0513C16.5382 8.94019 17.0052 9.13361 17.3495 9.47791C17.6938 9.8222 17.8234 10.1853 17.8872 10.7761C17.9427 11.2892 18.0099 12.3912 17.8872 13.37C17.7991 14.0724 17.4933 14.5047 17.3495 14.6486C17.0052 14.9929 16.5382 15.0598 16.0513 15.0598H13.6035Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyrightPublicDomainPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.CopyrightPublicDomain,
+ contentDescription = "CopyrightPublicDomain",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ElevateLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ElevateLogo.kt
new file mode 100644
index 0000000000..011a8ad21d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ElevateLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ElevateLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ElevateLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1070.45 53.9152C1104.97 88.4365 1124.36 135.258 1124.36 184.078L1123.51 1188.09C1123.74 1229.1 1110.25 1269.01 1085.18 1301.47 1060.11 1333.93 1024.9 1357.08 985.16 1367.22 945.419 1377.35 903.428 1373.91 865.87 1357.43 828.312 1340.95 797.346 1312.38 777.899 1276.28 763.314 1249.19 755.85 1218.85 756.21 1188.09V184.078C756.21 135.258 775.603 88.4365 810.124 53.9152 844.646 19.3939 891.467 0 940.288 0 989.108 0 1035.93 19.3939 1070.45 53.9152ZM161.091 1320.33C194.624 1353.7 240.009 1372.44 287.319 1372.44 310.767 1372.44 333.985 1367.81 355.644 1358.83 377.304 1349.85 396.98 1336.69 413.547 1320.1 430.113 1303.5 443.246 1283.8 452.193 1262.13 461.141 1240.45 465.726 1217.23 465.689 1193.78L463.406 359.01 106.666 741.15 108.378 1194.35C108.605 1241.67 127.558 1286.96 161.091 1320.33ZM1592.41 1372.44C1639.74 1372.51 1685.17 1353.81 1718.72 1320.42 1752.27 1287.02 1771.2 1241.69 1771.35 1194.35L1773.06 741.15 1416.33 359.01 1414.32 1193.78C1414.29 1217.21 1418.87 1240.41 1427.79 1262.06 1436.72 1283.71 1449.83 1303.41 1466.37 1319.99 1482.9 1336.58 1502.55 1349.75 1524.17 1358.75 1545.8 1367.75 1568.99 1372.4 1592.41 1372.44ZM1123.46 1752.39C1126.77 1716.09 1119.25 1679.61 1101.83 1647.56 1090.29 1626.27 1074.66 1607.47 1055.85 1592.22 1037.03 1576.97 1015.39 1565.59 992.163 1558.73 968.939 1551.86 944.588 1549.64 920.506 1552.2 896.423 1554.76 873.083 1562.05 851.822 1573.65 819.782 1591.06 793.627 1617.59 776.661 1649.87 759.697 1682.14 752.685 1718.73 756.513 1754.99 760.341 1791.25 774.837 1825.57 798.168 1853.59 821.499 1881.62 852.616 1902.09 887.585 1912.44 922.554 1922.77 959.804 1922.51 994.623 1911.68 1029.44 1900.84 1060.27 1879.94 1083.2 1851.58 1106.13 1823.23 1120.14 1788.71 1123.46 1752.39Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ElevateLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ElevateLogo,
+ contentDescription = "ElevateLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FastForwardSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FastForwardSolid.kt
new file mode 100644
index 0000000000..758b159b42
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FastForwardSolid.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.FastForwardSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.FastForwardSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 6.00006C12.0001 5.60456 12.1174 5.21796 12.3372 4.88915C12.557 4.56033 12.8693 4.30405 13.2347 4.15271C13.6001 4.00137 14.0022 3.96176 14.3901 4.0389C14.778 4.11603 15.1343 4.30644 15.414 4.58606L21.414 10.5861C21.7889 10.9611 21.9996 11.4697 21.9996 12.0001C21.9996 12.5304 21.7889 13.039 21.414 13.4141L15.414 19.4141C15.1343 19.6937 14.778 19.8841 14.3901 19.9612C14.0022 20.0384 13.6001 19.9988 13.2347 19.8474C12.8693 19.6961 12.557 19.4398 12.3372 19.111C12.1174 18.7822 12.0001 18.3956 12 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 6.00006C2.00008 5.60456 2.11743 5.21796 2.3372 4.88915C2.55697 4.56033 2.86929 4.30405 3.23469 4.15271C3.60009 4.00137 4.00216 3.96176 4.39006 4.0389C4.77797 4.11603 5.1343 4.30644 5.414 4.58606L11.414 10.5861C11.7889 10.9611 11.9996 11.4697 11.9996 12.0001C11.9996 12.5304 11.7889 13.039 11.414 13.4141L5.414 19.4141C5.1343 19.6937 4.77797 19.8841 4.39006 19.9612C4.00216 20.0384 3.60009 19.9988 3.23469 19.8474C2.86929 19.6961 2.55697 19.4398 2.3372 19.111C2.11743 18.7822 2.00008 18.3956 2 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 6.00006C12.0001 5.60456 12.1174 5.21796 12.3372 4.88915C12.557 4.56033 12.8693 4.30405 13.2347 4.15271C13.6001 4.00137 14.0022 3.96176 14.3901 4.0389C14.778 4.11603 15.1343 4.30644 15.414 4.58606L21.414 10.5861C21.7889 10.9611 21.9996 11.4697 21.9996 12.0001C21.9996 12.5304 21.7889 13.039 21.414 13.4141L15.414 19.4141C15.1343 19.6937 14.778 19.8841 14.3901 19.9612C14.0022 20.0384 13.6001 19.9988 13.2347 19.8474C12.8693 19.6961 12.557 19.4398 12.3372 19.111C12.1174 18.7822 12.0001 18.3956 12 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 6.00006C2.00008 5.60456 2.11743 5.21796 2.3372 4.88915C2.55697 4.56033 2.86929 4.30405 3.23469 4.15271C3.60009 4.00137 4.00216 3.96176 4.39006 4.0389C4.77797 4.11603 5.1343 4.30644 5.414 4.58606L11.414 10.5861C11.7889 10.9611 11.9996 11.4697 11.9996 12.0001C11.9996 12.5304 11.7889 13.039 11.414 13.4141L5.414 19.4141C5.1343 19.6937 4.77797 19.8841 4.39006 19.9612C4.00216 20.0384 3.60009 19.9988 3.23469 19.8474C2.86929 19.6961 2.55697 19.4398 2.3372 19.111C2.11743 18.7822 2.00008 18.3956 2 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FastForwardSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.FastForwardSolid,
+ contentDescription = "FastForwardSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FilesX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FilesX.kt
new file mode 100644
index 0000000000..c5a4e03e56
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FilesX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.FilesX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.FilesX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M15 2C15.5304 2.00011 16.039 2.2109 16.414 2.586L20.414 6.586C20.7891 6.96099 20.9999 7.46961 21 8M15 2H11C10.4696 2 9.96086 2.21071 9.58579 2.58579C9.21071 2.96086 9 3.46957 9 4V15C9 15.5304 9.21071 16.0391 9.58579 16.4142C9.96086 16.7893 10.4696 17 11 17H13M15 2V6C15 6.53043 15.2107 7.03914 15.5858 7.41421C15.9609 7.78929 16.4696 8 17 8H21M21 8V12.9929M5 7C4.46957 7 3.96086 7.21071 3.58579 7.58579C3.21071 7.96086 3 8.46957 3 9V20C3 20.5304 3.21071 21.0391 3.58579 21.4142C3.96086 21.7893 4.46957 22 5 22H13M17 22L22 17M17 17L22 22"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.FilesX,
+ contentDescription = "FilesX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FlagSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FlagSolid.kt
new file mode 100644
index 0000000000..75ba016066
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/FlagSolid.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.FlagSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.FlagSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M4 22V4C4 3.84475 4.03614 3.69164 4.10557 3.55279C4.175 3.41393 4.2758 3.29315 4.4 3.2C5.43858 2.42107 6.70178 2 8 2C11 2 13 4 15.333 4C16.6663 4 17.6887 3.73333 18.4 3.2C18.5486 3.08857 18.7252 3.02072 18.9102 3.00404C19.0952 2.98736 19.2811 3.02252 19.4472 3.10557C19.6133 3.18863 19.753 3.31629 19.8507 3.47427C19.9483 3.63224 20 3.81429 20 4V14C20 14.1552 19.9639 14.3084 19.8944 14.4472C19.825 14.5861 19.7242 14.7069 19.6 14.8C18.5614 15.5789 17.2982 16 16 16C13 16 11 14 8 14C6.52412 14 5.10002 14.544 4 15.528"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M4 22V4C4 3.84475 4.03614 3.69164 4.10557 3.55279C4.175 3.41393 4.2758 3.29315 4.4 3.2C5.43858 2.42107 6.70178 2 8 2C11 2 13 4 15.333 4C16.6663 4 17.6887 3.73333 18.4 3.2C18.5486 3.08857 18.7252 3.02072 18.9102 3.00404C19.0952 2.98736 19.2811 3.02252 19.4472 3.10557C19.6133 3.18863 19.753 3.31629 19.8507 3.47427C19.9483 3.63224 20 3.81429 20 4V14C20 14.1552 19.9639 14.3084 19.8944 14.4472C19.825 14.5861 19.7242 14.7069 19.6 14.8C18.5614 15.5789 17.2982 16 16 16C13 16 11 14 8 14C6.52412 14 5.10002 14.544 4 15.528"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FlagSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.FlagSolid,
+ contentDescription = "FlagSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HeartSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HeartSolid.kt
new file mode 100644
index 0000000000..3a54971c59
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HeartSolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.HeartSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.HeartSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 9.49998C2.00002 8.38718 2.33759 7.30056 2.96813 6.38364C3.59867 5.46672 4.49252 4.76264 5.53161 4.36438C6.5707 3.96612 7.70616 3.89242 8.78801 4.15302C9.86987 4.41362 10.8472 4.99626 11.591 5.82398C11.6434 5.87999 11.7067 5.92465 11.7771 5.95518C11.8474 5.98571 11.9233 6.00146 12 6.00146C12.0767 6.00146 12.1526 5.98571 12.2229 5.95518C12.2933 5.92465 12.3566 5.87999 12.409 5.82398C13.1504 4.99088 14.128 4.40335 15.2116 4.13958C16.2952 3.87581 17.4335 3.94833 18.4749 4.34746C19.5163 4.7466 20.4114 5.45343 21.0411 6.37388C21.6708 7.29433 22.0053 8.38474 22 9.49998C22 11.79 20.5 13.5 19 15L13.508 20.313C13.3217 20.527 13.0919 20.6989 12.834 20.8173C12.5762 20.9357 12.296 20.9978 12.0123 20.9996C11.7285 21.0014 11.4476 20.9428 11.1883 20.8277C10.9289 20.7126 10.697 20.5436 10.508 20.332L5 15C3.5 13.5 2 11.8 2 9.49998Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HeartSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.HeartSolid,
+ contentDescription = "HeartSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HistoryCheck.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HistoryCheck.kt
new file mode 100644
index 0000000000..26680bd48b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HistoryCheck.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.HistoryCheck: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.HistoryCheck",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 3C13.78 3 15.5201 3.52784 17.0001 4.51677C18.4802 5.50571 19.6337 6.91132 20.3149 8.55585C20.9961 10.2004 21.1743 12.01 20.8271 13.7558C20.4798 15.5016 19.6226 17.1053 18.364 18.364C17.1053 19.6226 15.5016 20.4798 13.7558 20.8271C12.01 21.1743 10.2004 20.9961 8.55585 20.3149C6.91131 19.6337 5.50571 18.4802 4.51677 17.0001C3.52784 15.5201 3 13.78 3 12C3.00947 9.48395 3.99122 7.06897 5.74 5.26L8 3M8 3L3 3M8 3L8 8M9 12L11 14L15 10"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HistoryCheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.HistoryCheck,
+ contentDescription = "HistoryCheck",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HistoryX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HistoryX.kt
new file mode 100644
index 0000000000..3103224e11
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/HistoryX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.HistoryX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.HistoryX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 3C13.78 3 15.5201 3.52784 17.0001 4.51677C18.4802 5.50571 19.6337 6.91132 20.3149 8.55585C20.9961 10.2004 21.1743 12.01 20.8271 13.7558C20.4798 15.5016 19.6226 17.1053 18.364 18.364C17.1053 19.6226 15.5016 20.4798 13.7558 20.8271C12.01 21.1743 10.2004 20.9961 8.55585 20.3149C6.91131 19.6337 5.50571 18.4802 4.51677 17.0001C3.52784 15.5201 3 13.78 3 12C3.00947 9.48395 3.99122 7.06897 5.74 5.26L8 3M8 3L3 3M8 3L8 8M10 9.9999L14 13.9999M14 9.9999L10 13.9999"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HistoryXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.HistoryX,
+ contentDescription = "HistoryX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/IgniteaiLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/IgniteaiLogo.kt
new file mode 100644
index 0000000000..91a9e7579b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/IgniteaiLogo.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.IgniteaiLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.IgniteaiLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M11.0621 2.53451C11.3843 1.66389 12.6157 1.66389 12.9379 2.53451L15.0815 8.32767C15.1828 8.60139 15.3986 8.8172 15.6723 8.91848L21.4655 11.0621C22.3361 11.3843 22.3361 12.6157 21.4655 12.9379L15.6723 15.0815C15.3986 15.1828 15.1828 15.3986 15.0815 15.6723L12.9379 21.4655C12.6157 22.3361 11.3843 22.3361 11.0621 21.4655L8.91849 15.6723C8.8172 15.3986 8.60139 15.1828 8.32767 15.0815L2.53451 12.9379C1.66389 12.6157 1.66389 11.3843 2.53451 11.0621L8.32767 8.91849C8.60139 8.8172 8.8172 8.60139 8.91848 8.32767L11.0621 2.53451Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M19.5311 1.26725C19.6922 0.831943 20.3078 0.831944 20.4689 1.26725L21.0804 2.91964L22.7327 3.53107C23.1681 3.69215 23.1681 4.30785 22.7327 4.46893L21.0804 5.08036L20.4689 6.73275C20.3078 7.16806 19.6922 7.16806 19.5311 6.73275L18.9196 5.08036L17.2673 4.46893C16.8319 4.30785 16.8319 3.69215 17.2673 3.53107L18.9196 2.91964L19.5311 1.26725Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun IgniteaiLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.IgniteaiLogo,
+ contentDescription = "IgniteaiLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ImpactLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ImpactLogo.kt
new file mode 100644
index 0000000000..21193235e4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ImpactLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ImpactLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ImpactLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M910.001 203.918C910.001 163.587 921.96 124.161 944.366 90.6273 966.773 57.0931 998.621 30.9565 1035.88 15.5225 1073.14.0883516 1114.15-3.9499 1153.7 3.91831 1193.26 11.7866 1229.59 31.2078 1258.11 59.7263 1286.63 88.2447 1306.05 124.579 1313.92 164.135 1321.78 203.692 1317.75 244.693 1302.32 281.954 1286.88 319.215 1260.74 351.062 1227.21 373.47 1193.68 395.876 1154.25 407.836 1113.92 407.836 1087.13 407.869 1060.6 402.617 1035.84 392.38 1011.09 382.144 988.596 367.124 969.654 348.182 950.712 329.241 935.692 306.748 925.457 281.993 915.22 257.237 909.967 230.706 910.001 203.918ZM167.424 913.308 458.311 622.422H1045.04L460.789 1206.68C421.886 1245.58 369.124 1267.44 314.107 1267.44 259.09 1267.44 206.327 1245.58 167.424 1206.68 128.522 1167.77 106.667 1115.01 106.667 1059.99 106.667 1004.97 128.522 952.211 167.424 913.308ZM1738.81 1027.77 1454.11 1313.21H867.136L1444.7 734.406C1483.6 695.405 1536.4 673.455 1591.49 673.386 1646.57 673.316 1699.43 695.132 1738.43 734.034 1777.43 772.936 1799.38 825.739 1799.45 880.826 1799.52 935.911 1777.71 988.769 1738.81 1027.77ZM587.075 1602.79C564.668 1636.33 552.709 1675.75 552.709 1716.08 552.709 1770.16 574.192 1822.02 612.435 1860.27 650.677 1898.51 702.543 1920 756.627 1920 796.957 1920 836.382 1908.04 869.917 1885.63 903.451 1863.23 929.588 1831.38 945.021 1794.12 960.456 1756.85 964.494 1715.85 956.625 1676.29 948.758 1636.74 929.336 1600.4 900.817 1571.89 872.299 1543.37 835.965 1523.94 796.409 1516.08 756.853 1508.21 715.851 1512.25 678.59 1527.69 641.329 1543.12 609.481 1569.25 587.075 1602.79Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImpactLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ImpactLogo,
+ contentDescription = "ImpactLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure.kt
new file mode 100644
index 0000000000..ee04afc0a7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Instructure: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Instructure",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1642.264c138.868 0 253.585 102.642 271.698 241.51C1147.17 1907.924 1050.566 1920 960 1920c-90.566 0-181.132-12.075-271.698-36.226 12.075-138.868 132.83-241.51 271.698-241.51Zm476.981-205.283c102.642-96.604 259.623-108.68 362.264-18.113-90.566 156.981-223.396 289.811-386.415 386.415-84.528-114.717-72.453-271.698 24.151-368.302Zm-1328.302-24.15c114.717-84.53 271.698-72.454 368.302 24.15 96.604 102.642 108.68 259.623 18.113 362.264-156.98-90.566-289.811-223.396-386.415-386.415ZM960 1394.716c42.264 0 78.49 36.226 84.528 84.528 0 48.302-36.226 90.566-84.528 90.566h-6.038c-48.302 0-84.528-42.264-84.528-90.566s42.264-84.528 90.566-84.528Zm295.85-126.792c36.225-30.19 84.527-30.19 114.716 0 36.226 30.188 36.226 84.528 6.038 120.754 0 5.726-5.43 6.022-5.991 6.037l-.047.001c-36.226 30.189-90.566 30.189-120.755-6.038-30.188-36.226-30.188-90.566 6.038-120.754Zm-724.53-6.038c30.19-30.189 90.567-30.189 120.755 0 36.227 30.188 36.227 84.528 0 120.755-30.188 36.226-84.528 30.188-120.754 0-36.227-30.19-36.227-84.529 0-120.755ZM36.227 688.302c138.868 12.075 241.51 132.83 241.51 271.698 0 138.868-108.68 259.623-241.51 271.698C12.076 1141.132 0 1050.566 0 960c0-90.566 12.075-187.17 36.226-271.698Zm1847.548 0C1907.924 772.83 1920 869.434 1920 960c0 90.566-12.075 181.132-36.226 271.698-132.83-12.075-241.51-132.83-241.51-271.698 0-138.868 102.642-259.623 241.51-271.698Zm-1443.02 187.17c46.672 0 84.529 37.856 84.529 84.528 0 46.672-37.857 84.528-84.528 84.528-46.672 0-84.529-37.856-84.529-84.528 0-46.672 37.857-84.528 84.529-84.528Zm1038.491-6.038c48.302 0 84.529 42.264 84.529 84.528 0 48.302-36.227 84.529-84.529 84.529s-84.528-36.227-84.528-84.529 36.226-84.528 84.528-84.528Zm-211.32-338.113c30.188-30.189 84.528-30.189 114.717 0 36.226 30.188 36.226 84.528 6.037 120.754-36.226 30.19-84.528 30.19-114.717 0-36.226-30.188-36.226-84.528-6.037-120.754Zm-736.604-6.038c30.188-30.189 84.528-30.189 120.754 0 30.19 30.189 36.227 84.528 0 120.755-30.188 36.226-84.528 30.188-120.754 0-36.227-30.189-36.227-84.529 0-120.755Zm887.547-410.566c156.981 90.566 289.811 223.396 386.415 386.415-114.717 84.528-271.698 72.453-368.302-24.15-96.604-96.605-108.68-253.586-18.113-362.265Zm-917.736 0c84.528 108.68 78.49 265.66-24.15 362.264-96.605 96.604-253.586 108.68-362.265 24.151 90.566-163.019 223.396-295.849 386.415-386.415ZM960 356.227c42.264 0 84.528 36.226 84.528 78.49 0 48.302-36.226 90.566-84.528 90.566-48.302 0-84.528-36.226-84.528-84.528 0-48.302 36.226-84.529 84.528-84.529ZM960 0c96.604 0 187.17 12.075 277.736 36.226-18.113 132.83-138.868 241.51-277.736 241.51S700.377 175.094 682.264 36.226C772.83 12.076 863.396 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InstructurePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Instructure,
+ contentDescription = "Instructure",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure1Dot.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure1Dot.kt
new file mode 100644
index 0000000000..15560921f0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure1Dot.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Instructure1Dot: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Instructure1Dot",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 1670.24C1079.16 1532.23 1190.91 1420.48 1328.92 1420.48C1466.93 1420.48 1578.68 1532.23 1578.68 1670.24C1578.68 1808.25 1466.93 1920 1328.92 1920C1190.91 1920 1079.16 1808.25 1079.16 1670.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M757.363 0H341.318V1920H757.363V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Instructure1DotPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Instructure1Dot,
+ contentDescription = "Instructure1Dot",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure3Dot.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure3Dot.kt
new file mode 100644
index 0000000000..2dcb6a4978
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Instructure3Dot.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Instructure3Dot: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Instructure3Dot",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 1670.24C1079.16 1532.23 1190.91 1420.48 1328.92 1420.48C1466.93 1420.48 1578.68 1532.23 1578.68 1670.24C1578.68 1808.25 1466.93 1920 1328.92 1920C1190.91 1920 1079.16 1808.25 1079.16 1670.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 960C1079.16 821.991 1190.91 710.238 1328.92 710.238C1466.93 710.238 1578.68 821.991 1578.68 960C1578.68 1098.01 1466.93 1209.76 1328.92 1209.76C1190.91 1209.76 1079.16 1098.01 1079.16 960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 250.435C1079.16 112.426 1190.91 0.673227 1328.92 0.673227C1466.93 0.673227 1578.68 112.426 1578.68 250.435C1578.68 388.443 1466.93 500.196 1328.92 500.196C1190.91 500.196 1079.16 388.443 1079.16 250.435Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M757.363 0H341.318V1920H757.363V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Instructure3DotPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Instructure3Dot,
+ contentDescription = "Instructure3Dot",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/InstructureLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/InstructureLogo.kt
new file mode 100644
index 0000000000..898973f8f5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/InstructureLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.InstructureLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.InstructureLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1448.57 288.052 1084.46 502.746 1448.55 718.026 1813.23 502.732 1448.57 288.052ZM959.966 429.191 1323.92 214.589 959.988 0 596.032 214.602 959.966 429.191ZM835.499 502.732 471.388 288.038 106.704 502.732 471.388 718.026 835.499 502.732ZM106.667 1416.54 960 1920 1813.33 1416.54 960 913.07 106.667 1416.54Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InstructureLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.InstructureLogo,
+ contentDescription = "InstructureLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/LineReader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/LineReader.kt
new file mode 100644
index 0000000000..358f578538
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/LineReader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.LineReader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.LineReader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M5 2H19M7 22H17M4 6H20C21.1046 6 22 6.89543 22 8V16C22 17.1046 21.1046 18 20 18H4C2.89543 18 2 17.1046 2 16V8C2 6.89543 2.89543 6 4 6ZM6.00016 9H18.0024C19.107 9 19.0002 9.26407 19.0002 10L19 12C19 12.7359 19.1047 12.9976 18.0002 12.9976L6 13C4.89543 13 5 12.7359 5 12V10C5 9.26407 4.89559 9 6.00016 9Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LineReaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.LineReader,
+ contentDescription = "LineReader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListCircle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListCircle.kt
new file mode 100644
index 0000000000..e4093f06dd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListCircle.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ListCircle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ListCircle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M11 12H21M11 18H21M11 6H21"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M5 10C6.10457 10 7 9.10457 7 8C7 6.89543 6.10457 6 5 6C3.89543 6 3 6.89543 3 8C3 9.10457 3.89543 10 5 10Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M5 18C6.10457 18 7 17.1046 7 16C7 14.8954 6.10457 14 5 14C3.89543 14 3 14.8954 3 16C3 17.1046 3.89543 18 5 18Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListCirclePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ListCircle,
+ contentDescription = "ListCircle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListDown.kt
new file mode 100644
index 0000000000..6d5e201e2e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ListDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ListDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M16 9H3M10 21H3M21 6V13C21 13.5304 20.7893 14.0391 20.4142 14.4142C20.0391 14.7893 19.5304 15 19 15H15M15 15L17 13M15 15L17 17M16 3H3M5 15H3M11 15H9"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ListDown,
+ contentDescription = "ListDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListOrderedAlpha.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListOrderedAlpha.kt
new file mode 100644
index 0000000000..d7cd284d14
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListOrderedAlpha.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ListOrderedAlpha: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ListOrderedAlpha",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10 12H21M10 18H21M10 6H21M6 9H3M3 10.5V7.875C3 7.37772 3.15804 6.90081 3.43934 6.54917C3.72064 6.19754 4.10218 6 4.5 6C4.89782 6 5.27936 6.19754 5.56066 6.54917C5.84196 6.90081 6 7.37772 6 7.875V10.5M3 13.5H6L3 18H6"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListOrderedAlphaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ListOrderedAlpha,
+ contentDescription = "ListOrderedAlpha",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListOrderedRoman.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListOrderedRoman.kt
new file mode 100644
index 0000000000..296c8a4bfa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListOrderedRoman.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ListOrderedRoman: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ListOrderedRoman",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M10 12H21M10 18H21M10 6H21M6 6V10M6 14V18M3 14V18"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListOrderedRomanPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ListOrderedRoman,
+ contentDescription = "ListOrderedRoman",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListSquare.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListSquare.kt
new file mode 100644
index 0000000000..54840045c3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListSquare.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ListSquare: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ListSquare",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M11 6H21M11 12H21M11 18H21"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.33333 6H3.66667C3.29848 6 3 6.29848 3 6.66667V9.33333C3 9.70152 3.29848 10 3.66667 10H6.33333C6.70152 10 7 9.70152 7 9.33333V6.66667C7 6.29848 6.70152 6 6.33333 6Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M6.33333 14H3.66667C3.29848 14 3 14.2985 3 14.6667V17.3333C3 17.7015 3.29848 18 3.66667 18H6.33333C6.70152 18 7 17.7015 7 17.3333V14.6667C7 14.2985 6.70152 14 6.33333 14Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListSquarePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ListSquare,
+ contentDescription = "ListSquare",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListUp.kt
new file mode 100644
index 0000000000..70bb47162e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ListUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ListUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ListUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M16 15H3M10 21H3M16 3H3M5 9H3M11 9H9M21 18V11C21 10.4696 20.7893 9.96086 20.4142 9.58579C20.0391 9.21071 19.5304 9 19 9H15M15 9L17 11M15 9L17 7"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ListUp,
+ contentDescription = "ListUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/LockReset.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/LockReset.kt
new file mode 100644
index 0000000000..1e9c4a7ba8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/LockReset.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.LockReset: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.LockReset",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M7 11V7C7 5.67392 7.52678 4.40215 8.46447 3.46447C9.40215 2.52678 10.6739 2 12 2C13.3261 2 14.5979 2.52678 15.5355 3.46447C16.4732 4.40215 17 5.67392 17 7V11M11.443 22H5C3.89543 22 3 21.1046 3 20V13C3 11.8954 3.89543 11 5 11H19C19.576 11 20.0951 11.2435 20.4601 11.6332M14.6488 14.6534V17.5921M14.6488 17.5921H17.5874M14.6488 17.5921L16.1842 16.0566C16.8234 15.4175 17.7123 15.0208 18.6894 15.0208C19.5662 15.0208 20.4071 15.3691 21.0271 15.9891C21.6471 16.609 21.9954 17.4499 21.9954 18.3267C21.9954 19.0977 21.7528 19.8491 21.302 20.4745C20.8512 21.1 20.2151 21.5677 19.4837 21.8115C18.7523 22.0553 17.9627 22.0628 17.2268 21.8329C16.4909 21.603 15.846 21.1475 15.3835 20.5307"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LockResetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.LockReset,
+ contentDescription = "LockReset",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MailCircle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MailCircle.kt
new file mode 100644
index 0000000000..6124411c96
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MailCircle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.MailCircle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.MailCircle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 7L11 12.727C11.3051 12.9042 11.6517 12.9976 12.0045 12.9976C12.3573 12.9976 12.7039 12.9042 13.009 12.727L15.709 10.9933M2 7V18C2 19.1046 2.89543 20 4 20H20C21.1046 20 22 19.1046 22 18V11.4882M2 7V6C2 4.89543 2.89543 4 4 4H12.0045M21.9785 5C21.9785 6.65685 20.6354 8 18.9785 8C17.3217 8 15.9785 6.65685 15.9785 5C15.9785 3.34315 17.3217 2 18.9785 2C20.6354 2 21.9785 3.34315 21.9785 5Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MailCirclePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.MailCircle,
+ contentDescription = "MailCircle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MasteryLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MasteryLogo.kt
new file mode 100644
index 0000000000..c4140fdf7d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MasteryLogo.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.MasteryLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.MasteryLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M232.092 1059.47C103.84 1059.47 -0.126465 1163.44 -0.126465 1291.69C-0.126465 1419.94 103.84 1523.91 232.092 1523.91C360.345 1523.91 464.311 1419.94 464.311 1291.69C464.311 1163.44 360.345 1059.47 232.092 1059.47Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.181 1059.46C932.074 1059.46 905.605 1064.64 880.773 1073.65L737.513 812.505C792.907 769.937 828.654 703.627 828.654 628.313C828.654 500.061 724.687 396.094 596.435 396.094C468.182 396.094 364.216 500.061 364.216 628.313C364.216 756.566 468.182 860.532 596.435 860.532C624.541 860.532 651.01 855.347 675.842 846.342L819.103 1107.49C763.709 1150.05 727.962 1216.36 727.962 1291.68C727.962 1419.93 831.928 1523.9 960.181 1523.9C1088.43 1523.9 1192.4 1419.93 1192.4 1291.68C1192.4 1163.43 1088.43 1059.46 960.181 1059.46Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1688.18 1059.46C1660.07 1059.46 1633.6 1064.64 1608.5 1073.65L1465.24 812.505C1520.63 769.937 1556.38 703.627 1556.38 628.313C1556.38 500.061 1452.41 396.094 1324.16 396.094C1195.91 396.094 1091.94 500.061 1091.94 628.313C1091.94 756.566 1195.91 860.532 1324.16 860.532C1352.27 860.532 1378.74 855.347 1403.57 846.342L1546.83 1107.49C1491.44 1150.05 1455.69 1216.36 1455.69 1291.68C1455.69 1419.93 1559.65 1523.9 1687.91 1523.9C1816.16 1523.9 1920.13 1419.93 1920.13 1291.68C1920.13 1163.43 1816.16 1059.46 1687.91 1059.46H1688.18Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasteryLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.MasteryLogo,
+ contentDescription = "MasteryLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MediaAttachment.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MediaAttachment.kt
new file mode 100644
index 0000000000..7a41032e9d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MediaAttachment.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.MediaAttachment: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.MediaAttachment",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M18.3049 5.53399C13.4727 4.73346 8.54167 4.73346 3.70945 5.53399C3.40782 5.61669 3.13291 5.77647 2.91175 5.99763C2.69059 6.21879 2.53081 6.4937 2.44811 6.79533C1.81873 9.76553 1.81873 12.8347 2.44811 15.8049C2.53081 16.1065 2.69059 16.3814 2.91175 16.6026C3.13291 16.8237 3.40782 16.9835 3.70945 17.0662C5.42723 17.3508 7.1575 17.5343 8.89139 17.6166M17.8031 18.5733C17.8031 19.8987 16.7286 20.9731 15.4033 20.9731C14.0779 20.9731 13.0035 19.8987 13.0035 18.5733C13.0035 17.248 14.0779 16.1735 15.4033 16.1735C16.7286 16.1735 17.8031 17.248 17.8031 18.5733ZM17.8031 18.5733V8.97412L22.0027 11.3739M9.20526 14.003L13.71 11.3001L9.20526 8.59724V14.003Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MediaAttachmentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.MediaAttachment,
+ contentDescription = "MediaAttachment",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MediaPlus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MediaPlus.kt
new file mode 100644
index 0000000000..56b096618b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MediaPlus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.MediaPlus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.MediaPlus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M22.0039 11.0165C21.9489 9.66944 21.781 8.32584 21.5 7C21.4082 6.66521 21.2309 6.36007 20.9854 6.11461C20.7399 5.86914 20.4348 5.69179 20.1 5.6C14.7366 4.71146 9.26346 4.71146 3.90001 5.6C3.56522 5.69179 3.26008 5.86914 3.01461 6.11461C2.76914 6.36007 2.5918 6.66521 2.50001 7C1.80143 10.2967 1.80143 13.7033 2.50001 17C2.5918 17.3348 2.76914 17.6399 3.01461 17.8854C3.26008 18.1309 3.56522 18.3082 3.90001 18.4C6.89314 18.896 9.92044 19.1151 12.9438 19.0576M16.0039 16.9645H22.0039M19.0039 19.9645V13.9645M10 15L15 12L10 9V15Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MediaPlusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.MediaPlus,
+ contentDescription = "MediaPlus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MessageSquareCheck.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MessageSquareCheck.kt
new file mode 100644
index 0000000000..1100d40a6d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MessageSquareCheck.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.MessageSquareCheck: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.MessageSquareCheck",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12.5 3H4C3.46957 3 2.96086 3.21071 2.58579 3.58579C2.21071 3.96086 2 4.46957 2 5V21.286C2.00002 21.4264 2.04167 21.5637 2.11969 21.6804C2.1977 21.7971 2.30858 21.8881 2.43831 21.9419C2.56803 21.9956 2.71077 22.0097 2.84849 21.9823C2.9862 21.9549 3.1127 21.8873 3.212 21.788L5.414 19.586C5.78899 19.2109 6.29761 19.0001 6.828 19H20C20.5304 19 21.0391 18.7893 21.4142 18.4142C21.7893 18.0391 22 17.5304 22 17V9M16 5L18 7L22 3"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MessageSquareCheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.MessageSquareCheck,
+ contentDescription = "MessageSquareCheck",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MessageSquareX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MessageSquareX.kt
new file mode 100644
index 0000000000..61dbe7d762
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/MessageSquareX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.MessageSquareX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.MessageSquareX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M13 3H4C3.46957 3 2.96086 3.21071 2.58579 3.58579C2.21071 3.96086 2 4.46957 2 5V21.286C2.00002 21.4264 2.04167 21.5637 2.11969 21.6804C2.1977 21.7971 2.30858 21.8881 2.43831 21.9419C2.56803 21.9956 2.71077 22.0097 2.84849 21.9823C2.9862 21.9549 3.1127 21.8873 3.212 21.788L5.414 19.586C5.78899 19.2109 6.29761 19.0001 6.828 19H20C20.5304 19 21.0391 18.7893 21.4142 18.4142C21.7893 18.0391 22 17.5304 22 17V12M17 3L22 8M22 3L17 8"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MessageSquareXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.MessageSquareX,
+ contentDescription = "MessageSquareX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PauseSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PauseSolid.kt
new file mode 100644
index 0000000000..63cb3201df
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PauseSolid.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.PauseSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.PauseSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M18 3H15C14.4477 3 14 3.44772 14 4V20C14 20.5523 14.4477 21 15 21H18C18.5523 21 19 20.5523 19 20V4C19 3.44772 18.5523 3 18 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 3H6C5.44772 3 5 3.44772 5 4V20C5 20.5523 5.44772 21 6 21H9C9.55228 21 10 20.5523 10 20V4C10 3.44772 9.55228 3 9 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M18 3H15C14.4477 3 14 3.44772 14 4V20C14 20.5523 14.4477 21 15 21H18C18.5523 21 19 20.5523 19 20V4C19 3.44772 18.5523 3 18 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 3H6C5.44772 3 5 3.44772 5 4V20C5 20.5523 5.44772 21 6 21H9C9.55228 21 10 20.5523 10 20V4C10 3.44772 9.55228 3 9 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PauseSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.PauseSolid,
+ contentDescription = "PauseSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PencilAnnotate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PencilAnnotate.kt
new file mode 100644
index 0000000000..e3f47b6838
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PencilAnnotate.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.PencilAnnotate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.PencilAnnotate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M15 5L19 9M21.0197 15.9627C19.4118 13.8637 17.6952 15.3146 17.5469 16.8841C17.3986 18.4536 21.4148 19.3697 19.932 21.2113C18.4491 23.053 14.6494 20.9449 12.0218 21.5085M21.1739 6.81189C21.7026 6.28332 21.9997 5.56636 21.9998 4.81875C21.9999 4.07113 21.703 3.3541 21.1744 2.82539C20.6459 2.29668 19.9289 1.99961 19.1813 1.99951C18.4337 1.99942 17.7166 2.29632 17.1879 2.82489L3.84193 16.1739C3.60975 16.4054 3.43805 16.6904 3.34193 17.0039L2.02093 21.3559C1.99509 21.4424 1.99314 21.5342 2.01529 21.6217C2.03743 21.7092 2.08285 21.7891 2.14673 21.8529C2.21061 21.9167 2.29055 21.962 2.37809 21.984C2.46563 22.006 2.55749 22.0039 2.64393 21.9779L6.99693 20.6579C7.3101 20.5626 7.59511 20.392 7.82693 20.1609L21.1739 6.81189Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PencilAnnotatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.PencilAnnotate,
+ contentDescription = "PencilAnnotate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PlaySolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PlaySolid.kt
new file mode 100644
index 0000000000..c78150ef7d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PlaySolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.PlaySolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.PlaySolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M5 4.99998C4.9999 4.64807 5.09265 4.30237 5.26888 3.99777C5.44512 3.69318 5.69861 3.44047 6.00375 3.26518C6.30889 3.08988 6.65488 2.99821 7.00679 2.9994C7.3587 3.0006 7.70406 3.09462 8.008 3.27198L20.005 10.27C20.3078 10.4457 20.5591 10.6977 20.7339 11.001C20.9088 11.3042 21.0009 11.6481 21.0012 11.9981C21.0015 12.3482 20.91 12.6922 20.7357 12.9957C20.5614 13.2993 20.3105 13.5518 20.008 13.728L8.008 20.728C7.70406 20.9053 7.3587 20.9994 7.00679 21.0006C6.65488 21.0018 6.30889 20.9101 6.00375 20.7348C5.69861 20.5595 5.44512 20.3068 5.26888 20.0022C5.09265 19.6976 4.9999 19.3519 5 19V4.99998Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PlaySolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.PlaySolid,
+ contentDescription = "PlaySolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PostSis.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PostSis.kt
new file mode 100644
index 0000000000..83b845f876
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/PostSis.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.PostSis: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.PostSis",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M18 13C17.4477 13 17 13.4477 17 14C17 14.5523 17.4477 15 18 15V14V13ZM6 15C6.55228 15 7 14.5523 7 14C7 13.4477 6.55228 13 6 13V14V15ZM12 15.0045L12.7067 14.297C12.3163 13.907 11.6837 13.907 11.2933 14.297L12 15.0045ZM11 22C11 22.5523 11.4477 23 12 23C12.5523 23 13 22.5523 13 22H12H11ZM7.29329 18.2926C6.90254 18.6829 6.90219 19.316 7.2925 19.7068C7.68281 20.0975 8.31597 20.0979 8.70671 19.7075L8 19L7.29329 18.2926ZM15.2933 19.7075C15.684 20.0979 16.3172 20.0975 16.7075 19.7068C17.0978 19.316 17.0975 18.6829 16.7067 18.2926L16 19L15.2933 19.7075ZM7.19315 6.47866C7.53308 6.91394 8.16151 6.99123 8.59679 6.6513C9.03206 6.31136 9.10935 5.68293 8.76942 5.24766L7.98129 5.86316L7.19315 6.47866ZM5.42668 5.63403L6.32367 6.07608V6.07608L5.42668 5.63403ZM8.06218 10.1714L8.94342 10.644L8.94342 10.644L8.06218 10.1714ZM5.95875 9.5657C5.53795 9.20801 4.90685 9.25918 4.54917 9.67999C4.19148 10.1008 4.24265 10.7319 4.66346 11.0896L5.31111 10.3276L5.95875 9.5657ZM7.98129 8.90857L8.83806 8.39288V8.39288L7.98129 8.90857ZM5.73878 7.37793L5.0034 8.05559L5.0034 8.05559L5.73878 7.37793ZM17.694 6.47866C18.0339 6.91394 18.6624 6.99123 19.0976 6.6513C19.5329 6.31136 19.6102 5.68293 19.2703 5.24766L18.4821 5.86316L17.694 6.47866ZM15.9275 5.63403L16.8245 6.07608L16.8245 6.07608L15.9275 5.63403ZM18.563 10.1714L17.6818 9.69873V9.69873L18.563 10.1714ZM16.4596 9.5657C16.0388 9.20801 15.4077 9.25918 15.05 9.67999C14.6923 10.1008 14.7435 10.7319 15.1643 11.0896L15.812 10.3276L16.4596 9.5657ZM18.4821 8.90857L17.6254 9.42425V9.42425L18.4821 8.90857ZM16.2396 7.37793L15.5043 8.05559L15.5043 8.05559L16.2396 7.37793ZM12.9934 5.13709C12.9934 4.5848 12.5457 4.13709 11.9934 4.13709C11.4411 4.13709 10.9934 4.5848 10.9934 5.13709H11.9934H12.9934ZM10.9934 11.1052C10.9934 11.6575 11.4411 12.1052 11.9934 12.1052C12.5457 12.1052 12.9934 11.6575 12.9934 11.1052H11.9934H10.9934ZM4 2V3H20V2V1H4V2ZM20 2V3C20.5523 3 21 3.44771 21 4H22H23C23 2.34315 21.6569 1 20 1V2ZM22 4H21V12H22H23V4H22ZM22 12H21C21 12.5523 20.5523 13 20 13V14V15C21.6569 15 23 13.6569 23 12H22ZM4 14V13C3.44772 13 3 12.5523 3 12H2H1C1 13.6569 2.34315 15 4 15V14ZM2 12H3V4H2H1V12H2ZM2 4H3C3 3.44772 3.44772 3 4 3V2V1C2.34315 1 1 2.34315 1 4H2ZM20 14V13H18V14V15H20V14ZM6 14V13H4V14V15H6V14ZM12 15.0045H11V22H12H13V15.0045H12ZM8 19L8.70671 19.7075L12.7067 15.712L12 15.0045L11.2933 14.297L7.29329 18.2926L8 19ZM12 15.0045L11.2933 15.712L15.2933 19.7075L16 19L16.7067 18.2926L12.7067 14.297L12 15.0045ZM7.98129 5.86316L8.76942 5.24766C8.45639 4.84683 7.81684 4.32678 7.09184 4.10158C6.71259 3.98379 6.22286 3.9203 5.72001 4.09211C5.19015 4.27315 4.78876 4.66629 4.52969 5.19199L5.42668 5.63403L6.32367 6.07608C6.39045 5.94057 6.42026 5.96638 6.36666 5.98469C6.34009 5.99377 6.37169 5.97216 6.49858 6.01157C6.62254 6.05007 6.77179 6.12781 6.91782 6.23277C7.06687 6.3399 7.16205 6.43884 7.19315 6.47866L7.98129 5.86316ZM8.06218 10.1714L7.18093 9.69873C7.08156 9.88401 6.95571 9.97792 6.86926 9.99999C6.83353 10.0091 6.55759 10.0747 5.95875 9.5657L5.31111 10.3276L4.66346 11.0896C5.55889 11.8507 6.48461 12.1623 7.36393 11.9378C8.19252 11.7263 8.69508 11.1071 8.94342 10.644L8.06218 10.1714ZM7.98129 8.90857L7.12451 9.42425C7.18501 9.52477 7.19167 9.59432 7.19101 9.63251C7.19014 9.68226 7.1753 9.70922 7.18093 9.69873L8.06218 10.1714L8.94342 10.644C9.20768 10.1513 9.3737 9.28281 8.83806 8.39288L7.98129 8.90857ZM5.42668 5.63403L4.52969 5.19199C4.36536 5.52545 4.2798 5.99057 4.31659 6.46303C4.35539 6.96139 4.53699 7.54945 5.0034 8.05559L5.73878 7.37793L6.47415 6.70027C6.36966 6.58688 6.32178 6.45198 6.31055 6.30777C6.30484 6.23445 6.30971 6.16702 6.3187 6.11483C6.32888 6.05576 6.33914 6.0447 6.32367 6.07608L5.42668 5.63403ZM5.73878 7.37793L5.0034 8.05559C5.48426 8.57741 6.14712 8.84902 6.49563 9.01307C6.93674 9.22071 7.06419 9.32404 7.12451 9.42425L7.98129 8.90857L8.83806 8.39288C8.42787 7.71138 7.75131 7.39364 7.34741 7.20352C6.85092 6.96982 6.62778 6.86698 6.47415 6.70027L5.73878 7.37793ZM18.4821 5.86316L19.2703 5.24766C18.9573 4.84683 18.3177 4.32677 17.5927 4.10158C17.2134 3.98379 16.7237 3.9203 16.2209 4.09211C15.691 4.27315 15.2896 4.66629 15.0305 5.19199L15.9275 5.63403L16.8245 6.07608C16.8913 5.94057 16.9211 5.96638 16.8675 5.98469C16.8409 5.99377 16.8726 5.97216 16.9994 6.01157C17.1234 6.05007 17.2727 6.12781 17.4187 6.23277C17.5677 6.3399 17.6629 6.43884 17.694 6.47866L18.4821 5.86316ZM18.563 10.1714L17.6818 9.69873C17.5824 9.88401 17.4566 9.97792 17.3701 9.99999C17.3344 10.0091 17.0584 10.0747 16.4596 9.5657L15.812 10.3276L15.1643 11.0896C16.0597 11.8507 16.9855 12.1623 17.8648 11.9378C18.6934 11.7263 19.1959 11.1071 19.4443 10.644L18.563 10.1714ZM18.4821 8.90857L17.6254 9.42425C17.6859 9.52477 17.6925 9.59432 17.6919 9.6325C17.691 9.68225 17.6762 9.70922 17.6818 9.69873L18.563 10.1714L19.4443 10.644C19.7085 10.1514 19.8746 9.28281 19.3389 8.39288L18.4821 8.90857ZM15.9275 5.63403L15.0305 5.19198C14.8662 5.52545 14.7807 5.99057 14.8174 6.46303C14.8563 6.96139 15.0378 7.54945 15.5043 8.05559L16.2396 7.37793L16.975 6.70027C16.8705 6.58688 16.8226 6.45198 16.8114 6.30777C16.8057 6.23445 16.8106 6.16702 16.8196 6.11483C16.8297 6.05576 16.84 6.0447 16.8245 6.07608L15.9275 5.63403ZM16.2396 7.37793L15.5043 8.05559C15.9851 8.57741 16.648 8.84902 16.9965 9.01307C17.4376 9.22071 17.5651 9.32404 17.6254 9.42425L18.4821 8.90857L19.3389 8.39288C18.9287 7.71138 18.2522 7.39364 17.8483 7.20352C17.3518 6.96982 17.1286 6.86698 16.975 6.70027L16.2396 7.37793ZM11.9934 5.13709H10.9934V11.1052H11.9934H12.9934V5.13709H11.9934Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PostSisPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.PostSis,
+ contentDescription = "PostSis",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Protractor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Protractor.kt
new file mode 100644
index 0000000000..39fd23c576
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Protractor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Protractor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Protractor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M8 17C8 14.7909 9.79086 13 12 13C14.2091 13 16 14.7909 16 17M5.47036 14H5.48036M18.45 14H18.46M7.99031 11.1851H8.00031M16.002 11.1851H16M12 10.019H12.01M2 17C2 11.4772 6.47715 7 12 7C17.5228 7 22 11.4772 22 17H2Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ProtractorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Protractor,
+ contentDescription = "Protractor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/RewindSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/RewindSolid.kt
new file mode 100644
index 0000000000..08fb8180ab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/RewindSolid.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.RewindSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.RewindSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12.0001 6.00006C12 5.60456 11.8826 5.21796 11.6629 4.88915C11.4431 4.56033 11.1308 4.30405 10.7654 4.15271C10.4 4.00137 9.9979 3.96176 9.61 4.0389C9.22209 4.11603 8.86576 4.30644 8.58606 4.58606L2.58606 10.5861C2.21112 10.9611 2.00049 11.4697 2.00049 12.0001C2.00049 12.5304 2.21112 13.039 2.58606 13.4141L8.58606 19.4141C8.86576 19.6937 9.22209 19.8841 9.61 19.9612C9.9979 20.0384 10.4 19.9988 10.7654 19.8474C11.1308 19.6961 11.4431 19.4398 11.6629 19.111C11.8826 18.7822 12 18.3956 12.0001 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M22.0001 6.00006C22 5.60456 21.8826 5.21796 21.6629 4.88915C21.4431 4.56033 21.1308 4.30405 20.7654 4.15271C20.4 4.00137 19.9979 3.96176 19.61 4.0389C19.2221 4.11603 18.8658 4.30644 18.5861 4.58606L12.5861 10.5861C12.2111 10.9611 12.0005 11.4697 12.0005 12.0001C12.0005 12.5304 12.2111 13.039 12.5861 13.4141L18.5861 19.4141C18.8658 19.6937 19.2221 19.8841 19.61 19.9612C19.9979 20.0384 20.4 19.9988 20.7654 19.8474C21.1308 19.6961 21.4431 19.4398 21.6629 19.111C21.8826 18.7822 22 18.3956 22.0001 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12.0001 6.00006C12 5.60456 11.8826 5.21796 11.6629 4.88915C11.4431 4.56033 11.1308 4.30405 10.7654 4.15271C10.4 4.00137 9.9979 3.96176 9.61 4.0389C9.22209 4.11603 8.86576 4.30644 8.58606 4.58606L2.58606 10.5861C2.21112 10.9611 2.00049 11.4697 2.00049 12.0001C2.00049 12.5304 2.21112 13.039 2.58606 13.4141L8.58606 19.4141C8.86576 19.6937 9.22209 19.8841 9.61 19.9612C9.9979 20.0384 10.4 19.9988 10.7654 19.8474C11.1308 19.6961 11.4431 19.4398 11.6629 19.111C11.8826 18.7822 12 18.3956 12.0001 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M22.0001 6.00006C22 5.60456 21.8826 5.21796 21.6629 4.88915C21.4431 4.56033 21.1308 4.30405 20.7654 4.15271C20.4 4.00137 19.9979 3.96176 19.61 4.0389C19.2221 4.11603 18.8658 4.30644 18.5861 4.58606L12.5861 10.5861C12.2111 10.9611 12.0005 11.4697 12.0005 12.0001C12.0005 12.5304 12.2111 13.039 12.5861 13.4141L18.5861 19.4141C18.8658 19.6937 19.2221 19.8841 19.61 19.9612C19.9979 20.0384 20.4 19.9988 20.7654 19.8474C21.1308 19.6961 21.4431 19.4398 21.6629 19.111C21.8826 18.7822 22 18.3956 22.0001 18.0001V6.00006Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RewindSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.RewindSolid,
+ contentDescription = "RewindSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/RocketSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/RocketSolid.kt
new file mode 100644
index 0000000000..a696d5ffac
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/RocketSolid.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.RocketSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.RocketSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 15L9 12C9.53214 10.6194 10.2022 9.29607 11 8.05C12.1652 6.18699 13.7876 4.65305 15.713 3.5941C17.6384 2.53514 19.8027 1.98637 22 2C22 4.72 21.22 9.5 16 13C14.7369 13.7987 13.3968 14.4687 12 15Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 12L4 12C4 12 4.55 8.97002 6 8.00002C7.62 6.92002 11 8.00002 11 8.00002"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 15V20C12 20 15.03 19.45 16 18C17.08 16.38 16 13 16 13"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M12 15L9 12M12 15C13.3968 14.4687 14.7369 13.7987 16 13M12 15V20C12 20 15.03 19.45 16 18C17.08 16.38 16 13 16 13M9 12C9.53214 10.6194 10.2022 9.29607 11 8.05C12.1652 6.18699 13.7876 4.65305 15.713 3.5941C17.6384 2.53514 19.8027 1.98637 22 2C22 4.72 21.22 9.5 16 13M9 12L4 12C4 12 4.55 8.97002 6 8.00002C7.62 6.92002 11 8.00002 11 8.00002M4.5 16.5001C3 17.7601 2.5 21.5001 2.5 21.5001C2.5 21.5001 6.24 21.0001 7.5 19.5001C8.21 18.6601 8.2 17.3701 7.41 16.5901C7.02131 16.2191 6.50929 16.0047 5.97223 15.9881C5.43516 15.9715 4.91088 16.1538 4.5 16.5001Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RocketSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.RocketSolid,
+ contentDescription = "RocketSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SearchAi.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SearchAi.kt
new file mode 100644
index 0000000000..3b311cd51a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SearchAi.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.SearchAi: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.SearchAi",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M21 20.9999L16.6569 16.6568M16.6569 16.6568L16.65 16.6499M16.6569 16.6568C17.2475 16.0662 17.7461 15.3838 18.1295 14.6327M16.6569 16.6568C15.2092 18.1045 13.2092 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C11.4734 3 11.9371 3.04111 12.3879 3.11996M17 3V11M17 3L18.0342 6.03742M17 3L15.9211 6.03742M17 11L15.9211 7.93588M17 11L18.0342 7.93588M21 7L18.0342 7.93588M21 7L18.0342 6.03742M21 7H13M13 7L15.9211 7.93588M13 7L15.9211 6.03742M15.9211 7.93588H18.0342M15.9211 7.93588V6.03742M18.0342 7.93588V6.03742M18.0342 6.03742H15.9211"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchAiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.SearchAi,
+ contentDescription = "SearchAi",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ShoppingCartCheck.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ShoppingCartCheck.kt
new file mode 100644
index 0000000000..3fadc3dc60
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ShoppingCartCheck.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ShoppingCartCheck: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ShoppingCartCheck",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2.05005 2.05005H4.05005L6.71005 14.47C6.80763 14.9249 7.06072 15.3315 7.42576 15.6199C7.7908 15.9083 8.24495 16.0604 8.71005 16.05H18.49C18.9452 16.0493 19.3865 15.8933 19.7411 15.6079C20.0956 15.3224 20.3422 14.9246 20.4401 14.48L21.265 10.765M5.12005 7.05005H11M15 7L17 9L21 5M9 21C9 21.5523 8.55228 22 8 22C7.44772 22 7 21.5523 7 21C7 20.4477 7.44772 20 8 20C8.55228 20 9 20.4477 9 21ZM20 21C20 21.5523 19.5523 22 19 22C18.4477 22 18 21.5523 18 21C18 20.4477 18.4477 20 19 20C19.5523 20 20 20.4477 20 21Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShoppingCartCheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ShoppingCartCheck,
+ contentDescription = "ShoppingCartCheck",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SpeedGrader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SpeedGrader.kt
new file mode 100644
index 0000000000..14a1293253
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SpeedGrader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.SpeedGrader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.SpeedGrader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M211.733 1260.088c16.32 131.947 68.587 258.027 151.254 364.8l-168.64 130.667C88.213 1618.488 21.013 1456.14 0 1286.22Zm1654.155-391.584c18.88 57.813 32.32 117.76 39.787 178.24 4.8 40 7.146 79.147 7.146 119.787 0 40.533-2.346 79.68-7.146 119.466-21.014 170.134-88.214 332.48-194.347 469.547l-168.64-130.667c82.667-106.773 134.933-232.853 151.253-364.8 3.734-30.72 5.547-61.76 5.547-93.546 0-31.894-1.813-62.934-5.547-93.867-5.866-46.613-16.106-93.013-30.72-137.813Zm-135.125-421.707 150.826 150.827-875.413 875.413-519.893-519.893 150.826-150.827 369.067 369.067 724.587-724.587ZM194.347 577.411l168.64 130.666c-82.667 106.774-134.934 232.854-151.254 364.8L0 1046.744c21.013-169.92 88.213-332.267 194.347-469.333ZM833.14 213.709l26.134 211.734c-132.054 16.213-258.134 68.586-364.8 151.253L363.7 408.056c137.067-106.133 299.307-173.44 469.44-194.347Zm239.456-.01c170.027 21.013 332.374 88.213 469.334 194.346l-130.774 168.64c-106.56-82.666-232.746-135.04-364.693-151.253Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SpeedGraderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.SpeedGrader,
+ contentDescription = "SpeedGrader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquareSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquareSolid.kt
new file mode 100644
index 0000000000..f3eb76eadc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquareSolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.SquareSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.SquareSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M19 3H5C3.89543 3 3 3.89543 3 5V19C3 20.1046 3.89543 21 5 21H19C20.1046 21 21 20.1046 21 19V5C21 3.89543 20.1046 3 19 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SquareSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.SquareSolid,
+ contentDescription = "SquareSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquaresBlueprint.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquaresBlueprint.kt
new file mode 100644
index 0000000000..e897efdce7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquaresBlueprint.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.SquaresBlueprint: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.SquaresBlueprint",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M4 16C2.9 16 2 15.1 2 14V4C2 2.9 2.9 2 4 2H14C15.1 2 16 2.9 16 4M9.55035 7.99414C9.13762 7.99414 8.74179 8.1581 8.44994 8.44994C8.1581 8.74179 7.99414 9.13762 7.99414 9.55035M20.4438 7.99414C20.8565 7.99414 21.2524 8.1581 21.5442 8.44994C21.836 8.74179 22 9.13762 22 9.55035M22 20.4438C22 20.8565 21.836 21.2524 21.5442 21.5442C21.2524 21.836 20.8565 22 20.4438 22M9.55035 22C9.13762 22 8.74179 21.836 8.44994 21.5442C8.1581 21.2524 7.99414 20.8565 7.99414 20.4438M12.6628 7.99414H13.4409M12.6628 22H13.4409M16.5533 7.99414H17.3314M16.5533 22H17.3314M7.99414 12.6628V13.4409M22 12.6628V13.4409M7.99414 16.5533V17.3314M22 16.5533V17.3314"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SquaresBlueprintPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.SquaresBlueprint,
+ contentDescription = "SquaresBlueprint",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquaresBlueprintLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquaresBlueprintLock.kt
new file mode 100644
index 0000000000..fac1584f5a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/SquaresBlueprintLock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.SquaresBlueprintLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.SquaresBlueprintLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M4 16C2.9 16 2 15.1 2 14V4C2 2.9 2.9 2 4 2H14C15.1 2 16 2.9 16 4M9.55035 7.99414C9.13762 7.99414 8.74179 8.1581 8.44994 8.44994C8.1581 8.74179 7.99414 9.13762 7.99414 9.55035M20.4438 7.99414C20.8565 7.99414 21.2524 8.1581 21.5442 8.44994C21.836 8.74179 22 9.13762 22 9.55035M9.55035 22C9.13762 22 8.74179 21.836 8.44994 21.5442C8.1581 21.2524 7.99414 20.8565 7.99414 20.4438M12.6628 7.99414H13.4409M16.5533 7.99414H17.3314M7.99414 12.6628V13.4409M7.99414 16.5533V17.3314M20 17V15C20 14.4696 19.7893 13.9609 19.4142 13.5858C19.0391 13.2107 18.5304 13 18 13C17.4696 13 16.9609 13.2107 16.5858 13.5858C16.2107 13.9609 16 14.4696 16 15V17M15 17H21C21.5523 17 22 17.4477 22 18V21C22 21.5523 21.5523 22 21 22H15C14.4477 22 14 21.5523 14 21V18C14 17.4477 14.4477 17 15 17Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SquaresBlueprintLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.SquaresBlueprintLock,
+ contentDescription = "SquaresBlueprintLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/StarSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/StarSolid.kt
new file mode 100644
index 0000000000..ef0c003fb5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/StarSolid.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.StarSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.StarSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M11.5251 2.295C11.5689 2.20646 11.6366 2.13193 11.7205 2.07983C11.8045 2.02772 11.9013 2.00011 12.0001 2.00011C12.0989 2.00011 12.1957 2.02772 12.2796 2.07983C12.3636 2.13193 12.4313 2.20646 12.4751 2.295L14.7851 6.974C14.9373 7.28197 15.1619 7.54841 15.4397 7.75045C15.7175 7.9525 16.0402 8.08411 16.3801 8.134L21.5461 8.89C21.644 8.90418 21.7359 8.94547 21.8116 9.0092C21.8872 9.07293 21.9435 9.15655 21.9741 9.25061C22.0047 9.34467 22.0084 9.44541 21.9847 9.54144C21.961 9.63747 21.9109 9.72495 21.8401 9.794L18.1041 13.432C17.8577 13.6721 17.6734 13.9685 17.5669 14.2956C17.4605 14.6228 17.4352 14.9709 17.4931 15.31L18.3751 20.45C18.3924 20.5478 18.3818 20.6486 18.3446 20.7407C18.3074 20.8328 18.245 20.9126 18.1646 20.971C18.0842 21.0294 17.9891 21.064 17.89 21.0709C17.7908 21.0778 17.6918 21.0567 17.6041 21.01L12.9861 18.582C12.6818 18.4222 12.3433 18.3388 11.9996 18.3388C11.6559 18.3388 11.3174 18.4222 11.0131 18.582L6.39609 21.01C6.30842 21.0564 6.20949 21.0773 6.11054 21.0703C6.0116 21.0632 5.91661 21.0286 5.83639 20.9702C5.75616 20.9119 5.69392 20.8322 5.65675 20.7402C5.61957 20.6483 5.60895 20.5477 5.62609 20.45L6.50709 15.311C6.56529 14.9717 6.54007 14.6234 6.43363 14.296C6.32718 13.9687 6.1427 13.6722 5.89609 13.432L2.16009 9.795C2.08868 9.72603 2.03808 9.6384 2.01405 9.54207C1.99002 9.44575 1.99353 9.34462 2.02417 9.25019C2.05481 9.15576 2.11136 9.07184 2.18737 9.00798C2.26338 8.94413 2.35579 8.9029 2.45409 8.889L7.61909 8.134C7.95935 8.0845 8.28248 7.95306 8.56067 7.75099C8.83887 7.54892 9.06379 7.28227 9.21609 6.974L11.5251 2.295Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StarSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.StarSolid,
+ contentDescription = "StarSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Studio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Studio.kt
new file mode 100644
index 0000000000..8a71e78ea3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Studio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Studio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Studio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740.135 0c32.46 0 58.775 26.315 58.775 58.776v1125.587c0 32.46-26.314 58.775-58.775 58.775h-245.278v199.818c0 14.201 11.512 25.714 25.714 25.714h61.463c23.377-65.684 86.101-112.707 159.808-112.707 93.658 0 169.582 75.924 169.582 169.581 0 93.657-75.924 169.582-169.582 169.582-74.315 0-137.465-47.803-160.379-114.337l-59.1.048c-77.131 0-139.628-62.497-139.628-139.592l.033-198.107h-123.405v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H782.214v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H546.656l.033 198.107c0 77.095-62.497 139.592-139.592 139.592l-59.136-.048c-22.914 66.534-86.064 114.337-160.38 114.337C93.924 1695.126 18 1619.2 18 1525.544s75.924-169.581 169.581-169.581c73.707 0 136.431 47.023 159.809 112.707h61.463c14.201 0 25.714-11.513 25.714-25.714v-199.818H188.115c-32.461 0-58.776-26.314-58.776-58.775V58.776C129.339 26.315 155.654 0 188.115 0h1552.02ZM1204.67 1694.79c-30.723 0-55.629 24.906-55.629 55.629s24.906 55.629 55.63 55.629c30.722 0 55.628-24.906 55.628-55.63 0-30.722-24.906-55.628-55.629-55.628Zm-477.149 0c-30.723 0-55.629 24.906-55.629 55.629s24.906 55.629 55.629 55.629 55.629-24.906 55.629-55.63c0-30.722-24.906-55.628-55.629-55.628Zm1015.672-224.875c-30.723 0-55.63 24.906-55.63 55.63 0 30.722 24.907 55.628 55.63 55.628 30.723 0 55.628-24.906 55.628-55.629s-24.905-55.629-55.628-55.629Zm-1556.964 0c-30.723 0-55.629 24.906-55.629 55.63 0 30.722 24.906 55.628 55.63 55.628 30.722 0 55.628-24.906 55.628-55.629s-24.906-55.629-55.629-55.629ZM1692.202 1040H236.047v67.099c0 16.23 13.157 29.387 29.388 29.387h1397.38c16.23 0 29.387-13.157 29.387-29.387V1040Zm-29.388-933.333H265.434c-16.23 0-29.387 13.157-29.387 29.387v797.28h1456.155v-797.28c0-16.23-13.157-29.387-29.388-29.387ZM906.047 348.665l220.035 131.796C1138.59 489.628 1146 504.338 1146 520c0 15.662-7.41 30.372-19.918 39.539L906.047 691.335a47.406 47.406 0 0 1-48.007.014c-14.858-8.697-24.02-24.777-24.04-42.189V390.84c.02-17.412 9.182-33.492 24.04-42.19a47.406 47.406 0 0 1 48.007.015Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StudioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Studio,
+ contentDescription = "Studio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Table2Check.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Table2Check.kt
new file mode 100644
index 0000000000..fbaefb6a38
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Table2Check.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Table2Check: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Table2Check",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 3H5C4.46957 3 3.96086 3.21071 3.58579 3.58579C3.21071 3.96086 3 4.46957 3 5V9M9 3H19C19.5304 3 20.0391 3.21071 20.4142 3.58579C20.7893 3.96086 21 4.46957 21 5V9M9 3V21M3 9V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H9M3 9H21M21 9V14M9 21H12.0517M16 20L18 22L22 18"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Table2CheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Table2Check,
+ contentDescription = "Table2Check",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Table2X.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Table2X.kt
new file mode 100644
index 0000000000..afb1de67d5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Table2X.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Table2X: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Table2X",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 3H5C4.46957 3 3.96086 3.21071 3.58579 3.58579C3.21071 3.96086 3 4.46957 3 5V9M9 3H19C19.5304 3 20.0391 3.21071 20.4142 3.58579C20.7893 3.96086 21 4.46957 21 5V9M9 3V21M3 9V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H9M3 9H21M21 9V13.0483M9 21H12.9867M17 22L22 17M17 17L22 22"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Table2XPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Table2X,
+ contentDescription = "Table2X",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableCog.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableCog.kt
new file mode 100644
index 0000000000..285345ed11
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableCog.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableCog: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableCog",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M3 9H21M3 15H10.59M10.4445 21H5C3.89543 21 3 20.1046 3 19V5C3 3.89543 3.89543 3 5 3H19C20.1046 3 21 3.89543 21 5V10.6103M14.305 19.5299L15.228 19.1479M15.228 16.8522L14.305 16.4692M16.852 15.2282L16.469 14.3052M16.852 20.772L16.469 21.696M19.148 15.2282L19.531 14.3052M19.53 21.696L19.148 20.772M20.772 16.8522L21.696 16.4692M20.772 19.1479L21.696 19.5309M21 18C21 19.6569 19.6569 21 18 21C16.3431 21 15 19.6569 15 18C15 16.3431 16.3431 15 18 15C19.6569 15 21 16.3431 21 18Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableCogPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableCog,
+ contentDescription = "TableCog",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumn.kt
new file mode 100644
index 0000000000..ce38700650
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableColumn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableColumn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 21L9 15M9 3L9 9M3 15H9M3 9H9M9 9V15M19 21L5 21C3.89543 21 3 20.1046 3 19L3 5C3 3.89543 3.89543 3 5 3L19 3C20.1046 3 21 3.89543 21 5L21 19C21 20.1046 20.1046 21 19 21Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableColumnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableColumn,
+ contentDescription = "TableColumn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnPlusLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnPlusLeft.kt
new file mode 100644
index 0000000000..3e675ddc80
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnPlusLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableColumnPlusLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableColumnPlusLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M15 3V9M15 21V15M21 9H15M21 15H15M15 15V9M9 9V15M12 12H6M5 3H19C20.1046 3 21 3.89543 21 5V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V5C3 3.89543 3.89543 3 5 3Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableColumnPlusLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableColumnPlusLeft,
+ contentDescription = "TableColumnPlusLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnPlusRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnPlusRight.kt
new file mode 100644
index 0000000000..bf97100170
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnPlusRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableColumnPlusRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableColumnPlusRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 21L9 15M9 3L9 9M3 15H9M3 9L9 9M9 9L9 15M15 15V12M15 9V12M12 12H15M18 12H15M19 21L5 21C3.89543 21 3 20.1046 3 19L3 5C3 3.89543 3.89543 3 5 3L19 3C20.1046 3 21 3.89543 21 5L21 19C21 20.1046 20.1046 21 19 21Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableColumnPlusRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableColumnPlusRight,
+ contentDescription = "TableColumnPlusRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnX.kt
new file mode 100644
index 0000000000..c0fa938b9f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableColumnX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableColumnX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableColumnX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 3H5C4.46957 3 3.96086 3.21071 3.58579 3.58579C3.21071 3.96086 3 4.46957 3 5V9M9 3V9M9 3V21M9 3H11.1938M3 9V19C3 19.5304 3.21071 20.0391 3.58579 20.4142C3.96086 20.7893 4.46957 21 5 21H9M3 9H9M3 9V10M9 21V9M19 3C19.5304 3 20.0391 3.21071 20.4142 3.58579C20.7893 3.96086 21 4.46957 21 5M8.78553 21H12.0964M14.6015 3H15.6015M21 8.49118V13.0566M3 14V15M17 22L22 17M17 17L22 22"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableColumnXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableColumnX,
+ contentDescription = "TableColumnX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRow.kt
new file mode 100644
index 0000000000..7e3dd6739e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRow.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableRow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableRow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M3 9L9 9M21 9L15 9M9 3V9M15 3L15 9M15 9L9 9M3 19L3 5C3 3.89543 3.89543 3 5 3L19 3C20.1046 3 21 3.89543 21 5L21 19C21 20.1046 20.1046 21 19 21L5 21C3.89543 21 3 20.1046 3 19Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableRowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableRow,
+ contentDescription = "TableRow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowPlusBottom.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowPlusBottom.kt
new file mode 100644
index 0000000000..5da9cd5adc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowPlusBottom.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableRowPlusBottom: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableRowPlusBottom",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M3 9L9 9M21 9L15 9M9 3L9 6V9M15 3V9M15 9L9 9M9 15L15 15M12 12L12 18M3 19L3 5C3 3.89543 3.89543 3 5 3L19 3C20.1046 3 21 3.89543 21 5L21 19C21 20.1046 20.1046 21 19 21L5 21C3.89543 21 3 20.1046 3 19Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableRowPlusBottomPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableRowPlusBottom,
+ contentDescription = "TableRowPlusBottom",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowPlusTop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowPlusTop.kt
new file mode 100644
index 0000000000..2f91eedc16
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowPlusTop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableRowPlusTop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableRowPlusTop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M21 15L15 15M3 15H9M15 21V15M9 21V15M9 15H15M15 9H9M12 12L12 6M21 5V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19L3 5C3 3.89543 3.89543 3 5 3L19 3C20.1046 3 21 3.89543 21 5Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableRowPlusTopPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableRowPlusTop,
+ contentDescription = "TableRowPlusTop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowX.kt
new file mode 100644
index 0000000000..4640da0667
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TableRowX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TableRowX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TableRowX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M9 3H5C4.46957 3 3.96086 3.21071 3.58579 3.58579C3.21071 3.96086 3 4.46957 3 5V9M9 3H19C19.5304 3 20.0391 3.21071 20.4142 3.58579C20.7893 3.96086 21 4.46957 21 5V9M9 3V9M9 3H10M3 9H9M3 9H21M21 9H9M21 9V12.9792M5 21C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19M8.43739 21H12.2273M14 3H15M3 8.49389C3 8.49389 3 10.1301 3 11.148M3 14.5314V15.634M18.4374 31H19.4374M17 22L22 17M17 17L22 22"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableRowXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TableRowX,
+ contentDescription = "TableRowX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TextColor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TextColor.kt
new file mode 100644
index 0000000000..b5af5b0fa8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/TextColor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.TextColor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.TextColor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M7.5 12.9988L11.539 3.30882C11.577 3.21772 11.6411 3.13991 11.7232 3.08517C11.8053 3.03043 11.9018 3.00122 12.0005 3.00122C12.0992 3.00122 12.1957 3.03043 12.2778 3.08517C12.3599 3.13991 12.424 3.21772 12.462 3.30882L16.5 12.9988M8.80402 9.99878H15.196M5 17H19C20.1046 17 21 17.8954 21 19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19C3 17.8954 3.89543 17 5 17Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextColorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.TextColor,
+ contentDescription = "TextColor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ThumbsDownSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ThumbsDownSolid.kt
new file mode 100644
index 0000000000..bddf847c7e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ThumbsDownSolid.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ThumbsDownSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ThumbsDownSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M16.83 14.0146L16.83 2L6.33 2C5.89726 2 5.47619 2.14036 5.13 2.4C4.78381 2.65964 4.53117 3.02457 4.41 3.44L2.08 11.44C1.99306 11.7381 1.97672 12.0523 2.03226 12.3578C2.0878 12.6633 2.21371 12.9516 2.4 13.2C2.58629 13.4484 2.82786 13.65 3.10557 13.7889C3.38328 13.9277 3.68951 14 4 14H9.83L8.83 18.12C8.71696 18.5779 8.70884 19.0554 8.80626 19.5168C8.90368 19.9782 9.10412 20.4117 9.39259 20.7848C9.68107 21.1579 10.0501 21.461 10.4722 21.6714C10.8943 21.8818 11.3584 21.9942 11.83 22L15.28 15.11C15.4456 14.7768 15.7008 14.4964 16.017 14.3003C16.2649 14.1466 16.5424 14.0495 16.83 14.0146Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M16.83 14.0146L16.83 2L6.33 2M16.83 14.0146C16.5424 14.0495 16.2649 14.1466 16.017 14.3003M16.83 14.0146L16.8681 14.0103M6.33 2C5.89726 2 5.47619 2.14036 5.13 2.4C4.78381 2.65964 4.53117 3.02457 4.41 3.44L2.08 11.44C1.99306 11.7381 1.97672 12.0523 2.03226 12.3578C2.0878 12.6633 2.21371 12.9516 2.4 13.2C2.58629 13.4484 2.82786 13.65 3.10557 13.7889C3.38328 13.9277 3.68951 14 4 14H9.83L8.83 18.12C8.71696 18.5779 8.70884 19.0554 8.80626 19.5168C8.90368 19.9782 9.10412 20.4117 9.39259 20.7848C9.68107 21.1579 10.0501 21.461 10.4722 21.6714C10.8943 21.8818 11.3584 21.9942 11.83 22L15.28 15.11C15.4456 14.7768 15.7008 14.4964 16.017 14.3003M6.33 2L19.83 2C20.3604 2 20.8691 2.21072 21.2442 2.58579C21.6193 2.96086 21.83 3.46957 21.83 4V12C21.83 12.5304 21.6193 13.0391 21.2442 13.4142C20.8691 13.7893 20.3604 14 19.83 14H17.07C17.0024 14 16.935 14.0035 16.8681 14.0103M16.017 14.3003C16.2758 14.1398 16.567 14.041 16.8681 14.0103"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ThumbsDownSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ThumbsDownSolid,
+ contentDescription = "ThumbsDownSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ThumbsUpSolid.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ThumbsUpSolid.kt
new file mode 100644
index 0000000000..56ca906e0f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/ThumbsUpSolid.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.ThumbsUpSolid: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.ThumbsUpSolid",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M7 9.98542V22H17.5C17.9327 22 18.3538 21.8596 18.7 21.6C19.0462 21.3404 19.2988 20.9754 19.42 20.56L21.75 12.56C21.8369 12.2619 21.8533 11.9477 21.7977 11.6422C21.7422 11.3367 21.6163 11.0484 21.43 10.8C21.2437 10.5516 21.0021 10.35 20.7244 10.2111C20.4467 10.0723 20.1405 10 19.83 10H14L15 5.88C15.113 5.42213 15.1212 4.94464 15.0237 4.4832C14.9263 4.02176 14.7259 3.5883 14.4374 3.2152C14.1489 2.84211 13.7799 2.53902 13.3578 2.3286C12.9357 2.11817 12.4716 2.00584 12 2L8.55 8.89C8.38442 9.22321 8.12917 9.50363 7.81296 9.69972C7.56514 9.85339 7.28757 9.9505 7 9.98542Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M7 9.98542V22H17.5M7 9.98542C7.28757 9.9505 7.56514 9.85339 7.81296 9.69972M7 9.98542L6.96188 9.98968M17.5 22C17.9327 22 18.3538 21.8596 18.7 21.6C19.0462 21.3404 19.2988 20.9754 19.42 20.56L21.75 12.56C21.8369 12.2619 21.8533 11.9477 21.7977 11.6422C21.7422 11.3367 21.6163 11.0484 21.43 10.8C21.2437 10.5516 21.0021 10.35 20.7244 10.2111C20.4467 10.0723 20.1405 10 19.83 10H14L15 5.88C15.113 5.42213 15.1212 4.94464 15.0237 4.4832C14.9263 4.02176 14.7259 3.5883 14.4374 3.2152C14.1489 2.84211 13.7799 2.53902 13.3578 2.3286C12.9357 2.11817 12.4716 2.00584 12 2L8.55 8.89C8.38442 9.22321 8.12917 9.50363 7.81296 9.69972M17.5 22H4C3.46957 22 2.96086 21.7893 2.58579 21.4142C2.21071 21.0391 2 20.5304 2 20V12C2 11.4696 2.21071 10.9609 2.58579 10.5858C2.96086 10.2107 3.46957 10 4 10H6.76C6.82762 9.99996 6.89499 9.9965 6.96188 9.98968M7.81296 9.69972C7.5542 9.86018 7.26302 9.95896 6.96188 9.98968"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ThumbsUpSolidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.ThumbsUpSolid,
+ contentDescription = "ThumbsUpSolid",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Title.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Title.kt
new file mode 100644
index 0000000000..5d57e0f8ff
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/Title.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.Title: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.Title",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 8H22M6 12H18M4 4H20C21.1046 4 22 4.89543 22 6V18C22 19.1046 21.1046 20 20 20H4C2.89543 20 2 19.1046 2 18V6C2 4.89543 2.89543 4 4 4Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TitlePreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.Title,
+ contentDescription = "Title",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundArrowUp.kt
new file mode 100644
index 0000000000..71e1aee772
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundArrowUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.UserRoundArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.UserRoundArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 21C1.99992 19.4603 2.44413 17.9533 3.27935 16.6598C4.11456 15.3664 5.30527 14.3414 6.7086 13.708C8.11193 13.0745 9.66824 12.8595 11.1908 13.0886C12.5362 13.2912 13.8048 13.833 14.8785 14.6592M19 16V22M19 16L22 19M19 16L16 19M15 8C15 10.7614 12.7614 13 10 13C7.23858 13 5 10.7614 5 8C5 5.23858 7.23858 3 10 3C12.7614 3 15 5.23858 15 8Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserRoundArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.UserRoundArrowUp,
+ contentDescription = "UserRoundArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundBlackboard.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundBlackboard.kt
new file mode 100644
index 0000000000..55de554910
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundBlackboard.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.UserRoundBlackboard: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.UserRoundBlackboard",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M17 21C17 19.4087 16.3679 17.8826 15.2426 16.7574C14.1174 15.6321 12.5913 15 11 15M11 15C9.4087 15 7.88258 15.6321 6.75736 16.7574C5.63214 17.8826 5 19.4087 5 21M11 15C13.2091 15 15 13.2091 15 11C15 8.79086 13.2091 7 11 7C8.79086 7 7 8.79086 7 11C7 13.2091 8.79086 15 11 15ZM3 15V5C3 3.89543 3.89543 3 5 3H19C20.1046 3 21 3.89543 21 5V15C21 15.7403 20.5978 15.9375 20 15.987M20 15.987C19.7058 16.0114 19.8643 16 19.5 16L20 15.987Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserRoundBlackboardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.UserRoundBlackboard,
+ contentDescription = "UserRoundBlackboard",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundLock.kt
new file mode 100644
index 0000000000..e845237a6f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/custom/UserRoundLock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.custom
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Custom.UserRoundLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Custom.UserRoundLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 24f,
+ viewportHeight = 24f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M2 21.0002C2.00012 19.7412 2.29739 18.5 2.86766 17.3775C3.43792 16.255 4.26506 15.283 5.28182 14.5404C6.29858 13.7979 7.47624 13.3058 8.71904 13.1042C9.96183 12.9026 11.2347 12.9972 12.434 13.3802M19.25 16.5558V14.778C19.25 14.3065 19.0656 13.8543 18.7374 13.5209C18.4092 13.1875 17.9641 13.0002 17.5 13.0002C17.0359 13.0002 16.5908 13.1875 16.2626 13.5209C15.9344 13.8543 15.75 14.3065 15.75 14.778V16.5558M15 8C15 10.7614 12.7614 13 10 13C7.23858 13 5 10.7614 5 8C5 5.23858 7.23858 3 10 3C12.7614 3 15 5.23858 15 8ZM14.875 16.5558H20.125C20.6082 16.5558 21 16.9538 21 17.4447V20.1114C21 20.6023 20.6082 21.0002 20.125 21.0002H14.875C14.3918 21.0002 14 20.6023 14 20.1114V17.4447C14 16.9538 14.3918 16.5558 14.875 16.5558Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserRoundLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Custom.UserRoundLock,
+ contentDescription = "UserRoundLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/A11y.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/A11y.kt
new file mode 100644
index 0000000000..a51d55c2c3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/A11y.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.A11y: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.A11y",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 2c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1491.355 0 962 430.645 2 960 2Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm436.704 520.291h-914.56c-31.04 0-55.467 24.427-55.467 55.467 0 31.146 24.427 55.573 55.467 55.573h275.307v887.787c0 31.146 24.32 55.573 55.466 55.573 31.04 0 55.467-24.427 55.467-55.573v-375.04h146.453v375.04c0 31.146 24.427 55.573 55.467 55.573 31.147 0 55.573-24.427 55.573-55.573V744.032h275.307c31.04 0 55.467-24.427 55.467-55.467-6.72-28.906-31.04-53.333-59.947-53.333m-457.29-315.21c73.6 0 133.226 59.626 133.226 133.226 0 73.493-59.627 133.12-133.227 133.12-73.493 0-133.226-59.627-133.226-133.12 0-73.6 59.733-133.227 133.226-133.227"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun A11yPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.A11y,
+ contentDescription = "A11y",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Add.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Add.kt
new file mode 100644
index 0000000000..9af652295d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Add.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Add: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Add",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M915.744 213v702.744H213v87.842h702.744v702.744h87.842v-702.744h702.744v-87.842h-702.744V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Add,
+ contentDescription = "Add",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddFolder.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddFolder.kt
new file mode 100644
index 0000000000..90943d6e47
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddFolder.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AddFolder: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AddFolder",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m764.386 112.941 225.882 338.824H1920v1185.882c0 88.213-67.799 160.913-154.016 168.718l-15.396.694H169.412c-88.214 0-160.913-67.799-168.718-154.016L0 1637.647V112.941h764.386Zm-60.537 112.941H112.941v1411.765c0 27.708 20.079 50.776 46.354 55.56l10.117.91h1581.176c27.608 0 50.754-19.989 55.557-46.324l.914-10.146V564.706H225.882V451.765H854.4L703.85 225.882Zm312.622 564.706v282.353h282.353v112.941H1016.47v282.353H903.529v-282.353H621.176v-112.94H903.53V790.587h112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddFolderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AddFolder,
+ contentDescription = "AddFolder",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddMedia.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddMedia.kt
new file mode 100644
index 0000000000..e341688691
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddMedia.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AddMedia: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AddMedia",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1493.33 320V0H1600v320h320v106.667h-320v320h-106.67v-320h-320V320h320ZM160 426.667c-29.455 0-53.333 23.878-53.333 53.333v1280c0 29.46 23.878 53.33 53.333 53.33h1280c29.46 0 53.33-23.87 53.33-53.33V960H1600v800c0 88.37-71.63 160-160 160H160c-88.365 0-160-71.63-160-160V480c0-88.366 71.634-160 160-160h800v106.667H160Zm373.333 279.136L1223.66 1120l-690.327 414.2V705.803ZM640 894.197V1345.8l376.34-225.8L640 894.197Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddMediaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AddMedia,
+ contentDescription = "AddMedia",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddressBook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddressBook.kt
new file mode 100644
index 0000000000..f9811658a8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AddressBook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AddressBook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AddressBook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1688.412 1807.059H332.059v-326.275h56.515c31.196 0 56.514-25.299 56.514-56.47 0-31.172-25.318-56.47-56.514-56.47h-56.515V1029.02h56.515c31.196 0 56.514-25.3 56.514-56.471 0-31.172-25.318-56.47-56.514-56.47h-56.515V577.254h56.515c31.196 0 56.514-25.299 56.514-56.47 0-31.172-25.318-56.471-56.514-56.471h-56.515V112.942h1356.353v1694.117ZM219.029 0v464.314h-56.514c-31.196 0-56.515 25.299-56.515 56.47 0 31.172 25.319 56.47 56.515 56.47h56.514v338.824h-56.514c-31.196 0-56.515 25.3-56.515 56.471 0 31.172 25.319 56.47 56.515 56.47h56.514v338.824h-56.514c-31.196 0-56.515 25.299-56.515 56.47 0 31.172 25.319 56.471 56.515 56.471h56.514V1920h1582.412V0H219.03ZM1029 499c112.782 0 226.444 91.718 226.444 204.5v102.25c0 44.99-22.423 87.424-47.167 121.269 40.798 9.611 66.225 21.165 105.285 38.037 75.563 32.72 124.438 106.646 124.438 188.446v140.799l-24.029 15.03c-69.632 43.457-207.772 111.862-386.607 111.862-17.485 0-35.174-.716-53.375-2.045-116.053-8.896-230.164-46.933-330.165-110.021L620 1294.096v-139.98c0-81.902 49.163-152.712 122.495-187.629 40.64-19.35 59.25-30.087 91.408-39.468-25.255-34.05-41.383-75.665-41.383-121.269V703.5C792.52 590.718 916.218 499 1029 499Zm-10.58 510.61c-80.062 1.432-159 18.1-235.278 51.126-37.014 15.95-60.839 52.76-60.839 93.763v82.925c79.96 45.603 169.122 73.21 259.51 80.164 156.034 11.759 281.904-39.98 353.99-80.369v-83.333c0-41.003-24.642-78.12-62.679-94.582-63.088-27.198-129.346-43.66-196.831-48.773-13.19-1.022-26.278-.511-39.469-.716-1.329.052-5.036.026-8.857-.025l-.918-.013-.916-.013c-3.192-.05-6.21-.11-7.714-.153Zm10.74-408.307c-56.442 0-141.022 45.91-141.022 102.25v102.25c0 55.113 82.842 99.592 137.545 101.535 2.148 0 4.295.102 6.442.102 54.908-1.636 128.086-46.32 128.086-101.637v-102.25c0-56.34-74.61-102.25-131.051-102.25Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddressBookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AddressBook,
+ contentDescription = "AddressBook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Admin.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Admin.kt
new file mode 100644
index 0000000000..4e25842e0d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Admin.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Admin: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Admin",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M276.941 440.584v565.722c0 422.4 374.174 625.468 674.71 788.668l8.02 4.292 8.131-4.292c300.537-163.2 674.71-366.268 674.71-788.668V440.584l-682.84-321.657L276.94 440.584Zm682.73 1479.529c-9.262 0-18.523-2.372-26.993-6.89l-34.9-18.974C588.095 1726.08 164 1495.906 164 1006.306V404.78c0-21.91 12.65-41.788 32.414-51.162L935.727 5.42c15.134-7.228 32.866-7.228 48 0l739.313 348.2c19.765 9.374 32.414 29.252 32.414 51.162v601.525c0 489.6-424.207 719.774-733.779 887.943l-34.899 18.975c-8.47 4.517-17.731 6.889-27.105 6.889Zm467.158-547.652h-313.412l-91.595-91.482v-83.803H905.041v-116.78h-83.69l-58.503-58.504c-1.92.113-3.84.113-5.76.113-176.075 0-319.285-143.21-319.285-319.285 0-176.075 143.21-319.398 319.285-319.398 176.075 0 319.285 143.323 319.285 319.398 0 1.92 0 3.84-.113 5.647l350.57 350.682v313.412Zm-266.654-112.941h153.713v-153.713L958.462 750.155l3.953-37.27c1.017-123.897-91.595-216.621-205.327-216.621S550.744 588.988 550.744 702.72c0 113.845 92.612 206.344 206.344 206.344l47.21-5.309 63.811 63.7h149.873v116.78h116.781v149.986l25.412 25.299Zm-313.4-553.57c0 46.758-37.949 84.706-84.706 84.706-46.758 0-84.706-37.948-84.706-84.706s37.948-84.706 84.706-84.706c46.757 0 84.706 37.948 84.706 84.706"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AdminPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Admin,
+ contentDescription = "Admin",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AdminTools.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AdminTools.kt
new file mode 100644
index 0000000000..740de0c01b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AdminTools.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AdminTools: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AdminTools",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m773.596 1069.654 711.086 711.085c39.632 39.632 104.336 39.632 144.078 0l138.276-138.385c19.268-19.269 29.888-44.778 29.888-71.93 0-27.26-10.62-52.77-29.888-72.039l-698.714-698.714 11.495-32.625c63.5-178.675 18.284-380.45-115.284-514.018-123.715-123.605-305.126-171.01-471.648-128.313l272.281 272.282c32.516 32.406 50.362 75.652 50.362 121.744 0 45.982-17.846 89.227-50.362 121.744L654.48 751.17c-67.222 67.003-176.375 67.003-243.488 0L138.711 478.889c-42.589 166.522 4.707 347.934 128.313 471.648 123.714 123.715 306.22 172.325 476.027 127.218l30.545-8.101ZM1556.611 1920c-54.084 0-108.168-20.692-149.333-61.857L740.095 1190.96c-198.162 41.712-406.725-19.269-550.475-163.019C14.449 852.771-35.256 582.788 65.796 356.27l32.406-72.696 390.194 390.193c24.414 24.305 64.266 24.305 88.68 0l110.687-110.686c11.824-11.934 18.283-27.59 18.283-44.34 0-16.751-6.46-32.516-18.283-44.34L297.569 84.207 370.265 51.8C596.893-49.252 866.875.453 1041.937 175.515c155.026 155.136 212.833 385.157 151.851 594.815l650.651 650.651c39.961 39.852 61.967 92.95 61.967 149.443 0 56.383-22.006 109.482-61.967 149.334l-138.275 138.385c-41.275 41.165-95.36 61.857-149.553 61.857Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AdminToolsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AdminTools,
+ contentDescription = "AdminTools",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Ai.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Ai.kt
new file mode 100644
index 0000000000..62c4da7bb8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Ai.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Ai: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Ai",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1219.29 700.713L960 0L700.713 700.713L0 960L700.713 1219.29L960 1920L1219.29 1219.29L1920 960L1219.29 700.713ZM1134.23 785.768L960 314.915L785.768 785.768L314.915 960L785.768 1134.23L960 1605.09L1134.23 1134.23L1605.09 960L1134.23 785.768Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1600 0L1686.43 233.571L1920 320L1686.43 406.429L1600 640L1513.57 406.429L1280 320L1513.57 233.571L1600 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Ai,
+ contentDescription = "Ai",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AiColored.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AiColored.kt
new file mode 100644
index 0000000000..3512a68e49
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AiColored.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AiColored: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AiColored",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0L1219.29 700.713L1920 960L1219.29 1219.29L960 1920L700.713 1219.29L0 960L700.713 700.713L960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1600 0L1686.43 233.571L1920 320L1686.43 406.429L1600 640L1513.57 406.429L1280 320L1513.57 233.571L1600 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiColoredPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AiColored,
+ contentDescription = "AiColored",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AiInfo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AiInfo.kt
new file mode 100644
index 0000000000..5467118386
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AiInfo.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AiInfo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AiInfo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0C1489.35 0 1920 430.645 1920 960C1920 1489.35 1489.35 1920 960 1920C430.645 1920 0 1489.35 0 960C0 430.645 430.645 0 960 0ZM960 1807.06C1427.13 1807.06 1807.06 1427.13 1807.06 960C1807.06 492.875 1427.13 112.941 960 112.941C492.875 112.941 112.941 492.875 112.941 960C112.941 1427.13 492.875 1807.06 960 1807.06Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1080.31 1194H954.64L923.4 1088.21H768.62L736.67 1194H613.84L774.3 725.4H920.56L1080.31 1194ZM791.34 1005.14H900.68L846.01 815.57L791.34 1005.14Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1257.13 725.4V1194H1135.01V725.4H1257.13Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiInfoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AiInfo,
+ contentDescription = "AiInfo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Alerts.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Alerts.kt
new file mode 100644
index 0000000000..75722afd37
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Alerts.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Alerts: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Alerts",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.928 1581.176c0 124.575-101.309 225.883-225.883 225.883-124.574 0-225.882-101.308-225.882-225.883h451.765ZM960.045 225.882c342.438 0 621.177 278.626 621.177 621.177v395.294c0 86.739 32.753 165.91 86.4 225.882H252.356c53.76-59.971 86.513-139.143 86.513-225.882V847.059c0-342.55 278.626-621.177 621.176-621.177Zm734.118 1016.47V847.06c0-385.694-299.294-702.268-677.647-731.294V0H903.575v115.765c-378.466 29.026-677.647 345.6-677.647 731.294v395.294c0 124.574-101.309 225.882-225.883 225.882v112.941h621.177c0 186.805 151.906 338.824 338.823 338.824 186.805 0 338.824-152.019 338.824-338.824h621.176v-112.94c-124.574 0-225.882-101.309-225.882-225.883Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AlertsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Alerts,
+ contentDescription = "Alerts",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Analytics.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Analytics.kt
new file mode 100644
index 0000000000..a482286904
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Analytics.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Analytics: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Analytics",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 106.667V1493.33H1173.33V106.667H746.667ZM1056 224H864V1376H1056V224ZM106.667 533.333H533.333V1493.33H106.667V533.333ZM224 650.667H416V1376H224V650.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1706.67H0V1824H1920V1706.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.67 746.667H1813.33V1493.33H1386.67V746.667ZM1504 864H1696V1376H1504V864Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AnalyticsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Analytics,
+ contentDescription = "Analytics",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Android.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Android.kt
new file mode 100644
index 0000000000..5e124c5b7b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Android.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Android: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Android",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M535.056 9.512c25.75-17.28 60.987-10.39 78.38 15.586l94.304 141.061c59.859-25.976 123.782-44.61 191.885-50.597a671.282 671.282 0 0 1 314.085 48.226l92.385-138.577c17.167-26.09 52.178-32.979 78.267-15.699 25.976 17.28 32.979 52.404 15.699 78.267l-85.721 128.639c29.251 18.86 57.373 39.415 83.123 63.02 118.474 108.535 183.753 253.324 183.753 407.6v734.107c0 88.206-76.008 160.036-169.41 160.036h-169.409V1920h-112.94v-338.82H790.638V1920h-112.94v-338.82H508.29c-93.401 0-169.41-71.829-169.41-160.035V709.286c0-200.468 107.293-380.268 269.249-488.916L519.583 87.892c-17.393-25.863-10.39-60.987 15.473-78.38Zm424.427 216.392c-16.602 0-33.317.791-50.032 2.26-256.6 22.474-457.632 233.784-457.632 481.122v711.86c0 25.863 25.299 47.095 56.47 47.095h903.518c31.17 0 56.47-21.232 56.47-47.096V687.037c0-122.313-52.179-237.512-147.161-324.363-96.112-88.205-225.766-136.77-361.633-136.77ZM113 1298.832h112.94V734.133H113v564.699Zm1581.156 0h112.94V734.133h-112.94v564.699ZM734.168 474.394c-49.919 0-90.351 40.433-90.351 90.352 0 49.807 40.432 90.352 90.351 90.352 49.92 0 90.352-40.545 90.352-90.352 0-49.92-40.432-90.352-90.352-90.352m451.76 0c-49.92 0-90.353 40.433-90.353 90.352 0 49.807 40.433 90.352 90.352 90.352 49.92 0 90.352-40.545 90.352-90.352 0-49.92-40.432-90.352-90.352-90.352"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AndroidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Android,
+ contentDescription = "Android",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Annotate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Annotate.kt
new file mode 100644
index 0000000000..29699789ec
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Annotate.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Annotate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Annotate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.235 113v99.388l-112.94 112.941v-99.388H112.94v1468.235h1242.353v-438.211l112.941-112.941v664.094H0V113h1468.235ZM421.271 1163.353c96-9.035 154.729 108.423 190.87 197.647 28.235 68.894 38.4 92.612 72.283 96 33.882 3.388 89.223-58.73 112.94-101.647 16.53-26.51 51.42-34.6 77.93-18.07 26.51 16.529 34.6 51.42 18.07 77.929-9.035 16.94-92.611 160.376-205.552 160.376h-9.036c-70.023-4.517-121.976-48.564-169.411-166.023-47.436-117.46-77.93-127.624-77.93-127.624a484.518 484.518 0 0 0-97.13 225.883c-6.549 31.187-37.14 51.16-68.329 44.611-31.187-6.55-51.16-37.141-44.611-68.33 20.33-94.87 79.059-310.587 199.906-320.752Zm256.376-485.647v112.941H338.824V677.706h338.823ZM903.53 451.824v112.94H338.824v-112.94h564.705Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1903.059 468.765-225.883-225.883a56.47 56.47 0 0 0-80.188 0L919.341 920.53a56.476 56.476 0 0 0-15.813 39.53v282.353h282.354a56.47 56.47 0 0 0 39.53-16.941l677.647-677.647c21.523-21.959 21.523-57.101 0-79.06Zm-740.894 660.706H1016.47V983.776l451.764-451.764 145.694 145.694-451.764 451.765Zm531.953-531.953-145.694-145.694 89.223-89.224 145.694 145.694-89.223 89.224Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AnnotatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Annotate,
+ contentDescription = "Annotate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Announcement.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Announcement.kt
new file mode 100644
index 0000000000..3584bcff60
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Announcement.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Announcement: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Announcement",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1587.162 31.278c11.52-23.491 37.27-35.689 63.473-29.816 25.525 6.099 43.483 28.8 43.483 55.002V570.46C1822.87 596.662 1920 710.733 1920 847.053c0 136.32-97.13 250.503-225.882 276.705v513.883c0 26.202-17.958 49.016-43.483 55.002a57.279 57.279 0 0 1-12.988 1.468c-21.12 0-40.772-11.745-50.485-31.171C1379.238 1247.203 964.18 1242.347 960 1242.347H564.706v564.706h87.755c-11.859-90.127-17.506-247.003 63.473-350.683 52.405-67.087 129.657-101.082 229.948-101.082v112.941c-64.49 0-110.57 18.861-140.837 57.487-68.781 87.868-45.064 263.83-30.269 324.254 4.18 16.828.34 34.673-10.277 48.34-10.73 13.665-27.219 21.684-44.499 21.684H508.235c-31.171 0-56.47-25.186-56.47-56.47v-621.177h-56.47c-155.747 0-282.354-126.607-282.354-282.353v-56.47h-56.47C25.299 903.523 0 878.336 0 847.052c0-31.172 25.299-56.471 56.47-56.471h56.471v-56.47c0-155.634 126.607-282.354 282.353-282.354h564.593c16.941-.112 420.48-7.002 627.275-420.48Zm-5.986 218.429c-194.71 242.371-452.216 298.164-564.705 311.04v572.724c112.489 12.876 369.995 68.556 564.705 311.04ZM903.53 564.7H395.294c-93.402 0-169.412 76.01-169.412 169.411v225.883c0 93.402 76.01 169.412 169.412 169.412H903.53V564.7Zm790.589 123.444v317.93c65.618-23.379 112.94-85.497 112.94-159.021 0-73.525-47.322-135.53-112.94-158.909Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AnnouncementPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Announcement,
+ contentDescription = "Announcement",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Apple.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Apple.kt
new file mode 100644
index 0000000000..c9c9d4bfae
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Apple.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Apple: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Apple",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1380.664 0 5.547 52.865c13.923 131.766-31.47 278.7-121.238 393.146-1.359 1.585-2.944 2.717-4.189 4.302 14.943-.566 29.885-1.698 45.394-.226 67.694 2.83 245.646 28.64 362.016 202.176l31.583 47.205-47.318 31.47c-40.752 25.81-165.839 118.748-164.141 293.077 1.924 220.742 179.876 301.68 200.14 310.17l48.562 20.377-16.3 50.26c-13.472 43.47-52.3 154.746-128.144 267.947-72.335 107.768-162.217 242.024-314.246 244.854-71.769 1.811-117.615-19.81-159.613-38.262-39.96-17.66-74.26-32.828-131.086-32.828-60.11 0-96.448 15.735-138.558 34.073-39.507 17.207-84.335 36.677-146.482 39.28-2.83.114-5.66.114-8.264.114-147.274 0-249.608-150.897-317.755-251.306l-5.187-7.735c-170.414-256.903-265.7-675.19-108.466-953.793 86.598-153.614 244.174-250.627 411.258-253.117 65.09-.906 124.974 19.47 176.594 39.846 8.83-119.88 65.883-231.722 125.087-303.944C1061.89 84.448 1206.448 7.245 1327.573 2.264L1380.664 0Zm-82.75 562.948c-73.694-7.81-144.331 21.282-207.157 46.639-47.432 19.13-88.297 35.545-126.22 35.545-32.375 0-66.335-10.98-101.654-24.791l-5.433-.453-.227-1.698c-7.471-3.056-14.942-6-22.64-9.056C785 588.984 730.55 562.608 676.102 567.25c-127.125 1.924-247.684 76.863-314.586 195.61-144.897 256.627-23.658 647.057 108.787 842.215 70.41 103.805 145.123 206.365 227.76 201.724 40.978-1.698 69.505-14.15 105.843-29.885 46.865-20.49 100.07-43.582 183.725-43.582 80.712 0 131.765 22.527 176.82 42.45 37.242 16.527 68.146 30.451 111.729 28.64 86.372-1.585 146.708-81.731 222.326-194.706 49.582-73.92 81.278-146.708 99.277-195.271-76.637-45.96-220.628-162.443-222.666-389.411-1.698-180.103 97.24-294.662 165.613-352.168-85.353-92.598-195.385-107.88-242.816-109.918Zm-23.093-438.314c-76.524 20.49-158.707 72.449-211.233 136.86l-.113.113c-46.525 56.827-95.994 150.784-101.088 247.457 84.674-12.678 165.273-71.769 213.61-133.01 58.411-74.374 93.39-164.821 98.824-251.42Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ApplePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Apple,
+ contentDescription = "Apple",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Arc.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Arc.kt
new file mode 100644
index 0000000000..bd19fdc80f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Arc.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Arc: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Arc",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1142.277 1243.138H777.214v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H541.656l.033 198.107c0 77.095-62.497 139.592-139.592 139.592l-59.136-.048c-22.914 66.534-86.064 114.337-160.38 114.337C88.924 1695.126 13 1619.2 13 1525.544s75.924-169.581 169.581-169.581c73.707 0 136.431 47.023 159.809 112.707h61.463c14.201 0 25.714-11.513 25.714-25.714v-199.818H183.115c-32.461 0-58.776-26.314-58.776-58.775V58.776C124.339 26.315 150.654 0 183.115 0h1552.02c32.46 0 58.775 26.315 58.775 58.776v1125.587c0 32.46-26.314 58.775-58.775 58.775h-245.278v199.818c0 14.201 11.512 25.714 25.714 25.714h61.463c23.377-65.684 86.101-112.707 159.808-112.707 93.658 0 169.582 75.924 169.582 169.581 0 93.657-75.924 169.582-169.582 169.582-74.315 0-137.465-47.803-160.379-114.337l-59.1.048c-77.131 0-139.628-62.497-139.628-139.592l.033-198.107h-123.405v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178Zm57.394 562.91c30.723 0 55.629-24.906 55.629-55.63 0-30.722-24.906-55.628-55.629-55.628s-55.629 24.906-55.629 55.629 24.906 55.629 55.63 55.629Zm-477.149 0c30.723 0 55.629-24.906 55.629-55.63 0-30.722-24.906-55.628-55.629-55.628s-55.629 24.906-55.629 55.629 24.906 55.629 55.629 55.629Zm1015.672-224.875c30.723 0 55.628-24.906 55.628-55.629s-24.905-55.629-55.628-55.629-55.63 24.906-55.63 55.63c0 30.722 24.907 55.628 55.63 55.628Zm-1556.964 0c30.723 0 55.63-24.906 55.63-55.629s-24.907-55.629-55.63-55.629c-30.723 0-55.629 24.906-55.629 55.63 0 30.722 24.906 55.628 55.63 55.628ZM901.047 348.665l220.035 131.796C1133.59 489.628 1141 504.338 1141 520c0 15.662-7.41 30.372-19.918 39.539L901.047 691.335a47.406 47.406 0 0 1-48.007.014c-14.858-8.697-24.02-24.777-24.04-42.189V390.84c.02-17.412 9.182-33.492 24.04-42.19a47.406 47.406 0 0 1 48.007.015Zm786.155 584.668V136.054c0-16.23-13.157-29.387-29.388-29.387H260.434c-16.23 0-29.387 13.157-29.387 29.387v797.28h1456.155Zm0 106.667H231.047v67.099c0 16.23 13.157 29.387 29.388 29.387h1397.38c16.23 0 29.387-13.157 29.387-29.387V1040Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArcPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Arc,
+ contentDescription = "Arc",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Archive.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Archive.kt
new file mode 100644
index 0000000000..b88529c6b5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Archive.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Archive: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Archive",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M533.333 586.667v106.666h-320v479.997h.422l233.6 213.34H1472.64l233.6-213.34h.43V693.333h-320V586.667h352c41.23 0 74.66 33.429 74.66 74.666v511.997H1856c35.35 0 64 28.66 64 64V1856c0 35.35-28.65 64-64 64H64c-35.346 0-64-28.65-64-64v-618.67c0-35.34 28.654-64 64-64h42.667V661.333c0-41.237 33.429-74.666 74.666-74.666h352ZM172.378 1280h-65.711v533.33H1813.33V1280h-65.71l-233.6 213.33H405.978L172.378 1280ZM1013.33 0v1044.579l228.96-228.958 75.42 75.425L960 1248.76 602.288 891.046l75.424-75.425 228.955 228.955V0h106.663Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArchivePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Archive,
+ contentDescription = "Archive",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDoubleEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDoubleEnd.kt
new file mode 100644
index 0000000000..0d343db490
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDoubleEnd.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowDoubleEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowDoubleEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 92.168 92.299 0l959.931 959.935L92.299 1920 0 1827.57l867.636-867.635L0 92.168Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M868 92.168 960.299 0l959.931 959.935L960.299 1920 868 1827.57l867.64-867.635L868 92.168Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowDoubleEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowDoubleEnd,
+ contentDescription = "ArrowDoubleEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDoubleStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDoubleStart.kt
new file mode 100644
index 0000000000..d81463591c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDoubleStart.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowDoubleStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowDoubleStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1052 92.168 959.701 0-.234 959.935 959.701 1920l92.299-92.43-867.636-867.635L1052 92.168Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 92.168 1827.7 0 867.766 959.935 1827.7 1920l92.3-92.43-867.64-867.635L1920 92.168Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowDoubleStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowDoubleStart,
+ contentDescription = "ArrowDoubleStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDown.kt
new file mode 100644
index 0000000000..aa4f04e330
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M902.83 0v1699.925l-476.465-476.467L345 1304.823 960.177 1920l615.407-615.177-81.365-81.365-476.466 476.467V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowDown,
+ contentDescription = "ArrowDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowEnd.kt
new file mode 100644
index 0000000000..194dbea41a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowEnd.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1304.824 345.002-81.25 81.249 476.466 476.582H0v114.922h1700.04l-476.466 476.465 81.25 81.25L1920 960.293z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowEnd,
+ contentDescription = "ArrowEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowLeft.kt
new file mode 100644
index 0000000000..4bdf018833
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowLeft.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M615.177 345 0 960.292l615.177 615.177 81.25-81.25-476.467-476.466H1920V902.83H219.96l476.467-476.58z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowLeft,
+ contentDescription = "ArrowLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowNest.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowNest.kt
new file mode 100644
index 0000000000..a6c3856465
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowNest.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowNest: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowNest",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M224 0H106.667V1339.83H1700.04L1223.57 1835.48L1304.82 1920L1920 1280.06L1304.82 640L1223.57 724.52L1700.04 1220.29H224V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowNestPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowNest,
+ contentDescription = "ArrowNest",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenDown.kt
new file mode 100644
index 0000000000..35f6f7b512
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowOpenDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowOpenDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m.153 526.146 92.168-92.299 867.767 867.636 867.636-867.636 92.429 92.299-960.065 959.935z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenDown,
+ contentDescription = "ArrowOpenDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenEnd.kt
new file mode 100644
index 0000000000..835514b4fe
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenEnd.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowOpenEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowOpenEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M526.299 0 434 92.168l867.636 867.767L434 1827.57l92.299 92.43 959.935-960.065z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenEnd,
+ contentDescription = "ArrowOpenEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenLeft.kt
new file mode 100644
index 0000000000..7d6b93be41
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenLeft.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowOpenLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowOpenLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1394.006 0 92.299 92.168-867.636 867.767 867.636 867.636-92.299 92.429-959.935-960.065z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenLeft,
+ contentDescription = "ArrowOpenLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenRight.kt
new file mode 100644
index 0000000000..51042816b9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenRight.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowOpenRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowOpenRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M526.299 0 434 92.168l867.636 867.767L434 1827.57l92.299 92.43 959.935-960.065z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenRight,
+ contentDescription = "ArrowOpenRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenStart.kt
new file mode 100644
index 0000000000..219345d1eb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenStart.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowOpenStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowOpenStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1394.006 0 92.299 92.168-867.636 867.767 867.636 867.636-92.299 92.429-959.935-960.065z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenStart,
+ contentDescription = "ArrowOpenStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenUp.kt
new file mode 100644
index 0000000000..d2a1c549b0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowOpenUp.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowOpenUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowOpenUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m.153 1393.854 92.168 92.299 867.767-867.636 867.636 867.636 92.429-92.299L960.088 433.92z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowOpenUp,
+ contentDescription = "ArrowOpenUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowRight.kt
new file mode 100644
index 0000000000..d2a0233af5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowRight.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1304.824 345.002-81.25 81.249 476.466 476.582H0v114.922h1700.04l-476.466 476.465 81.25 81.25L1920 960.293z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowRight,
+ contentDescription = "ArrowRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowStart.kt
new file mode 100644
index 0000000000..679feeda55
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowStart.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M615.177 345 0 960.292l615.177 615.177 81.25-81.25-476.467-476.466H1920V902.83H219.96l476.467-476.58z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowStart,
+ contentDescription = "ArrowStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowUp.kt
new file mode 100644
index 0000000000..433da91f0f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ArrowUp.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.406 0 345 615.176l81.364 81.366L902.83 220.075V1920h114.922V220.075l476.466 476.467 81.366-81.366z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ArrowUp,
+ contentDescription = "ArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Assignment.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Assignment.kt
new file mode 100644
index 0000000000..f5010276bc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Assignment.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Assignment: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Assignment",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.214 0v564.698h-112.94V112.94H112.94v1694.092h1242.334v-225.879h112.94v338.819H0V0h1468.214Zm129.428 581.311c22.137-22.136 57.825-22.136 79.962 0l225.879 225.879c22.023 22.023 22.023 57.712 0 79.848l-677.638 677.637c-10.616 10.504-24.96 16.49-39.98 16.49h-225.88c-31.17 0-56.469-25.299-56.469-56.47v-225.88c0-15.02 5.986-29.364 16.49-39.867Zm-155.291 314.988-425.895 425.895v146.031h146.03l425.895-425.895-146.03-146.03Zm-764.714 346.047v112.94H338.82v-112.94h338.818Zm225.88-225.88v112.94H338.818v-112.94h564.697Zm734.106-315.44-115.424 115.425 146.03 146.03 115.425-115.423-146.031-146.031ZM1129.395 338.83v451.758H338.82V338.83h790.576Zm-112.94 112.94H451.759v225.878h564.698V451.77Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AssignmentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Assignment,
+ contentDescription = "Assignment",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AttachMedia.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AttachMedia.kt
new file mode 100644
index 0000000000..42f4c47b03
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AttachMedia.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AttachMedia: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AttachMedia",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M101.002 1230.637V377.955c557.71-147.638 1076.312-35.47 1214.45 0v395.924l101.053-30.316V302.165l-35.671-11.014c-26.274-8.287-651.588-197.154-1349.154 1.313L-.05 305.197v1001.23l35.671 10.913c17.28 5.457 295.781 89.533 682.206 89.533 122.173 0 255.866-10.004 394.712-31.933v-101.255c-476.362 77.811-890.476-12.025-1011.537-43.048M1919.91 789.31v693.524c-.101 103.074-82.257 186.846-183.31 186.846-91.856 0-167.343-69.524-180.58-159.46-1.415-9.095-2.729-18.19-2.729-27.689 0-103.074 82.156-187.048 183.31-187.048 16.673 0 32.539 2.93 47.899 7.275 12.025 3.234 23.545 7.882 34.357 13.541V924.62l-39.814 11.824-362.577 107.317-27.89 8.186v579.94c0 2.83-.708 5.458-.81 8.186-4.243 99.234-84.176 178.964-182.601 178.964-101.154 0-183.31-83.975-183.31-187.15 0-68.513 36.682-128.033 90.645-160.572 27.385-16.471 58.711-26.577 92.665-26.577 29.81 0 57.499 7.983 82.358 20.817V976.46l27.89-8.185 101.053-29.911 360.96-106.813 142.484-42.24ZM527.515 480.635l560.842 329.835-560.842 329.735v-659.57Zm101.053 176.64v306.29L888.98 810.47 628.568 657.275ZM1736.6 1568.628c-38.097 0-68.817-27.689-78.114-64.674-1.82-6.973-4.143-13.743-4.143-21.423 0-47.394 36.884-85.996 82.257-85.996 18.896 0 35.671 7.781 49.515 19.1 19.504 15.763 32.741 39.309 32.741 66.896 0 47.495-36.884 86.097-82.256 86.097Zm-531.436 149.356c-45.373 0-82.257-38.603-82.257-86.097 0-47.495 36.884-86.097 82.257-86.097 45.372 0 82.358 38.602 82.358 86.097 0 47.494-36.986 86.097-82.358 86.097Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AttachMediaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AttachMedia,
+ contentDescription = "AttachMedia",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Audio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Audio.kt
new file mode 100644
index 0000000000..d143214c98
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Audio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Audio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Audio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.432 113v1694.148H936.638l-451.773-451.773h-315.45C76.01 1355.375 0 1279.365 0 1185.96V734.187c0-93.404 76.01-169.414 169.415-169.414h315.45L936.638 113h192.794Zm-112.943 112.943h-33.093l-418.68 418.68v630.901l418.68 418.68h33.093V225.944Zm655.488 135.114C1831.904 521.097 1920 733.77 1920 960.107c0 226.226-88.096 438.898-248.023 598.938l-79.851-79.85c138.694-138.695 214.93-323.018 214.93-519.087 0-196.183-76.236-380.506-214.93-519.2Zm-239.112 239.745c95.663 97.018 148.294 224.644 148.294 359.272s-52.631 262.254-148.294 359.272l-80.529-79.286c74.769-75.785 115.88-175.175 115.88-279.986 0-104.811-41.111-204.201-115.88-279.986Zm-981.092 76.914H169.415c-31.06 0-56.472 25.3-56.472 56.471v451.773c0 31.172 25.412 56.472 56.472 56.472h282.358V677.716Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AudioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Audio,
+ contentDescription = "Audio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AudioOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AudioOff.kt
new file mode 100644
index 0000000000..412ffea793
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/AudioOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.AudioOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.AudioOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.432 113v1694.148H936.638l-451.773-451.773h-315.45c-92.47 0-167.893-74.498-169.392-166.618L0 1185.96V734.187c0-92.47 74.498-167.892 166.618-169.392l2.797-.022h315.45L936.638 113h192.794Zm-112.943 112.943h-33.093l-418.68 418.68v630.901l418.68 418.68h33.093V225.944Zm823.662 411.78L1920 717.571l-242.372 242.372L1920 1202.428l-79.85 79.85-242.484-242.372-242.372 242.372-79.85-79.85 242.372-242.484-242.371-242.372 79.85-79.85 242.37 242.372 242.486-242.372ZM451.773 677.715H169.415c-30.749 0-55.963 24.796-56.464 55.538l-.008.933v451.773c0 30.86 24.907 55.965 55.542 56.464l.93.008h282.358V677.716Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AudioOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.AudioOff,
+ contentDescription = "AudioOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Award.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Award.kt
new file mode 100644
index 0000000000..6c14a2bf64
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Award.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Award: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Award",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1034.59 564.21L959.198 320L885.413 562.527H640L838.898 714.104L761.906 960L960.801 808.422L1159.7 960L1081.1 715.79L1280 564.21H1034.59Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M357.542 0H1562.46V119.181H1920V542.868C1920 655.236 1875.36 763.003 1795.91 842.46C1731.12 907.242 1647.52 948.879 1557.95 962.049C1544.78 1051.62 1503.15 1135.22 1438.36 1200C1360.45 1277.91 1255.32 1322.35 1145.33 1324.05V1496.31C1145.33 1510.38 1150.91 1523.87 1160.86 1533.81C1170.81 1543.76 1184.3 1549.35 1198.36 1549.35C1263.32 1549.35 1325.61 1575.15 1371.54 1621.08C1417.47 1667.01 1443.28 1729.31 1443.28 1794.26V1920H476.723V1794.26C476.723 1729.31 502.528 1667.01 548.458 1621.08C594.388 1575.15 656.682 1549.35 721.639 1549.35C735.705 1549.35 749.195 1543.76 759.14 1533.81C769.086 1523.87 774.674 1510.38 774.674 1496.31V1324.05C664.677 1322.35 559.547 1277.91 481.637 1200C416.854 1135.22 375.218 1051.62 362.048 962.049C272.477 948.879 188.877 907.242 124.095 842.46C44.6379 763.003 0 655.236 0 542.868V119.181H357.542V0ZM489.832 132.29V900.41C489.832 977.693 520.533 1051.81 575.18 1106.46C629.828 1161.11 703.946 1191.81 781.229 1191.81H906.964V1496.31C906.964 1545.46 887.439 1592.6 852.684 1627.36C817.928 1662.11 770.79 1681.64 721.639 1681.64C691.77 1681.64 663.123 1693.5 642.001 1714.63C622.429 1734.2 610.805 1760.23 609.204 1787.71H1310.8C1309.2 1760.23 1297.57 1734.2 1278 1714.63C1256.88 1693.5 1228.23 1681.64 1198.36 1681.64C1149.21 1681.64 1102.07 1662.11 1067.32 1627.36C1032.56 1592.6 1013.04 1545.46 1013.04 1496.31V1191.81H1138.77C1216.05 1191.81 1290.17 1161.11 1344.82 1106.46C1399.47 1051.81 1430.17 977.693 1430.17 900.41V132.29H489.832ZM357.542 251.471H132.29V542.868C132.29 620.151 162.991 694.269 217.638 748.917C256.412 787.69 304.988 814.409 357.542 826.659V251.471ZM1562.46 826.659V251.471H1787.71V542.868C1787.71 620.151 1757.01 694.269 1702.36 748.917C1663.59 787.69 1615.01 814.409 1562.46 826.659Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Award,
+ contentDescription = "Award",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bank.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bank.kt
new file mode 100644
index 0000000000..386f48c1cc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bank.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Bank: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Bank",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M517.334 0V638.23H624.001V106.372H1493.33V638.23L1493.33 640L1497.99 639.557L1600 640V638.23V0H517.334Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 212.743H410.667V319.447H107V1759.94C107 1789.39 131.074 1813.3 160.499 1813.3H1552.99C1578.35 1813.3 1600.39 1795.26 1605.42 1770.4L1789.35 852.965H595.872L340.25 1669.14L238.065 1637.34L517.334 746.261H1920L1710.39 1791.32C1695.41 1865.9 1629.18 1920 1552.99 1920H160.499C72.0107 1920 0 1848.19 0 1759.94V212.743Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M693.333 425.486C693.333 337.365 764.968 265.929 853.333 265.929C941.699 265.929 1013.33 337.365 1013.33 425.486C1013.33 513.607 941.699 585.044 853.333 585.044C764.968 585.044 693.333 513.607 693.333 425.486ZM853.333 372.301C823.878 372.301 800 396.113 800 425.486C800 454.86 823.878 478.672 853.333 478.672C882.788 478.672 906.667 454.86 906.667 425.486C906.667 396.113 882.788 372.301 853.333 372.301Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.67 372.301H1120V478.672H1386.67V372.301Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BankPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Bank,
+ contentDescription = "Bank",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Blueprint.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Blueprint.kt
new file mode 100644
index 0000000000..928f42da5d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Blueprint.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Blueprint: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Blueprint",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.589 1750.588v56.471h56.47V1920H677.647v-169.412h112.942Zm417.794 56.471V1920h-180.662v-112.941h180.662Zm361.433 0V1920h-180.662v-112.941h180.662ZM1920 1750.588V1920h-169.412v-112.941h56.471v-56.471H1920ZM1581.177 338.824v225.882h-112.942V451.765H451.765v1016.47h112.941v112.942H338.824V338.824h1242.353ZM1920 1389.265v180.662h-112.941v-180.662H1920Zm-1129.412-.111v180.662H677.647v-180.662h112.941ZM1242.353 0v225.882h-112.941v-112.94H112.941v1016.47h112.941v112.94H0V0h1242.353ZM1920 1027.831v180.661h-112.941v-180.661H1920Zm-1129.412-.11v180.662H677.647v-180.662h112.941ZM1920 677.647v169.412h-112.941v-56.47h-56.471V677.647H1920Zm-1072.942 0v112.942h-56.47v56.47h-112.94V677.647h169.41Zm361.434 0v112.941h-180.661V677.647h180.661Zm361.435 0v112.941h-180.662V677.647h180.662Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BlueprintPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Blueprint,
+ contentDescription = "Blueprint",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BlueprintLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BlueprintLock.kt
new file mode 100644
index 0000000000..19293a1ca3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BlueprintLock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.BlueprintLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.BlueprintLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1300.007 677c185.514 0 336.508 150.938 336.508 336.507V1247h142.5v514.632c0 87.354-71.03 158.383-158.383 158.383h-641.25c-87.353 0-158.382-71.03-158.382-158.383V1247h142.5v-233.493C963.5 827.937 1114.492 677 1300.007 677ZM1676 1350.015H924.015v411.617c0 30.552 24.871 55.368 55.367 55.368h641.25c30.552 0 55.368-24.816 55.368-55.368v-411.617Zm-94.823-1011.192v225.882h-112.942v-112.94H451.765v1016.47h112.941v112.941H338.824V338.823h1242.353Zm-281.17 441.192c-128.713 0-233.492 104.779-233.492 233.492V1247H1533.5v-233.493c0-128.713-104.779-233.492-233.493-233.492ZM1242.353 0v225.882h-112.941V112.941H112.941v1016.471h112.941v112.94H0V0h1242.353Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BlueprintLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.BlueprintLock,
+ contentDescription = "BlueprintLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bold.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bold.kt
new file mode 100644
index 0000000000..b0c8325cb4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bold.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Bold: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Bold",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M480.286 822.857h548.571c151.269 0 274.286-123.017 274.286-274.286 0-151.268-123.017-274.285-274.286-274.285H480.286v548.571Zm0 822.857H1166c151.269 0 274.286-123.017 274.286-274.285 0-151.269-123.017-274.286-274.286-274.286H480.286v548.571ZM1166 1920H206V0h822.857c302.537 0 548.572 246.034 548.572 548.571 0 134.263-48.549 257.418-128.778 352.732 159.223 96.137 265.92 270.994 265.92 470.126 0 302.537-246.034 548.571-548.571 548.571Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BoldPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Bold,
+ contentDescription = "Bold",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bookmark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bookmark.kt
new file mode 100644
index 0000000000..de7cab55fb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Bookmark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Bookmark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Bookmark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m960.481 1412.11 511.758 307.054V170.586c0-31.274-25.588-56.862-56.862-56.862H505.586c-31.274 0-56.862 25.588-56.862 56.862v1548.578l511.757-307.055ZM1585.963 1920 960.48 1544.711 335 1920V170.586C335 76.536 411.536 0 505.586 0h909.79c94.05 0 170.587 76.536 170.587 170.586V1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BookmarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Bookmark,
+ contentDescription = "Bookmark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Box.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Box.kt
new file mode 100644
index 0000000000..b5870d7226
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Box.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Box: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Box",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.235 0v112.941H451.765V0H0v451.878h112.941v1016.47H0V1920h451.765v-112.941h1016.47V1920h451.878v-451.652h-112.941V451.878h112.94V0h-451.877Zm113.054 338.824h225.883V112.94h-225.883v225.883Zm-1468.348 0h225.883V112.94H112.94v225.883Zm112.941 113.054h225.883V225.882h1016.47v225.996h225.996v1016.47h-225.996v225.77H451.765v-225.77H225.882V451.878Zm1355.407 1355.18h225.883v-225.882h-225.883v225.883Zm-1468.348 0h225.883v-225.882H112.94v225.883Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BoxPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Box,
+ contentDescription = "Box",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletList.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletList.kt
new file mode 100644
index 0000000000..9e7eb6faa1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletList.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.BulletList: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.BulletList",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M169.412 1355.412c93.402 0 169.412 76.01 169.412 169.412s-76.01 169.411-169.412 169.411C76.009 1694.235 0 1618.225 0 1524.824c0-93.403 76.01-169.412 169.412-169.412ZM1920 1468.352v112.942H564.706v-112.941H1920ZM169.412 790.707c93.402 0 169.412 76.01 169.412 169.412s-76.01 169.411-169.412 169.411C76.009 1129.53 0 1053.52 0 960.118c0-93.403 76.01-169.412 169.412-169.412ZM1920 903.647v112.941H564.706v-112.94H1920ZM169.412 226c93.402 0 169.412 76.01 169.412 169.412s-76.01 169.412-169.412 169.412C76.009 564.824 0 488.814 0 395.412 0 302.009 76.01 226 169.412 226ZM1920 338.941v112.941H564.706v-112.94H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.BulletList,
+ contentDescription = "BulletList",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListAlpha.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListAlpha.kt
new file mode 100644
index 0000000000..b668624172
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListAlpha.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.BulletListAlpha: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.BulletListAlpha",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M546.15 1603.617h1360v-120h-1360v120Zm0-1121.001h1360v-120h-1360v120Zm0 561h1360v-120h-1360v120ZM271.675 429.5 234.55 319.775c-2.75-6.967-5.683-15.171-8.8-24.613-3.117-9.441-6.233-19.662-9.35-30.662-2.75 11.183-5.683 21.542-8.8 31.075-3.117 9.533-6.05 17.783-8.8 24.75L161.95 429.5h109.725ZM419.35 582.675H347.3c-8.067 0-14.575-1.879-19.525-5.638-4.95-3.758-8.708-8.57-11.275-14.437l-23.65-69.85H140.5l-23.65 69.85c-2.017 5.133-5.637 9.762-10.862 13.887-5.226 4.126-11.688 6.188-19.388 6.188H14L169.1 182h95.15l155.1 400.675ZM230.325 1112.55c12.283 0 22.321-1.558 30.112-4.675 7.792-3.117 13.888-7.15 18.288-12.1 4.4-4.95 7.425-10.541 9.075-16.775a73.843 73.843 0 0 0 2.475-18.975c0-7.333-.963-13.933-2.887-19.8-1.925-5.866-5.226-10.816-9.9-14.85-4.676-4.034-10.863-7.15-18.563-9.35-7.7-2.2-17.416-3.3-29.15-3.3h-64.9v99.825h65.45Zm-65.45-260.975v99h48.4c10.267 0 19.525-.733 27.775-2.2s15.262-4.033 21.038-7.7c5.775-3.667 10.175-8.708 13.199-15.125 3.025-6.417 4.538-14.483 4.538-24.2 0-9.533-1.192-17.462-3.575-23.788-2.383-6.324-6.05-11.412-11-15.262-4.95-3.85-11.229-6.6-18.838-8.25-7.608-1.65-16.637-2.475-27.087-2.475h-54.45ZM219.325 782c27.684 0 51.242 2.567 70.675 7.7s35.292 12.375 47.575 21.725c12.283 9.35 21.221 20.716 26.813 34.1 5.591 13.384 8.387 28.325 8.387 44.825 0 8.983-1.283 17.646-3.85 25.987-2.567 8.342-6.6 16.134-12.1 23.375-5.5 7.242-12.558 13.888-21.175 19.938-8.616 6.05-18.975 11.275-31.075 15.675 26.4 6.417 45.925 16.775 58.575 31.075 12.65 14.301 18.975 32.816 18.975 55.55 0 17.05-3.3 32.909-9.9 47.575-6.6 14.667-16.271 27.454-29.012 38.362-12.742 10.909-28.463 19.434-47.163 25.575-18.7 6.142-40.058 9.213-64.075 9.213H71.925V782h147.4Zm126.65 847c2.2 0 4.4.412 6.6 1.238 2.2.825 4.308 2.246 6.325 4.262l36.85 38.775c-16.133 21.084-36.346 36.987-60.637 47.713-24.292 10.724-53.03 16.087-86.213 16.087-30.433 0-57.704-5.179-81.812-15.538-24.109-10.358-44.551-24.658-61.326-42.9-16.774-18.241-29.654-39.874-38.637-64.899-8.984-25.026-13.475-52.204-13.475-81.538 0-29.883 4.858-57.337 14.575-82.363 9.717-25.024 23.375-46.612 40.975-64.762s38.683-32.267 63.25-42.35c24.567-10.083 51.608-15.125 81.125-15.125 15.033 0 29.196 1.329 42.487 3.987 13.292 2.658 25.713 6.325 37.263 11 11.55 4.675 22.183 10.313 31.9 16.913 9.717 6.6 18.333 13.75 25.85 21.45l-31.35 42.075c-2.017 2.567-4.4 4.904-7.15 7.012-2.75 2.109-6.6 3.163-11.55 3.163-3.3 0-6.417-.733-9.35-2.2-2.933-1.466-6.05-3.255-9.35-5.363a1772.26 1772.26 0 0 0-10.862-6.875c-3.942-2.475-8.617-4.767-14.026-6.875-5.408-2.107-11.733-3.895-18.974-5.362-7.242-1.467-15.721-2.2-25.438-2.2-15.4 0-29.471 2.841-42.213 8.525-12.741 5.684-23.741 13.979-33 24.888-9.258 10.908-16.408 24.291-21.449 40.149-5.042 15.858-7.563 33.963-7.563 54.313 0 20.534 2.796 38.775 8.387 54.725 5.592 15.95 13.2 29.379 22.825 40.287 9.625 10.908 20.855 19.204 33.688 24.888 12.833 5.684 26.583 8.525 41.25 8.525 8.434 0 16.133-.413 23.1-1.238 6.967-.824 13.475-2.199 19.525-4.125 6.05-1.925 11.733-4.491 17.05-7.699 5.317-3.209 10.725-7.288 16.225-12.238a32.536 32.536 0 0 1 7.15-4.538c2.567-1.191 5.225-1.787 7.975-1.787Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListAlphaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.BulletListAlpha,
+ contentDescription = "BulletListAlpha",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListCircleOutline.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListCircleOutline.kt
new file mode 100644
index 0000000000..c1eb7afc6d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListCircleOutline.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.BulletListCircleOutline: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.BulletListCircleOutline",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M559.706 1575.941h1360v-120h-1360v120Zm0-1121h1360v-120h-1360v120Zm0 561h1360v-120h-1360v120ZM169.5 565C75.888 565 0 489.112 0 395.5S75.888 226 169.5 226 339 301.888 339 395.5 263.112 565 169.5 565Zm0-84c47.22 0 85.5-38.28 85.5-85.5S216.72 310 169.5 310 84 348.28 84 395.5s38.28 85.5 85.5 85.5Zm0 1208C75.888 1689 0 1613.112 0 1519.5S75.888 1350 169.5 1350 339 1425.888 339 1519.5 263.112 1689 169.5 1689Zm0-84c47.22 0 85.5-38.279 85.5-85.5s-38.28-85.5-85.5-85.5-85.5 38.279-85.5 85.5 38.28 85.5 85.5 85.5Zm0-478C75.888 1127 0 1051.112 0 957.5S75.888 788 169.5 788 339 863.888 339 957.5 263.112 1127 169.5 1127Zm0-84c47.22 0 85.5-38.279 85.5-85.5 0-47.22-38.28-85.5-85.5-85.5S84 910.28 84 957.5c0 47.221 38.28 85.5 85.5 85.5Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListCircleOutlinePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.BulletListCircleOutline,
+ contentDescription = "BulletListCircleOutline",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListRoman.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListRoman.kt
new file mode 100644
index 0000000000..60836ba9de
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListRoman.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.BulletListRoman: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.BulletListRoman",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M368 585.675h93.5V185H368v400.675Zm271-101h1280v-120H639v120Zm-270.725 700h93.5V784h-93.5v400.675Zm-185.05 0h93.5V784h-93.5v400.675Zm455.775-139h1280V925.674H639v120.001Zm-270.775 689h93.5v-400.676h-93.5v400.676Zm-184 0h93.5v-400.676h-93.5v400.676Zm-183.225 0h93.5v-400.676H1v400.676Zm638-129h1280v-120H639v120Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListRomanPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.BulletListRoman,
+ contentDescription = "BulletListRoman",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListSquare.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListSquare.kt
new file mode 100644
index 0000000000..042882c45d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/BulletListSquare.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.BulletListSquare: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.BulletListSquare",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 560h320V240H0v320Zm560-100.059h1360v-120H560v120ZM0 1120h320V800H0v320Zm560-99.058h1360V900.941H560v120.001ZM0 1680h320v-320H0v320Zm560-99.059h1360v-120H560v120Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListSquarePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.BulletListSquare,
+ contentDescription = "BulletListSquare",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ButtonAndIconMaker.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ButtonAndIconMaker.kt
new file mode 100644
index 0000000000..c1e8a83dfe
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ButtonAndIconMaker.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ButtonAndIconMaker: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ButtonAndIconMaker",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 426.667C0 191.025 191.025 0 426.667 0c235.641 0 426.666 191.025 426.666 426.667 0 235.641-191.025 426.666-426.666 426.666C191.025 853.333 0 662.308 0 426.667zm426.667 320c-176.731 0-320-143.269-320-320s143.269-320 320-320 320 143.269 320 320-143.269 320-320 320zM0 1920v-853.33h853.333V1920H0zm106.667-106.67v-640h640v640h-640zM1920 853.333 1440 0 960 853.333h960zm-182.38-106.666L1440 217.571l-297.62 529.096h595.24zM1386.67 1920v-373.33h-373.34V1440h373.34v-373.33h106.66V1440h373.34v106.67h-373.34V1920h-106.66Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ButtonAndIconMakerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ButtonAndIconMaker,
+ contentDescription = "ButtonAndIconMaker",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Calculator.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Calculator.kt
new file mode 100644
index 0000000000..fe4a7ac857
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Calculator.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Calculator: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Calculator",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M480 106.667c-117.82 0-213.333 95.512-213.333 213.333v1280c0 117.82 95.512 213.333 213.333 213.333h960c117.82 0 213.333-95.512 213.333-213.333V320c0-117.82-95.512-213.333-213.333-213.333H480ZM480 0h960c176.731 0 320 143.269 320 320v1280c0 176.731-143.269 320-320 320H480c-176.731 0-320-143.269-320-320V320C160 143.269 303.269 0 480 0Zm106.667 320C527.757 320 480 367.756 480 426.667v106.666C480 592.243 527.756 640 586.667 640h746.666c58.91 0 106.667-47.756 106.667-106.667V426.667c0-58.91-47.756-106.667-106.667-106.667H586.667Zm0-106.667h746.666c117.821 0 213.334 95.513 213.334 213.334v106.666c0 117.821-95.513 213.334-213.334 213.334H586.667c-117.821 0-213.334-95.513-213.334-213.334V426.667c0-117.821 95.513-213.334 213.334-213.334ZM480 853.333h106.667c58.91 0 106.666 47.757 106.666 106.667 0 58.91-47.756 106.667-106.666 106.667H480c-58.91 0-106.667-47.757-106.667-106.667 0-58.91 47.757-106.667 106.667-106.667Zm426.667 0h106.666C1072.243 853.333 1120 901.09 1120 960c0 58.91-47.756 106.667-106.667 106.667H906.667C847.757 1066.667 800 1018.91 800 960c0-58.91 47.756-106.667 106.667-106.667Zm426.666 0H1440c58.91 0 106.667 47.757 106.667 106.667 0 58.91-47.757 106.667-106.667 106.667h-106.667c-58.91 0-106.666-47.757-106.666-106.667 0-58.91 47.756-106.667 106.666-106.667Zm-853.333 320h106.667c58.91 0 106.666 47.757 106.666 106.667 0 58.91-47.756 106.667-106.666 106.667H480c-58.91 0-106.667-47.757-106.667-106.667 0-58.91 47.757-106.667 106.667-106.667Zm426.667 0h106.666c58.91 0 106.667 47.757 106.667 106.667 0 58.91-47.756 106.667-106.667 106.667H906.667C847.757 1386.667 800 1338.91 800 1280c0-58.91 47.756-106.667 106.667-106.667Zm426.666 0H1440c58.91 0 106.667 47.757 106.667 106.667 0 58.91-47.757 106.667-106.667 106.667h-106.667c-58.91 0-106.666-47.757-106.666-106.667 0-58.91 47.756-106.667 106.666-106.667Zm-853.333 320h106.667c58.91 0 106.666 47.757 106.666 106.667 0 58.91-47.756 106.667-106.666 106.667H480c-58.91 0-106.667-47.757-106.667-106.667 0-58.91 47.757-106.667 106.667-106.667Zm426.667 0h106.666c58.91 0 106.667 47.757 106.667 106.667 0 58.91-47.756 106.667-106.667 106.667H906.667C847.757 1706.667 800 1658.91 800 1600c0-58.91 47.756-106.667 106.667-106.667Zm426.666 0H1440c58.91 0 106.667 47.757 106.667 106.667 0 58.91-47.757 106.667-106.667 106.667h-106.667c-58.91 0-106.666-47.757-106.666-106.667 0-58.91 47.756-106.667 106.666-106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalculatorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Calculator,
+ contentDescription = "Calculator",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalculatorDesmos.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalculatorDesmos.kt
new file mode 100644
index 0000000000..7b1eab2d7f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalculatorDesmos.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalculatorDesmos: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalculatorDesmos",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1440 0c176.73 0 320 143.269 320 320v1280c0 176.73-143.27 320-320 320H480c-176.731 0-320-143.27-320-320V320C160 143.269 303.269 0 480 0Zm0 106.667H480c-117.821 0-213.333 95.512-213.333 213.333v1280c0 117.82 95.512 213.33 213.333 213.33h960c117.82 0 213.33-95.51 213.33-213.33V320c0-117.821-95.51-213.333-213.33-213.333ZM586.667 1493.33c58.91 0 106.666 47.76 106.666 106.67 0 58.91-47.756 106.67-106.666 106.67H480c-58.91 0-106.667-47.76-106.667-106.67 0-58.91 47.757-106.67 106.667-106.67h106.667Zm426.663 0c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67H906.667C847.756 1706.67 800 1658.91 800 1600c0-58.91 47.756-106.67 106.667-106.67h106.663Zm426.67 0c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67h-106.67c-58.91 0-106.66-47.76-106.66-106.67 0-58.91 47.75-106.67 106.66-106.67H1440Zm-853.333-320c58.91 0 106.666 47.76 106.666 106.67 0 58.91-47.756 106.67-106.666 106.67H480c-58.91 0-106.667-47.76-106.667-106.67 0-58.91 47.757-106.67 106.667-106.67h106.667Zm426.663 0c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67H906.667C847.756 1386.67 800 1338.91 800 1280c0-58.91 47.756-106.67 106.667-106.67h106.663Zm426.67 0c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67h-106.67c-58.91 0-106.66-47.76-106.66-106.67 0-58.91 47.75-106.67 106.66-106.67H1440ZM586.667 853.333c58.91 0 106.666 47.757 106.666 106.667 0 58.91-47.756 106.67-106.666 106.67H480c-58.91 0-106.667-47.76-106.667-106.67 0-58.91 47.757-106.667 106.667-106.667h106.667Zm426.663 0c58.91 0 106.67 47.757 106.67 106.667 0 58.91-47.76 106.67-106.67 106.67H906.667C847.756 1066.67 800 1018.91 800 960c0-58.91 47.756-106.667 106.667-106.667h106.663Zm426.67 0c58.91 0 106.67 47.757 106.67 106.667 0 58.91-47.76 106.67-106.67 106.67h-106.67c-58.91 0-106.66-47.76-106.66-106.67 0-58.91 47.75-106.667 106.66-106.667H1440ZM825.656 324.944c85.783 15.792 143.8 75.528 187.404 120.421 3.08 3.177 6.09 6.28 9.04 9.287 49.59 50.626 83.01 78.681 129.9 78.681 54.47 0 105.21-26.083 148.97-64.497 43.7-38.365 75.78-85.114 91.62-115.86 13.48-26.186 45.64-36.481 71.83-22.994 26.19 13.487 36.48 45.648 22.99 71.834-21.08 40.945-61 98.831-116.07 147.179C1316.33 597.293 1241.53 640 1152 640c-97.11 0-159.689-63.326-206.101-110.708l-2.088-2.132c-50.32-51.381-86.03-87.843-137.467-97.312-55.901-10.291-114.474 5.17-166.557 36.244-52.433 31.283-92.9 75.277-112.373 113.086-13.486 26.186-45.648 36.481-71.834 22.994-26.186-13.487-36.481-45.648-22.994-71.834 29.758-57.779 85.291-115.72 152.55-155.848 67.609-40.338 152.421-65.764 240.52-49.546Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalculatorDesmosPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalculatorDesmos,
+ contentDescription = "CalculatorDesmos",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarAdd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarAdd.kt
new file mode 100644
index 0000000000..27c1cd8808
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarAdd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalendarAdd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalendarAdd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.824 0c31.17 0 56.47 25.3 56.47 56.471v56.47h169.412c93.403 0 169.412 76.01 169.412 169.412V1920H113V282.353c0-93.402 76.009-169.412 169.412-169.412h169.41v-56.47c0-31.172 25.3-56.47 56.472-56.47s56.47 25.298 56.47 56.47v56.47h790.589v-56.47c0-31.172 25.299-56.47 56.47-56.47Zm282.352 564.705H225.942v1242.353h1468.234V564.705Zm-677.647 225.883v338.824h338.824v112.94H1016.53v338.825H903.59v-338.824H564.763v-112.941h338.824V790.588h112.941ZM451.823 225.882H282.412c-31.06 0-56.47 25.3-56.47 56.471v169.412h1468.234V282.353c0-31.172-25.411-56.47-56.47-56.47h-169.412v56.47c0 31.172-25.3 56.471-56.47 56.471-31.172 0-56.471-25.299-56.471-56.47v-56.472H564.765v56.471c0 31.172-25.3 56.471-56.471 56.471-31.171 0-56.471-25.299-56.471-56.47v-56.472Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarAddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalendarAdd,
+ contentDescription = "CalendarAdd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarClock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarClock.kt
new file mode 100644
index 0000000000..70438db1de
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarClock.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalendarClock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalendarClock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1439.667 1226.667H1333V1440c0 14.187 5.653 27.733 15.573 37.76l123.414 123.306 75.413-75.413-107.733-107.733v-191.253Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.333 1813.333C1180.467 1813.333 1013 1645.867 1013 1440c0-205.867 167.467-373.333 373.333-373.333 205.867 0 373.334 167.466 373.334 373.333 0 205.867-167.467 373.333-373.334 373.333m0-853.333c-264.64 0-480 215.36-480 480s215.36 480 480 480 480-215.36 480-480-215.36-480-480-480"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1546.333 426.667H159.666v-160c0-29.44 24-53.334 53.334-53.334h160v53.334c0 29.44 23.894 53.333 53.333 53.333 29.44 0 53.333-23.893 53.333-53.333v-53.334h746.667v53.334c0 29.44 23.894 53.333 53.334 53.333 29.44 0 53.333-23.893 53.333-53.333v-53.334h160c29.333 0 53.333 23.894 53.333 53.334v160Zm-53.333-320h-160V53.333C1333 23.893 1309.107 0 1279.667 0c-29.44 0-53.334 23.893-53.334 53.333v53.334H479.666V53.333C479.666 23.893 455.773 0 426.333 0 396.894 0 373 23.893 373 53.333v53.334H213c-88.213 0-160 71.786-160 160v1546.666h746.666v-106.666h-640V533.333h1386.667v320H1653V266.667c0-88.214-71.787-160-160-160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarClockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalendarClock,
+ contentDescription = "CalendarClock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarDay.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarDay.kt
new file mode 100644
index 0000000000..4a0a65cc03
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarDay.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalendarDay: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalendarDay",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.824 0c31.17 0 56.47 25.3 56.47 56.471v56.47h169.412c93.403 0 169.412 76.01 169.412 169.412V1920H113V282.353c0-93.402 76.009-169.412 169.412-169.412h169.41v-56.47c0-31.172 25.3-56.47 56.472-56.47s56.47 25.298 56.47 56.47v56.47h790.589v-56.47c0-31.172 25.299-56.47 56.47-56.47Zm282.352 564.705H225.942v1242.353h1468.234V564.705ZM451.823 225.882H282.412c-31.06 0-56.47 25.3-56.47 56.471v169.412h1468.234V282.353c0-31.172-25.411-56.47-56.47-56.47h-169.412v56.47c0 31.172-25.3 56.471-56.47 56.471-31.172 0-56.471-25.299-56.471-56.47v-56.472H564.765v56.471c0 31.172-25.3 56.471-56.471 56.471-31.171 0-56.471-25.299-56.471-56.47v-56.472Zm507.682 1190.74c-82.334 0-141.515-34.448-194.372-95.888l-90.804 83.351c62.23 74.992 154.277 128.075 283.143 128.075 154.278 0 258.862-96.79 258.862-231.19v-2.034c0-134.4-105.6-190.644-217.525-204.198l205.892-208.263v-95.887H715.552V902.06h320.076l-199.68 209.394 21.12 80.188h60.31c103.454 0 170.09 40.546 170.09 112.376v2.147c0 66.635-55.003 110.456-127.963 110.456"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarDayPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalendarDay,
+ contentDescription = "CalendarDay",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarDays.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarDays.kt
new file mode 100644
index 0000000000..7e23bbcc2f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarDays.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalendarDays: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalendarDays",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.824 0c31.17 0 56.47 25.3 56.47 56.471v56.47h169.412c93.403 0 169.412 76.01 169.412 169.412V1920H113V282.353c0-93.402 76.009-169.412 169.412-169.412h169.41v-56.47c0-31.172 25.3-56.47 56.472-56.47s56.47 25.298 56.47 56.47v56.47h790.589v-56.47c0-31.172 25.299-56.47 56.47-56.47Zm282.352 564.705H225.942v1242.353h1468.234V564.705ZM451.823 225.882H282.412c-31.06 0-56.47 25.3-56.47 56.471v169.412h1468.234V282.353c0-31.172-25.411-56.47-56.47-56.47h-169.412v56.47c0 31.172-25.3 56.471-56.47 56.471-31.172 0-56.471-25.299-56.471-56.47v-56.472H564.765v56.471c0 31.172-25.3 56.471-56.471 56.471-31.171 0-56.471-25.299-56.471-56.47v-56.472Zm507.682 1190.74c-82.334 0-141.515-34.448-194.372-95.888l-90.804 83.351c62.23 74.992 154.277 128.075 283.143 128.075 154.278 0 258.862-96.79 258.862-231.19v-2.034c0-134.4-105.6-190.644-217.525-204.198l205.892-208.263v-95.887H715.552V902.06h320.076l-199.68 209.394 21.12 80.188h60.31c103.454 0 170.09 40.546 170.09 112.376v2.147c0 66.635-55.003 110.456-127.963 110.456"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarDaysPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalendarDays,
+ contentDescription = "CalendarDays",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarMonth.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarMonth.kt
new file mode 100644
index 0000000000..6e5cb1d833
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarMonth.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalendarMonth: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalendarMonth",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.824 0c31.17 0 56.47 25.3 56.47 56.471v56.47h169.412c93.403 0 169.412 76.01 169.412 169.412V1920H113V282.353c0-93.402 76.009-169.412 169.412-169.412h169.41v-56.47c0-31.172 25.3-56.47 56.472-56.47s56.47 25.298 56.47 56.47v56.47h790.589v-56.47c0-31.172 25.299-56.47 56.47-56.47Zm282.352 564.705H225.942v1242.353h1468.234V564.705Zm-1016.47 677.648v338.824H338.882v-338.824h338.824Zm451.765 0v338.824H790.647v-338.824h338.824Zm451.764 0v338.824h-338.823v-338.824h338.823Zm-1016.47 112.941H451.824v112.941h112.941v-112.941Zm451.764 0H903.588v112.941h112.941v-112.941Zm451.765 0h-112.941v112.941h112.941v-112.941ZM677.706 790.588v338.824H338.882V790.588h338.824Zm451.765 0v338.824H790.647V790.588h338.824Zm451.764 0v338.824h-338.823V790.588h338.823ZM564.765 903.53H451.824v112.941h112.941V903.53Zm451.764 0H903.588v112.941h112.941V903.53Zm451.765 0h-112.941v112.941h112.941V903.53ZM451.823 225.882H282.412c-31.06 0-56.47 25.3-56.47 56.471v169.412h1468.234V282.353c0-31.172-25.411-56.47-56.47-56.47h-169.412v56.47c0 31.172-25.3 56.471-56.47 56.471-31.172 0-56.471-25.299-56.471-56.47v-56.472H564.765v56.471c0 31.172-25.3 56.471-56.471 56.471-31.171 0-56.471-25.299-56.471-56.47v-56.472Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarMonthPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalendarMonth,
+ contentDescription = "CalendarMonth",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarReserved.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarReserved.kt
new file mode 100644
index 0000000000..5e3717a31a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CalendarReserved.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CalendarReserved: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CalendarReserved",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.824 0c31.17 0 56.47 25.3 56.47 56.471v56.47h169.412c93.403 0 169.412 76.01 169.412 169.412V1920H113V282.353c0-93.402 76.009-169.412 169.412-169.412h169.41v-56.47c0-31.172 25.3-56.47 56.472-56.47s56.47 25.298 56.47 56.47v56.47h790.589v-56.47c0-31.172 25.299-56.47 56.47-56.47Zm282.352 564.705H225.942v1242.353h1468.234V564.705Zm-322.277 242.428 79.849 79.851-604.687 604.687-378.692-378.805 79.85-79.85 298.842 298.842 524.838-524.725Zm-920.076-581.25H282.412c-31.06 0-56.47 25.298-56.47 56.47v169.412h1468.234V282.353c0-31.172-25.411-56.47-56.47-56.47h-169.412v56.47c0 31.172-25.3 56.471-56.47 56.471-31.172 0-56.471-25.299-56.471-56.47v-56.472H564.765v56.471c0 31.172-25.3 56.471-56.471 56.471-31.171 0-56.471-25.299-56.471-56.47v-56.472Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarReservedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CalendarReserved,
+ contentDescription = "CalendarReserved",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CanvasLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CanvasLogo.kt
new file mode 100644
index 0000000000..80a2ffb463
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CanvasLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CanvasLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CanvasLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M958.568 277.97C1100.42 277.97 1216.48 171.94 1233.67 34.3881 1146.27 12.8955 1054.57 0 958.568 0 864.001 0 770.867 12.8955 683.464 34.3881 700.658 171.94 816.718 277.97 958.568 277.97ZM35.8207 682.031C173.373 699.225 279.403 815.285 279.403 957.136 279.403 1098.99 173.373 1215.05 35.8207 1232.24 12.8953 1144.84 1.43262 1051.7 1.43262 957.136 1.43262 862.569 12.8953 769.434 35.8207 682.031ZM528.713 957.142C528.713 1005.41 489.581 1044.55 441.31 1044.55 393.038 1044.55 353.907 1005.41 353.907 957.142 353.907 908.871 393.038 869.74 441.31 869.74 489.581 869.74 528.713 908.871 528.713 957.142ZM1642.03 957.136C1642.03 1098.99 1748.06 1215.05 1885.61 1232.24 1908.54 1144.84 1920 1051.7 1920 957.136 1920 862.569 1908.54 769.434 1885.61 682.031 1748.06 699.225 1642.03 815.285 1642.03 957.136ZM1567.51 957.142C1567.51 1005.41 1528.38 1044.55 1480.11 1044.55 1431.84 1044.55 1392.71 1005.41 1392.71 957.142 1392.71 908.871 1431.84 869.74 1480.11 869.74 1528.38 869.74 1567.51 908.871 1567.51 957.142ZM958.568 1640.6C816.718 1640.6 700.658 1746.63 683.464 1884.18 770.867 1907.11 864.001 1918.57 958.568 1918.57 1053.14 1918.57 1146.27 1907.11 1233.67 1884.18 1216.48 1746.63 1100.42 1640.6 958.568 1640.6ZM1045.98 1480.11C1045.98 1528.38 1006.85 1567.51 958.575 1567.51 910.304 1567.51 871.172 1528.38 871.172 1480.11 871.172 1431.84 910.304 1392.71 958.575 1392.71 1006.85 1392.71 1045.98 1431.84 1045.98 1480.11ZM1045.98 439.877C1045.98 488.148 1006.85 527.28 958.575 527.28 910.304 527.28 871.172 488.148 871.172 439.877 871.172 391.606 910.304 352.474 958.575 352.474 1006.85 352.474 1045.98 391.606 1045.98 439.877ZM1441.44 1439.99C1341.15 1540.29 1333.98 1697.91 1418.52 1806.8 1579 1712.23 1713.68 1577.55 1806.82 1418.5 1699.35 1332.53 1541.74 1339.7 1441.44 1439.99ZM1414.21 1325.37C1414.21 1373.64 1375.08 1412.77 1326.8 1412.77 1278.53 1412.77 1239.4 1373.64 1239.4 1325.37 1239.4 1277.1 1278.53 1237.97 1326.8 1237.97 1375.08 1237.97 1414.21 1277.1 1414.21 1325.37ZM478.577 477.145C578.875 376.846 586.039 219.234 501.502 110.339 341.024 204.906 206.338 339.592 113.203 498.637 220.666 584.607 378.278 576.01 478.577 477.145ZM679.155 590.32C679.155 638.591 640.024 677.723 591.752 677.723 543.481 677.723 504.349 638.591 504.349 590.32 504.349 542.048 543.481 502.917 591.752 502.917 640.024 502.917 679.155 542.048 679.155 590.32ZM1440 475.712C1540.3 576.01 1697.91 583.174 1806.8 498.637 1712.24 338.159 1577.55 203.473 1418.51 110.339 1332.54 217.801 1341.13 375.413 1440 475.712ZM1414.21 590.32C1414.21 638.591 1375.08 677.723 1326.8 677.723 1278.53 677.723 1239.4 638.591 1239.4 590.32 1239.4 542.048 1278.53 502.917 1326.8 502.917 1375.08 502.917 1414.21 542.048 1414.21 590.32ZM477.145 1438.58C376.846 1338.28 219.234 1331.12 110.339 1415.65 204.906 1576.13 339.593 1710.82 498.637 1805.39 584.607 1696.49 577.443 1538.88 477.145 1438.58ZM679.155 1325.37C679.155 1373.64 640.024 1412.77 591.752 1412.77 543.481 1412.77 504.349 1373.64 504.349 1325.37 504.349 1277.1 543.481 1237.97 591.752 1237.97 640.024 1237.97 679.155 1277.1 679.155 1325.37Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CanvasLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CanvasLogo,
+ contentDescription = "CanvasLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Certified.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Certified.kt
new file mode 100644
index 0000000000..cb1874c636
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Certified.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Certified: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Certified",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m960 15 266.667 241.92 359.893-13.867 48.747 356.907L1920 820.547l-192 304.64 76.267 352.106-342.934 109.867-167.893 318.613L960 1769.56l-333.44 136.213-167.893-318.613-342.934-109.867L192 1125.187 0 820.547 284.693 599.96l48.747-356.907 359.893 13.867L960 15Zm0 144L764.907 335.96l-32.214 29.227-43.52-1.6-263.253-10.134-35.627 260.907-5.866 43.2-34.454 26.56-208.106 161.387L282.24 1068.44l23.253 36.693-9.28 42.667-55.68 257.387 250.774 80.426 41.493 13.334 20.373 38.506 122.667 232.96 243.84-99.52L960 1654.36l40.32 16.533 243.84 99.52 122.773-232.96 20.267-38.506 41.493-13.334 250.774-80.426-55.68-257.387-9.28-42.667 23.253-36.693 140.48-222.933-208.213-161.387-34.454-26.56-5.866-43.2-35.734-260.907-263.04 10.134-43.626 1.6-32.214-29.227L960 159Zm341.056 613.483 64.533 85.013-561.6 426.24-255.04-255.04 75.414-75.413 189.226 189.226 487.467-370.026Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CertifiedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Certified,
+ contentDescription = "Certified",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartLine.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartLine.kt
new file mode 100644
index 0000000000..22fcea3a52
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartLine.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ChartLine: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ChartLine",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1424.38 175.621C1413.65 164.894 1398.86 159.243 1383.72 160.082 1368.57 160.921 1354.5 168.17 1345.02 180.016L945.288 679.682 557.185 485.631C533.127 473.602 503.877 481.37 488.957 503.749L62.2906 1143.75C45.9518 1168.26 52.5744 1201.37 77.0826 1217.71 101.591 1234.05 134.704 1227.43 151.043 1202.92L551.593 602.092 936.149 794.37C958.642 805.616 985.936 799.622 1001.65 779.984L1391.09 293.181 1775.62 677.712C1796.45 698.54 1830.22 698.54 1851.05 677.712 1871.87 656.884 1871.87 623.116 1851.05 602.288L1424.38 175.621ZM106.667 1546.67C77.2115 1546.67 53.3333 1570.54 53.3333 1600 53.3333 1629.46 77.2115 1653.33 106.667 1653.33H1813.33C1842.79 1653.33 1866.67 1629.46 1866.67 1600 1866.67 1570.54 1842.79 1546.67 1813.33 1546.67H106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChartLinePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ChartLine,
+ contentDescription = "ChartLine",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartPie.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartPie.kt
new file mode 100644
index 0000000000..6108a32985
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartPie.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ChartPie: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ChartPie",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1920C1490.19 1920 1920 1490.19 1920 960C1920 429.807 1490.19 0 960 0C429.807 0 0 429.807 0 960C0 1490.19 429.807 1920 960 1920ZM960 1813.33C1431.28 1813.33 1813.33 1431.28 1813.33 960C1813.33 488.717 1431.28 106.667 960 106.667C488.717 106.667 106.667 488.717 106.667 960C106.667 1431.28 488.717 1813.33 960 1813.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1013.33C930.545 1013.33 906.666 989.455 906.666 960L906.666 53.3383C906.666 23.8832 930.545 0.00507242 960 0.00507113C989.455 0.00506984 1013.33 23.8832 1013.33 53.3384L1013.33 960C1013.33 989.455 989.455 1013.33 960 1013.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M906.672 960C906.672 930.545 930.55 906.667 960.005 906.667H1866.67C1896.12 906.667 1920 930.545 1920 960C1920 989.455 1896.12 1013.33 1866.67 1013.33H960.005C930.55 1013.33 906.672 989.455 906.672 960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M281.181 1638.82C260.353 1617.99 260.353 1584.22 281.181 1563.39L922.287 922.287C943.115 901.459 976.884 901.46 997.712 922.287C1018.54 943.115 1018.54 976.884 997.712 997.712L356.606 1638.82C335.778 1659.65 302.009 1659.65 281.181 1638.82Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChartPiePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ChartPie,
+ contentDescription = "ChartPie",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartScatter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartScatter.kt
new file mode 100644
index 0000000000..bf37065ac1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ChartScatter.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ChartScatter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ChartScatter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 53.3334C0 23.8782 23.8781 0 53.3333 0C82.7885 0 106.667 23.8781 106.667 53.3333V1866.67C106.667 1896.12 82.7885 1920 53.3333 1920C23.8781 1920 0 1896.12 0 1866.67V53.3334Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1866.67 1813.33C1896.12 1813.33 1920 1837.21 1920 1866.67C1920 1896.12 1896.12 1920 1866.67 1920H53.3333C23.8781 1920 0 1896.12 0 1866.67C1.28753e-06 1837.21 23.8781 1813.33 53.3333 1813.33L1866.67 1813.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M445.415 1280C533.78 1280 605.415 1208.37 605.415 1120 605.415 1031.63 533.78 960 445.415 960 357.049 960 285.415 1031.63 285.415 1120 285.415 1208.37 357.049 1280 445.415 1280ZM445.415 1173.33C474.87 1173.33 498.748 1149.46 498.748 1120 498.748 1090.54 474.87 1066.67 445.415 1066.67 415.959 1066.67 392.081 1090.54 392.081 1120 392.081 1149.46 415.959 1173.33 445.415 1173.33ZM1280 1645.8C1368.37 1645.8 1440 1574.16 1440 1485.8 1440 1397.43 1368.37 1325.8 1280 1325.8 1191.63 1325.8 1120 1397.43 1120 1485.8 1120 1574.16 1191.63 1645.8 1280 1645.8ZM1280 1539.13C1309.46 1539.13 1333.33 1515.25 1333.33 1485.8 1333.33 1456.34 1309.46 1432.46 1280 1432.46 1250.54 1432.46 1226.67 1456.34 1226.67 1485.8 1226.67 1515.25 1250.54 1539.13 1280 1539.13ZM445.415 502.331C533.78 502.331 605.415 430.697 605.415 342.331 605.415 253.966 533.78 182.331 445.415 182.331 357.049 182.331 285.415 253.966 285.415 342.331 285.415 430.697 357.049 502.331 445.415 502.331ZM445.415 395.665C474.87 395.665 498.748 371.786 498.748 342.331 498.748 312.876 474.87 288.998 445.415 288.998 415.959 288.998 392.081 312.876 392.081 342.331 392.081 371.786 415.959 395.665 445.415 395.665ZM1722.17 1280C1810.54 1280 1882.17 1208.37 1882.17 1120 1882.17 1031.63 1810.54 960 1722.17 960 1633.81 960 1562.17 1031.63 1562.17 1120 1562.17 1208.37 1633.81 1280 1722.17 1280ZM1722.17 1173.33C1751.63 1173.33 1775.5 1149.46 1775.5 1120 1775.5 1090.54 1751.63 1066.67 1722.17 1066.67 1692.72 1066.67 1668.84 1090.54 1668.84 1120 1668.84 1149.46 1692.72 1173.33 1722.17 1173.33ZM995.616 1044.58C1083.98 1044.58 1155.62 972.946 1155.62 884.581 1155.62 796.215 1083.98 724.581 995.616 724.581 907.251 724.581 835.616 796.215 835.616 884.581 835.616 972.946 907.251 1044.58 995.616 1044.58ZM995.616 937.914C1025.07 937.914 1048.95 914.036 1048.95 884.581 1048.95 855.126 1025.07 831.247 995.616 831.247 966.161 831.247 942.283 855.126 942.283 884.581 942.283 914.036 966.161 937.914 995.616 937.914Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChartScatterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ChartScatter,
+ contentDescription = "ChartScatter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Chat.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Chat.kt
new file mode 100644
index 0000000000..16264e37ce
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Chat.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Chat: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Chat",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M677.68-.034v338.937h112.942V113.02h1016.47v790.476h-225.995v259.764l-259.651-259.764h-79.172V451.844H.034v1016.47h338.71v418.9l417.996-418.9h485.534v-451.877h32.753l419.125 419.124v-419.124h225.882V-.033H677.68ZM338.825 903.53H903.53V790.59H338.824v112.94Zm0 225.883H677.76v-113.054H338.824v113.054Zm-225.849-564.74h1016.47v790.701H710.435l-258.748 259.652v-259.652h-338.71V564.672Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChatPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Chat,
+ contentDescription = "Chat",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Check.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Check.kt
new file mode 100644
index 0000000000..4d4f3f0e8a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Check.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Check: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Check",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1827.701 303.065 698.835 1431.801 92.299 825.266 0 917.564 698.835 1616.4 1919.869 395.234z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Check,
+ contentDescription = "Check",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckDark.kt
new file mode 100644
index 0000000000..04b5219fda
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CheckDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CheckDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1827.701 303.065 698.835 1431.801 92.299 825.266 0 917.564 698.835 1616.4 1919.869 395.234z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CheckDark,
+ contentDescription = "CheckDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckMark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckMark.kt
new file mode 100644
index 0000000000..b2d1bce80f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckMark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CheckMark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CheckMark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1827.701 303.065 698.835 1431.801 92.299 825.266 0 917.564 698.835 1616.4 1919.869 395.234z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckMarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CheckMark,
+ contentDescription = "CheckMark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckMarkIndeterminate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckMarkIndeterminate.kt
new file mode 100644
index 0000000000..2852786044
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckMarkIndeterminate.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CheckMarkIndeterminate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CheckMarkIndeterminate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M288 864v192h1344V864z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckMarkIndeterminatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CheckMarkIndeterminate,
+ contentDescription = "CheckMarkIndeterminate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckPlus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckPlus.kt
new file mode 100644
index 0000000000..e4e4bb953e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CheckPlus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CheckPlus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CheckPlus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1709.289 959.673v854.604H341.808v-797.744h113.947v683.797H1595.34V959.673h113.948ZM1840.35 434.57l79.65 81.586-797.63 779.627-364.518-356.54 79.649-81.36 284.868 278.488 717.982-701.801ZM455.789 105v341.956h341.956v113.947H455.789v341.728H341.842V560.903H0V446.956h341.842V105h113.947Zm1082.533 341.876v113.947h-626.71V446.876h626.71Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckPlusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CheckPlus,
+ contentDescription = "CheckPlus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CircleArrowDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CircleArrowDown.kt
new file mode 100644
index 0000000000..097a532a8e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CircleArrowDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CircleArrowDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CircleArrowDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1559.238 360.762c-330.46-330.46-868.016-330.46-1198.476 0-330.46 330.46-330.46 868.016 0 1198.476 330.46 330.46 868.016 330.46 1198.476 0 330.46-330.46 330.46-868.016 0-1198.476ZM280.863 1639.137c-374.484-374.484-374.484-983.79 0-1358.274 374.484-374.484 983.79-374.484 1358.274 0 374.484 374.484 374.484 983.79 0 1358.274-374.484 374.484-983.79 374.484-1358.274 0Zm359.543-599.239 263.106 263.106-.08-822.395h113.136l-.08 822.395 263.106-263.106 79.898 79.899L960 1519.289l-399.492-399.492 79.898-79.899Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CircleArrowDown,
+ contentDescription = "CircleArrowDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CircleArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CircleArrowUp.kt
new file mode 100644
index 0000000000..94fad85d6d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CircleArrowUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CircleArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CircleArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1559.238 1559.238c330.46-330.46 330.46-868.016 0-1198.476-330.46-330.46-868.016-330.46-1198.476 0-330.46 330.46-330.46 868.016 0 1198.476 330.46 330.46 868.016 330.46 1198.476 0ZM280.863 280.863c374.484-374.484 983.79-374.484 1358.274 0 374.484 374.484 374.484 983.79 0 1358.274-374.484 374.484-983.79 374.484-1358.274 0-374.484-374.484-374.484-983.79 0-1358.274Zm359.543 599.239-79.898-79.899L960 400.711l399.492 399.492-79.898 79.899-263.106-263.106.08 822.395H903.432l.08-822.395-263.106 263.106Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CircleArrowUp,
+ contentDescription = "CircleArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClearTextFormatting.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClearTextFormatting.kt
new file mode 100644
index 0000000000..0a7489e0be
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClearTextFormatting.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ClearTextFormatting: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ClearTextFormatting",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1235.141 1619.922h-190.317l-179.997-179.998 635.15-635.149 275.155 275.155-539.99 539.992Zm667.31-582.472-359.995-359.994c-23.52-23.399-61.44-23.399-84.839 0l-719.989 719.99c-23.519 23.52-23.519 61.438 0 84.957l137.518 137.52H0v119.997h1259.98c15.96 0 31.2-6.36 42.48-17.52l599.99-599.99c23.4-23.52 23.4-61.44 0-84.96Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M120.034 180.004v119.999h494.993L243.392 1360.066l113.158 39.72L742.105 300.003h457.912V180.004z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClearTextFormattingPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ClearTextFormatting,
+ contentDescription = "ClearTextFormatting",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Clock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Clock.kt
new file mode 100644
index 0000000000..a95d2d48fe
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Clock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Clock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Clock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059M960 1920C430.645 1920 0 1489.355 0 960S430.645 0 960 0s960 430.645 960 960-430.645 960-960 960m417.905-575.955L903.552 988.28V395.34h112.941v536.47l429.177 321.77-67.765 90.465Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Clock,
+ contentDescription = "Clock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioning.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioning.kt
new file mode 100644
index 0000000000..2c0466a844
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioning.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ClosedCaptioning: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ClosedCaptioning",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1800 1745V185c0-33-27-60-60-60H180c-33 0-60 27-60 60v1560c0 33 27 60 60 60h1560c33 0 60-27 60-60ZM1740 5c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V185C0 85.76 80.76 5 180 5h1560ZM859.522 853.669h-160v-53.333H486.189v320h213.333v-53.334h160v106.667c0 58.667-48 106.667-106.667 106.667h-320c-58.666 0-106.666-48-106.666-106.667V747.002c0-58.666 48-106.666 106.666-106.666h320c58.667 0 106.667 48 106.667 106.666V853.67Zm725 0h-160v-53.333h-213.333v320h213.333v-53.334h160v106.667c0 58.667-48 106.667-106.667 106.667h-320c-58.666 0-106.666-48-106.666-106.667V747.002c0-58.666 48-106.666 106.666-106.666h320c58.667 0 106.667 48 106.667 106.666V853.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptioningPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ClosedCaptioning,
+ contentDescription = "ClosedCaptioning",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioningOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioningOff.kt
new file mode 100644
index 0000000000..ab02e7403d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioningOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ClosedCaptioningOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ClosedCaptioningOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1264.84 456.279c31.013 194.462 200.329 343.66 404.01 343.66 2.516 0 5.03 0 7.545-.837v830.653c0 92.202-75.438 167.64-167.64 167.64H167.64c-92.202 0-167.64-75.438-167.64-167.64V623.918c0-92.201 75.438-167.64 167.64-167.64ZM754.378 783.243h-251.46c-138.302 0-251.459 113.157-251.459 251.46v167.639c0 138.302 113.157 251.459 251.46 251.459h251.459v-167.64h-251.46c-46.1 0-83.82-37.719-83.82-83.82v-167.639c0-46.1 37.72-83.82 83.82-83.82h251.46V783.243Zm670.558 0h-251.46c-138.302 0-251.459 113.157-251.459 251.46v167.639c0 138.302 113.157 251.459 251.46 251.459h251.458v-167.64h-251.459c-46.1 0-83.82-37.719-83.82-83.82v-167.639c0-46.1 37.72-83.82 83.82-83.82h251.46V783.243ZM1822.686 121 1920 219.32l-157.749 159.342L1920 538.087l-97.315 98.237-157.748-159.342-157.833 159.342-97.315-98.237 157.833-159.425-157.833-159.341L1507.104 121l157.833 159.425L1822.685 121Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptioningOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ClosedCaptioningOff,
+ contentDescription = "ClosedCaptioningOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioningOn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioningOn.kt
new file mode 100644
index 0000000000..8a804fcb1b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ClosedCaptioningOn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ClosedCaptioningOn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ClosedCaptioningOn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1220.701 478.258c30.279 186.41 190.667 329.13 385.59 321.259v803.145c0 88.346-72.283 160.63-160.629 160.63H160.63C72.283 1763.291 0 1691.007 0 1602.661V638.887c0-88.346 72.283-160.629 160.63-160.629Zm144.647 313.251h-240.944c-132.84 0-240.944 108.104-240.944 240.944v160.629c0 132.84 108.104 240.944 240.944 240.944h240.944v-160.63h-240.944c-44.253 0-80.315-36.06-80.315-80.314v-160.63c0-44.252 36.062-80.314 80.315-80.314h240.944V791.51Zm-642.517 0H481.887c-132.84 0-240.943 108.104-240.943 240.944v160.629c0 132.84 108.103 240.944 240.943 240.944h240.944v-160.63H481.887c-44.253 0-80.314-36.06-80.314-80.314v-160.63c0-44.252 36.061-80.314 80.314-80.314h240.944V791.51ZM1825.871 157 1920 251.209l-380.049 380.049-246.887-246.887 94.21-94.13L1539.95 442.92 1825.871 157Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptioningOnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ClosedCaptioningOn,
+ contentDescription = "ClosedCaptioningOn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudDownload.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudDownload.kt
new file mode 100644
index 0000000000..456858ece9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudDownload.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CloudDownload: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CloudDownload",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1016.47 903.048v710.738l185.902-185.9 79.962 79.849L960 1829.955l-322.334-322.22 79.962-79.85 185.901 185.901V903.048h112.942ZM960 56c221.816 0 408.847 143.661 478.08 342.212 10.052-.678 19.99-3.388 30.155-3.388 249.149 0 451.765 202.616 451.765 451.764s-202.616 451.765-451.765 451.765h-112.94v-112.941h112.94c186.805 0 338.824-152.02 338.824-338.824s-152.019-338.823-338.824-338.823c-1.92 0-3.727.564-5.647.677 2.146 18.523 5.647 36.706 5.647 55.793 0 44.16-5.76 88.094-16.94 130.673l-109.215-28.913c8.81-33.204 13.214-67.426 13.214-101.76 0-217.976-177.318-395.294-395.294-395.294-212.442 0-385.13 168.96-393.6 379.37 38.174 18.409 74.202 41.788 105.374 72.282l-78.946 80.753c-53.082-52.066-123.219-80.64-197.534-80.64-155.746 0-282.353 126.72-282.353 282.353 0 155.746 126.607 282.353 282.353 282.353h169.412v112.94H395.294C177.318 1298.353 0 1121.036 0 903.06c0-217.977 177.318-395.294 395.294-395.294 20.894 0 41.224 2.71 61.553 5.986C482.597 257.487 697.073 56 960 56Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudDownloadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CloudDownload,
+ contentDescription = "CloudDownload",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudLock.kt
new file mode 100644
index 0000000000..abd498c885
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudLock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CloudLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CloudLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1027.72 849.165c124.687 0 225.882 101.308 225.882 225.882v112.941h112.941v395.294c0 93.403-75.896 169.412-169.412 169.412H858.308c-93.403 0-169.412-76.01-169.412-169.412v-395.294h112.941v-112.94c0-124.575 101.308-225.883 225.883-225.883Zm225.882 451.764H801.837v282.353c0 31.172 25.412 56.47 56.47 56.47h338.824c31.172 0 56.47-25.298 56.47-56.47V1300.93ZM960 167c221.816 0 408.847 143.661 478.08 342.212 10.165-.678 19.99-3.388 30.155-3.388 249.036 0 451.765 202.616 451.765 451.764s-202.73 451.765-451.765 451.765v-112.941c186.805 0 338.824-152.02 338.824-338.824s-152.019-338.823-338.824-338.823c-1.92 0-3.727.564-5.647.677 2.146 18.523 5.647 36.706 5.647 55.793 0 44.386-5.76 88.32-16.94 130.786l-109.215-29.139c8.81-32.866 13.214-67.087 13.214-101.647 0-217.976-177.318-395.294-395.294-395.294-212.442 0-385.13 168.96-393.713 379.257 38.287 18.522 74.428 41.9 105.6 72.395l-78.946 80.753c-53.195-52.066-123.332-80.64-197.647-80.64-155.633 0-282.353 126.72-282.353 282.353s126.72 282.353 282.353 282.353h169.412v112.94H395.294C177.318 1409.353 0 1232.036 0 1014.06c0-217.977 177.318-395.294 395.294-395.294 20.894 0 41.337 2.71 61.553 5.986C482.597 368.487 697.073 167 960 167Zm67.72 795.106c-62.231 0-112.942 50.71-112.942 112.941v112.941h225.883v-112.94c0-62.232-50.598-112.942-112.941-112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CloudLock,
+ contentDescription = "CloudLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudUpload.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudUpload.kt
new file mode 100644
index 0000000000..dcda85f452
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CloudUpload.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CloudUpload: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CloudUpload",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1451.06 557.963C1456.76 557.07 1462.44 556.179 1468.24 556.179C1717.38 556.179 1920 761.2 1920 1013.31C1920 1265.41 1717.38 1470.43 1468.24 1470.43H1355.29V1356.15H1468.24C1655.04 1356.15 1807.06 1202.33 1807.06 1013.31C1807.06 824.283 1655.04 670.46 1468.24 670.46C1467.28 670.46 1466.34 670.632 1465.41 670.803C1464.48 670.975 1463.55 671.146 1462.59 671.146C1463.2 676.832 1463.97 682.485 1464.73 688.143C1466.48 701.135 1468.24 714.146 1468.24 727.601C1468.24 772.4 1462.48 816.855 1451.29 859.825L1342.08 830.569C1350.78 797.084 1355.29 762.571 1355.29 727.601C1355.29 507.038 1177.98 327.616 960 327.616C747.558 327.616 574.871 498.581 566.287 711.373C604.574 730.115 640.602 753.772 671.887 784.628L592.941 866.339C539.746 813.77 469.609 784.742 395.294 784.742C239.661 784.742 112.941 912.852 112.941 1070.45C112.941 1228.04 239.661 1356.15 395.294 1356.15H564.706V1470.43H395.294C177.318 1470.43 0 1291.01 0 1070.45C0 849.883 177.318 670.46 395.294 670.46C416.188 670.46 436.631 673.203 456.847 676.517C482.598 417.098 697.073 213.334 960 213.334C1181.82 213.334 1368.85 358.7 1438.08 559.607C1442.45 559.312 1446.76 558.637 1451.06 557.963ZM717.572 1282.27L637.722 1201.47L960.056 875.31L1282.28 1201.47L1202.43 1282.27L1016.53 1094.16V1813.33H903.586V1094.16L717.572 1282.27Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudUploadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CloudUpload,
+ contentDescription = "CloudUpload",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Code.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Code.kt
new file mode 100644
index 0000000000..82986a9f67
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Code.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Code: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Code",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m561.813 286 82.027 68.373-504.96 605.76L643.84 1566l-82.027 68.373L0 960.133 561.813 286Zm800.235 0 561.813 674.133-561.813 674.24-82.027-68.373 504.96-605.867-504.96-605.76L1362.048 286Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CodePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Code,
+ contentDescription = "Code",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Collapse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Collapse.kt
new file mode 100644
index 0000000000..df54b670f0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Collapse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Collapse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Collapse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1694.176v112.942H0v-112.942h1920ZM1750.588 113C1843.991 113 1920 189.01 1920 282.412v1185.882h-112.941V282.412c0-31.06-25.412-56.47-56.47-56.47H169.411c-31.06 0-56.47 25.41-56.47 56.47v1185.882H0V282.412C0 189.009 76.01 113 169.412 113h1581.176Zm-734.117 451.765v654.268l242.371-242.485 79.963 79.963L960 1435.202l-378.805-378.691 79.963-79.963 242.371 242.485V564.765h112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollapsePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Collapse,
+ contentDescription = "Collapse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Collection.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Collection.kt
new file mode 100644
index 0000000000..c7cbe34c93
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Collection.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Collection: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Collection",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1242.353 677.647V1920H0V677.647h1242.353Zm-112.941 112.941H112.942v1016.47h1016.47V790.589Zm-790.588 338.824h564.705V1016.47H338.824v112.94Zm0 451.764h564.705v-112.94H338.824v112.94ZM1581.176 338.824v1242.352h-225.882v-112.94h112.941V451.764H451.765v112.94H338.824V338.825h1242.352Zm-790.475 903.529v112.941H338.824v-112.941H790.7ZM1920.034-.011v1242.353h-225.882V1129.4h112.94V112.93H790.623v112.94H677.681V-.01h1242.353Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollectionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Collection,
+ contentDescription = "Collection",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CollectionSave.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CollectionSave.kt
new file mode 100644
index 0000000000..49d8671e1f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CollectionSave.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CollectionSave: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CollectionSave",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1510.854 1779.583H409.146L81.255 1451.576 0 1532.946l361.566 361.566h1196.868L1920 1532.946l-81.14-81.37-328.006 328.007Zm-548.52-347.05L462.047 932.248l81.14-81.37 361.68 361.681V25h114.815v1187.559l361.795-361.68 81.14 81.369-500.285 500.285Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollectionSavePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CollectionSave,
+ contentDescription = "CollectionSave",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Comment.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Comment.kt
new file mode 100644
index 0000000000..469fae6a47
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Comment.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Comment: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Comment",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1662.178 0v1359.964h-648.703l-560.154 560.154v-560.154H0V0h1662.178ZM1511.07 151.107H151.107v1057.75h453.321v346.488l346.489-346.488h560.154V151.107ZM906.794 755.55v117.53H453.32V755.55h453.473Zm302.063-302.365v117.529H453.32V453.185h755.536Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Comment,
+ contentDescription = "Comment",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CommentsOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CommentsOff.kt
new file mode 100644
index 0000000000..39412e5d94
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CommentsOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CommentsOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CommentsOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M853.333 309.653v106.774H106.667v1043.2l265.35-.098-.07 247.138 329.642-247.138 908.651.098V853.333h106.667l.075 712.862h-979.84L265.35 1920v-353.805H0V309.653h853.333ZM1677.013 0l79.85 79.85-242.373 242.37 242.372 242.485-79.85 79.85-242.484-242.372-242.372 242.371-79.85-79.85 242.372-242.484-242.371-242.37L1192.157 0l242.372 242.372L1677.013 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommentsOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CommentsOff,
+ contentDescription = "CommentsOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CommentsOn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CommentsOn.kt
new file mode 100644
index 0000000000..44043397bd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CommentsOn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CommentsOn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CommentsOn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M853.333 309.653v106.774H106.667v1043.2l265.35-.098-.07 247.138 329.642-247.138 908.651.098V853.333h106.667l.075 712.862h-979.84L265.35 1920v-353.805H0V309.653h853.333ZM1840.151 0 1920 79.85l-475.482 475.482-282.014-281.901 79.849-79.85 202.165 202.052L1840.15 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommentsOnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CommentsOn,
+ contentDescription = "CommentsOn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Commons.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Commons.kt
new file mode 100644
index 0000000000..744fd128eb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Commons.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Commons: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Commons",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M715.926 1409.203c-250.128 0-453.094-201.777-453.094-449.644 0-247.602 204.487-449.643 454.882-449.643h272.823V352.175H715.926c-336.47 0-610.751 272.328-610.751 607.384 0 335.054 274.282 607.385 610.75 607.385H988.75v-157.741H715.926ZM368.007 959.559c0 189.642 155.74 344.469 347.919 344.469h377.998v368.09H715.926C321.538 1672.118 0 1352.868 0 959.56 0 566.248 321.537 247 715.926 247h379.786v368.09H717.714c-192.59 0-349.707 155.239-349.707 344.47Zm990.537-355.563v250.76H742.745c-58.564 0-104.754 46.204-104.754 104.803s46.19 104.803 104.754 104.803h615.8v250.76l402.577-355.563-402.578-355.563ZM1253.37 370.78 1920 959.56l-666.63 588.779v-378.802H742.744c-116.658 0-209.929-93.3-209.929-209.978 0-116.678 93.271-209.978 209.93-209.978h510.623V370.78Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommonsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Commons,
+ contentDescription = "Commons",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compare.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compare.kt
new file mode 100644
index 0000000000..ce2ca5c939
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compare.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Compare: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Compare",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M53.3333 1620C23.8781 1620 -3.5125e-07 1596.12 0 1566.67L2.16238e-05 53.3334C2.1975e-05 23.8782 23.8782 -3.5125e-07 53.3334 0L853.333 9.5399e-06C882.788 9.89115e-06 906.667 23.8782 906.667 53.3334V1566.67C906.667 1596.12 882.788 1620 853.333 1620H53.3333ZM149.333 1513.33C125.769 1513.33 106.667 1494.23 106.667 1470.67L106.667 149.333C106.667 125.769 125.769 106.667 149.333 106.667H757.333C780.897 106.667 800 125.769 800 149.333V1470.67C800 1494.23 780.897 1513.33 757.333 1513.33H149.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1066.67 1920C1037.21 1920 1013.33 1896.12 1013.33 1866.67V353.333C1013.33 323.878 1037.21 300 1066.67 300L1866.67 300C1896.12 300 1920 323.878 1920 353.333V1866.67C1920 1896.12 1896.12 1920 1866.67 1920H1066.67ZM1162.67 1813.33C1139.1 1813.33 1120 1794.23 1120 1770.67V449.333C1120 425.769 1139.1 406.667 1162.67 406.667L1770.67 406.667C1794.23 406.667 1813.33 425.769 1813.33 449.333V1770.67C1813.33 1794.23 1794.23 1813.33 1770.67 1813.33H1162.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M495.892 1050L420.799 974.854L542.573 853.133L164.134 853.133V746.867L542.573 746.867L420.799 625.146L495.892 550L745.866 800.027L495.892 1050Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1415.11 838L1490.2 913.146L1368.43 1034.87H1746.87V1141.13H1368.43L1490.2 1262.85L1415.11 1338L1165.13 1087.97L1415.11 838Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ComparePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Compare,
+ contentDescription = "Compare",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compass.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compass.kt
new file mode 100644
index 0000000000..0ce04aeaad
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compass.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Compass: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Compass",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c-29.455 0-53.333 23.878-53.333 53.333v164.425C755.322 243.149 640 374.774 640 533.333c0 35.57 5.803 69.784 16.515 101.748L142.857 1524.76c-78.897 136.66-32.076 311.4 104.579 390.3 16.399 9.46 37.368 3.84 46.835-12.55l297.82-515.84h314.576v106.66c0 29.46 23.878 53.34 53.333 53.34s53.33-23.88 53.33-53.34v-106.66h314.37l297.82 515.84c9.47 16.39 30.44 22.01 46.84 12.55 136.65-78.9 183.48-253.64 104.58-390.3l-513.53-889.454c10.76-32.028 16.59-66.319 16.59-101.973 0-158.559-115.32-290.184-266.67-315.575V53.333C1013.33 23.878 989.455 0 960 0Zm0 320c-117.821 0-213.333 95.513-213.333 213.333 0 117.821 95.512 213.334 213.333 213.334 117.82 0 213.33-95.513 213.33-213.334C1173.33 415.513 1077.82 320 960 320Zm0 533.333c19.41 0 38.417-1.728 56.87-5.039L1266.12 1280h-252.79v-106.67c0-29.45-23.875-53.33-53.33-53.33s-53.333 23.88-53.333 53.33V1280H653.675L902.94 848.261a321.882 321.882 0 0 0 57.06 5.072Zm714.09 919.967-555.41-962.015c31.59-18.077 59.81-41.387 83.47-68.748l482.41 835.563c36.56 63.32 30.04 139.7-10.47 195.2ZM235.233 1578.1l482.493-835.706c23.646 27.379 51.855 50.707 83.445 68.803L245.702 1773.3c-40.51-55.5-47.031-131.88-10.469-195.2Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CompassPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Compass,
+ contentDescription = "Compass",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Complete.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Complete.kt
new file mode 100644
index 0000000000..781b2b4455
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Complete.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Complete: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Complete",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0M854.344 1157.975 583.059 886.69l-79.85 79.85 351.135 351.133L1454.4 717.617l-79.85-79.85-520.206 520.208Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CompletePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Complete,
+ contentDescription = "Complete",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compose.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compose.kt
new file mode 100644
index 0000000000..a46076d25c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Compose.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Compose: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Compose",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M909.191 303.66v101.02h-808.17v1414.3H1515.32v-721.494h101.021V1920H0V303.66h909.191ZM1562.132 0c40.51 0 78.494 15.76 106.982 44.348l206.588 206.488c58.997 59.097 58.997 155.27 0 214.266L1666.184 674.62l-349.432-349.332-818.778 818.778 277.91 277.91 723.514-723.414 71.422 71.422-857.367 857.266-526.018 105.164 105.264-525.917L1454.848 44.348C1483.437 15.76 1521.522 0 1562.03 0ZM426.552 1215.488l-40.711 40.812-69.503 347.413 347.412-69.503 40.712-40.813-277.91-277.91Zm884.007-677.469 71.422 71.422-624.716 624.716-71.422-71.422 624.716-624.716Zm251.573-436.998h-.1c-13.538 0-26.165 5.253-35.762 14.75l-138.096 138.095 278.01 277.91L1804.28 393.68c19.598-19.7 19.598-51.723 0-71.523L1597.692 115.77c-9.597-9.597-22.225-14.749-35.56-14.749Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ComposePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Compose,
+ contentDescription = "Compose",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Configure.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Configure.kt
new file mode 100644
index 0000000000..207ee0c470
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Configure.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Configure: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Configure",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M262.749 410.667H.000648499V282.667H262.749C292.139 145.504 414.06 42.6667 560 42.6667 705.94 42.6667 827.861 145.504 857.251 282.667H1920V410.667H857.251C827.861 547.829 705.94 650.667 560 650.667 414.06 650.667 292.139 547.829 262.749 410.667ZM384 346.667C384 249.465 462.798 170.667 560 170.667 657.202 170.667 736 249.465 736 346.667 736 443.869 657.202 522.667 560 522.667 462.798 522.667 384 443.869 384 346.667ZM.000648499 896H1009.42C1038.81 758.837 1160.73 656 1306.67 656 1452.61 656 1574.53 758.837 1603.92 896H1920V1024H1603.92C1574.53 1161.16 1452.61 1264 1306.67 1264 1160.73 1264 1038.81 1161.16 1009.42 1024H.000648499V896ZM1306.67 784C1209.46 784 1130.67 862.798 1130.67 960 1130.67 1057.2 1209.46 1136 1306.67 1136 1403.87 1136 1482.67 1057.2 1482.67 960 1482.67 862.798 1403.87 784 1306.67 784ZM857.251 1637.33C827.861 1774.5 705.94 1877.33 560 1877.33 414.06 1877.33 292.139 1774.5 262.749 1637.33H.000648499V1509.33H262.749C292.139 1372.17 414.06 1269.33 560 1269.33 705.94 1269.33 827.861 1372.17 857.251 1509.33H1920V1637.33H857.251ZM384 1573.33C384 1476.13 462.798 1397.33 560 1397.33 657.202 1397.33 736 1476.13 736 1573.33 736 1670.54 657.202 1749.33 560 1749.33 462.798 1749.33 384 1670.54 384 1573.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ConfigurePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Configure,
+ contentDescription = "Configure",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Copy.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Copy.kt
new file mode 100644
index 0000000000..c68b58d02d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Copy.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Copy: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Copy",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1919.887h1467.88V452.008H0v1467.88ZM1354.965 564.922v1242.051H112.914V564.922h1242.051ZM1920 0v1467.992h-338.741v-113.027h225.827V112.914H565.035V338.74H452.008V0H1920ZM338.741 1016.93h790.397V904.016H338.74v112.914Zm0 451.062h790.397v-113.027H338.74v113.027Zm0-225.588h564.57v-112.913H338.74v112.913Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Copy,
+ contentDescription = "Copy",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CopyCourse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CopyCourse.kt
new file mode 100644
index 0000000000..51cb0d2664
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/CopyCourse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.CopyCourse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.CopyCourse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1919.887h1467.88V452.008H0v1467.88ZM1354.965 564.922v1242.051H112.914V564.922h1242.051ZM1920 0v1467.992h-338.741v-113.027h225.827V112.914H565.035V338.74H452.008V0H1920ZM338.741 1016.93h790.397V904.016H338.74v112.914Zm0 451.062h790.397v-113.027H338.74v113.027Zm0-225.588h564.57v-112.913H338.74v112.913Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyCoursePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.CopyCourse,
+ contentDescription = "CopyCourse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Courses.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Courses.kt
new file mode 100644
index 0000000000..1b8000915f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Courses.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Courses: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Courses",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1750.21 0v1468.235h-225.882v338.824h169.412V1920H451.387c-82.447 0-161.506-36.141-214.701-99.388-43.934-51.953-67.652-116.33-67.652-182.965V282.353C169.034 126.494 295.528 0 451.387 0H1750.21Zm-338.823 1468.235H463.81c-89.223 0-166.136 59.86-179.576 140.047-1.242 9.036-2.259 18.07-2.259 27.106v2.26c0 40.658 13.553 77.928 40.659 109.552 32.753 38.4 79.059 59.859 128.753 59.859h960v-112.941H409.599v-112.942h1001.788v-112.94Zm225.882-1355.294H451.387c-92.725 0-169.412 75.67-169.412 169.412v1132.8c50.824-37.27 113.958-59.859 181.835-59.859h1173.46V112.941ZM1354.882 903.53v112.942H564.294V903.529h790.588Zm56.47-564.705v451.764H507.825V338.824h903.529Zm-112.94 112.94H620.765v225.883h677.647V451.765Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CoursesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Courses,
+ contentDescription = "Courses",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Crop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Crop.kt
new file mode 100644
index 0000000000..4d340ee684
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Crop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Crop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Crop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M426.667 0h106.666v1386.67H1920v106.66H426.667V0zM320 426.667H0v106.666h320V426.667zm320 0v106.666h746.67V1280h106.66V426.667H640zM1493.33 1600h-106.66v320h106.66v-320z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CropPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Crop,
+ contentDescription = "Crop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Dashboard.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Dashboard.kt
new file mode 100644
index 0000000000..d61b25456f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Dashboard.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Dashboard: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Dashboard",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M833.935 1063.327c28.913 170.315 64.038 348.198 83.464 384.79 27.557 51.84 92.047 71.944 144 44.387 51.84-27.558 71.717-92.273 44.16-144.113-19.426-36.593-146.937-165.46-271.624-285.064Zm-43.821-196.405c61.553 56.923 370.899 344.81 415.285 428.612 56.696 106.842 15.811 239.887-91.144 296.697-32.64 17.28-67.765 25.411-102.325 25.411-78.72 0-154.955-42.353-194.371-116.555-44.386-83.802-109.102-501.346-121.638-584.245-3.501-23.717 8.245-47.21 29.365-58.277 21.346-11.294 47.096-8.02 64.828 8.357ZM960.045 281.99c529.355 0 960 430.757 960 960 0 77.139-8.922 153.148-26.654 225.882l-10.39 43.144h-524.386v-112.942h434.258c9.487-50.71 14.231-103.115 14.231-156.084 0-467.125-380.047-847.06-847.059-847.06-467.125 0-847.059 379.935-847.059 847.06 0 52.97 4.744 105.374 14.118 156.084h487.454v112.942H36.977l-10.39-43.144C8.966 1395.137.044 1319.128.044 1241.99c0-529.243 430.645-960 960-960Zm542.547 390.686 79.85 79.85-112.716 112.715-79.85-79.85 112.716-112.715Zm-1085.184 0L530.123 785.39l-79.85 79.85L337.56 752.524l79.849-79.85Zm599.063-201.363v159.473H903.529V471.312h112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DashboardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Dashboard,
+ contentDescription = "Dashboard",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DeactivateUser.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DeactivateUser.kt
new file mode 100644
index 0000000000..6e120cc787
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DeactivateUser.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DeactivateUser: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DeactivateUser",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1285.316 1467.344c-119.106 82.796-341.251 202.437-636.017 188.299-238.533-11.247-423.512-105.182-542.19-188.192v-151.346c0-128.424 82.047-238.962 195.047-262.74 113.751-23.885 230.18-37.595 345.965-40.487 146.954-3.856 296.8 9.854 442.47 40.594 112.786 23.779 194.725 134.209 194.725 262.74v151.132ZM428.44 637.994v-6.962c45.95-12.425 75.298-39.31 98.327-60.625 26.777-24.635 42.95-39.523 80.546-39.523 36.846 0 52.805 14.781 79.261 39.31 31.17 28.597 73.799 67.8 153.167 67.8 57.946 0 95.756-21.315 124.247-43.915v43.915c0 147.704-120.07 267.774-267.774 267.774S428.44 785.698 428.44 637.994ZM696.213 263.11c123.605 0 226.858 84.616 257.599 198.688-13.282 9.747-24.742 20.244-35.453 30.098-26.35 24.314-42.095 38.988-78.619 38.988-37.595 0-53.769-14.888-80.546-39.524-30.848-28.49-73.263-67.586-151.882-67.586-79.368 0-121.998 39.31-153.167 67.908-8.676 8.033-16.28 14.567-23.778 20.35C440.22 373.327 555.042 263.11 696.213 263.11Zm416.443 685.609c-57.197-12.104-115.143-20.887-173.09-27.956 79.904-68.764 131.531-169.34 131.531-282.77v-107.11C1071.097 324.27 902.935 156 696.213 156S321.329 324.27 321.329 530.884v107.11c0 113.215 51.413 213.576 131.102 282.448-57.839 6.962-115.464 16.173-172.34 28.17C117.822 982.672 0 1137.232 0 1316.105v205.865l21.743 16.066c129.175 95.221 342.002 211.435 622.522 224.61 17.245.75 34.275 1.178 51.091 1.178 318.437 0 557.72-139.564 675.22-225.788l21.85-15.959v-205.865c0-178.873-117.713-333.432-279.77-367.493ZM1839.915 156l-200.269 200.269L1439.49 156l-80.198 80.085 200.27 200.269-200.27 200.269 80.198 80.085 200.156-200.27 200.269 200.27L1920 636.623l-200.269-200.269L1920 236.085 1839.915 156Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DeactivateUserPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DeactivateUser,
+ contentDescription = "DeactivateUser",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Discussion.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Discussion.kt
new file mode 100644
index 0000000000..754bd77857
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Discussion.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Discussion: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Discussion",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M677.647 16v338.936h112.941V129.054h1016.47V919.53h-225.994v259.765L1321.412 919.53h-79.172V467.878H0v1016.47h338.71v418.9l417.996-418.9h485.534v-451.877h32.753l419.125 419.124v-419.124H1920V16H677.647ZM338.79 919.563h564.706v-112.94H338.79v112.94Zm0 225.883h338.936v-113.054H338.79v113.054Zm-225.85-564.74h1016.47v790.701H710.4L451.652 1631.06v-259.652h-338.71V580.706Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Discussion,
+ contentDescription = "Discussion",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionCheck.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionCheck.kt
new file mode 100644
index 0000000000..4ae7565b97
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionCheck.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionCheck: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionCheck",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1827.701 303.065 698.835 1431.801 92.299 825.266 0 917.564 698.835 1616.4 1919.869 395.234z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionCheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionCheck,
+ contentDescription = "DiscussionCheck",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionNew.kt
new file mode 100644
index 0000000000..ff030eccca
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionNew.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionNew: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionNew",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M915.744 213v702.744H213v87.842h702.744v702.744h87.842v-702.744h702.744v-87.842h-702.744V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionNewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionNew,
+ contentDescription = "DiscussionNew",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReply.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReply.kt
new file mode 100644
index 0000000000..e7b8232b18
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReply.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionReply: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionReply",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1468.235c93.448 0 169.412 75.965 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.447 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.447-75.964 169.412-169.412 169.412-93.448 0-169.412-75.965-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionReplyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionReply,
+ contentDescription = "DiscussionReply",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReply2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReply2.kt
new file mode 100644
index 0000000000..76157d1c9b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReply2.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionReply2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionReply2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M835.942 632.563H244.966l478.08-478.08-90.496-90.496L-.026 696.563 632.55 1329.14l90.496-90.496-478.08-478.08h590.976c504.448 0 914.816 410.368 914.816 914.816v109.184h128V1675.38c0-574.976-467.84-1042.816-1042.816-1042.816"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionReply2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionReply2,
+ contentDescription = "DiscussionReply2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReplyDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReplyDark.kt
new file mode 100644
index 0000000000..2589e06f8b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionReplyDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionReplyDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionReplyDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1468.235c93.448 0 169.412 75.965 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.447 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.447-75.964 169.412-169.412 169.412-93.448 0-169.412-75.965-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionReplyDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionReplyDark,
+ contentDescription = "DiscussionReplyDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionSearch.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionSearch.kt
new file mode 100644
index 0000000000..468ac2e09d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionSearch.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionSearch: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionSearch",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.588 1468.235c-373.722 0-677.647-303.924-677.647-677.647 0-373.722 303.925-677.647 677.647-677.647 373.723 0 677.647 303.925 677.647 677.647 0 373.723-303.924 677.647-677.647 677.647Zm596.781-160.715c120.396-138.692 193.807-319.285 193.807-516.932C1581.176 354.748 1226.428 0 790.588 0S0 354.748 0 790.588s354.748 790.588 790.588 790.588c197.647 0 378.24-73.411 516.932-193.807l516.028 516.142 79.963-79.963-516.142-516.028Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionSearchPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionSearch,
+ contentDescription = "DiscussionSearch",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionX.kt
new file mode 100644
index 0000000000..5cda4518cf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DiscussionX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DiscussionX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DiscussionX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1827.701 0 960.065 867.636 92.3 0 0 92.168l867.636 867.767L0 1827.57 92.299 1920l867.766-867.766L1827.701 1920l92.168-92.43-867.635-867.635 867.635-867.767z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DiscussionX,
+ contentDescription = "DiscussionX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Document.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Document.kt
new file mode 100644
index 0000000000..685ff13919
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Document.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Document: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Document",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1706.235 1807.059H350.941V112.94h903.53v451.765h451.764v1242.353Zm-338.823-1670.74 315.443 315.447h-315.443V136.32Zm402.182 242.487L1440.372 49.58C1408.296 17.62 1365.717 0 1320.542 0H238v1920h1581.175V498.635c0-45.176-17.618-87.755-49.58-119.83ZM576.823 1242.353h790.589v-112.94H576.823v112.94Zm0-451.765h903.53V677.647h-903.53v112.941Zm0 677.647h451.765v-112.941H576.823v112.941Zm0-451.764h677.648V903.53H576.823v112.941Zm0-451.765h451.765V451.765H576.823v112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DocumentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Document,
+ contentDescription = "Document",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Download.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Download.kt
new file mode 100644
index 0000000000..618f11ec5d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Download.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Download: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Download",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1807.093 1482.477 79.736 79.963-355.313 355.312H355.346L.035 1562.44l79.85-79.963 322.22 322.334H1484.76l322.334-322.334ZM997.677-.033v1167.02l355.313-355.313 79.962 79.85-491.858 491.633L449.46 891.524l79.962-79.85 355.313 355.313V-.033h112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DownloadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Download,
+ contentDescription = "Download",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DragHandle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DragHandle.kt
new file mode 100644
index 0000000000..a8e2bf09c1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DragHandle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DragHandle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DragHandle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M686.211 137.143v-.137l68.572.137H686.21Zm0 1508.571c75.566 0 137.143 61.577 137.143 137.143S761.777 1920 686.211 1920c-75.702 0-137.142-61.577-137.142-137.143s61.44-137.143 137.142-137.143Zm548.572 0c75.566 0 137.143 61.577 137.143 137.143S1310.349 1920 1234.783 1920c-75.703 0-137.143-61.577-137.143-137.143s61.44-137.143 137.143-137.143ZM686.21 1097.143c75.566 0 137.143 61.577 137.143 137.143 0 75.565-61.577 137.143-137.143 137.143-75.702 0-137.142-61.578-137.142-137.143 0-75.566 61.44-137.143 137.142-137.143Zm548.572 0c75.566 0 137.143 61.577 137.143 137.143 0 75.565-61.577 137.143-137.143 137.143-75.703 0-137.143-61.578-137.143-137.143 0-75.566 61.44-137.143 137.143-137.143ZM686.21 548.57c75.566 0 137.143 61.578 137.143 137.143 0 75.566-61.577 137.143-137.143 137.143-75.702 0-137.142-61.577-137.142-137.143 0-75.565 61.44-137.143 137.142-137.143Zm548.572 0c75.566 0 137.143 61.578 137.143 137.143 0 75.566-61.577 137.143-137.143 137.143-75.703 0-137.143-61.577-137.143-137.143 0-75.565 61.44-137.143 137.143-137.143ZM686.21 0c75.566 0 137.143 61.577 137.143 137.143S761.776 274.286 686.21 274.286c-75.702 0-137.142-61.577-137.142-137.143S610.509 0 686.21 0Zm548.503 0c75.566 0 137.143 61.577 137.143 137.143s-61.577 137.143-137.143 137.143c-75.565 0-137.143-61.577-137.143-137.143S1159.15 0 1234.714 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DragHandlePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DragHandle,
+ contentDescription = "DragHandle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DropDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DropDown.kt
new file mode 100644
index 0000000000..e9a136ef41
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/DropDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.DropDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.DropDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0m56.47 1275.445v-823.68H903.53v823.68L604.686 976.602l-79.962 79.85L960 1491.614l435.275-435.162-79.962-79.85-298.842 298.843Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DropDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.DropDown,
+ contentDescription = "DropDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Duplicate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Duplicate.kt
new file mode 100644
index 0000000000..195b61d0d6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Duplicate.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Duplicate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Duplicate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1919.887h1467.88V452.008H0v1467.88ZM1354.965 564.922v1242.051H112.914V564.922h1242.051ZM777.203 800h-112l-.001 318.041H333v112h332.202V1580h112v-349.959H1113v-112H777.202V800ZM1920 0v1467.992h-338.741v-113.027h225.827V112.914H565.035V338.74H452.008V0H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DuplicatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Duplicate,
+ contentDescription = "Duplicate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Edit.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Edit.kt
new file mode 100644
index 0000000000..87b10012ae
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Edit.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Edit: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Edit",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M277.974 49.076c65.267-65.379 171.733-65.49 237.448 0l232.186 232.187 1055.697 1055.809L1919.958 1920l-582.928-116.653-950.128-950.015 79.15-79.15 801.792 801.68 307.977-307.976-907.362-907.474L281.22 747.65 49.034 515.464c-65.379-65.603-65.379-172.069 0-237.448Zm1376.996 1297.96-307.977 307.976 45.117 45.116 384.999 77.023-77.023-385-45.116-45.116ZM675.355 596.258l692.304 692.304-79.149 79.15-692.304-692.305 79.149-79.15ZM396.642 111.88c-14.33 0-28.547 5.374-39.519 16.345l-228.94 228.94c-21.718 21.718-21.718 57.318 0 79.149l153.038 153.037 308.089-308.09-153.037-153.036c-10.972-10.971-25.301-16.345-39.63-16.345Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EditPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Edit,
+ contentDescription = "Edit",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Educators.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Educators.kt
new file mode 100644
index 0000000000..8305cf85b0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Educators.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Educators: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Educators",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M640.376 790.588c38.852 0 55.68 15.586 83.577 41.337 32.866 30.155 77.816 71.604 161.506 71.604 60.31 0 100.066-22.023 129.882-45.628-5.873 150.55-129.205 271.51-281.223 271.51-139.483 0-255.022-101.985-277.61-235.143 45.403-13.666 75.67-40.433 98.937-62.004 28.235-25.977 45.29-41.676 84.931-41.676ZM1920-.012V1129.4h-338.824v-112.94h225.883V112.93H112.94v903.53h112.941v112.94H0V-.01h1920ZM734.118 451.766c148.404 0 269.138 115.539 280.207 261.233-17.393 11.633-32.753 24.17-45.967 36.367-27.784 25.75-44.386 41.223-82.9 41.223-39.642 0-56.696-15.699-84.93-41.675-32.528-30.042-77.253-71.266-160.152-71.266-83.689 0-128.64 41.45-161.505 71.605-9.94 9.148-18.523 16.49-27.106 22.814v-37.948c0-155.633 126.607-282.353 282.353-282.353Zm737.731 262.475-310.136 826.955c-217.412 22.589-482.598 24.621-638.57-32.3l-38.851 106.164c232.659 84.932 614.852 48.339 747.332 39.755l7.115 2.71 1.242-3.275c.678 0 1.92-.113 2.71-.113l-31.849 87.078c-4.404 12.31-14.57 21.12-27.67 24.057-117.46 26.993-277.045 41.788-449.054 41.788-171.784 0-346.617-32.64-508.236-94.645V1459.2c0-75.67 50.598-142.758 123.22-163.426 123.896-35.35 251.406-53.76 382.192-53.647.904 0 1.807.226 2.824.226.564 0 1.016-.113 1.58-.113 126.27.452 255.474 17.958 387.502 54.664l37.045-106.617-14.683-4.63c-53.534-14.796-107.746-25.638-161.844-34.673 88.094-72.509 145.694-181.045 145.694-303.925V734.118c0-217.977-177.318-395.294-395.294-395.294-217.977 0-395.294 177.317-395.294 395.294v112.94c0 122.655 57.374 231.078 145.355 303.7-56.019 9.26-111.586 20.894-166.024 36.367-120.847 34.334-205.214 146.259-205.214 272.075v328.998l34.899 14.57C332.386 1879.453 535.228 1920 734.118 1920c180.367 0 348.762-15.812 474.24-44.612 50.371-11.633 90.917-47.096 108.536-95.322l31.85-87.078c14.343-39.303 7.567-82.22-18.41-114.748-12.988-16.376-29.59-28.687-48.226-36.254l295.454-787.99-105.713-39.756Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EducatorsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Educators,
+ contentDescription = "Educators",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ElevateLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ElevateLogo.kt
new file mode 100644
index 0000000000..d5f74bc494
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ElevateLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ElevateLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ElevateLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1070.45 53.9152C1104.97 88.4365 1124.36 135.258 1124.36 184.078L1123.51 1188.09C1123.74 1229.1 1110.25 1269.01 1085.18 1301.47 1060.11 1333.93 1024.9 1357.08 985.16 1367.22 945.419 1377.35 903.428 1373.91 865.87 1357.43 828.312 1340.95 797.346 1312.38 777.899 1276.28 763.314 1249.19 755.85 1218.85 756.21 1188.09V184.078C756.21 135.258 775.603 88.4365 810.124 53.9152 844.646 19.3939 891.467 0 940.288 0 989.108 0 1035.93 19.3939 1070.45 53.9152ZM161.091 1320.33C194.624 1353.7 240.009 1372.44 287.319 1372.44 310.767 1372.44 333.985 1367.81 355.644 1358.83 377.304 1349.85 396.98 1336.69 413.547 1320.1 430.113 1303.5 443.246 1283.8 452.193 1262.13 461.141 1240.45 465.726 1217.23 465.689 1193.78L463.406 359.01 106.666 741.15 108.378 1194.35C108.605 1241.67 127.558 1286.96 161.091 1320.33ZM1592.41 1372.44C1639.74 1372.51 1685.17 1353.81 1718.72 1320.42 1752.27 1287.02 1771.2 1241.69 1771.35 1194.35L1773.06 741.15 1416.33 359.01 1414.32 1193.78C1414.29 1217.21 1418.87 1240.41 1427.79 1262.06 1436.72 1283.71 1449.83 1303.41 1466.37 1319.99 1482.9 1336.58 1502.55 1349.75 1524.17 1358.75 1545.8 1367.75 1568.99 1372.4 1592.41 1372.44ZM1123.46 1752.39C1126.77 1716.09 1119.25 1679.61 1101.83 1647.56 1090.29 1626.27 1074.66 1607.47 1055.85 1592.22 1037.03 1576.97 1015.39 1565.59 992.163 1558.73 968.939 1551.86 944.588 1549.64 920.506 1552.2 896.423 1554.76 873.083 1562.05 851.822 1573.65 819.782 1591.06 793.627 1617.59 776.661 1649.87 759.697 1682.14 752.685 1718.73 756.513 1754.99 760.341 1791.25 774.837 1825.57 798.168 1853.59 821.499 1881.62 852.616 1902.09 887.585 1912.44 922.554 1922.77 959.804 1922.51 994.623 1911.68 1029.44 1900.84 1060.27 1879.94 1083.2 1851.58 1106.13 1823.23 1120.14 1788.71 1123.46 1752.39Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ElevateLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ElevateLogo,
+ contentDescription = "ElevateLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Email.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Email.kt
new file mode 100644
index 0000000000..4ce76578d0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Email.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Email: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Email",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1694.235h1920V226H0v1468.235ZM112.941 376.664V338.94H1807.06v37.723L960 1111.233l-847.059-734.57ZM1807.06 526.198v950.513l-351.134-438.89-88.32 70.475 378.353 472.998H174.042l378.353-472.998-88.32-70.475-351.134 438.89V526.198L960 1260.768l847.059-734.57Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EmailPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Email,
+ contentDescription = "Email",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Empty.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Empty.kt
new file mode 100644
index 0000000000..177487ff32
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Empty.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Empty: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Empty",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EmptyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Empty,
+ contentDescription = "Empty",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/End.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/End.kt
new file mode 100644
index 0000000000..0a01dda58d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/End.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.End: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.End",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M954.64 826.418 426.667 298.445 298.445 426.667 826.418 954.64l-527.973 527.973 128.222 128.222 527.973-527.973 527.973 527.973 128.222-128.222-527.973-527.973 527.973-527.973-128.222-128.222z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.End,
+ contentDescription = "End",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Eportfolio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Eportfolio.kt
new file mode 100644
index 0000000000..0e425ae549
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Eportfolio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Eportfolio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Eportfolio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1653.333 1707H266.667c-88.214 0-160-71.787-160-160V960.333H640v213.334h640V960.333h533.333V1547c0 88.213-71.786 160-160 160Zm-906.666-640h426.666V853.667H746.667V1067Zm-480-533.333h1386.666c88.214 0 160 71.786 160 160v160H1280V747H640v106.667H106.667v-160c0-88.214 71.786-160 160-160Zm480-266.667c0-29.44 23.893-53.333 53.333-53.333h320c29.44 0 53.333 23.893 53.333 53.333v160H746.667V267Zm906.666 160H1280V267c0-88.213-71.787-160-160-160H800c-88.213 0-160 71.787-160 160v160H266.667C119.68 427 0 546.68 0 693.667V1547c0 146.987 119.68 266.667 266.667 266.667h1386.666c146.987 0 266.667-119.68 266.667-266.667V693.667C1920 546.68 1800.32 427 1653.333 427Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EportfolioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Eportfolio,
+ contentDescription = "Eportfolio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Equation.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Equation.kt
new file mode 100644
index 0000000000..ef05d20f7d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Equation.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Equation: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Equation",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 260v112.941h-871.567L558.494 1660.696l-106.503-2.371-207.247-627.276H0V918.11h285.515l53.647 38.738 170.203 515.125L956.612 296.367 1009.468 260H1920Zm-133.982 603.219 79.85 79.962-280.208 279.981 280.207 280.207-79.85 79.737-280.206-280.094-279.981 280.094-79.85-79.737 280.094-280.207-280.094-279.98 79.85-79.963 279.98 280.094 280.208-280.094Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EquationPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Equation,
+ contentDescription = "Equation",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Equella.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Equella.kt
new file mode 100644
index 0000000000..ef20ff1f81
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Equella.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Equella: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Equella",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M880.722 1814.601c1.569-8.451 10.381-15.333 19.676-15.333h74.482c9.174 0 15.21 6.882 13.52 15.333l-14.486 70.507c-1.69 8.452-10.502 15.454-19.797 15.454h-74.602c-9.054 0-15.09-7.002-13.28-15.454l14.487-70.507ZM161.62 1834.16c1.69-8.452 10.503-15.454 19.677-15.454h74.602c9.174 0 15.21 7.002 13.279 15.454l-14.245 70.507c-1.81 8.451-10.623 15.333-19.797 15.333h-74.481c-9.175 0-15.21-6.882-13.52-15.333l14.485-70.507ZM133.01 591.828c1.69-8.451 10.503-15.454 19.677-15.454h74.482c9.174 0 15.21 7.003 13.279 15.454l-14.245 70.507c-1.931 8.452-10.864 15.333-19.918 15.333h-74.481c-9.175 0-15.21-6.881-13.52-15.333l14.485-70.507h.242ZM632.049 15.333C633.858 6.882 642.671 0 651.845 0h74.482c9.295 0 15.33 7.002 13.64 15.333l-14.485 70.628c-1.69 8.451-10.623 15.454-19.798 15.454h-74.602c-9.174 0-15.21-7.244-13.278-15.454l14.244-70.628Zm784.167 0C1417.905 6.882 1426.717 0 1435.892 0h74.481c9.174 0 15.21 7.002 13.279 15.333l-14.245 70.628c-1.81 8.451-10.623 15.333-19.918 15.333h-74.481c-9.174 0-15.21-7.244-13.52-15.454l14.486-70.628.241.121ZM932.63 397.208c1.932-8.693 10.865-15.695 19.918-15.695h74.482c9.174 0 15.21 7.244 13.52 15.695l-14.486 70.387c-1.69 8.451-10.502 15.333-19.797 15.333h-74.482c-9.174 0-15.09-6.882-13.278-15.333l14.244-70.508-.12.121Zm-209.2-140.411c1.811-8.451 10.865-15.212 19.677-15.212h132.546c9.174 0 15.09 7.002 13.278 15.333l-25.108 125.078c-1.811 8.451-10.865 15.212-19.798 15.212H711.237c-9.053 0-15.089-6.882-13.278-15.212l25.35-125.2h.12ZM383.375 1479.57c1.811-8.451 10.865-15.212 19.677-15.212h132.425c9.295 0 15.21 6.76 13.52 15.091l-25.592 125.2c-1.69 8.45-10.623 15.211-19.556 15.211H371.062c-8.933 0-14.97-6.881-13.28-15.212l25.592-125.199v.12Zm535.615 128.58c1.81-8.452 10.864-15.334 19.676-15.334h132.546c9.174 0 15.089 6.882 13.278 15.213l-25.35 125.199c-1.81 8.45-10.864 15.091-19.797 15.091H906.796c-9.053 0-15.09-6.882-13.278-15.091l25.35-125.32.12.241Zm348.988-97.793c5.19-25.354 31.627-45.879 58.909-45.879h207.268c27.402 0 45.389 20.525 40.198 45.879l-40.077 196.068c-5.191 25.354-31.748 45.878-59.15 45.878h-206.907c-27.402 0-45.389-20.283-40.077-45.878l40.077-196.068h-.241Zm-964.275-467.233c5.191-25.354 31.628-46.12 58.91-46.12H569.88c27.402 0 45.389 20.525 40.198 45.878L570 1239.192c-5.19 25.354-31.748 45.879-59.15 45.879H303.702c-27.281 0-45.389-20.525-40.077-45.878l40.077-196.07Zm66.394-405.176c5.07-25.354 31.386-45.879 58.909-45.879h207.147c27.403 0 45.39 20.525 40.199 45.879l-40.078 196.31c-5.19 25.353-31.748 45.878-59.15 45.878H370.096c-27.403 0-45.51-20.525-40.198-45.878l40.077-196.31h.12ZM1496.61 240.86c5.191-25.353 31.749-45.878 59.151-45.878h207.148c27.402 0 45.389 20.525 40.198 45.878l-39.957 196.19c-5.19 25.353-31.627 45.878-58.91 45.878h-207.267c-27.403 0-45.39-20.525-40.199-45.878l40.078-196.19h-.242ZM855.613 699.038c12.071-59.159 73.878-107.09 137.857-107.09h629.651c63.98 0 106.23 47.931 94.158 107.21l-121.922 595.813c-12.072 59.158-73.878 107.21-137.857 107.21H827.848c-63.979 0-106.23-47.93-94.158-107.21l121.923-595.692v-.241Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EquellaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Equella,
+ contentDescription = "Equella",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Essay.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Essay.kt
new file mode 100644
index 0000000000..d2102daf2c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Essay.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Essay: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Essay",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1131.004 223.523v113.1H113.1V1806.93h1470.306v-339.301h113.1v452.402H0V223.523h1131.004ZM1831.096 3l19.227 52.026c30.537 80.188 50.895 167.389 61.074 256.738l-73.515 48.633s38.454 11.31 79.17 22.62c9.048 134.59-3.393 270.31-28.275 392.459v1.13l-97.266 23.752s34.462 23.932 69.92 48.898l3.47 2.445c1.929 1.359 3.857 2.719 5.78 4.076-20.358 76.908-45.24 147.03-74.646 205.843-21.49 42.978-54.289 92.742-99.529 136.851-31.668 31.669-70.122 59.944-113.1 82.564-52.026 27.144-111.97 44.109-180.96 44.109-46.372 0-96.136-7.917-149.293-26.013l-105.184 213.76-95.004 59.943-6.786-110.839 104.052-211.497c-88.218-50.896-149.292-118.756-180.96-203.581-50.896-141.376-1.131-277.096 22.62-332.515l98.397 3.393s-30.537-38.454-58.812-74.647c57.681-98.397 144.768-206.973 249.952-306.502 0 0 72.384-70.122 131.196-113.1 111.97-85.956 237.511-158.34 366.446-202.45L1831.096 3ZM410.26 1181.19c46.032-8.935 113.214 2.149 175.532 106.653 9.048 15.156 17.757 30.877 26.466 46.258 24.09 43.431 57.116 102.809 80.867 104.731 7.351.905 43.543-2.262 124.862-105.183 19.454-24.656 55.08-28.614 79.51-9.274 24.43 19.34 28.614 54.967 9.274 79.396-80.64 101.904-146.465 148.275-211.61 148.275-3.62 0-7.352-.113-11.198-.452-84.146-6.9-128.03-85.957-170.555-162.526-8.143-14.477-16.286-29.067-24.769-43.317-23.977-40.264-45.466-55.985-56.324-53.61-28.388 5.655-77.474 80.867-95.91 207.2-4.636 30.877-34.382 52.366-64.127 47.842-30.99-4.524-52.252-33.252-47.842-64.128 19.228-131.875 78.153-280.376 185.824-301.865ZM1763.236 147.769c-50.896 21.489-100.66 46.37-149.293 75.777-55.42 33.93-109.707 71.253-160.603 113.1-11.31 9.048-21.489 19.227-32.799 29.406l64.468 119.887-133.459-58.812c-82.563 78.039-150.424 160.49-201.319 239.772l71.254 142.507-136.852-16.965c-22.62 63.336-35.061 142.506-7.917 216.022 20.358 57.681 62.205 104.052 123.28 141.375l203.58-408.292c13.572-28.275 47.502-39.585 75.777-26.013 28.276 14.703 39.586 47.502 26.014 75.777l-201.32 404.9c122.15 36.192 214.892 1.13 279.359-49.765 67.86-53.157 104.052-121.017 110.838-135.72 1.131-2.262 2.262-3.393 2.262-5.655 20.358-41.847 37.323-90.48 53.158-141.376-39.586-28.275-130.066-92.742-130.066-92.742l161.734-39.585c18.096-99.529 27.144-206.974 22.62-313.402-15.077-5.925-34.5-13.611-54.128-21.397l-5.7-2.261a60945.32 60945.32 0 0 1-82.679-32.892l131.197-67.747c-6.786-49.764-15.834-99.528-29.406-145.9Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EssayPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Essay,
+ contentDescription = "Essay",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExitFullScreen.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExitFullScreen.kt
new file mode 100644
index 0000000000..2f2a605394
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExitFullScreen.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ExitFullScreen: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ExitFullScreen",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M876.612 1043.388v710.171H761.27v-513.28L81.663 1920 0 1838.337l679.72-679.606H166.442v-115.343h710.171ZM1838.394 0l81.548 81.548-679.605 679.72h513.28v115.344h-710.172V166.441h115.344v513.164L1838.394 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExitFullScreenPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ExitFullScreen,
+ contentDescription = "ExitFullScreen",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Expand.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Expand.kt
new file mode 100644
index 0000000000..190cf1b04a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Expand.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Expand: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Expand",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1694.176v112.942H0v-112.942h1920ZM1750.588 113C1843.991 113 1920 189.01 1920 282.412v1185.882h-112.941V282.412c0-31.06-25.412-56.47-56.47-56.47H169.411c-31.06 0-56.47 25.41-56.47 56.47v1185.882H0V282.412C0 189.009 76.01 113 169.412 113h1581.176ZM960 484.915l378.805 378.692-79.963 79.962-242.371-242.484v654.268H903.529V701.085L661.158 943.569l-79.963-79.962L960 484.915Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Expand,
+ contentDescription = "Expand",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandItems.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandItems.kt
new file mode 100644
index 0000000000..fc5aadccd5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandItems.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ExpandItems: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ExpandItems",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.182.012 451 509.193l82.7 82.817 368.112-368.113v1472.217L533.7 1328.12l-82.7 82.7L960.182 1920l509.181-509.182-82.582-82.7-368.113 367.996V223.897l368.113 368.113 82.582-82.817z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandItemsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ExpandItems,
+ contentDescription = "ExpandItems",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandLeft.kt
new file mode 100644
index 0000000000..dcdafa64a5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ExpandLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ExpandLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.294 0v112.941H282.412c-31.204 0-56.47 25.25-56.47 56.47v1581.177c0 31.221 25.266 56.47 56.47 56.47h1185.882V1920H282.412C188.85 1920 113 1844.202 113 1750.588V169.412C113 75.798 188.85 0 282.412 0h1185.882Zm338.824 0v1920h-112.942V0h112.942Zm-943.46 581.246 79.861 79.861L701.096 903.53h654.257v112.942l-654.256-.001 242.422 242.423-79.862 79.861L484.903 960l378.754-378.754Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ExpandLeft,
+ contentDescription = "ExpandLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandStart.kt
new file mode 100644
index 0000000000..d5fd932434
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExpandStart.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ExpandStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ExpandStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M451.823 1807.059h1185.883c31.203 0 56.47-25.25 56.47-56.47V169.411c0-31.221-25.267-56.47-56.47-56.47H451.823V0h1185.883c93.561 0 169.411 75.798 169.411 169.412v1581.176c0 93.614-75.85 169.412-169.411 169.412H451.823v-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.NonZero,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M225.941 0v1920h112.941V0zm993.081 1016.47H564.76V903.53h654.262L976.6 661.106l79.861-79.861L1435.216 960l-378.755 378.754-79.861-79.861z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ExpandStart,
+ contentDescription = "ExpandStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Export.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Export.kt
new file mode 100644
index 0000000000..8d1b3fb1c6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Export.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Export: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Export",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m0 1016.081 409.186 409.073 79.85-79.736-272.867-272.979h1136.415V959.611H216.169l272.866-272.866-79.85-79.85L0 1016.082ZM1465.592 305.32l315.445 315.445h-315.445V305.32Zm402.184 242.372-329.224-329.11C1507.042 187.07 1463.334 169 1418.835 169h-743.83v677.647h112.94V281.941h564.706v451.765h451.765v903.53H787.946V1185.47H675.003v564.705h1242.353V667.522c0-44.498-18.07-88.207-49.581-119.83Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Export,
+ contentDescription = "Export",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExportContent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExportContent.kt
new file mode 100644
index 0000000000..f8e7d04814
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExportContent.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ExportContent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ExportContent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m0 1016.081 409.186 409.073 79.85-79.736-272.867-272.979h1136.415V959.611H216.169l272.866-272.866-79.85-79.85L0 1016.082ZM1465.592 305.32l315.445 315.445h-315.445V305.32Zm402.184 242.372-329.224-329.11C1507.042 187.07 1463.334 169 1418.835 169h-743.83v677.647h112.94V281.941h564.706v451.765h451.765v903.53H787.946V1185.47H675.003v564.705h1242.353V667.522c0-44.498-18.07-88.207-49.581-119.83Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExportContentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ExportContent,
+ contentDescription = "ExportContent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExternalLink.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExternalLink.kt
new file mode 100644
index 0000000000..fc646dda3f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ExternalLink.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ExternalLink: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ExternalLink",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1226.667 267c88.213 0 160 71.787 160 160v426.667H1280v-160H106.667v800C106.667 1523 130.56 1547 160 1547h1066.667c29.44 0 53.333-24 53.333-53.333v-213.334h106.667v213.334c0 88.213-71.787 160-160 160H160c-88.213 0-160-71.787-160-160V427c0-88.213 71.787-160 160-160Zm357.706 442.293 320 320c20.8 20.8 20.8 54.614 0 75.414l-320 320-75.413-75.414 228.907-228.906H906.613V1013.72h831.254L1508.96 784.707l75.413-75.414Zm-357.706-335.626H160c-29.44 0-53.333 24-53.333 53.333v160H1280V427c0-29.333-23.893-53.333-53.333-53.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExternalLinkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ExternalLink,
+ contentDescription = "ExternalLink",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Eye.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Eye.kt
new file mode 100644
index 0000000000..d3ec0316ab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Eye.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Eye: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Eye",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1489.82c-348.474 0-668.545-202.323-841.298-529.918C291.455 632.306 611.526 429.984 960 429.984s668.545 202.322 841.298 529.918C1628.545 1287.497 1308.474 1489.82 960 1489.82Zm948.342-553.552C1720.645 558.648 1357.332 324 960 324c-397.333 0-760.645 234.648-948.342 612.268L0 959.902l11.658 23.634c187.697 377.62 551.01 612.268 948.342 612.268 397.333 0 760.645-234.648 948.342-612.268L1920 959.902l-11.658-23.634ZM960 1171.869c-116.9 0-211.967-95.067-211.967-211.967 0-116.9 95.067-211.967 211.967-211.967 116.9 0 211.967 95.067 211.967 211.967 0 116.9-95.067 211.967-211.967 211.967m0-529.918c-175.297 0-317.951 142.654-317.951 317.951 0 175.297 142.654 317.95 317.951 317.95 175.297 0 317.951-142.653 317.951-317.95S1135.297 641.951 960 641.951"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EyePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Eye,
+ contentDescription = "Eye",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Facebook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Facebook.kt
new file mode 100644
index 0000000000..521ed6d56c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Facebook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Facebook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Facebook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1416.013 791.915-30.91 225.617h-371.252v789.66H788.234v-789.66H449.808V791.915h338.426V585.137c0-286.871 176.207-472.329 449.09-472.329 116.87 0 189.744 6.205 231.822 11.845l-3.272 213.66-173.5.338c-4.737-.451-117.771-9.25-199.332 65.655-52.568 48.169-79.191 117.433-79.191 205.65v181.96h402.162Zm-247.276-304.018c44.446-41.401 113.71-36.889 118.787-36.663l289.467-.113 6.204-417.504-43.544-10.717C1511.675 16.02 1426.053 0 1237.324 0 901.268 0 675.425 235.206 675.425 585.137v93.97H337v451.234h338.425V1920h451.234v-789.66h356.7l61.932-451.233H1126.66v-69.152c0-54.937 14.214-96 42.078-122.058Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FacebookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Facebook,
+ contentDescription = "Facebook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FacebookBoxed.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FacebookBoxed.kt
new file mode 100644
index 0000000000..cb69543949
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FacebookBoxed.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FacebookBoxed: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FacebookBoxed",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1416.013 791.915-30.91 225.617h-371.252v789.66H788.234v-789.66H449.808V791.915h338.426V585.137c0-286.871 176.207-472.329 449.09-472.329 116.87 0 189.744 6.205 231.822 11.845l-3.272 213.66-173.5.338c-4.737-.451-117.771-9.25-199.332 65.655-52.568 48.169-79.191 117.433-79.191 205.65v181.96h402.162Zm-247.276-304.018c44.446-41.401 113.71-36.889 118.787-36.663l289.467-.113 6.204-417.504-43.544-10.717C1511.675 16.02 1426.053 0 1237.324 0 901.268 0 675.425 235.206 675.425 585.137v93.97H337v451.234h338.425V1920h451.234v-789.66h356.7l61.932-451.233H1126.66v-69.152c0-54.937 14.214-96 42.078-122.058Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FacebookBoxedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FacebookBoxed,
+ contentDescription = "FacebookBoxed",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FastForward.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FastForward.kt
new file mode 100644
index 0000000000..efc14b703f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FastForward.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FastForward: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FastForward",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M855.281 308.99v522.256L0 309.524v1300.242l855.281-521.83V1610.3l1064.612-650.655L855.281 308.989Zm106.91 190.62 752.755 460.035-752.754 460.034V499.61Zm-855.28.32 748.37 456.507v6.308l-748.37 456.507V499.93Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FastForwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FastForward,
+ contentDescription = "FastForward",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Feedback.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Feedback.kt
new file mode 100644
index 0000000000..1ebec2b9fc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Feedback.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Feedback: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Feedback",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M84 0v1423.143h437.875V1920l621.235-496.857h692.39V0H84Zm109.469 109.464H1726.03V1313.57h-621.235l-473.452 378.746V1313.57H193.469V109.464Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FeedbackPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Feedback,
+ contentDescription = "Feedback",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FileLocked.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FileLocked.kt
new file mode 100644
index 0000000000..e169b22b30
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FileLocked.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FileLocked: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FileLocked",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m764.34 56 225.883 338.824h929.732v564.705h-112.941V507.765H225.837V394.824h628.63L703.918 168.94H112.896v1411.765c0 31.172 25.412 56.47 56.47 56.47h957.742v112.942H169.367c-93.403 0-169.412-76.01-169.412-169.412V56H764.34Zm1042.72 1355.294v282.353c0 31.172-25.412 56.47-56.47 56.47h-338.824c-31.06 0-56.47-25.298-56.47-56.47v-282.353h451.764Zm-225.883-338.823c62.344 0 112.942 50.71 112.942 112.94v112.942h-225.883v-112.941c0-62.23 50.598-112.941 112.941-112.941Zm225.883 112.94c0-124.573-101.308-225.882-225.883-225.882-124.574 0-225.882 101.309-225.882 225.883v112.94h-112.941v395.295c0 93.402 76.01 169.412 169.412 169.412h338.823c93.403 0 169.412-76.01 169.412-169.412v-395.294H1807.06v-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FileLockedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FileLocked,
+ contentDescription = "FileLocked",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesCopyright.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesCopyright.kt
new file mode 100644
index 0000000000..f50f5c11e5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesCopyright.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FilesCopyright: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FilesCopyright",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm9.118 620.06c90.587-.06 155.402 35.788 194.567 106.071h.06l-97.941 51.144c-10.523-21.784-23.319-37.07-38.507-45.807-15.307-8.738-29.418-13.106-42.453-13.106-65.294 0-98 43.209-98 129.686 0 39.32 8.31 70.738 24.814 94.317 16.503 23.64 40.898 35.429 73.186 35.429 42.573 0 72.648-20.946 90.048-62.898l90.108 45.842c-19.133 35.847-45.681 64.034-79.644 84.5-33.962 20.588-71.392 30.821-112.351 30.821-65.293 0-117.911-20.11-157.972-60.327C775.03 1088.576 755 1032.676 755 961.04c0-69.9 20.21-125.386 60.75-166.38C856.17 753.544 907.353 733 969.118 733Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesCopyrightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FilesCopyright,
+ contentDescription = "FilesCopyright",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesCreativeCommons.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesCreativeCommons.kt
new file mode 100644
index 0000000000..afb1bd7777
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesCreativeCommons.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FilesCreativeCommons: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FilesCreativeCommons",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059ZM760.808 727c92.101-.046 158.033 35.78 197.89 107.502l-.046.023-99.63 51.81c-10.645-22.117-23.706-37.638-39.16-46.466-15.502-8.83-29.888-13.29-43.181-13.29-66.374 0-99.608 43.796-99.608 131.432 0 39.823 8.436 71.653 25.24 95.56 16.825 23.931 41.6 35.873 74.368 35.873 43.412 0 73.95-21.282 91.683-63.753L960 1072.158c-19.475 36.314-46.48 64.822-81.015 85.64-34.49 20.817-72.58 31.202-114.203 31.202-66.397 0-119.99-20.33-160.707-61.104C563.36 1087.236 543 1030.547 543 958.01c0-70.815 20.59-126.994 61.75-168.606C645.885 747.817 697.943 727 760.808 727Zm430.024 0c92.088-.046 157.656 35.781 196.588 107.507l-98.317 51.812c-10.599-22.119-23.708-37.64-39.165-46.468-15.573-8.83-30.401-13.29-44.51-13.29-66.404 0-99.641 43.796-99.641 131.436 0 39.825 8.436 71.656 25.241 95.564 16.805 23.932 41.605 35.874 74.377 35.874 43.372 0 73.912-21.283 91.623-63.755l92.972 46.468c-20.338 36.316-47.81 64.825-82.28 85.643a214.414 214.414 0 0 1-112.913 31.204c-67.312 0-121.095-20.33-161.306-61.107-40.372-40.66-60.501-97.352-60.501-169.89 0-70.82 20.57-127 61.78-168.613 41.163-41.567 93.157-62.385 156.052-62.385Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesCreativeCommonsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FilesCreativeCommons,
+ contentDescription = "FilesCreativeCommons",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesFairUse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesFairUse.kt
new file mode 100644
index 0000000000..d1a412c2ce
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesFairUse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FilesFairUse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FilesFairUse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059ZM1113 721v84.047H893.112v105.506h190.39v77.788h-190.39V1177H793V721h320Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesFairUsePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FilesFairUse,
+ contentDescription = "FilesFairUse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesObtainedPermission.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesObtainedPermission.kt
new file mode 100644
index 0000000000..5f8cf4ef3a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesObtainedPermission.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FilesObtainedPermission: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FilesObtainedPermission",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm-167.463 643.25c8.007-8.051 19.014-12.934 30.371-12.099h273.303c11.09 0 21.017 3.892 29.734 12.1 8.65 8.207 13.055 17.932 13.055 29.623v268.056h-75.974V1372H855.974v-318.129H780V785.815c0-11.712 4.242-21.438 12.537-29.624ZM960.023 525c62.023 0 92.977 30.837 92.977 92.556 0 60.962-31 91.444-92.978 91.444C898.044 709 867 678.518 867 617.577v-.044C867 555.881 898 525 960.023 525Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesObtainedPermissionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FilesObtainedPermission,
+ contentDescription = "FilesObtainedPermission",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesPublicDomain.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesPublicDomain.kt
new file mode 100644
index 0000000000..5940fb1660
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FilesPublicDomain.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FilesPublicDomain: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FilesPublicDomain",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059ZM800.157 711C913.347 711 970 762.572 970 865.418c0 17.658-2.726 34.752-8.177 50.905-5.45 16.153-14.907 32.355-28.312 48.563-13.405 16.152-33.513 29.48-60.35 39.756-26.782 10.22-58.57 15.6-95.31 15.6H687.2V1167H571V711ZM686 797v138h99.1c23.94 0 41.9-6.51 53.911-19.733C851.021 902.043 857 885.923 857 866.283c0-46.114-24.944-68.845-74.86-68.845h-95.753L686 797Zm496.205-86c73.564 0 131.301 18.77 173.154 55.976C1397.101 804.182 1418 861.64 1418 938.978c0 77.421-20.899 134.908-62.64 172.059-41.854 37.206-99.563 55.963-173.155 55.963h-179.171l-.034-.279V711ZM1118 806l.185.027V1072h66.635c40.731 0 70.258-12.192 88.635-36.362 18.35-24.115 27.545-56.367 27.545-96.706 0-40.34-9.155-72.619-27.505-96.762-18.35-24.057-48.338-36.087-90.043-36.087L1118 806Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesPublicDomainPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FilesPublicDomain,
+ contentDescription = "FilesPublicDomain",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Filmstrip.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Filmstrip.kt
new file mode 100644
index 0000000000..5d610c1e63
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Filmstrip.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Filmstrip: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Filmstrip",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1813.333 1557.195c-557.76 126.826-1148.48 126.826-1706.666 0V468.448c557.76-126.827 1148.48-126.933 1706.666 0v1088.747ZM1879.04 374.26c-600.32-143.573-1238.4-143.466-1838.08 0L0 384.075v1257.493l40.96 9.813c300.053 71.787 609.28 108.054 919.04 108.054 309.867 0 619.2-36.267 919.04-108.054l40.96-9.813V384.075l-40.96-9.814ZM853.333 786.987l376.32 225.813-376.32 225.813V786.987Zm-106.666 640 690.346-414.187-690.346-414.187v828.374Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilmstripPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Filmstrip,
+ contentDescription = "Filmstrip",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Filter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Filter.kt
new file mode 100644
index 0000000000..7e5fea923e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Filter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Filter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Filter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m0 .011 741.97 984.808v673.566l502.665 251.332V984.82l675.332-896.544-88.154-66.308-697.508 925.891v783.345L852.301 1590.2V947.858L221.322 110.341h1262.289V.011z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Filter,
+ contentDescription = "Filter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Flag.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Flag.kt
new file mode 100644
index 0000000000..f1efeff0f7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Flag.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Flag: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Flag",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1848.715 357.685c-13.891-15.586-35.35-22.137-55.793-17.167-419.802 105.035-630.324-19.087-833.844-139.03C756.46 82.333 547.52-40.66 168.94 103.905V0H56v1920h112.941V227.012c352.941-148.97 522.127-52.292 732.763 71.83 195.84 115.313 415.849 245.083 811.82 174.156-170.88 375.53-385.92 382.87-652.912 392.131-233.788 8.02-498.748 17.28-762.24 280.772l79.85 79.963c232.093-232.095 463.058-240 686.343-247.906 290.823-10.052 591.473-20.443 794.88-562.786 7.34-19.652 3.275-41.788-10.73-57.487"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FlagPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Flag,
+ contentDescription = "Flag",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Folder.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Folder.kt
new file mode 100644
index 0000000000..861693b895
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Folder.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Folder: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Folder",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1807.059 1637.706c0 31.172-25.412 56.47-56.47 56.47H169.411c-31.06 0-56.47-25.298-56.47-56.47V225.94h590.907L854.4 451.824H225.882v112.94H1807.06v1072.942ZM990.269 451.824 764.385 113H0v1524.706c0 93.402 76.01 169.412 169.412 169.412h1581.176c93.403 0 169.412-76.01 169.412-169.412V451.824H990.268Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FolderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Folder,
+ contentDescription = "Folder",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FolderLocked.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FolderLocked.kt
new file mode 100644
index 0000000000..06f435ee1a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FolderLocked.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FolderLocked: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FolderLocked",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m764.34 56 225.883 338.824h929.732v564.705h-112.941V507.765H225.837V394.824h628.63L703.918 168.94H112.896v1411.765c0 31.172 25.412 56.47 56.47 56.47h957.742v112.942H169.367c-93.403 0-169.412-76.01-169.412-169.412V56H764.34Zm1042.72 1355.294v282.353c0 31.172-25.412 56.47-56.47 56.47h-338.824c-31.06 0-56.47-25.298-56.47-56.47v-282.353h451.764Zm-225.883-338.823c62.344 0 112.942 50.71 112.942 112.94v112.942h-225.883v-112.941c0-62.23 50.598-112.941 112.941-112.941Zm225.883 112.94c0-124.573-101.308-225.882-225.883-225.882-124.574 0-225.882 101.309-225.882 225.883v112.94h-112.941v395.295c0 93.402 76.01 169.412 169.412 169.412h338.823c93.403 0 169.412-76.01 169.412-169.412v-395.294H1807.06v-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FolderLockedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FolderLocked,
+ contentDescription = "FolderLocked",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Forward.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Forward.kt
new file mode 100644
index 0000000000..bb6c68657f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Forward.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Forward: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Forward",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1246.246 64-90.496 90.496 477.952 477.952h-590.848C467.878 632.448.038 1100.416.038 1675.392v109.056h128v-109.056c0-504.576 410.368-914.944 914.816-914.944h590.848l-477.952 478.08 90.496 90.496 632.448-632.576L1246.246 64Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ForwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Forward,
+ contentDescription = "Forward",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FullScreen.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FullScreen.kt
new file mode 100644
index 0000000000..dbd61dc236
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/FullScreen.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.FullScreen: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.FullScreen",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1158.513-.012v123.68h550.5L123.68 1708.878V1158.5H0V1920h761.5v-123.68H211.121l1585.21-1585.21v550.5h123.68V-.011z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FullScreenPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.FullScreen,
+ contentDescription = "FullScreen",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Github.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Github.kt
new file mode 100644
index 0000000000..fc1122d182
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Github.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Github: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Github",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1873.256 674.212c0-122.468-35.728-230.622-106.325-321.88 15.712-57.683 32.5-171.972-20.77-313.703-5.596-15.066-17.864-26.796-33.146-32.07-19.155-6.564-122.144-30.347-328.552 110.953-84.157-22.169-172.94-33.576-264.844-34.114-91.582.538-180.366 11.945-264.306 34.114C648.689-23.68 545.7-.005 526.437 6.56c-15.282 5.165-27.55 17.003-33.146 32.177-53.162 141.623-36.374 255.912-20.555 313.594-70.704 91.582-106.54 199.629-106.54 321.88 0 422.826 221.905 557.131 432.188 605.666-46.49 50.903-95.24 125.158-105.68 219.537-71.78 26.044-257.633 78.13-325.109-44.015-3.013-5.596-73.394-137.641-215.017-148.08-25.075 1.184-84.587 4.305-101.052 54.346-18.51 55.961 39.495 97.716 67.906 117.41.538.323 55.745 31.962 93.841 132.045.969 4.628 23.783 114.72 134.951 181.55 87.492 52.731 202.319 63.493 341.252 32.284 0 23.46-.323 48.212-.43 63.386l-.324 31.101H796.34l.215-29.81c1.937-161.532 2.045-164.653-30.778-181.656-12.484-6.457-27.012-7.964-40.356-3.659-136.243 41.002-246.98 40.033-320.052-2.798-70.488-41.54-85.985-108.908-88.89-119.67-3.875-10.653-8.072-20.662-12.269-30.24 126.987 145.713 372.138 77.161 463.289 33.792 18.833-8.825 30.778-27.765 30.778-48.535 0-149.372 148.295-244.182 149.802-245.15 19.371-12.16 28.949-35.19 23.998-57.36-4.95-22.276-23.352-39.065-46.06-41.755-223.626-26.796-452.204-109.338-452.204-518.388 0-106.325 33.577-198.983 99.76-275.175 12.915-15.067 16.681-36.052 9.579-54.562-9.793-25.397-36.482-112.782-.323-234.819 35.729 4.09 110.845 24.321 231.16 110.307 13.344 9.578 30.455 12.376 46.383 7.856 80.497-23.568 170.356-36.267 259.248-36.805 89.321.538 179.073 13.237 259.786 36.805 15.927 4.52 32.93 1.722 46.382-7.856 121.176-86.631 196.4-106.433 230.73-110.63 36.482 122.145 9.793 209.745 0 235.142-7.21 18.51-3.444 39.603 9.578 54.562 66.076 75.977 99.545 168.527 99.545 275.175 0 409.157-229.115 491.161-453.173 517.527-20.985 2.475-38.634 16.896-44.984 37.02-6.456 20.017-.538 42.078 15.067 56.284 6.35 5.703 14.958 12.483 25.074 20.231 51.333 39.28 137.211 105.034 137.211 259.571 0 85.448-1.399 354.273-1.399 354.273l107.617.539s1.399-269.257 1.399-354.812c0-141.838-56.499-229.976-110.845-285.937 210.39-48.427 431.65-182.517 431.65-604.696"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GithubPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Github,
+ contentDescription = "Github",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GiveAward.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GiveAward.kt
new file mode 100644
index 0000000000..80dd02d6d0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GiveAward.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.GiveAward: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.GiveAward",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1516.21 374.024L1360.64 0L1205.08 374.024L801.288 406.396L1108.93 669.927L1014.94 1063.96L1360.64 852.805L1706.34 1063.96L1612.35 669.927L1920 406.396L1516.21 374.024ZM1435.33 485.362L1360.66 305.831L1285.98 485.362L1092.16 500.901L1239.83 627.396L1194.72 816.531L1360.66 715.177L1526.59 816.531L1481.48 627.396L1629.15 500.901L1435.33 485.362Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 915.2H373.333C402.789 915.2 426.667 939.078 426.667 968.533V1012.91C454.891 1010.14 492.767 1010.71 543.323 1018.13C656.109 1034.68 706.358 1066.35 756.859 1098.17C780.491 1113.07 804.179 1128 834.356 1141.43C887.648 1165.14 1035.02 1193.38 1153.65 1213.54C1242.33 1228.6 1302.82 1312.35 1287.92 1400.37L1636.86 1218C1731.61 1168.48 1848.56 1205.15 1898.09 1299.9C1947.61 1394.65 1910.94 1511.61 1816.19 1561.13L1280.07 1841.33C1272.55 1845.26 1262.25 1850.82 1250.87 1856.96C1225.48 1870.66 1194.76 1887.23 1177.81 1894.96C1175.36 1896.08 1172.8 1897.37 1170.05 1898.75C1145.3 1911.17 1104.97 1931.4 984.215 1910.55L512.935 1791.11C477.124 1784.82 448.895 1778.62 426.667 1772.38V1818.67C426.667 1848.12 402.789 1872 373.333 1872H0V915.2ZM426.667 1659.63L572.651 1692.52L885.284 1771.76L1049.07 1801.95C1061.94 1805.22 1067.91 1804.99 1080.74 1804.51L1086.13 1804.31C1102.91 1803.75 1115.81 1795.93 1115.81 1795.93L1494.73 1603.45L1639.77 1528.96L1765.13 1463.44C1805.93 1442.12 1821.71 1391.76 1800.39 1350.96C1779.07 1310.16 1728.71 1294.38 1687.91 1315.7C1687.91 1315.7 1502.45 1412.67 1475.71 1426.61L1470.58 1429.3C1433.72 1448.73 1295.48 1521.59 1184.82 1530.22C1079.51 1538.43 828.201 1470.25 780.054 1456.83C778.82 1456.53 777.601 1456.19 776.399 1455.81L772.003 1454.57L772.074 1454.26C750.827 1445.63 735.844 1424.79 735.844 1400.45C735.844 1368.4 761.829 1342.41 793.882 1342.41C795.013 1342.41 796.136 1342.45 797.25 1342.51L797.518 1341.32L1100.97 1418.23L1120.72 1422.23C1147.45 1427.65 1173.51 1410.38 1178.92 1383.65C1184.45 1356.36 1165.85 1327.42 1135.19 1322.21C1075.17 1312.02 1006.9 1299.61 946.325 1286.59C901.723 1277 854.428 1265.7 817.427 1252.96L817.498 1252.64L787.7 1241.31C758.312 1228.1 734.4 1214.04 714.185 1201.52C707.317 1197.26 701.319 1193.48 695.8 1190C683.474 1182.23 673.53 1175.96 661.581 1169.27C633.089 1153.32 596.825 1137.39 527.322 1127.2C488.966 1121.57 444.919 1122.03 444.919 1122.03L426.667 1122.79V1659.63ZM106.667 1021.87H288C305.673 1021.87 320 1036.19 320 1053.87V1733.33C320 1751.01 305.673 1765.33 288 1765.33H106.667V1021.87Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GiveAwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.GiveAward,
+ contentDescription = "GiveAward",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Gradebook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Gradebook.kt
new file mode 100644
index 0000000000..8de2eb3e24
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Gradebook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Gradebook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Gradebook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1801.441 0v1920H219.03v-439.216h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.47 56.515-56.47h56.514V1029.02h-56.514c-31.196 0-56.515-25.3-56.515-56.471 0-31.172 25.319-56.47 56.515-56.47h56.514V577.254h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.471 56.515-56.471h56.514V0h1582.412Zm-113.03 112.941H332.06v351.373h56.515c31.196 0 56.514 25.299 56.514 56.47 0 31.172-25.318 56.47-56.514 56.47H332.06v338.824h56.515c31.196 0 56.514 25.3 56.514 56.471 0 31.172-25.318 56.47-56.514 56.47H332.06v338.824h56.515c31.196 0 56.514 25.299 56.514 56.47 0 31.172-25.318 56.471-56.514 56.471H332.06v326.275h1356.353V112.94Zm-508.803 225.883v112.94H671.373v677.648h677.647V734.118h112.94v508.235H558.432v-903.53h621.177Zm207.326 75.817 79.85 79.85-432.452 432.451-224.866-224.979 79.85-79.85 145.016 145.13 352.602-352.602Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GradebookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Gradebook,
+ contentDescription = "Gradebook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GradebookExport.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GradebookExport.kt
new file mode 100644
index 0000000000..7542428b32
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GradebookExport.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.GradebookExport: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.GradebookExport",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m0 1016.081 409.186 409.073 79.85-79.736-272.867-272.979h1136.415V959.611H216.169l272.866-272.866-79.85-79.85L0 1016.082ZM1465.592 305.32l315.445 315.445h-315.445V305.32Zm402.184 242.372-329.224-329.11C1507.042 187.07 1463.334 169 1418.835 169h-743.83v677.647h112.94V281.941h564.706v451.765h451.765v903.53H787.946V1185.47H675.003v564.705h1242.353V667.522c0-44.498-18.07-88.207-49.581-119.83Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GradebookExportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.GradebookExport,
+ contentDescription = "GradebookExport",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GradebookImport.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GradebookImport.kt
new file mode 100644
index 0000000000..303c68451d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GradebookImport.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.GradebookImport: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.GradebookImport",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m807.186 686.592 272.864 272.864H0v112.94h1080.05l-272.864 272.978 79.736 79.849 409.296-409.183-409.296-409.184-79.736 79.736ZM1870.419 434.69l-329.221-329.11C1509.688 74.07 1465.979 56 1421.48 56H451.773v730.612h112.94V168.941h790.584v451.762h451.762v1129.405H564.714v-508.233h-112.94v621.173H1920V554.52c0-45.176-17.619-87.754-49.58-119.83Zm-402.181-242.37 315.443 315.442h-315.443V192.319Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GradebookImportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.GradebookImport,
+ contentDescription = "GradebookImport",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GridView.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GridView.kt
new file mode 100644
index 0000000000..a9a551558b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GridView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.GridView: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.GridView",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 53.3333C0 23.8781 23.8781 0 53.3333 0H853.333C882.788 0 906.667 23.8781 906.667 53.3333V853.333C906.667 882.788 882.788 906.667 853.333 906.667H53.3333C23.8781 906.667 0 882.788 0 853.333V53.3333ZM106.667 149.333C106.667 125.769 125.769 106.667 149.333 106.667H757.333C780.897 106.667 800 125.769 800 149.333V757.333C800 780.897 780.897 800 757.333 800H149.333C125.769 800 106.667 780.897 106.667 757.333V149.333ZM0 1066.67C0 1037.21 23.8781 1013.33 53.3333 1013.33H853.333C882.788 1013.33 906.667 1037.21 906.667 1066.67V1866.67C906.667 1896.12 882.788 1920 853.333 1920H53.3333C23.8781 1920 0 1896.12 0 1866.67V1066.67ZM106.667 1162.67C106.667 1139.1 125.769 1120 149.333 1120H757.333C780.897 1120 800 1139.1 800 1162.67V1770.67C800 1794.23 780.897 1813.33 757.333 1813.33H149.333C125.769 1813.33 106.667 1794.23 106.667 1770.67V1162.67ZM1066.67 0C1037.21 0 1013.33 23.8781 1013.33 53.3333V853.333C1013.33 882.788 1037.21 906.667 1066.67 906.667H1866.67C1896.12 906.667 1920 882.788 1920 853.333V53.3333C1920 23.8781 1896.12 0 1866.67 0H1066.67ZM1162.67 106.667C1139.1 106.667 1120 125.769 1120 149.333V757.333C1120 780.897 1139.1 800 1162.67 800H1770.67C1794.23 800 1813.33 780.897 1813.33 757.333V149.333C1813.33 125.769 1794.23 106.667 1770.67 106.667H1162.67ZM1013.33 1066.67C1013.33 1037.21 1037.21 1013.33 1066.67 1013.33H1866.67C1896.12 1013.33 1920 1037.21 1920 1066.67V1866.67C1920 1896.12 1896.12 1920 1866.67 1920H1066.67C1037.21 1920 1013.33 1896.12 1013.33 1866.67V1066.67ZM1120 1162.67C1120 1139.1 1139.1 1120 1162.67 1120H1770.67C1794.23 1120 1813.33 1139.1 1813.33 1162.67V1770.67C1813.33 1794.23 1794.23 1813.33 1770.67 1813.33H1162.67C1139.1 1813.33 1120 1794.23 1120 1770.67V1162.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GridViewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.GridView,
+ contentDescription = "GridView",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Group.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Group.kt
new file mode 100644
index 0000000000..483738e2d3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Group.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Group: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Group",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1807.059 1270.091c-68.668 48.452-188.725 116.556-343.906 158.57-18.861-102.55-92.725-187.37-196.066-219.106-91.708-28.235-185.11-48.339-279.53-61.666 71.944-60.762 121.638-145.807 135.982-243.162 21.91-.791 44.837-1.243 71.04-1.243 166.023.904 331.143 26.316 490.955 75.445 72.621 22.362 121.525 87.755 121.525 162.861v128.301Zm-451.765 338.824c-114.183 80.753-330.24 198.099-621.176 198.099-129.43 0-379.144-26.203-621.177-198.1v-128.752c0-74.993 49.017-140.499 121.75-162.861 162.41-49.694 330.354-74.88 499.427-74.88h8.47c166.588.79 331.821 26.09 491.407 75.106 72.509 22.249 121.3 87.642 121.3 162.635v128.753Zm-903.53-761.901V734.072c0-155.632 126.608-282.352 282.354-282.352 155.746 0 282.353 126.72 282.353 282.352v112.942c0 155.746-126.607 282.353-282.353 282.353S451.765 1002.76 451.765 847.014Zm734.118-734.118c75.22 0 146.146 29.478 199.567 82.899 53.309 53.421 82.786 124.235 82.786 199.454V508.19c0 155.746-126.607 282.353-282.353 282.353-19.651 0-38.4-2.598-56.47-6.438v-50.033c0-156.423-92.047-290.71-224.188-354.748 8.357-148.066 130.447-266.428 280.658-266.428Zm532.857 758.061c-91.37-28.01-184.546-48.226-279.755-61.666 86.174-72.508 142.192-179.802 142.192-301.1V395.248c0-105.374-41.11-204.65-115.877-279.304-74.767-74.767-173.93-115.99-279.417-115.99-200.696 0-365.138 151.002-390.211 345.148-20.217-3.275-40.433-6.325-61.553-6.325-217.977 0-395.294 177.43-395.294 395.294v112.942c0 121.298 56.018 228.593 142.305 301.214-94.305 13.214-188.16 33.092-279.529 61.1C81.092 1246.375 0 1355.249 0 1480.163v185.675l22.588 16.941c275.238 206.344 563.803 237.177 711.53 237.177 344.244 0 593.618-148.63 711.53-237.177l22.587-16.94v-120.51c205.214-50.597 355.652-146.032 429.177-201.373l22.588-16.941V1141.79c0-125.026-80.979-233.901-201.261-270.833Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GroupPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Group,
+ contentDescription = "Group",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GroupDarkNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GroupDarkNew.kt
new file mode 100644
index 0000000000..22717c6931
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GroupDarkNew.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.GroupDarkNew: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.GroupDarkNew",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M915.744 213v702.744H213v87.842h702.744v702.744h87.842v-702.744h702.744v-87.842h-702.744V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GroupDarkNewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.GroupDarkNew,
+ contentDescription = "GroupDarkNew",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GroupNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GroupNew.kt
new file mode 100644
index 0000000000..74778657bb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/GroupNew.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.GroupNew: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.GroupNew",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M915.744 213v702.744H213v87.842h702.744v702.744h87.842v-702.744h702.744v-87.842h-702.744V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GroupNewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.GroupNew,
+ contentDescription = "GroupNew",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Hamburger.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Hamburger.kt
new file mode 100644
index 0000000000..c2e7317162
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Hamburger.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Hamburger: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Hamburger",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1468.412v112.94H0v-112.94h1920Zm0-564.706v112.941H0V903.706h1920ZM1920 339v112.941H0V339h1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HamburgerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Hamburger,
+ contentDescription = "Hamburger",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Header.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Header.kt
new file mode 100644
index 0000000000..f3ba443c56
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Header.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Header: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Header",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 213.333C0 95.5126 95.5126 0 213.333 0H1706.67C1824.49 0 1920 95.5126 1920 213.333V1706.67C1920 1824.49 1824.49 1920 1706.67 1920H213.333C95.5126 1920 0 1824.49 0 1706.67V213.333ZM213.333 106.667C154.423 106.667 106.667 154.423 106.667 213.333V1706.67C106.667 1765.58 154.423 1813.33 213.333 1813.33H1706.67C1765.58 1813.33 1813.33 1765.58 1813.33 1706.67V213.333C1813.33 154.423 1765.58 106.667 1706.67 106.667H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667ZM346.667 426.667C331.939 426.667 320 438.606 320 453.333V613.333C320 628.061 331.939 640 346.667 640H1573.33C1588.06 640 1600 628.061 1600 613.333V453.333C1600 438.606 1588.06 426.667 1573.33 426.667H346.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HeaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Header,
+ contentDescription = "Header",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Heart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Heart.kt
new file mode 100644
index 0000000000..1e3652f6e6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Heart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Heart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Heart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1692.48 910.647-732.762 687.36-731.182-685.779c-154.616-156.875-154.616-412.122 0-568.997 74.542-75.558 173.704-117.233 279.304-117.233h.113c105.487 0 204.65 41.675 279.078 117.233l.113.113c74.767 75.783 116.103 176.865 116.103 284.385h112.941c0-107.52 41.224-208.602 116.104-284.498 74.428-75.558 173.59-117.233 279.19-117.233h.113c105.487 0 204.763 41.675 279.19 117.233 154.617 156.875 154.617 412.122 1.695 567.416m78.833-646.701c-95.887-97.355-223.737-150.89-359.718-150.89h-.113c-136.094 0-263.83 53.535-359.604 150.777-37.61 38.061-68.443 80.979-92.16 127.398-23.718-46.42-54.664-89.337-92.16-127.285-95.774-97.355-223.51-150.89-359.605-150.89h-.113c-135.981 0-263.83 53.535-359.83 150.89-197.648 200.696-197.648 526.983 1.694 729.035l810.014 759.868L1771.313 991.4c197.647-200.47 197.647-526.758 0-727.454"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HeartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Heart,
+ contentDescription = "Heart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Highlighter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Highlighter.kt
new file mode 100644
index 0000000000..245837f63e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Highlighter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Highlighter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Highlighter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1809.888 1806.674V1920H110v-113.326h1699.888Zm-1332.35-415.453 143.471 95.647-60.29 93.154H326.816l150.724-188.8ZM616.817 921.94l389.954 260.196-32.75 51.45c-15.753 27.085-46.011 41.364-75.25 36.038-72.754-12.92-146.19 18.359-187.667 80.801l-27.991 41.704-138.825-92.7 27.879-41.818c41.59-62.33 42.497-142.564 2.266-204.213-16.205-24.932-14.506-58.476 3.627-82.388l38.757-49.07Zm678.595-803.027L1537.93 280.74c16.092 10.766 20.399 33.318 11.106 49.523L1067.627 1086.6 687.419 832.864l556.77-703.187c12.466-16.66 35.018-21.532 51.223-10.766ZM312.65 1693.348h309.833l123.186-190.727 59.722-89.414c16.433-24.592 45.104-37.398 72.642-32.185 76.495 14.28 154.123-22.098 192.654-88.394l575.242-903.547c40.344-69.696 20.626-158.657-44.99-202.627l-242.744-161.83c-65.616-43.63-155.37-27.764-203.533 35.585L488.53 901.654c-47.71 62.782-51.336 148.683-8.953 213.506 15.3 23.685 14.62 54.963-1.7 79.668l-58.249 87.26-190.16 238.438c-25.84 32.298-30.712 75.475-12.807 112.646 17.906 37.058 54.737 60.176 95.987 60.176Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HighlighterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Highlighter,
+ contentDescription = "Highlighter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Home.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Home.kt
new file mode 100644
index 0000000000..09cbb1ee5e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Home.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Home: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Home",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.16 0 28 932.16l79 78.777 853.16-853.16 853.16 853.16 78.889-78.777L960.16 0Zm613.693 1027.34v781.078h-334.86v-557.913h-557.8v557.912H346.445V1027.34H234.751V1920h1450.684v-892.66h-111.582Zm-446.33 334.748v446.441H792.775v-446.441h334.748ZM960.127 692.604c61.593 0 111.582 49.989 111.582 111.582 0 61.594-49.989 111.583-111.582 111.583-61.594 0-111.583-49.99-111.583-111.583 0-61.593 49.99-111.582 111.583-111.582Zm223.165 111.582c0-123.075-100.09-223.165-223.165-223.165-123.076 0-223.165 100.09-223.165 223.165 0 123.076 100.09 223.165 223.165 223.165 123.075 0 223.165-100.09 223.165-223.165"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HomePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Home,
+ contentDescription = "Home",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/HourGlass.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/HourGlass.kt
new file mode 100644
index 0000000000..38492b96ca
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/HourGlass.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.HourGlass: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.HourGlass",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1072.588 960c0 167.266 96.226 245.308 189.29 320.64 116.555 94.532 247.793 200.922 261.346 526.419H396.07c13.553-325.497 144.79-431.887 261.345-526.419 93.064-75.332 189.29-153.374 189.29-320.64s-96.226-245.308-189.29-320.64C540.86 544.828 409.623 438.438 396.07 112.941h1127.153c-13.553 325.497-144.791 431.887-261.346 526.419-93.064 75.332-189.29 153.374-189.29 320.64m260.443-232.998c135.529-109.891 304.263-246.663 304.263-670.531V0H282v56.47c0 423.869 168.734 560.64 304.264 670.532 88.771 72.057 147.5 119.605 147.5 232.998 0 113.393-58.729 160.941-147.5 232.998C450.734 1302.889 282 1439.66 282 1863.529V1920h1355.294v-56.47c0-423.869-168.734-560.64-304.263-670.532-88.772-72.057-147.502-119.605-147.502-232.998 0-113.393 58.73-160.941 147.502-232.998M933.84 1274.665l-169.638 137.676c-74.315 60.197-138.353 112.037-172.687 225.317h736.264c-34.334-113.28-98.372-165.12-172.687-225.317l-169.638-137.676c-15.021-12.197-36.593-12.197-51.614 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HourGlassPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.HourGlass,
+ contentDescription = "HourGlass",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Image.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Image.kt
new file mode 100644
index 0000000000..0eebe603e1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Image.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Image: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Image",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 113v1694.118H0V113h1920Zm-112.941 112.941H112.94V1694.29h1694.12V225.941ZM935.944 1058.77c182.851-258.409 332.498-286.87 426.691-264.847 160.716 37.384 272.076 242.26 330.805 608.98l10.504 65.392H207.924l20.104-71.718c85.384-306.07 172.913-457.072 283.37-489.712 102.55-30.156 185.336 43.82 258.86 109.1 43.596 38.514 90.806 81.092 122.542 78.834 15.925-1.807 32.188-20.556 43.144-36.029Zm401.167-154.842c-83.012-19.313-196.066 60.762-308.895 220.01-35.237 49.807-76.348 77.816-122.315 83.124-76.226 9.024-138.182-42.827-198.812-96.266l-3.868-3.413c-2.578-2.276-5.154-4.552-7.73-6.824-54.211-48.113-110.682-97.017-152.018-85.384-34.447 10.165-102.325 69.12-185.788 340.179h1212.762c-50.485-265.186-134.4-428.386-233.336-451.426ZM677.647 338.882c124.574 0 225.882 101.309 225.882 225.883 0 124.574-101.308 225.882-225.882 225.882S451.765 689.34 451.765 564.765s101.308-225.883 225.882-225.883Zm0 112.942c-62.343 0-112.941 50.71-112.941 112.94 0 62.231 50.598 112.942 112.941 112.942 62.344 0 112.941-50.71 112.941-112.941 0-62.23-50.597-112.941-112.94-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImagePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Image,
+ contentDescription = "Image",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImmersiveReader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImmersiveReader.kt
new file mode 100644
index 0000000000..96a059823a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImmersiveReader.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ImmersiveReader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ImmersiveReader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1921f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1579.95 1387.02c-7.42 132.4-66.33 261.2-150.57 372.61l-85.33-63.47c75.74-100.16 123.49-209.37 129.41-315 5.81-103.74-28.35-208.16-124.45-303.48l75.41-74.8c117.21 116.25 163.05 249.86 155.53 384.14zm338.88 26.73c-11.01 179.42-98.5 354.51-224.26 506.4l-82.42-67.14c116.79-141.06 191.01-295.54 200.22-445.68 9.06-147.71-44.3-297.3-194.97-433.778l71.92-78.114c172.74 156.472 240.66 336.452 229.51 518.312zM106.657 105.935h426.626c176.691 0 319.97 142.137 319.97 317.434v363.093H959.91V423.369c0-175.273 143.26-317.434 319.97-317.434h426.63v543.069h106.65V.148h-533.28c-160.64 0-300.539 88.058-373.314 218.161C833.783 88.215 693.898.148 533.283.148H0V1631.52h362.782v-105.79H106.657V105.935Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m814.549 1139.33 256.691-254.604h128.75V1904.31h-128.75l-273.008-270.78H543.994v-494.2h270.555Zm278.781-126.91-234.602 232.69H650.65v282.63h191.761l250.919 248.88v-764.2Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImmersiveReaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ImmersiveReader,
+ contentDescription = "ImmersiveReader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImpactLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImpactLogo.kt
new file mode 100644
index 0000000000..86d8e0f32b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImpactLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ImpactLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ImpactLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M910.001 203.918C910.001 163.587 921.96 124.161 944.366 90.6273 966.773 57.0931 998.621 30.9565 1035.88 15.5225 1073.14.0883516 1114.15-3.9499 1153.7 3.91831 1193.26 11.7866 1229.59 31.2078 1258.11 59.7263 1286.63 88.2447 1306.05 124.579 1313.92 164.135 1321.78 203.692 1317.75 244.693 1302.32 281.954 1286.88 319.215 1260.74 351.062 1227.21 373.47 1193.68 395.876 1154.25 407.836 1113.92 407.836 1087.13 407.869 1060.6 402.617 1035.84 392.38 1011.09 382.144 988.596 367.124 969.654 348.182 950.712 329.241 935.692 306.748 925.457 281.993 915.22 257.237 909.967 230.706 910.001 203.918ZM167.424 913.308 458.311 622.422H1045.04L460.789 1206.68C421.886 1245.58 369.124 1267.44 314.107 1267.44 259.09 1267.44 206.327 1245.58 167.424 1206.68 128.522 1167.77 106.667 1115.01 106.667 1059.99 106.667 1004.97 128.522 952.211 167.424 913.308ZM1738.81 1027.77 1454.11 1313.21H867.136L1444.7 734.406C1483.6 695.405 1536.4 673.455 1591.49 673.386 1646.57 673.316 1699.43 695.132 1738.43 734.034 1777.43 772.936 1799.38 825.739 1799.45 880.826 1799.52 935.911 1777.71 988.769 1738.81 1027.77ZM587.075 1602.79C564.668 1636.33 552.709 1675.75 552.709 1716.08 552.709 1770.16 574.192 1822.02 612.435 1860.27 650.677 1898.51 702.543 1920 756.627 1920 796.957 1920 836.382 1908.04 869.917 1885.63 903.451 1863.23 929.588 1831.38 945.021 1794.12 960.456 1756.85 964.494 1715.85 956.625 1676.29 948.758 1636.74 929.336 1600.4 900.817 1571.89 872.299 1543.37 835.965 1523.94 796.409 1516.08 756.853 1508.21 715.851 1512.25 678.59 1527.69 641.329 1543.12 609.481 1569.25 587.075 1602.79Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImpactLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ImpactLogo,
+ contentDescription = "ImpactLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Import.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Import.kt
new file mode 100644
index 0000000000..29f02c00b0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Import.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Import: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Import",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m807.186 686.592 272.864 272.864H0v112.94h1080.05l-272.864 272.978 79.736 79.849 409.296-409.183-409.296-409.184-79.736 79.736ZM1870.419 434.69l-329.221-329.11C1509.688 74.07 1465.979 56 1421.48 56H451.773v730.612h112.94V168.941h790.584v451.762h451.762v1129.405H564.714v-508.233h-112.94v621.173H1920V554.52c0-45.176-17.619-87.754-49.58-119.83Zm-402.181-242.37 315.443 315.442h-315.443V192.319Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Import,
+ contentDescription = "Import",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImportContent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImportContent.kt
new file mode 100644
index 0000000000..17c342ced8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImportContent.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ImportContent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ImportContent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m807.186 686.592 272.864 272.864H0v112.94h1080.05l-272.864 272.978 79.736 79.849 409.296-409.183-409.296-409.184-79.736 79.736ZM1870.419 434.69l-329.221-329.11C1509.688 74.07 1465.979 56 1421.48 56H451.773v730.612h112.94V168.941h790.584v451.762h451.762v1129.405H564.714v-508.233h-112.94v621.173H1920V554.52c0-45.176-17.619-87.754-49.58-119.83Zm-402.181-242.37 315.443 315.442h-315.443V192.319Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImportContentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ImportContent,
+ contentDescription = "ImportContent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImportantDates.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImportantDates.kt
new file mode 100644
index 0000000000..89703e60b7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ImportantDates.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ImportantDates: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ImportantDates",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M213.333 451.765V282.353c0-31.172 22.275-56.471 53.334-56.471h178.821v56.471c0 31.172 25.299 56.47 56.471 56.47 31.172 0 56.471-25.298 56.471-56.47v-56.471h790.59v56.471c0 31.172 25.3 56.47 56.47 56.47 31.17 0 56.47-25.298 56.47-56.47v-56.471h191.37c31.06 0 53.34 25.299 53.34 56.471v169.412H213.333Zm0 1361.575 1493.337 6.25V570.973H213.333V1813.34ZM1653.33 112.941h-191.37v-56.47c0-31.172-25.3-56.471-56.47-56.471-31.17 0-56.47 25.299-56.47 56.47v56.471H558.431v-56.47C558.431 25.299 533.133 0 501.961 0S445.49 25.299 445.49 56.47v56.471H276.078c-93.402 0-169.411 76.01-169.411 169.412V1920H1813.33V266.667c0-93.403-66.59-153.726-160-153.726Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1019.51 1123.69-59.508-191.814-59.543 191.814H695.527l165.819 126.13-60.966 196.43 159.615-121.4 159.625 121.44-60.99-196.48 165.85-126.12h-204.97Zm289.03-29.84 39.67-12.5-.07-.09-39.67 12.37m39.79-12.41.07.09 36.51-11.51c4.92 15.61-.35 32.64-13.05 42.36l-220.15 167.43 84.07 270.85c4.87 15.71-.45 32.74-13.2 42.35-12.7 9.62-29.81 9.62-42.51-.05l-220.011-167.37-220.058 167.37c-6.374 4.84-13.803 7.25-21.232 7.25-7.429 0-14.858-2.41-21.183-7.2-12.75-9.61-18.12-26.64-13.251-42.3l84.077-270.9-220.108-167.43c-12.749-9.72-17.97-26.75-13.101-42.36 4.869-15.6 18.673-26.11 34.384-26.11h272.01l84.078-270.853c.005-.017-.005.018 0 0 4.884-15.631 18.741-26.17 34.384-26.17 15.711 0 29.515 10.51 34.434 26.118l7.467 24.133 76.56 246.772h272.01c15.71 0 29.52 10.51 34.38 26.11l-36.58 11.42Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImportantDatesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ImportantDates,
+ contentDescription = "ImportantDates",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Inbox.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Inbox.kt
new file mode 100644
index 0000000000..913987d254
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Inbox.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Inbox: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Inbox",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1750.588 1750.119H169.412c-31.172 0-56.47-25.412-56.47-56.47V1398.08l210.183 126.155h1273.75l210.184-126.155v295.567c0 31.059-25.299 56.47-56.47 56.47ZM169.412 846.589h169.412v555.332L112.94 1266.39V903.06c0-31.058 25.299-56.47 56.47-56.47Zm282.353 564.706V168.941h1016.47v1242.354H451.765Zm1298.823-564.706c31.172 0 56.47 25.412 56.47 56.47v363.332l-225.882 135.53V846.589h169.412Zm0-112.941h-169.412V56H338.824v677.648H169.412C76.009 733.648 0 809.657 0 903.059v790.59c0 93.402 76.01 169.411 169.412 169.411h1581.176c93.403 0 169.412-76.01 169.412-169.412V903.06c0-93.402-76.01-169.411-169.412-169.411ZM621.176 488.904h564.706V375.963H621.176v112.94Zm0 677.647h564.706v-112.94H621.176v112.94Zm0-338.823h677.648V714.786H621.176v112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InboxPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Inbox,
+ contentDescription = "Inbox",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Indent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Indent.kt
new file mode 100644
index 0000000000..fa20479e7f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Indent.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Indent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Indent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1482.42v120H0v-120h1920Zm0-360v120H0v-120h1920Zm0-360v120H840v-120h1080ZM462.456 300.048l282.48 282.48-282.48 282.36-84.84-84.84 137.52-137.64H-.024v-120h515.16l-137.52-137.64 84.84-84.72ZM1920 402.42v120H840v-120h1080Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun IndentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Indent,
+ contentDescription = "Indent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Indent2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Indent2.kt
new file mode 100644
index 0000000000..75c380a9bd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Indent2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Indent2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Indent2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1482.42v120H0v-120h1920Zm0-360v120H0v-120h1920Zm0-360v120H840v-120h1080ZM462.456 300.048l282.48 282.48-282.48 282.36-84.84-84.84 137.52-137.64H-.024v-120h515.16l-137.52-137.64 84.84-84.72ZM1920 402.42v120H840v-120h1080Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Indent2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Indent2,
+ contentDescription = "Indent2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Info.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Info.kt
new file mode 100644
index 0000000000..f4e6dbd973
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Info.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Info: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Info",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c530.193 0 960 429.807 960 960s-429.807 960-960 960S0 1490.193 0 960 429.807 0 960 0Zm0 101.053c-474.384 0-858.947 384.563-858.947 858.947S485.616 1818.947 960 1818.947 1818.947 1434.384 1818.947 960 1434.384 101.053 960 101.053Zm-42.074 626.795c-85.075 39.632-157.432 107.975-229.844 207.898-10.327 14.249-10.744 22.907-.135 30.565 7.458 5.384 11.792 3.662 22.656-7.928 1.453-1.562 1.453-1.562 2.94-3.174 9.391-10.17 16.956-18.8 33.115-37.565 53.392-62.005 79.472-87.526 120.003-110.867 35.075-20.198 65.9 9.485 60.03 47.471-1.647 10.664-4.483 18.534-11.791 35.432-2.907 6.722-4.133 9.646-5.496 13.23-13.173 34.63-24.269 63.518-47.519 123.85l-1.112 2.886c-7.03 18.242-7.03 18.242-14.053 36.48-30.45 79.138-48.927 127.666-67.991 178.988l-1.118 3.008a10180.575 10180.575 0 0 0-10.189 27.469c-21.844 59.238-34.337 97.729-43.838 138.668-1.484 6.37-1.484 6.37-2.988 12.845-5.353 23.158-8.218 38.081-9.82 53.42-2.77 26.522-.543 48.24 7.792 66.493 9.432 20.655 29.697 35.43 52.819 38.786 38.518 5.592 75.683 5.194 107.515-2.048 17.914-4.073 35.638-9.405 53.03-15.942 50.352-18.932 98.861-48.472 145.846-87.52 41.11-34.26 80.008-76 120.788-127.872 3.555-4.492 3.555-4.492 7.098-8.976 12.318-15.707 18.352-25.908 20.605-36.683 2.45-11.698-7.439-23.554-15.343-19.587-3.907 1.96-7.993 6.018-14.22 13.872-4.454 5.715-6.875 8.77-9.298 11.514-9.671 10.95-19.883 22.157-30.947 33.998-18.241 19.513-36.775 38.608-63.656 65.789-13.69 13.844-30.908 25.947-49.42 35.046-29.63 14.559-56.358-3.792-53.148-36.635 2.118-21.681 7.37-44.096 15.224-65.767 17.156-47.367 31.183-85.659 62.216-170.048 13.459-36.6 19.27-52.41 26.528-72.201 21.518-58.652 38.696-105.868 55.04-151.425 20.19-56.275 31.596-98.224 36.877-141.543 3.987-32.673-5.103-63.922-25.834-85.405-22.986-23.816-55.68-34.787-96.399-34.305-45.053.535-97.607 15.256-145.963 37.783Zm308.381-388.422c-80.963-31.5-178.114 22.616-194.382 108.33-11.795 62.124 11.412 115.76 58.78 138.225 93.898 44.531 206.587-26.823 206.592-130.826.005-57.855-24.705-97.718-70.99-115.729Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InfoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Info,
+ contentDescription = "Info",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/InfoBorderless.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/InfoBorderless.kt
new file mode 100644
index 0000000000..42071df1a2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/InfoBorderless.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.InfoBorderless: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.InfoBorderless",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M852.517 606.04C722.804 666.467 612.48 770.67 502.075 923.02c-15.746 21.725-16.38 34.927-.205 46.602 11.372 8.209 17.98 5.583 34.542-12.088 2.217-2.38 2.217-2.38 4.484-4.84 14.318-15.505 25.852-28.662 50.49-57.274 81.407-94.538 121.17-133.45 182.968-169.038 53.478-30.795 100.476 14.462 91.527 72.38-2.51 16.258-6.836 28.257-17.978 54.022-4.432 10.249-6.302 14.707-8.38 20.171-20.085 52.8-37.002 96.846-72.451 188.834l-1.696 4.4c-10.718 27.813-10.718 27.813-21.427 55.62-46.426 120.661-74.598 194.652-103.665 272.901l-1.705 4.587c-7.8 20.975-11.474 30.871-15.534 41.881-33.306 90.321-52.353 149.007-66.84 211.427-2.262 9.713-2.262 9.713-4.556 19.584-8.162 35.31-12.53 58.062-14.972 81.448-4.222 40.439-.827 73.553 11.881 101.382 14.38 31.493 45.278 54.021 80.532 59.138 58.727 8.525 115.393 7.92 163.927-3.123 27.314-6.21 54.338-14.34 80.853-24.306 76.773-28.866 150.735-73.905 222.371-133.442 62.681-52.236 121.988-115.875 184.165-194.965 5.42-6.849 5.42-6.849 10.823-13.686 18.78-23.947 27.981-39.501 31.416-55.93 3.736-17.836-11.342-35.912-23.394-29.864-5.956 2.989-12.187 9.176-21.68 21.15-6.791 8.714-10.483 13.37-14.178 17.555-14.745 16.695-30.315 33.783-47.184 51.837-27.812 29.752-56.07 58.865-97.055 100.308-20.874 21.107-47.126 39.56-75.351 53.435-45.176 22.197-85.929-5.782-81.034-55.857 3.229-33.058 11.238-67.234 23.212-100.275 26.157-72.22 47.544-130.604 94.86-259.27 20.52-55.803 29.38-79.91 40.446-110.086 32.81-89.425 59-161.415 83.919-230.875 30.784-85.803 48.175-149.762 56.227-215.81 6.08-49.817-7.78-97.46-39.389-130.216-35.047-36.312-84.896-53.039-146.979-52.305-68.692.817-148.82 23.261-222.548 57.608Zm470.186-592.224c-123.444-48.028-271.57 34.483-296.373 165.169-17.984 94.72 17.4 176.498 89.622 210.751 143.165 67.897 314.982-40.897 314.989-199.468.007-88.211-37.668-148.991-108.238-176.452Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InfoBorderlessPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.InfoBorderless,
+ contentDescription = "InfoBorderless",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure.kt
new file mode 100644
index 0000000000..3b243aa5bc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Instructure: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Instructure",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1642.264c138.868 0 253.585 102.642 271.698 241.51C1147.17 1907.924 1050.566 1920 960 1920c-90.566 0-181.132-12.075-271.698-36.226 12.075-138.868 132.83-241.51 271.698-241.51Zm476.981-205.283c102.642-96.604 259.623-108.68 362.264-18.113-90.566 156.981-223.396 289.811-386.415 386.415-84.528-114.717-72.453-271.698 24.151-368.302Zm-1328.302-24.15c114.717-84.53 271.698-72.454 368.302 24.15 96.604 102.642 108.68 259.623 18.113 362.264-156.98-90.566-289.811-223.396-386.415-386.415ZM960 1394.716c42.264 0 78.49 36.226 84.528 84.528 0 48.302-36.226 90.566-84.528 90.566h-6.038c-48.302 0-84.528-42.264-84.528-90.566s42.264-84.528 90.566-84.528Zm295.85-126.792c36.225-30.19 84.527-30.19 114.716 0 36.226 30.188 36.226 84.528 6.038 120.754 0 5.726-5.43 6.022-5.991 6.037l-.047.001c-36.226 30.189-90.566 30.189-120.755-6.038-30.188-36.226-30.188-90.566 6.038-120.754Zm-724.53-6.038c30.19-30.189 90.567-30.189 120.755 0 36.227 30.188 36.227 84.528 0 120.755-30.188 36.226-84.528 30.188-120.754 0-36.227-30.19-36.227-84.529 0-120.755ZM36.227 688.302c138.868 12.075 241.51 132.83 241.51 271.698 0 138.868-108.68 259.623-241.51 271.698C12.076 1141.132 0 1050.566 0 960c0-90.566 12.075-187.17 36.226-271.698Zm1847.548 0C1907.924 772.83 1920 869.434 1920 960c0 90.566-12.075 181.132-36.226 271.698-132.83-12.075-241.51-132.83-241.51-271.698 0-138.868 102.642-259.623 241.51-271.698Zm-1443.02 187.17c46.672 0 84.529 37.856 84.529 84.528 0 46.672-37.857 84.528-84.528 84.528-46.672 0-84.529-37.856-84.529-84.528 0-46.672 37.857-84.528 84.529-84.528Zm1038.491-6.038c48.302 0 84.529 42.264 84.529 84.528 0 48.302-36.227 84.529-84.529 84.529s-84.528-36.227-84.528-84.529 36.226-84.528 84.528-84.528Zm-211.32-338.113c30.188-30.189 84.528-30.189 114.717 0 36.226 30.188 36.226 84.528 6.037 120.754-36.226 30.19-84.528 30.19-114.717 0-36.226-30.188-36.226-84.528-6.037-120.754Zm-736.604-6.038c30.188-30.189 84.528-30.189 120.754 0 30.19 30.189 36.227 84.528 0 120.755-30.188 36.226-84.528 30.188-120.754 0-36.227-30.189-36.227-84.529 0-120.755Zm887.547-410.566c156.981 90.566 289.811 223.396 386.415 386.415-114.717 84.528-271.698 72.453-368.302-24.15-96.604-96.605-108.68-253.586-18.113-362.265Zm-917.736 0c84.528 108.68 78.49 265.66-24.15 362.264-96.605 96.604-253.586 108.68-362.265 24.151 90.566-163.019 223.396-295.849 386.415-386.415ZM960 356.227c42.264 0 84.528 36.226 84.528 78.49 0 48.302-36.226 90.566-84.528 90.566-48.302 0-84.528-36.226-84.528-84.528 0-48.302 36.226-84.529 84.528-84.529ZM960 0c96.604 0 187.17 12.075 277.736 36.226-18.113 132.83-138.868 241.51-277.736 241.51S700.377 175.094 682.264 36.226C772.83 12.076 863.396 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InstructurePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Instructure,
+ contentDescription = "Instructure",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure1Dot.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure1Dot.kt
new file mode 100644
index 0000000000..e152f60a92
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure1Dot.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Instructure1Dot: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Instructure1Dot",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 1670.24C1079.16 1532.23 1190.91 1420.48 1328.92 1420.48C1466.93 1420.48 1578.68 1532.23 1578.68 1670.24C1578.68 1808.25 1466.93 1920 1328.92 1920C1190.91 1920 1079.16 1808.25 1079.16 1670.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M757.363 0H341.318V1920H757.363V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Instructure1DotPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Instructure1Dot,
+ contentDescription = "Instructure1Dot",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure3Dot.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure3Dot.kt
new file mode 100644
index 0000000000..5882cb8d66
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Instructure3Dot.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Instructure3Dot: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Instructure3Dot",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 1670.24C1079.16 1532.23 1190.91 1420.48 1328.92 1420.48C1466.93 1420.48 1578.68 1532.23 1578.68 1670.24C1578.68 1808.25 1466.93 1920 1328.92 1920C1190.91 1920 1079.16 1808.25 1079.16 1670.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 960C1079.16 821.991 1190.91 710.238 1328.92 710.238C1466.93 710.238 1578.68 821.991 1578.68 960C1578.68 1098.01 1466.93 1209.76 1328.92 1209.76C1190.91 1209.76 1079.16 1098.01 1079.16 960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 250.435C1079.16 112.426 1190.91 0.673227 1328.92 0.673227C1466.93 0.673227 1578.68 112.426 1578.68 250.435C1578.68 388.443 1466.93 500.196 1328.92 500.196C1190.91 500.196 1079.16 388.443 1079.16 250.435Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M757.363 0H341.318V1920H757.363V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Instructure3DotPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Instructure3Dot,
+ contentDescription = "Instructure3Dot",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/InstructureLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/InstructureLogo.kt
new file mode 100644
index 0000000000..e90278e72f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/InstructureLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.InstructureLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.InstructureLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1448.57 288.052 1084.46 502.746 1448.55 718.026 1813.23 502.732 1448.57 288.052ZM959.965 429.191 1323.92 214.589 959.988 0 596.032 214.602 959.965 429.191ZM835.499 502.732 471.388 288.038 106.704 502.732 471.388 718.026 835.499 502.732ZM106.667 1416.54 960 1920 1813.33 1416.54 960 913.07 106.667 1416.54Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InstructureLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.InstructureLogo,
+ contentDescription = "InstructureLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Integrations.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Integrations.kt
new file mode 100644
index 0000000000..3e5c578f9c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Integrations.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Integrations: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Integrations",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1581.235 734.118c0 217.976-177.317 395.294-395.294 395.294H960.06c-217.977 0-395.294-177.318-395.294-395.294V564.706h1016.47v169.412Zm225.883-282.353h-338.824V0h-112.941v451.765H790.647V0H677.706v451.765H338.882v112.94h112.942v169.413c0 280.207 228.028 508.235 508.235 508.235h56.47v395.294c0 93.402-76.009 169.412-169.411 169.412-93.403 0-169.412-76.01-169.412-169.412 0-155.633-126.72-282.353-282.353-282.353S113 1482.014 113 1637.647V1920h112.941v-282.353c0-93.402 76.01-169.412 169.412-169.412s169.412 76.01 169.412 169.412c0 155.633 126.72 282.353 282.353 282.353 155.746 0 282.353-126.72 282.353-282.353v-395.294h56.47c280.207 0 508.235-228.028 508.235-508.235V564.706h112.942V451.765Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun IntegrationsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Integrations,
+ contentDescription = "Integrations",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Invitation.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Invitation.kt
new file mode 100644
index 0000000000..a4b802f7bc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Invitation.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Invitation: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Invitation",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M338.79-.011v527.66L-.034 821.298V1919.99h1920V821.297l-338.71-293.647V-.011H338.79Zm112.94 1203.953V112.93h1016.471v1091.012l-189.289 151.34H641.02l-189.29-151.34Zm1129.526-526.87 225.882 195.726v60.085l-225.882 180.706V677.07ZM112.907 932.881v-60.084L338.79 677.071v436.518L112.907 932.883Zm1694.23 144.678v623.323l-238.08-301.553-88.658 70.023 266.654 337.695H172.88l266.767-337.695-88.659-70.023-238.08 301.553V1077.56l488.47 390.777h717.29l488.47-390.777Zm-790.666-795.207v282.353h282.353v112.941H1016.47V960H903.529V677.647H621.176V564.706H903.53V282.353h112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InvitationPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Invitation,
+ contentDescription = "Invitation",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Italic.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Italic.kt
new file mode 100644
index 0000000000..c236674319
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Italic.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Italic: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Italic",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M738.077 0v147.692h348.554L680.477 1772.308H295V1920h886.302v-147.692H832.748l406.006-1624.616h385.477V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ItalicPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Italic,
+ contentDescription = "Italic",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/KeyboardShortcuts.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/KeyboardShortcuts.kt
new file mode 100644
index 0000000000..bb782148d2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/KeyboardShortcuts.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.KeyboardShortcuts: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.KeyboardShortcuts",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1807.059 1637.706c0 31.059-25.299 56.47-56.47 56.47H169.411c-31.172 0-56.47-25.411-56.47-56.47v-903.53c0-31.058 25.298-56.47 56.47-56.47h1581.176c31.172 0 56.47 25.412 56.47 56.47v903.53Zm-56.47-1072.941h-729.262c14.908-86.965 65.958-113.506 133.384-147.163 89.336-44.611 200.583-100.291 200.583-304.602h-112.941c0 134.513-57.939 163.426-138.24 203.633-80.301 40.094-177.544 90.24-196.518 248.132H169.412C76.009 564.765 0 640.775 0 734.176v903.53c0 93.402 76.01 169.412 169.412 169.412h1581.176c93.403 0 169.412-76.01 169.412-169.412v-903.53c0-93.402-76.01-169.411-169.412-169.411Zm-564.707 677.647H734.118c-31.172 0-56.47 25.299-56.47 56.47v112.942c0 31.171 25.298 56.47 56.47 56.47h451.764c31.172 0 56.47-25.299 56.47-56.47v-112.942c0-31.171-25.298-56.47-56.47-56.47m338.824 0h-112.941c-31.172 0-56.47 25.299-56.47 56.47v112.942c0 31.171 25.298 56.47 56.47 56.47h112.94c31.173 0 56.471-25.299 56.471-56.47v-112.942c0-31.171-25.298-56.47-56.47-56.47m-1016.47 0H395.293c-31.172 0-56.47 25.299-56.47 56.47v112.942c0 31.171 25.298 56.47 56.47 56.47h112.941c31.172 0 56.47-25.299 56.47-56.47v-112.942c0-31.171-25.298-56.47-56.47-56.47m0-338.824h-112.94c-31.173 0-56.471 25.3-56.471 56.47V1073c0 31.172 25.298 56.47 56.47 56.47h112.941c31.172 0 56.47-25.298 56.47-56.47V960.059c0-31.172-25.298-56.47-56.47-56.47m225.883 225.882h112.94c31.173 0 56.471-25.3 56.471-56.471V960.059c0-31.172-25.298-56.47-56.47-56.47h-112.94c-31.172 0-56.47 25.298-56.47 56.47V1073c0 31.172 25.298 56.47 56.47 56.47m451.764-225.882h-112.94c-31.173 0-56.471 25.3-56.471 56.47V1073c0 31.172 25.298 56.47 56.47 56.47h112.941c31.172 0 56.47-25.298 56.47-56.47V960.059c0-31.172-25.298-56.47-56.47-56.47m338.824 0h-112.941c-31.172 0-56.47 25.298-56.47 56.47V1073c0 31.172 25.298 56.47 56.47 56.47h112.94c31.173 0 56.471-25.298 56.471-56.47V960.059c0-31.172-25.298-56.47-56.47-56.47"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun KeyboardShortcutsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.KeyboardShortcuts,
+ contentDescription = "KeyboardShortcuts",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Launch.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Launch.kt
new file mode 100644
index 0000000000..d1e5052743
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Launch.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Launch: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Launch",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M112.941 451.765h338.824V112.94H112.94v338.824zM508.235 0H56.471C25.299 0 0 25.299 0 56.47v451.765c0 31.172 25.299 56.47 56.47 56.47h451.765c31.172 0 56.47-25.298 56.47-56.47V56.471C564.706 25.299 539.408 0 508.236 0zm282.353 451.765h338.824V112.94H790.588v338.824zM1185.882 0H734.118c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.47-25.298 56.47-56.47V56.471c0-31.172-25.298-56.471-56.47-56.471zm282.353 451.765h338.824V112.94h-338.824v338.824zM1863.53 0h-451.764c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.471-25.298 56.471-56.47V56.471C1920 25.299 1894.701 0 1863.53 0zM112.941 1129.412h338.824V790.588H112.94v338.824zm395.294-451.765H56.471C25.299 677.647 0 702.946 0 734.117v451.765c0 31.172 25.299 56.47 56.47 56.47h451.765c31.172 0 56.47-25.298 56.47-56.47V734.118c0-31.172-25.298-56.47-56.47-56.47zm282.353 451.765h338.824V790.588H790.588v338.824zm395.294-451.765H734.118c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.47-25.298 56.47-56.47V734.118c0-31.172-25.298-56.47-56.47-56.47zm282.353 451.765h338.824V790.588h-338.824v338.824zm395.294-451.765h-451.764c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.471-25.298 56.471-56.47V734.118c0-31.172-25.299-56.47-56.47-56.47zM112.941 1807.06h338.824v-338.824H112.94v338.824zm395.294-451.765H56.471c-31.172 0-56.471 25.299-56.471 56.47v451.765c0 31.171 25.299 56.47 56.47 56.47h451.765c31.172 0 56.47-25.299 56.47-56.47v-451.765c0-31.172-25.298-56.47-56.47-56.47zm282.353 451.765h338.824v-338.824H790.588v338.824zm395.294-451.765H734.118c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.471 56.47 56.471h451.764c31.172 0 56.47-25.299 56.47-56.47v-451.765c0-31.172-25.298-56.47-56.47-56.47zm282.353 451.765h338.824v-338.824h-338.824v338.824zm395.294-451.765h-451.764c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.471 56.47 56.471h451.764c31.172 0 56.471-25.299 56.471-56.47v-451.765c0-31.172-25.299-56.47-56.47-56.47z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LaunchPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Launch,
+ contentDescription = "Launch",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Learnplatform.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Learnplatform.kt
new file mode 100644
index 0000000000..9764560fbc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Learnplatform.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Learnplatform: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Learnplatform",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1443.33 1625.47C1155.58 1837.95 763.392 1840 473.344 1630.59L515.712 1572.22C248.832 1380.99 136.192 1039.49 236.928 727.296L305.664 740.352C400.384 460.672 663.296 272.896 958.976 273.92V0.768066C543.104 1.28007 174.848 269.312 46.72 664.576C-81.4079 1059.84 59.776 1492.74 396.544 1736.58C733.184 1980.54 1188.61 1980.03 1524.99 1735.55C1861.12 1490.94 2001.66 1058.05 1872.77 662.912L1809.54 683.52C1931.9 1052.42 1801.98 1457.79 1487.87 1686.91"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LearnplatformPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Learnplatform,
+ contentDescription = "Learnplatform",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/LifePreserver.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/LifePreserver.kt
new file mode 100644
index 0000000000..47225906f2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/LifePreserver.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.LifePreserver: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.LifePreserver",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1758.177 1230.505-334.522-140.56c23.483-83.885 23.596-173.188 2.145-261.363l337.909-133.447c57.804 174.204 57.804 358.005.113 531.531l-5.645 3.839Zm-444.148 439.405L1214 1427.176c90.546-48.998 163.705-121.706 212.929-212.025l241.831 100.48c-77.223 154.221-200.284 277.282-354.73 354.28Zm-620.722 93.82-3.952-5.645 140.673-334.409c84.337 23.596 173.414 23.596 261.25 2.032l133.448 337.91c-174.317 57.804-358.005 57.917-531.419.112Zm-89.078-95.061c-154.108-77.11-277.281-200.397-354.166-354.618l242.621-100.03c49.112 90.546 121.706 163.592 212.026 212.816L604.23 1668.67ZM161.775 689.377l334.522 140.56c-23.596 84.11-23.596 173.414-2.145 261.363l-337.796 133.447c-57.804-174.204-57.804-358.005-.113-531.532l5.532-3.838ZM605.81 249.858l100.255 242.735C615.406 541.59 542.247 614.41 493.023 704.73L251.192 604.25c77.11-154.109 200.397-277.282 354.618-354.393Zm620.835-93.706 3.839 5.645-140.56 334.408c-43.128-11.967-87.498-17.838-132.432-17.838-42.789 0-86.03 5.307-128.705 15.806L695.113 156.265c174.205-57.692 358.005-58.03 531.532-.113Zm-73.95 1176.414c-27.208-18.628-61.078-26.87-94.835-17.725-64.804 18.064-132.996 17.951-197.349.113-33.192-9.37-66.95-1.242-94.27 17.386-77.224-39.966-138.867-101.948-178.834-179.397 18.741-27.435 26.983-61.305 17.612-95.062-17.95-64.917-18.064-133.108 0-197.574 9.258-33.418 1.13-67.062-17.386-94.158 39.853-76.772 101.158-138.077 178.043-178.043 19.193 13.435 42.111 21.112 65.933 21.112 10.048 0 20.322-1.355 30.483-4.177 64.804-18.064 133.109-17.951 197.349-.113 33.192 9.258 66.95 1.242 94.27-17.387 77.111 39.967 138.755 101.949 178.834 179.624-18.741 27.321-27.096 61.078-17.612 94.835 17.95 65.03 17.95 133.335 0 197.349-9.371 33.531-1.242 67.175 17.499 94.384-40.192 77.336-102.174 138.867-179.736 178.833ZM1315.61 251.1c154.22 77.224 277.282 200.51 354.392 354.731l-242.847 100.142c-48.999-90.771-121.706-163.817-212.026-212.929L1315.61 251.1Zm555.24 408.358c-10.5-31.16-33.418-56.901-63.223-70.562-7.452-3.387-15.58-3.613-23.483-5.306-90.772-198.478-246.912-355.07-445.164-446.293-1.806-8.241-1.92-16.709-5.645-24.612-13.66-30.031-39.402-53.175-71.127-63.675-196.67-65.482-404.97-65.256-602.545.113-31.273 10.387-57.014 33.305-70.562 63.11-3.5 7.34-3.726 15.468-5.42 23.484C384.978 226.488 228.5 382.74 137.501 580.993c-8.467 1.807-16.934 2.145-24.95 5.758-29.918 13.66-53.063 39.402-63.562 71.014-65.37 196.784-65.37 405.197.112 602.433 10.274 31.273 33.306 57.014 62.998 70.675 7.452 3.387 15.694 3.387 23.597 5.193 90.77 198.59 246.911 355.295 445.276 446.518 1.806 8.242 2.145 16.822 5.758 24.725 13.548 29.919 39.515 53.063 71.014 63.563 98.335 32.74 199.606 48.998 300.877 48.998 101.384 0 202.88-16.37 301.555-49.111 31.273-10.274 57.015-33.193 70.675-62.998 3.387-7.451 3.613-15.58 5.42-23.596 198.59-90.771 355.295-247.137 446.405-445.615 8.354-1.806 16.822-1.806 24.838-5.42 29.805-13.66 52.95-39.401 63.45-71.013 65.368-196.784 65.368-405.197-.113-602.659Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LifePreserverPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.LifePreserver,
+ contentDescription = "LifePreserver",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Like.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Like.kt
new file mode 100644
index 0000000000..759f4525e3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Like.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Like: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Like",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1637.176 1129.412h-112.94v112.94c62.23 0 112.94 50.599 112.94 112.942 0 62.344-50.71 112.941-112.94 112.941h-112.942v112.941c62.23 0 112.941 50.598 112.941 112.942 0 62.343-50.71 112.94-112.94 112.94h-960c-155.634 0-282.354-126.606-282.354-282.352V903.529h106.617c140.16 0 274.334-57.6 368.3-157.778C778.486 602.089 937.28 379.256 957.385 112.94h36.367c50.484 0 98.033 22.363 130.334 61.44 32.64 39.53 45.854 91.144 36.14 141.515-22.7 118.589-60.197 236.048-111.246 349.102-23.83 52.517-19.313 112.602 11.746 160.94 31.397 48.566 84.706 77.591 142.644 77.591h433.807c62.231 0 112.942 50.598 112.942 112.942 0 62.343-50.71 112.94-112.942 112.94m225.883-112.94c0-124.575-101.308-225.883-225.883-225.883H1203.37c-19.651 0-37.044-9.374-47.66-25.863-10.391-16.15-11.86-35.577-3.84-53.196 54.663-121.073 94.87-247.115 119.378-374.513 15.925-83.576-5.873-169.072-60.085-234.578C1157.29 37.384 1078.005 0 993.751 0H846.588v56.47c0 254.457-155.068 473.224-285.063 612.029-72.734 77.477-176.98 122.09-285.967 122.09H56v734.117C56 1742.682 233.318 1920 451.294 1920h960c124.574 0 225.882-101.308 225.882-225.882 0-46.42-14.117-89.676-38.174-125.59 87.869-30.947 151.116-114.862 151.116-213.234 0-46.419-14.118-89.675-38.174-125.59 87.868-30.946 151.115-114.862 151.115-213.233"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LikePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Like,
+ contentDescription = "Like",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/LineReader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/LineReader.kt
new file mode 100644
index 0000000000..01eedb17b3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/LineReader.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.LineReader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.LineReader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M320.001 212.118 1600 214.549l.2-106.666-1279.997-2.432z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.NonZero,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M266.667 533.334c-29.456 0-53.334 23.878-53.334 53.333v320c0 29.455 23.878 53.333 53.334 53.333H1653.33c29.46 0 53.34-23.878 53.34-53.333v-320c0-29.455-23.88-53.333-53.34-53.333H266.667ZM320 640v213.334h1280V640H320Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M53.333 320C23.878 320 0 343.878 0 373.334v959.996c0 29.46 23.878 53.34 53.333 53.34H1866.67c29.45 0 53.33-23.88 53.33-53.34V373.334c0-29.456-23.88-53.334-53.33-53.334H53.333Zm53.334 106.667V1280H1813.33V426.667H106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1600 1601.22-1279.999-2.44.202-106.66 1279.997 2.43zm-1280.019 210.9 1066.669 2.43.24-106.67-1066.666-2.43z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.NonZero,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LineReaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.LineReader,
+ contentDescription = "LineReader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Link.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Link.kt
new file mode 100644
index 0000000000..95fb931d5d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Link.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Link: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Link",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1866.003 351.563 1565.128 50.575c-69.46-67.652-180.932-67.426-248.923.565L906.23 461.116c-68.33 68.443-68.33 179.69.113 248.132l31.623 31.624 79.737-79.963-31.624-31.51c-24.282-24.396-24.282-64.038 0-88.433l409.977-409.977c24.508-24.395 64.828-24.17 89.675 0l299.859 299.972c24.734 25.186 24.847 65.619.564 90.014l-409.976 409.977c-24.508 24.282-64.15 24.282-88.546 0l-110.795-110.909 159.473-159.36-79.85-79.85-435.614 435.502-109.779-109.779c-32.866-33.656-76.8-52.292-123.67-52.63-43.596 1.694-92.273 18.296-126.156 52.178L51.377 1316.081c-68.442 68.442-68.442 179.69 0 248.132l301.553 301.553c34.108 34.108 79.059 51.275 124.01 51.275 44.95 0 89.9-17.167 124.122-51.275l409.976-409.977c33.77-33.882 52.405-78.607 52.066-126.042-.226-46.984-18.974-90.918-52.066-123.219l-30.494-30.494-79.85 79.85 30.946 30.945c11.86 11.633 18.41 27.106 18.523 43.595.113 16.942-6.664 33.092-18.974 45.516l-409.977 409.976c-23.492 23.492-64.94 23.492-88.433 0l-301.553-301.553c-11.746-11.746-18.183-27.444-18.183-44.273 0-16.715 6.437-32.414 18.183-44.16l409.977-409.976c12.197-12.31 28.235-19.087 45.063-19.087h.452c16.49.113 31.962 6.663 43.934 19.087l110.344 110.23-162.184 162.297 79.85 79.85 438.324-438.438 110.796 110.908c34.334 34.221 79.171 51.275 124.122 51.275 44.95 0 89.901-17.054 124.122-51.275l409.977-409.977c67.877-67.99 67.99-179.463 0-249.26"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LinkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Link,
+ contentDescription = "Link",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Linkedin.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Linkedin.kt
new file mode 100644
index 0000000000..dbe8454e04
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Linkedin.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Linkedin: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Linkedin",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1168 601.321v74.955c72.312-44.925 155.796-71.11 282.643-71.11 412.852 0 465.705 308.588 465.705 577.417v733.213L1438.991 1920v-701.261c0-117.718-42.162-140.06-120.12-140.06-74.114 0-120.12 23.423-120.12 140.06V1920l-483.604-4.204V601.32H1168Zm-687.52-.792v1318.918H0V600.53h480.48Zm-120.12 120.12H120.12v1078.678h240.24V720.65Zm687.52.792H835.267v1075.316l243.364 2.162v-580.18c0-226.427 150.51-260.18 240.24-260.18 109.55 0 240.24 45.165 240.24 260.18v580.18l237.117-2.162v-614.174c0-333.334-93.573-457.298-345.585-457.298-151.472 0-217.057 44.925-281.322 98.98l-16.696 14.173H1047.88V721.441ZM240.24 0c132.493 0 240.24 107.748 240.24 240.24 0 132.493-107.747 240.24-240.24 240.24C107.748 480.48 0 372.733 0 240.24 0 107.748 107.748 0 240.24 0Zm0 120.12c-66.186 0-120.12 53.934-120.12 120.12s53.934 120.12 120.12 120.12 120.12-53.934 120.12-120.12-53.934-120.12-120.12-120.12Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LinkedinPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Linkedin,
+ contentDescription = "Linkedin",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ListView.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ListView.kt
new file mode 100644
index 0000000000..5063733dc8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ListView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ListView: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ListView",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 53.3333C0 23.8781 23.8781 0 53.3333 0H1866.67C1896.12 0 1920 23.8781 1920 53.3333V853.333C1920 882.788 1896.12 906.667 1866.67 906.667H53.3334C23.8782 906.667 0 882.788 0 853.333V53.3333ZM106.667 149.333C106.667 125.769 125.769 106.667 149.333 106.667H1770.67C1794.23 106.667 1813.33 125.769 1813.33 149.333V757.333C1813.33 780.897 1794.23 800 1770.67 800H149.333C125.769 800 106.667 780.897 106.667 757.333V149.333ZM0 1066.67C0 1037.21 23.8781 1013.33 53.3333 1013.33H1866.67C1896.12 1013.33 1920 1037.21 1920 1066.67V1866.67C1920 1896.12 1896.12 1920 1866.67 1920H53.3334C23.8782 1920 0 1896.12 0 1866.67V1066.67ZM106.667 1162.67C106.667 1139.1 125.769 1120 149.333 1120H1770.67C1794.23 1120 1813.33 1139.1 1813.33 1162.67V1770.67C1813.33 1794.23 1794.23 1813.33 1770.67 1813.33H149.333C125.769 1813.33 106.667 1794.23 106.667 1770.67V1162.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListViewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ListView,
+ contentDescription = "ListView",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Lock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Lock.kt
new file mode 100644
index 0000000000..cd6cc9fdfc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Lock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Lock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Lock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1581.294 1694.118c0 62.23-50.598 112.94-112.941 112.94H451.883c-62.231 0-112.942-50.71-112.942-112.94V1016.47h1242.353v677.647Zm-112.941-790.589V508.235C1468.353 228.028 1240.325 0 960.118 0S451.882 228.028 451.882 508.235V903.53H226v790.589C226 1818.692 327.308 1920 451.882 1920h1016.47c124.575 0 225.883-101.308 225.883-225.882V903.529h-225.882Zm-451.765 338.824v338.823h-112.94v-338.823h112.94ZM960.118 112.94c217.976 0 395.294 177.318 395.294 395.294V903.53H564.824V508.235c0-217.976 177.317-395.294 395.294-395.294Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Lock,
+ contentDescription = "Lock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Lti.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Lti.kt
new file mode 100644
index 0000000000..9975b7712c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Lti.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Lti: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Lti",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1581.235 734.118c0 217.976-177.317 395.294-395.294 395.294H960.06c-217.977 0-395.294-177.318-395.294-395.294V564.706h1016.47v169.412Zm225.883-282.353h-338.824V0h-112.941v451.765H790.647V0H677.706v451.765H338.882v112.94h112.942v169.413c0 280.207 228.028 508.235 508.235 508.235h56.47v395.294c0 93.402-76.009 169.412-169.411 169.412-93.403 0-169.412-76.01-169.412-169.412 0-155.633-126.72-282.353-282.353-282.353S113 1482.014 113 1637.647V1920h112.941v-282.353c0-93.402 76.01-169.412 169.412-169.412s169.412 76.01 169.412 169.412c0 155.633 126.72 282.353 282.353 282.353 155.746 0 282.353-126.72 282.353-282.353v-395.294h56.47c280.207 0 508.235-228.028 508.235-508.235V564.706h112.942V451.765Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LtiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Lti,
+ contentDescription = "Lti",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MarkAsRead.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MarkAsRead.kt
new file mode 100644
index 0000000000..f7106f356e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MarkAsRead.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MarkAsRead: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MarkAsRead",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MarkAsReadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MarkAsRead,
+ contentDescription = "MarkAsRead",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Marker.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Marker.kt
new file mode 100644
index 0000000000..813e88f8a1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Marker.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Marker: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Marker",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1290 1083.396c-114.12 113.16-253.68 269.88-332.04 466.8-76.92-199.08-215.16-354.84-327.96-466.92-141.36-140.04-210-279.48-210-426.48 0-295.92 240.84-536.76 543.12-536.76 296.04 0 536.88 240.84 536.88 536.76 0 147-68.64 286.44-210 426.6M956.88.036C594.72.036 300 294.636 300 656.796c0 180.6 80.28 348 245.4 511.68 239.76 237.84 351.48 457.56 351.48 691.56v60h120v-60c0-232.92 110.4-446.16 357.72-691.44 165.12-163.8 245.4-331.2 245.4-511.8C1620 294.636 1325.28.036 956.88.036"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MarkerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Marker,
+ contentDescription = "Marker",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Masquerade.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Masquerade.kt
new file mode 100644
index 0000000000..5b0a818a98
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Masquerade.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Masquerade: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Masquerade",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.765 0C1213.892 0 1043.915 114.861 960 280.207 876.085 114.861 706.108 0 508.235 0H0v508.235c0 280.207 228.028 508.236 508.235 508.236h903.53c160.49 0 302.117-76.236 395.294-192.678v870.325c0 62.343-50.598 112.94-112.941 112.94-62.344 0-112.942-50.597-112.942-112.94v-564.706h-112.94v564.706c0 124.574 101.308 225.882 225.882 225.882S1920 1818.692 1920 1694.118V0h-508.235ZM903.529 903.53H508.235c-217.976 0-395.294-177.318-395.294-395.295V112.941h395.294c217.977 0 395.294 177.318 395.294 395.294V903.53Zm903.53-395.295c0 217.977-177.318 395.294-395.294 395.294H1016.47V508.235c0-217.976 177.317-395.294 395.294-395.294h395.294v395.294Zm-1298.824 56.47c-73.637 0-136.433-47.209-159.699-112.94h159.7c73.637 0 136.432 47.21 159.698 112.94H508.235Zm0-225.881H225.882v56.47c0 155.746 126.607 282.353 282.353 282.353h282.353v-56.47c0-155.746-126.607-282.353-282.353-282.353Zm621.177 282.352v56.471h282.353c155.746 0 282.353-126.607 282.353-282.353v-56.47h-282.353c-155.746 0-282.353 126.607-282.353 282.352m282.353-56.47h-159.7c23.267-65.732 86.062-112.941 159.7-112.941h159.699c-23.266 65.731-86.062 112.94-159.7 112.94"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasqueradePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Masquerade,
+ contentDescription = "Masquerade",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MasteryLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MasteryLogo.kt
new file mode 100644
index 0000000000..b22ab5ddcd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MasteryLogo.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MasteryLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MasteryLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M232.092 1059.47C103.84 1059.47 -0.126465 1163.44 -0.126465 1291.69C-0.126465 1419.94 103.84 1523.91 232.092 1523.91C360.345 1523.91 464.311 1419.94 464.311 1291.69C464.311 1163.44 360.345 1059.47 232.092 1059.47Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.181 1059.46C932.074 1059.46 905.605 1064.64 880.773 1073.65L737.513 812.505C792.907 769.937 828.654 703.627 828.654 628.313C828.654 500.061 724.687 396.094 596.435 396.094C468.182 396.094 364.216 500.061 364.216 628.313C364.216 756.566 468.182 860.532 596.435 860.532C624.541 860.532 651.01 855.347 675.842 846.342L819.103 1107.49C763.709 1150.05 727.962 1216.36 727.962 1291.68C727.962 1419.93 831.928 1523.9 960.181 1523.9C1088.43 1523.9 1192.4 1419.93 1192.4 1291.68C1192.4 1163.43 1088.43 1059.46 960.181 1059.46Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1688.18 1059.46C1660.07 1059.46 1633.6 1064.64 1608.5 1073.65L1465.24 812.505C1520.63 769.937 1556.38 703.627 1556.38 628.313C1556.38 500.061 1452.41 396.094 1324.16 396.094C1195.91 396.094 1091.94 500.061 1091.94 628.313C1091.94 756.566 1195.91 860.532 1324.16 860.532C1352.27 860.532 1378.74 855.347 1403.57 846.342L1546.83 1107.49C1491.44 1150.05 1455.69 1216.36 1455.69 1291.68C1455.69 1419.93 1559.65 1523.9 1687.91 1523.9C1816.16 1523.9 1920.13 1419.93 1920.13 1291.68C1920.13 1163.43 1816.16 1059.46 1687.91 1059.46H1688.18Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasteryLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MasteryLogo,
+ contentDescription = "MasteryLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MasteryPaths.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MasteryPaths.kt
new file mode 100644
index 0000000000..0b31222c67
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MasteryPaths.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MasteryPaths: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MasteryPaths",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1892.1 374.226 1517.874 0 1143.76 374.226l78.884 78.884 239.442-239.442v478.996c0 191.464-116.596 261.534-251.715 342.65-91.604 54.895-190.349 114.923-250.377 216.904-59.916-101.98-158.66-162.009-250.265-216.904-135.118-81.116-251.827-151.186-251.827-342.65V213.668L697.456 453.11l78.884-78.884L402.114 0 28 374.226l78.884 78.884 239.442-239.442v478.996c0 254.728 162.678 352.245 306.165 438.27 135.118 81.116 251.715 151.186 251.715 342.762V1920h111.576v-446.304c0-191.576 116.709-261.646 251.827-342.762 143.487-86.025 306.053-183.542 306.053-438.27V213.668l239.554 239.442 78.884-78.884Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasteryPathsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MasteryPaths,
+ contentDescription = "MasteryPaths",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MaterialsRequired.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MaterialsRequired.kt
new file mode 100644
index 0000000000..a43fb3a86a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MaterialsRequired.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MaterialsRequired: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MaterialsRequired",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m740.133 1272.387-4.266-4.693c-35.307-34.88-72.64-61.12-110.614-80.214 296-337.706 949.44-1005.76 1152.107-1013.973 6.613.32 13.653.32 22.507 9.173 3.306 3.307 3.413 11.734 3.306 16.32-7.893 200.214-676.906 856.107-1011.093 1150.294-14.187-25.28-31.147-50.774-51.947-76.907Zm-18.88 277.76c-53.76 119.787-301.866 176-463.36 196.587 26.24-66.987 53.76-168.534 53.76-299.2 0-71.68 50.88-146.987 118.4-175.254 19.734-8.213 40.32-12.266 61.227-12.266 54.72 0 112.32 27.733 167.36 81.28 66.027 83.946 87.147 154.133 62.613 208.853Zm-443.626-1369.6 102.72 102.72-137.92 138.027L138.96 317.827l138.667-137.28Zm1632.106 22.72c1.814-48.853-17.706-79.253-40.213-101.76-16.747-16.853-48.213-36.907-96.427-34.56C1548.667 76.12 1036.987 586.734 733.2 911.96L317.84 496.707 455.76 358.68 778 680.92l75.413-75.413L315.6 67.587c-20.693-20.693-54.187-20.8-75.307-.213L25.893 279.64C15.76 289.667 10 303.214 10 317.507c0 14.187 5.653 27.84 15.68 37.76l634.987 634.987c-69.76 75.946-121.92 134.613-147.947 164.373-41.92-3.52-83.733 2.56-123.733 19.2-108.374 45.227-184 157.76-184 273.707 0 208.213-80.427 330.133-80.96 331.093l-61.44 89.387 108.266-5.974c55.36-2.986 543.68-36.373 647.68-268.16 19.52-43.52 23.787-89.92 14.294-138.88 56.533-50.026 204.053-182.186 373.013-346.133l508.8 508.693v137.92h-137.92l-437.76-437.653-75.413 75.413 469.013 468.907h288.747V1573.4l-539.414-539.306c295.467-292.8 620.8-654.08 627.84-830.827Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MaterialsRequiredPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MaterialsRequired,
+ contentDescription = "MaterialsRequired",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MaterialsRequiredLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MaterialsRequiredLight.kt
new file mode 100644
index 0000000000..36168a5c1d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MaterialsRequiredLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MaterialsRequiredLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MaterialsRequiredLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m740.133 1272.387-4.266-4.693c-35.307-34.88-72.64-61.12-110.614-80.214 296-337.706 949.44-1005.76 1152.107-1013.973 6.613.32 13.653.32 22.507 9.173 3.306 3.307 3.413 11.734 3.306 16.32-7.893 200.214-676.906 856.107-1011.093 1150.294-14.187-25.28-31.147-50.774-51.947-76.907Zm-18.88 277.76c-53.76 119.787-301.866 176-463.36 196.587 26.24-66.987 53.76-168.534 53.76-299.2 0-71.68 50.88-146.987 118.4-175.254 19.734-8.213 40.32-12.266 61.227-12.266 54.72 0 112.32 27.733 167.36 81.28 66.027 83.946 87.147 154.133 62.613 208.853Zm-443.626-1369.6 102.72 102.72-137.92 138.027L138.96 317.827l138.667-137.28Zm1632.106 22.72c1.814-48.853-17.706-79.253-40.213-101.76-16.747-16.853-48.213-36.907-96.427-34.56C1548.667 76.12 1036.987 586.734 733.2 911.96L317.84 496.707 455.76 358.68 778 680.92l75.413-75.413L315.6 67.587c-20.693-20.693-54.187-20.8-75.307-.213L25.893 279.64C15.76 289.667 10 303.214 10 317.507c0 14.187 5.653 27.84 15.68 37.76l634.987 634.987c-69.76 75.946-121.92 134.613-147.947 164.373-41.92-3.52-83.733 2.56-123.733 19.2-108.374 45.227-184 157.76-184 273.707 0 208.213-80.427 330.133-80.96 331.093l-61.44 89.387 108.266-5.974c55.36-2.986 543.68-36.373 647.68-268.16 19.52-43.52 23.787-89.92 14.294-138.88 56.533-50.026 204.053-182.186 373.013-346.133l508.8 508.693v137.92h-137.92l-437.76-437.653-75.413 75.413 469.013 468.907h288.747V1573.4l-539.414-539.306c295.467-292.8 620.8-654.08 627.84-830.827Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MaterialsRequiredLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MaterialsRequiredLight,
+ contentDescription = "MaterialsRequiredLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Mature.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Mature.kt
new file mode 100644
index 0000000000..dc72dd219f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Mature.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Mature: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Mature",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M997.357 948.307c0-.113-.113-.226-.113-.339l.113.339ZM136.901 505.213l312.852 1244.072 211.277-53.158L448.286 850.23 628.3 804.86l373.12 805.605 230.012-57.898-52.48-886.188 180.24-45.37 212.743 846.01 211.164-53.158-312.965-1244.073-461.83 116.248 26.297 676.943c1.468 35.213-21.218 65.911-55.189 74.376-33.858 8.351-68.281-7.9-83.517-39.84L598.843 389.077 136.901 505.213Zm230.915 1380.973L0 423.276l660.127-166.02 254.39 521.194-22.685-579.544L1552.184 33 1920 1495.798l-430.115 108.121-186.222-740.71 45.935 776.036-411.155 103.494-326.846-705.497 186.221 740.823-430.002 108.121Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MaturePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Mature,
+ contentDescription = "Mature",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MatureLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MatureLight.kt
new file mode 100644
index 0000000000..b53899b43f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MatureLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MatureLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MatureLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M997.357 948.307c0-.113-.113-.226-.113-.339l.113.339ZM136.901 505.213l312.852 1244.072 211.277-53.158L448.286 850.23 628.3 804.86l373.12 805.605 230.012-57.898-52.48-886.188 180.24-45.37 212.743 846.01 211.164-53.158-312.965-1244.073-461.83 116.248 26.297 676.943c1.468 35.213-21.218 65.911-55.189 74.376-33.858 8.351-68.281-7.9-83.517-39.84L598.843 389.077 136.901 505.213Zm230.915 1380.973L0 423.276l660.127-166.02 254.39 521.194-22.685-579.544L1552.184 33 1920 1495.798l-430.115 108.121-186.222-740.71 45.935 776.036-411.155 103.494-326.846-705.497 186.221 740.823-430.002 108.121Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MatureLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MatureLight,
+ contentDescription = "MatureLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Media.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Media.kt
new file mode 100644
index 0000000000..78b6e3447d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Media.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Media: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Media",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1813.333 1557.195c-557.76 126.826-1148.48 126.826-1706.666 0V468.448c557.76-126.827 1148.48-126.933 1706.666 0v1088.747ZM1879.04 374.26c-600.32-143.573-1238.4-143.466-1838.08 0L0 384.075v1257.493l40.96 9.813c300.053 71.787 609.28 108.054 919.04 108.054 309.867 0 619.2-36.267 919.04-108.054l40.96-9.813V384.075l-40.96-9.814ZM853.333 786.987l376.32 225.813-376.32 225.813V786.987Zm-106.666 640 690.346-414.187-690.346-414.187v828.374Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MediaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Media,
+ contentDescription = "Media",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Message.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Message.kt
new file mode 100644
index 0000000000..ccdb667897
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Message.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Message: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Message",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1694.235h1920V226H0v1468.235ZM112.941 376.664V338.94H1807.06v37.723L960 1111.233l-847.059-734.57ZM1807.06 526.198v950.513l-351.134-438.89-88.32 70.475 378.353 472.998H174.042l378.353-472.998-88.32-70.475-351.134 438.89V526.198L960 1260.768l847.059-734.57Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MessagePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Message,
+ contentDescription = "Message",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Mic.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Mic.kt
new file mode 100644
index 0000000000..8c5f1c7f45
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Mic.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Mic: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Mic",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.315 96.818c-186.858 0-338.862 152.003-338.862 338.861v484.088c0 186.858 152.004 338.862 338.862 338.862 186.858 0 338.861-152.004 338.861-338.862V435.68c0-186.858-152.003-338.861-338.861-338.861M427.818 709.983V943.41c0 293.551 238.946 532.497 532.497 532.497 293.55 0 532.496-238.946 532.496-532.497V709.983h96.818V943.41c0 330.707-256.438 602.668-580.9 627.471l-.006 252.301h242.044V1920H669.862v-96.818h242.043l-.004-252.3C587.438 1546.077 331 1274.116 331 943.41V709.983h96.818ZM960.315 0c240.204 0 435.679 195.475 435.679 435.68v484.087c0 240.205-195.475 435.68-435.68 435.68-240.204 0-435.679-195.475-435.679-435.68V435.68C524.635 195.475 720.11 0 960.315 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MicPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Mic,
+ contentDescription = "Mic",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MicOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MicOff.kt
new file mode 100644
index 0000000000..87bb28e9e4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MicOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MicOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MicOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M621.452 435.678c0-186.858 152.004-338.862 338.862-338.862 159.316 0 293.306 110.504 329.336 258.896L724.351 1162.76c-63.433-61.62-102.899-147.78-102.899-242.994V435.678Zm46.834 807.122c-88.168-79.79-143.65-195.06-143.65-323.033V435.679C524.636 195.475 720.111 0 960.315 0c176.955 0 329.645 106.09 397.775 257.997L1538.8 0l92.38 64.669L333.381 1917.48 241 1852.81l305.287-435.84C414.414 1301.53 331 1132.02 331 943.411V709.984h96.818v233.427c0 155.809 67.319 296.239 174.392 393.719l66.076-94.33Zm292.028 15.83c-9.387 0-18.687-.39-27.883-1.14l-62.071 88.62c29.036 6.12 59.127 9.34 89.955 9.34 240.205 0 435.675-195.48 435.675-435.683V595.685l-96.81 138.223v185.858c0 186.854-152.01 338.864-338.866 338.864Zm-162.996 191.75-57.715 82.4c54.294 20.4 112.13 33.5 172.305 38.1v252.3H669.861V1920h580.909v-96.82h-242.044v-252.3c324.464-24.8 580.904-296.76 580.904-627.469V709.984h-96.82v233.427c0 293.549-238.94 532.499-532.495 532.499-56.824 0-111.602-8.96-162.997-25.53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MicOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MicOff,
+ contentDescription = "MicOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowDouble.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowDouble.kt
new file mode 100644
index 0000000000..9b9702bcd2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowDouble.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowDouble: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowDouble",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1319.1 790.054 1020.06 355.79c-33.165-48.165-87.553-47.273-120.104 0L600.92 790.054c-33.166 48.165-12.581 87.21 46.116 87.21h625.944c58.64 0 78.67-39.938 46.12-87.21ZM600.634 1129.94l299.035 434.27c33.167 48.16 87.554 47.27 120.101 0l299.04-434.27c33.17-48.16 12.58-87.21-46.12-87.21H646.75c-58.636 0-78.668 39.94-46.116 87.21Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowDoublePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowDouble,
+ contentDescription = "MiniArrowDouble",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowDown.kt
new file mode 100644
index 0000000000..40aaae6757
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M994.034 1226.26c-18.796 27.296-49.269 27.3-68.067 0L574.893 716.424C556.096 689.128 567.713 667 600.852 667h718.297c33.133 0 44.757 22.125 25.959 49.424L994.034 1226.26Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowDown,
+ contentDescription = "MiniArrowDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowEnd.kt
new file mode 100644
index 0000000000..9cc3eab93d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowEnd.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1225.982 926.244c27.296 18.796 27.3 49.269 0 68.067l-509.836 351.074c-27.296 18.797-49.424 7.18-49.424-25.959V601.13c0-33.133 22.125-44.757 49.424-25.959l509.836 351.074Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowEnd,
+ contentDescription = "MiniArrowEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowLeft.kt
new file mode 100644
index 0000000000..a1b309a35a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowLeft.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M694.018 926.244c-27.296 18.796-27.3 49.269 0 68.067l509.836 351.074c27.296 18.797 49.424 7.18 49.424-25.959V601.13c0-33.133-22.125-44.757-49.424-25.959L694.018 926.244Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowLeft,
+ contentDescription = "MiniArrowLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowRight.kt
new file mode 100644
index 0000000000..67d48144bc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowRight.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1225.982 926.244c27.296 18.796 27.3 49.269 0 68.067l-509.836 351.074c-27.296 18.797-49.424 7.18-49.424-25.959V601.13c0-33.133 22.125-44.757 49.424-25.959l509.836 351.074Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowRight,
+ contentDescription = "MiniArrowRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowStart.kt
new file mode 100644
index 0000000000..e0fde1f8c1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowStart.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M694.018 926.244c-27.296 18.796-27.3 49.269 0 68.067l509.836 351.074c27.296 18.797 49.424 7.18 49.424-25.959V601.13c0-33.133-22.125-44.757-49.424-25.959L694.018 926.244Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowStart,
+ contentDescription = "MiniArrowStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowUp.kt
new file mode 100644
index 0000000000..4956c78629
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MiniArrowUp.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MiniArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MiniArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M994.034 694.296c-18.796-27.296-49.269-27.3-68.067 0l-351.074 509.836c-18.797 27.296-7.18 49.424 25.959 49.424h718.297c33.133 0 44.757-22.125 25.959-49.424L994.034 694.296Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MiniArrowUp,
+ contentDescription = "MiniArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Minimize.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Minimize.kt
new file mode 100644
index 0000000000..a9975137d9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Minimize.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Minimize: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Minimize",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M451.765 1016.47h1016.47V903.53H451.765z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MinimizePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Minimize,
+ contentDescription = "Minimize",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Module.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Module.kt
new file mode 100644
index 0000000000..e2f5b7b77f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Module.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Module: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Module",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1242.353 65v269.139l367.623 214.136c51.953 30.269 84.142 86.287 84.142 146.372v386.824H1920v564.705h-557.026l-317.703 185.111c-26.316 15.36-55.793 23.04-85.271 23.04s-58.955-7.68-85.27-23.04l-317.704-185.11H0V1081.47h225.882V694.647c0-60.085 32.302-116.216 84.142-146.372L677.647 334.14V65h564.706Zm0 399.812v164.894H677.647V464.812L366.833 645.856c-17.28 10.052-28.01 28.8-28.01 48.791v386.824h225.883v438.55l366.946 213.685c17.393 10.278 39.303 10.278 56.696 0l366.946-213.685v-438.55h225.882V694.647c0-19.99-10.842-38.739-28.122-48.79l-310.701-181.045Zm564.706 729.6h-338.824v338.823h338.824v-338.823Zm-1355.294 0H112.94v338.823h338.824v-338.823Zm677.647-1016.47H790.588v338.823h338.824V177.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ModulePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Module,
+ contentDescription = "Module",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/More.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/More.kt
new file mode 100644
index 0000000000..3369175e08
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/More.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.More: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.More",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1468.235c93.448 0 169.412 75.965 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.447 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.447-75.964 169.412-169.412 169.412-93.448 0-169.412-75.965-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MorePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.More,
+ contentDescription = "More",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveDown.kt
new file mode 100644
index 0000000000..973bad0748
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1547v106.667H533.333V1547H1920Zm0-426.773V1227H533.333v-106.773H1920ZM106.667 267.043v426.666H457.92L282.347 518.136l75.306-75.52L662.08 747.043l-304.427 304.32-75.306-75.414L457.92 800.27H0V267.043h106.667Zm960 426.624v106.666H853.333V693.667h213.334Zm426.666 0v106.666H1280V693.667h213.333Zm426.667 0v106.666h-213.333V693.667H1920ZM1920 267v106.667H533.333V267H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveDown,
+ contentDescription = "MoveDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveDownBottom.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveDownBottom.kt
new file mode 100644
index 0000000000..cb4a113d3b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveDownBottom.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveDownBottom: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveDownBottom",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M106.667 141v1280H457.92l-175.573-175.68 75.306-75.413 304.427 304.32-304.427 304.426-75.306-75.413 175.573-175.573H0V141h106.667Zm960 1279.904v106.667H853.333v-106.667h213.334Zm426.666 0v106.667H1280v-106.667h213.333Zm426.667 0v106.667h-213.333v-106.667H1920Zm0-426.667v106.774H533.333V994.237H1920Zm0-426.666v106.666H533.333V567.571H1920Zm0-426.56v106.666H533.333V141.011H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveDownBottomPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveDownBottom,
+ contentDescription = "MoveDownBottom",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveEnd.kt
new file mode 100644
index 0000000000..2580b2fd6e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveEnd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1805.937 276v1368.756H1920V276h-114.063Zm-739.106 73.765-80.642 80.642 473.02 473.02H0v113.948h1459.208l-473.02 473.02 80.643 80.642 610.694-610.693-610.694-610.58Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveEnd,
+ contentDescription = "MoveEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveLeft.kt
new file mode 100644
index 0000000000..6ea090ed9c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M114.063 276v1368.756H0V276h114.063Zm739.106 73.765 80.642 80.642-473.02 473.02H1920v113.948H460.792l473.02 473.02-80.643 80.642-610.694-610.693 610.694-610.58Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveLeft,
+ contentDescription = "MoveLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveRight.kt
new file mode 100644
index 0000000000..29a95d2d42
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1805.937 276v1368.756H1920V276h-114.063Zm-739.106 73.765-80.642 80.642 473.02 473.02H0v113.948h1459.208l-473.02 473.02 80.643 80.642 610.694-610.693-610.694-610.58Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveRight,
+ contentDescription = "MoveRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveStart.kt
new file mode 100644
index 0000000000..56ef44185f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M114.063 276v1368.756H0V276h114.063Zm739.106 73.765 80.642 80.642-473.02 473.02H1920v113.948H460.792l473.02 473.02-80.643 80.642-610.694-610.693 610.694-610.58Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveStart,
+ contentDescription = "MoveStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveUp.kt
new file mode 100644
index 0000000000..8f749cfb09
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1546.993v106.666H533.341v-106.666H1920ZM357.651 442.668l304.425 304.319-304.425 304.318-75.306-75.306 175.572-175.68h-351.25v853.33H0V693.653h457.917L282.345 518.08l75.306-75.413ZM1920 1120.222v106.773H533.341v-106.773H1920Zm-853.329-426.558V800.33H853.34V693.664h213.332Zm426.665 0V800.33h-213.332V693.664h213.332Zm426.664 0V800.33h-213.332V693.664H1920ZM1920 267v106.666H533.341V267H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveUp,
+ contentDescription = "MoveUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveUpTop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveUpTop.kt
new file mode 100644
index 0000000000..81c870c281
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MoveUpTop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MoveUpTop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MoveUpTop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1672.031v106.67H533.303v-106.67H1920ZM357.661 141l304.434 304.327L357.66 749.76l-75.308-75.521L457.93 498.66H106.562v1280.03H0V392.099h457.93l-175.577-175.79L357.66 141ZM1920 1245.249v106.775H533.303V1245.25H1920Zm0-426.57v106.67H533.303v-106.67H1920Zm-853.352-426.676v106.669H853.31v-106.67h213.338Zm426.676 0v106.669h-213.338v-106.67h213.338Zm426.676 0v106.669h-213.338v-106.67H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveUpTopPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MoveUpTop,
+ contentDescription = "MoveUpTop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsExcel.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsExcel.kt
new file mode 100644
index 0000000000..97f9f337a8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsExcel.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MsExcel: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MsExcel",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.588 959.588h225.883V733.706H790.588v225.882Zm338.824 338.824h225.882v-225.883h-225.882v225.883Zm-338.824 0h225.883v-225.883H790.588v225.883Zm-338.823 0h225.882v-225.883H451.765v225.883Zm0-338.824h225.882V733.706H451.765v225.882Zm903.53-677.647v451.765h451.764v903.53H112.94V281.94h1242.353Zm112.94 23.379 315.445 315.445h-315.445V305.32Zm402.184 242.485L1541.195 218.58c-31.51-31.51-75.219-49.581-119.717-49.581H0v1581.176h1920V667.522c0-45.176-17.619-87.755-49.581-119.717Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MsExcelPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MsExcel,
+ contentDescription = "MsExcel",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsPpt.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsPpt.kt
new file mode 100644
index 0000000000..1d8b289f0a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsPpt.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MsPpt: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MsPpt",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1420.811 1342.116c29.93-44.724 47.436-98.484 47.436-156.197 0-136.32-97.13-250.391-225.883-276.593v260.668l178.447 172.122Zm-517.27-156.197c0 155.745 126.607 282.353 282.353 282.353 57.148 0 110.23-17.28 154.73-46.645l-211.2-203.633V909.326c-128.754 26.202-225.883 140.273-225.883 276.593Zm282.353-395.295c217.976 0 395.294 177.318 395.294 395.295 0 217.976-177.318 395.294-395.294 395.294-217.977 0-395.294-177.318-395.294-395.294 0-217.977 177.317-395.295 395.294-395.295Zm169.4-564.683v451.765h451.765v1016.47H112.94V225.941h1242.353ZM677.647 677.706H338.824v112.941h338.823V677.706Zm338.824-225.882v112.94H338.824v-112.94h677.647Zm451.764-202.504 315.445 315.445h-315.445V249.32Zm402.184 242.485L1541.195 162.58c-31.51-31.51-75.219-49.581-119.717-49.581H0v1694.118h1920V611.522c0-45.176-17.619-87.755-49.581-119.717Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MsPptPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MsPpt,
+ contentDescription = "MsPpt",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsWord.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsWord.kt
new file mode 100644
index 0000000000..12627f261c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/MsWord.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.MsWord: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.MsWord",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1251.654 0c44.499 0 88.207 18.07 119.718 49.581l329.223 329.224c31.963 31.962 49.581 74.54 49.581 119.717V1920H169V0Zm-66.183 112.941H281.94V1807.06h1355.294V564.706H1185.47V112.94Zm112.94 23.379v315.445h315.445L1298.412 136.32Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M959.588 338.824v451.764H507.824V338.824h451.764zm-112.94 112.94H620.764v225.883h225.882V451.765zm-338.824 564.707h903.529V903.529h-903.53zm0 451.764h790.588v-112.94H507.824zm0-225.882h677.647v-112.941H507.824z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MsWordPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.MsWord,
+ contentDescription = "MsWord",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Muted.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Muted.kt
new file mode 100644
index 0000000000..9d879aeb57
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Muted.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Muted: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Muted",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1505.845 72.093-187.52 223.467c-44.16-32.64-93.333-61.013-147.2-83.947-67.84-27.626-138.773-43.84-211.093-49.386V53H853.365v109.333c-357.44 27.414-640 326.4-640 690.667v373.333c0 56.427-22.72 111.574-62.293 151.04-39.467 39.574-94.613 62.294-151.04 62.294v106.666h269.333L119.18 1725.427l81.706 68.48L1587.552 140.573l-81.707-68.48ZM1479.467 462.6C1558.293 577.587 1600 712.627 1600 853v373.333c0 117.654 95.68 213.334 213.333 213.334 29.44 0 53.334 23.893 53.334 53.333 0 29.44-23.894 53.333-53.334 53.333h-586.666c0 176.427-143.574 320-320 320-176.427 0-320-143.573-320-320V1493c0-29.44 23.893-53.333 53.333-53.333h935.04c-50.773-56.64-81.707-131.414-81.707-213.334V853c0-118.72-35.2-232.96-101.76-330.027ZM1120 1546.333H693.333c0 117.654 95.68 213.334 213.334 213.334 117.653 0 213.333-95.68 213.333-213.334Zm-213.301-1280c77.12 0 152.426 14.827 223.253 43.734 43.733 18.666 83.84 41.813 119.573 67.626L358.86 1439.667h-120c51.733-58.027 81.173-134.827 81.173-213.334V853c0-323.413 263.253-586.667 586.667-586.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MutedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Muted,
+ contentDescription = "Muted",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Neutral.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Neutral.kt
new file mode 100644
index 0000000000..f63679367d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Neutral.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Neutral: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Neutral",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M453.333 1013.33H1466.67V906.667H453.333V1013.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NeutralPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Neutral,
+ contentDescription = "Neutral",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NextUnread.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NextUnread.kt
new file mode 100644
index 0000000000..15f7eaf4d9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NextUnread.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.NextUnread: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.NextUnread",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 373.397v1386.667h1706.667v-803.2H1600v602.56l-305.6-366.827-82.027 68.267 327.04 392.533H167.253l327.04-392.533-82.026-68.267-305.6 366.827v-897.6l746.666 690.88 490.56-453.76-72.32-78.4-418.24 386.773-746.666-690.88v-36.373H1123.2V373.397H0Zm1383.957-129.525c63.147-57.707 145.494-87.36 230.294-83.52 85.333 3.84 164.16 40.64 221.866 103.68 57.707 63.04 87.36 144.853 83.52 230.293-3.733 85.334-40.533 164.16-103.68 221.867-59.413 54.4-135.573 83.84-215.573 83.84-4.907 0-9.707-.107-14.613-.32-85.44-3.84-164.16-40.64-221.867-103.68-57.707-63.04-87.36-144.853-83.627-230.293 3.84-85.334 40.64-164.16 103.68-221.867Zm215.787 22.827c-53.333 0-104.107 19.626-143.68 55.893-42.133 38.507-66.667 90.987-69.227 147.947-2.56 56.96 17.28 111.36 55.68 153.493 38.507 42.027 91.094 66.56 148.054 69.12 56.853 2.88 111.36-17.28 153.386-55.68 42.134-38.507 66.667-91.093 69.12-147.947 2.56-56.96-17.173-111.466-55.68-153.493-38.4-42.027-90.986-66.56-147.946-69.12-3.2-.213-6.4-.213-9.707-.213Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NextUnreadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.NextUnread,
+ contentDescription = "NextUnread",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/No.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/No.kt
new file mode 100644
index 0000000000..2cc62d0944
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/No.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.No: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.No",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1599.04 1523.627 396.373 320.96C546.88 188.053 743.787 106.667 960 106.667c470.507 0 853.333 382.826 853.333 853.333 0 216.107-81.386 413.12-214.293 563.627M106.667 960c0-216.213 81.28-413.12 214.293-563.627L1523.627 1599.04c-150.507 132.907-347.52 214.293-563.627 214.293-470.507 0-853.333-382.826-853.333-853.333M960 0C429.76 0 0 429.76 0 960s429.76 960 960 960c530.133 0 960-429.76 960-960S1490.133 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.No,
+ contentDescription = "No",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NotGraded.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NotGraded.kt
new file mode 100644
index 0000000000..bec9b540c5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NotGraded.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.NotGraded: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.NotGraded",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.667 1333h106.666v-320h-106.666v320Zm0 213.333h106.666v-106.666h-106.666v106.666ZM1066.667 373v426.667H320V373h746.667ZM960 479.667H426.667V693H960V479.667Zm-640 640h533.333V1013H320v106.667ZM320 1333h320v-106.667H320V1333ZM0 52.99v1813.333h1066.667v-106.667h-960v-1600H1280v533.333h106.667v-640H0ZM1440 1653c205.867 0 373.333-167.467 373.333-373.333 0-205.867-167.466-373.334-373.333-373.334-205.867 0-373.333 167.467-373.333 373.334 0 205.866 167.466 373.333 373.333 373.333Zm0-853.333c264.64 0 480 215.36 480 480s-215.36 480-480 480-480-215.36-480-480 215.36-480 480-480Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NotGradedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.NotGraded,
+ contentDescription = "NotGraded",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Note.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Note.kt
new file mode 100644
index 0000000000..fc026f0da2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Note.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Note: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Note",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1783.68 1468.235-315.445 315.445v-315.445h315.445Zm-541.327-338.823v112.94h-903.53v-112.94h903.53Zm338.936-338.824V903.53H338.824V790.59h1242.465ZM621.176 0c93.403 0 169.412 76.01 169.412 169.412 0 26.09-6.437 50.484-16.94 72.62L999.98 468.255l-79.962 79.962-226.221-226.334c-22.137 10.504-46.532 16.942-72.622 16.942-93.402 0-169.411-76.01-169.411-169.412C451.765 76.009 527.775 0 621.176 0Zm395.295 225.882v112.942h790.588v1016.47h-451.765v451.765H112.941V338.824h225.883V225.882H0V1920h1421.478c45.176 0 87.755-17.619 119.717-49.581l329.224-329.11c31.962-32.076 49.581-74.655 49.581-119.831V225.882h-903.53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NotePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Note,
+ contentDescription = "Note",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NoteDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NoteDark.kt
new file mode 100644
index 0000000000..05f6f05935
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NoteDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.NoteDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.NoteDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1783.68 1468.235-315.445 315.445v-315.445h315.445Zm-541.327-338.823v112.94h-903.53v-112.94h903.53Zm338.936-338.824V903.53H338.824V790.59h1242.465ZM621.176 0c93.403 0 169.412 76.01 169.412 169.412 0 26.09-6.437 50.484-16.94 72.62L999.98 468.255l-79.962 79.962-226.221-226.334c-22.137 10.504-46.532 16.942-72.622 16.942-93.402 0-169.411-76.01-169.411-169.412C451.765 76.009 527.775 0 621.176 0Zm395.295 225.882v112.942h790.588v1016.47h-451.765v451.765H112.941V338.824h225.883V225.882H0V1920h1421.478c45.176 0 87.755-17.619 119.717-49.581l329.224-329.11c31.962-32.076 49.581-74.655 49.581-119.831V225.882h-903.53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NoteDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.NoteDark,
+ contentDescription = "NoteDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NoteLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NoteLight.kt
new file mode 100644
index 0000000000..6a3af6b6af
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NoteLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.NoteLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.NoteLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1783.68 1468.235-315.445 315.445v-315.445h315.445Zm-541.327-338.823v112.94h-903.53v-112.94h903.53Zm338.936-338.824V903.53H338.824V790.59h1242.465ZM621.176 0c93.403 0 169.412 76.01 169.412 169.412 0 26.09-6.437 50.484-16.94 72.62L999.98 468.255l-79.962 79.962-226.221-226.334c-22.137 10.504-46.532 16.942-72.622 16.942-93.402 0-169.411-76.01-169.411-169.412C451.765 76.009 527.775 0 621.176 0Zm395.295 225.882v112.942h790.588v1016.47h-451.765v451.765H112.941V338.824h225.883V225.882H0V1920h1421.478c45.176 0 87.755-17.619 119.717-49.581l329.224-329.11c31.962-32.076 49.581-74.655 49.581-119.831V225.882h-903.53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NoteLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.NoteLight,
+ contentDescription = "NoteLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Notepad.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Notepad.kt
new file mode 100644
index 0000000000..95d9e919b9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Notepad.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Notepad: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Notepad",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M106.667 267H320v213.333h853.33V267h213.34v160h106.66V160.333h-329.1C1142.26 98.19 1083 53.667 1013.33 53.667H480c-69.665 0-128.931 44.523-150.896 106.666H0V1867h1493.33v-320h-106.66v213.33H106.667V267Zm320 106.667v-160c0-29.456 23.878-53.334 53.333-53.334h533.33c29.46 0 53.34 23.878 53.34 53.334v160H426.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1677.57 528.309 225.88 225.883c22.02 22.023 22.02 57.713 0 79.849L1225.8 1511.69c-10.62 10.5-24.96 16.49-39.98 16.49H959.937c-31.171 0-56.47-25.3-56.47-56.47v-225.89c0-15.02 5.986-29.36 16.489-39.86L1597.6 528.309c22.14-22.136 57.83-22.136 79.97 0Zm-155.41 235.144 146.03 146.033 115.43-115.426-146.04-146.033-115.42 115.426Zm-505.75 651.787h146.03l425.9-425.9-146.03-146.038-425.9 425.898v146.04Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NotepadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Notepad,
+ contentDescription = "Notepad",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NumberedList.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NumberedList.kt
new file mode 100644
index 0000000000..fbb977881a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/NumberedList.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.NumberedList: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.NumberedList",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M169.412 1355.294c93.402 0 169.412 76.01 169.412 169.412 0 43.595-16.942 82.899-44.16 112.941 27.218 30.042 44.16 69.346 44.16 112.941 0 93.403-76.01 169.412-169.412 169.412H0v-112.941h169.412c31.059 0 56.47-25.412 56.47-56.47 0-31.06-25.411-56.471-56.47-56.471H0v-112.942h169.412c31.059 0 56.47-25.411 56.47-56.47 0-31.059-25.411-56.47-56.47-56.47H0v-112.942ZM1920 1468.235v112.941H564.706v-112.94H1920ZM188.058 677.67c61.78 0 118.814 38.4 145.356 97.694 28.8 64.037 15.36 136.546-35.916 194.033-16.286 18.262-34.108 37.88-52.187 57.582l-3.101 3.377c-2.07 2.252-4.14 4.505-6.213 6.755l-3.108 3.374-3.107 3.37c-28.478 30.87-56.688 61.043-79.672 85.58h188.725v112.94H56.482c-31.285 0-56.47-25.298-56.47-56.47v-39.53c0-14.456 5.533-28.46 15.585-38.964.113-.113 117.459-123.558 197.647-213.233 21.346-23.944 27.445-49.807 17.167-72.621-8.131-18.297-25.637-30.946-42.353-30.946-40.546 0-82.898 48.452-94.418 65.506L.01 792.983C7.804 781.237 80.425 677.67 188.058 677.67ZM1920 903.53v112.94H564.706V903.53H1920ZM169.412 0c31.172 0 56.47 25.299 56.47 56.47v508.236h-112.94V112.94H0V0ZM1920 338.824v112.94H564.706v-112.94H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NumberedListPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.NumberedList,
+ contentDescription = "NumberedList",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Off.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Off.kt
new file mode 100644
index 0000000000..edc11226d4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Off.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Off: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Off",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1591.462 544.364c129.295 100.893 238.985 236.548 316.774 392.233L1920 960.23l-11.658 23.634c-187.797 377.713-551.097 612.353-948.31 612.353-111.385 0-220.227-18.546-323.876-55.003l35.186-99.94c92.203 32.43 189.386 48.963 288.69 48.963 348.463 0 668.417-202.422 841.164-529.795-69.735-131.839-164.48-246.404-274.912-332.46ZM959.968 430.361c99.41 0 196.487 16.533 290.492 49.6 27.555 8.69 55.321 19.711 82.982 32.005l-189.704 189.705c-52.142-36.988-115.2-59.35-183.77-59.35-175.291 0-317.94 142.65-317.94 317.941 0 68.57 22.362 131.627 59.349 183.77l-212.703 212.596c-30.734-18.547-62.21-39.319-94.852-64.012-110.537-86.056-205.283-200.727-275.124-332.46C291.55 632.677 611.61 430.361 959.968 430.361Zm181.968 422.861c18.653 31.582 29.993 67.827 29.993 107.04 0 116.896-95.065 211.96-211.96 211.96-39.107 0-75.459-11.34-106.935-29.992l288.902-289.008Zm-181.968-104.92c39.213 0 75.458 11.446 107.04 29.992L778 1067.302c-18.546-31.582-29.992-67.827-29.992-107.04 0-116.79 95.064-211.96 211.96-211.96Zm0 529.9c175.397 0 317.94-142.543 317.94-317.94 0-68.463-22.361-131.627-59.242-183.663l573.67-573.671L1717.408 128l-304.905 304.905c-43.027-21.408-86.373-40.273-128.66-53.52-103.542-36.457-212.49-55.004-323.875-55.004-397.213 0-760.62 234.64-948.204 612.354L0 960.368l11.764 23.634c77.79 155.685 187.479 291.34 317.516 392.656 28.403 21.514 55.64 40.167 82.24 57.23l-283.814 283.814 74.928 74.928 573.67-573.67c52.037 36.88 115.095 59.243 183.664 59.243"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Off,
+ contentDescription = "Off",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/OpenFolder.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/OpenFolder.kt
new file mode 100644
index 0000000000..0c4731000d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/OpenFolder.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.OpenFolder: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.OpenFolder",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m494.165 640.333-278.4 890.774 101.867 31.786L572.459 747h1211.306l-183.36 917.12c-5.013 24.853-26.986 42.88-52.266 42.88H159.979c-29.334 0-53.334-23.893-53.334-53.333v-1440h454.507L732.779 427h760.533v106.667h106.667V320.333H783.872L612.139 107H-.021v1546.667c0 88.213 71.786 160 160 160h1388.16c75.946 0 141.973-54.08 156.906-128.64l208.96-1044.694H494.165Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OpenFolderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.OpenFolder,
+ contentDescription = "OpenFolder",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outcomes.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outcomes.kt
new file mode 100644
index 0000000000..681668aed7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outcomes.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Outcomes: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Outcomes",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c170.654 0 339.05 46.08 487.115 133.158l-57.26 97.355C1259.067 153.6 1110.437 112.94 960 112.94c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-150.55-40.659-299.181-117.572-429.967l97.242-57.148C1873.92 620.95 1920 789.345 1920 960c0 529.355-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 338.824v112.94c-280.207 0-508.235 228.029-508.235 508.236S679.793 1468.235 960 1468.235 1468.235 1240.207 1468.235 960h112.941c0 342.55-278.738 621.176-621.176 621.176-342.438 0-621.176-278.625-621.176-621.176 0-342.55 278.738-621.176 621.176-621.176Zm0 338.823v112.941c-93.402 0-169.412 76.01-169.412 169.412s76.01 169.412 169.412 169.412 169.412-76.01 169.412-169.412h112.94c0 155.633-126.606 282.353-282.352 282.353-155.746 0-282.353-126.72-282.353-282.353S804.254 677.647 960 677.647Zm863.413-661.18 79.962 79.85-581.23 581.33h259.031v112.941h-451.764V338.824h112.94v258.905l581.06-581.262Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OutcomesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Outcomes,
+ contentDescription = "Outcomes",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outdent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outdent.kt
new file mode 100644
index 0000000000..ba70fa4bef
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outdent.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Outdent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Outdent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1919.885 1468.303v114.918H81.305v-114.918h1838.58Zm0-344.755v114.918H81.305v-114.918h1838.58Zm.115-344.756v114.919H885.734V778.792H1920ZM270.518 336l81.247 81.132L220.07 548.944h493.345v114.918H220.069l131.696 131.812-81.247 81.247L0 606.518 270.518 336ZM1920 434.037v114.918H885.734V434.037H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OutdentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Outdent,
+ contentDescription = "Outdent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outdent2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outdent2.kt
new file mode 100644
index 0000000000..86c45a4a82
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Outdent2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Outdent2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Outdent2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1919.885 1468.303v114.918H81.305v-114.918h1838.58Zm0-344.755v114.918H81.305v-114.918h1838.58Zm.115-344.756v114.919H885.734V778.792H1920ZM270.518 336l81.247 81.132L220.07 548.944h493.345v114.918H220.069l131.696 131.812-81.247 81.247L0 606.518 270.518 336ZM1920 434.037v114.918H885.734V434.037H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Outdent2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Outdent2,
+ contentDescription = "Outdent2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/OvalHalf.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/OvalHalf.kt
new file mode 100644
index 0000000000..a62fd342c5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/OvalHalf.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.OvalHalf: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.OvalHalf",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M962 0c530.193 0 960 429.807 960 960s-429.807 960-960 960S2 1490.193 2 960 431.807 0 962 0Zm0 106.667c-453.37 0-824.16 353.558-851.693 799.994h1703.386C1786.16 460.225 1415.37 106.667 962 106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OvalHalfPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.OvalHalf,
+ contentDescription = "OvalHalf",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PageDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PageDown.kt
new file mode 100644
index 0000000000..0bf60d198e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PageDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.PageDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.PageDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1751.02 1806.927V1920H168v-113.073h1583.02Zm0-226.146v113.073H168v-113.073h1583.02ZM1013.785 0v1168.382l355.727-355.84 80.056 80.055-492.32 492.206L464.93 892.597l80.056-80.055 355.727 355.84V0h113.073Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PageDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.PageDown,
+ contentDescription = "PageDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PageUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PageUp.kt
new file mode 100644
index 0000000000..c860d352ff
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PageUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.PageUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.PageUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M168 113.074h1583.02V.001H168v113.073Zm0 226.144h1583.02V226.146H168v113.072Zm296.929 688.185 80.056 80.055 355.727-355.84V1920h113.073V751.618l355.727 355.84 80.056-80.055-492.319-492.206-492.32 492.206Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PageUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.PageUp,
+ contentDescription = "PageUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Paint.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Paint.kt
new file mode 100644
index 0000000000..95e3795611
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Paint.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Paint: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Paint",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M517.257 1127.343c72.733 0 148.871 36.586 221.274 107.45 87.455 110.418 114.922 204.135 81.632 278.296-72.733 162.274-412.664 234.897-618.666 259.178 34.609-82.62 75.15-216.88 75.15-394.645 0-97.123 66.47-195.455 157.88-233.689 26.698-11.097 54.494-16.59 82.73-16.59Zm229.404-167.109c54.055 28.895 106.462 65.371 155.133 113.494l13.844 15.6c28.016 35.378 50.649 69.987 70.425 104.155-29.554 26.259-59.878 52.737-90.75 79.545-18.898-35.488-43.069-71.964-72.843-109.319l-4.285-4.834c-48.342-47.683-99.43-83.39-151.727-107.011 26.368-30.653 53.066-61.196 80.203-91.63Zm1046.49-803.133c7.801 7.8 18.129 21.754 16.92 52.187-6.043 155.683-284.338 494.405-740.509 909.266-19.995-32.302-41.969-64.822-67.788-97.453l-22.523-25.27c-49.22-48.671-101.408-88.883-156.012-121.074 350.588-385.855 728.203-734.356 910.254-741.828 30.983-.109 44.497 9.01 59.658 24.172Zm126.678 56.472c2.087-53.615-14.832-99.98-56.142-141.29-34.28-34.279-81.962-51.198-134.588-49.11-304.554 12.414-912.232 683.377-1179.54 996.17-53.616-5.383-106.682 2.088-157.441 23.402-132.61 55.263-225.339 193.038-225.339 334.877 0 268.517-103.935 425.737-104.923 427.275L0 1896.747l110.307-6.153c69.217-3.735 681.29-45.375 810.165-332.46 24.39-54.604 29.225-113.163 15.93-175.239 374.32-321.802 972.11-879.71 983.427-1169.322"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PaintPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Paint,
+ contentDescription = "Paint",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Paperclip.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Paperclip.kt
new file mode 100644
index 0000000000..c49ecf83b5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Paperclip.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Paperclip: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Paperclip",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1752.768 221.109C1532.646.986 1174.283.986 954.161 221.109l-838.588 838.588c-154.052 154.165-154.052 404.894 0 558.946 149.534 149.421 409.976 149.308 559.059 0l758.738-758.626c87.982-88.094 87.982-231.417 0-319.51-88.32-88.208-231.642-87.982-319.51 0l-638.796 638.908 79.85 79.849 638.795-638.908c43.934-43.821 115.539-43.934 159.812 0 43.934 44.047 43.934 115.877 0 159.812l-758.739 758.625c-110.23 110.118-289.355 110.005-399.36 0-110.118-110.117-110.005-289.242 0-399.247l838.588-838.588c175.963-175.962 462.382-176.188 638.909 0 176.075 176.188 176.075 462.833 0 638.908l-798.607 798.72 79.849 79.85 798.607-798.72c220.01-220.123 220.01-578.485 0-798.607"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PaperclipPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Paperclip,
+ contentDescription = "Paperclip",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Partial.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Partial.kt
new file mode 100644
index 0000000000..8992035590
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Partial.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Partial: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Partial",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M451.765 1016.47h1016.47V903.53H451.765z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PartialPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Partial,
+ contentDescription = "Partial",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PasswordReset.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PasswordReset.kt
new file mode 100644
index 0000000000..bb68fe976b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PasswordReset.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.PasswordReset: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.PasswordReset",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0V112.941C1427.12 112.941 1807.06 492.875 1807.06 960C1807.06 1427.12 1427.12 1807.06 960 1807.06C492.875 1807.06 112.941 1427.12 112.941 960C112.941 692.894 239.548 444.085 451.765 284.273V677.647H564.706V112.941H0V225.882H342.889C127.059 407.379 0 674.711 0 960C0 1489.36 430.645 1920 960 1920C1489.36 1920 1920 1489.36 1920 960C1920 430.645 1489.36 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.51 1241.85C1185.51 1273.02 1160.21 1298.32 1129.03 1298.32H790.211C759.152 1298.32 733.74 1273.02 733.74 1241.85V959.499H1185.51V1241.85ZM846.683 733.615C846.683 671.384 897.394 620.674 959.624 620.674C1021.97 620.674 1072.57 671.384 1072.57 733.615V846.556H846.683V733.615ZM1185.51 733.617C1185.51 609.043 1084.31 507.734 959.624 507.734C835.05 507.734 733.742 609.043 733.742 733.617V846.558H620.801V1241.85C620.801 1335.25 696.81 1411.26 790.213 1411.26H1129.04C1222.55 1411.26 1298.45 1335.25 1298.45 1241.85V846.558H1185.51V733.617Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PasswordResetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.PasswordReset,
+ contentDescription = "PasswordReset",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pause.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pause.kt
new file mode 100644
index 0000000000..8ecdca5d0d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pause.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Pause: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Pause",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M206 1920h548.571V0H206v1920ZM1714.571 0v1920H1166V0h548.571ZM617.43 137.143v1645.714H343.143V137.143h274.286Zm685.714 1645.714h274.286V137.143h-274.286v1645.714Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PausePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Pause,
+ contentDescription = "Pause",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pdf.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pdf.kt
new file mode 100644
index 0000000000..0d300df5a9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pdf.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Pdf: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Pdf",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1251.654 0c44.499 0 88.207 18.07 119.718 49.581l329.223 329.224c31.963 31.962 49.581 74.54 49.581 119.717V1920H169V0Zm-66.183 112.941H281.94V1807.06h1355.294V564.706H1185.47V112.94Zm112.94 23.379v315.445h315.445L1298.412 136.32Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M900.497 677.67c26.767 0 50.372 12.65 67.991 37.835 41.901 59.068 38.965 121.976 23.492 206.682-5.308 29.14.113 58.617 16.263 83.125 22.814 34.786 55.68 82.673 87.981 123.219 23.718 29.93 60.198 45.854 97.13 40.885 23.718-3.276 52.292-5.986 81.656-5.986 131.012 0 121.186 46.757 133.045 89.675 6.55 25.976 3.275 48.678-10.165 65.506-16.715 22.701-51.162 34.447-101.534 34.447-55.793 0-74.202-9.487-122.767-24.96-27.445-8.81-55.906-10.617-83.69-3.275-55.453 14.456-146.936 36.48-223.284 46.983-40.772 5.647-77.816 26.654-102.438 60.875-55.454 76.8-106.842 148.518-188.273 148.518-21.007 0-40.32-7.567-56.244-22.701-23.492-23.492-33.544-49.581-28.574-79.85 13.778-92.95 128.075-144.79 196.066-182.625 16.037-8.923 28.687-22.589 36.592-39.53l107.86-233.223c7.68-16.377 10.051-34.56 7.228-52.518-12.537-79.059-31.06-211.99 18.748-272.075 10.955-13.44 26.09-21.007 42.917-21.007Zm20.556 339.953c-43.257 126.607-119.718 264.282-129.996 280.32 92.273-43.37 275.916-65.28 275.916-65.28-92.386-88.998-145.92-215.04-145.92-215.04Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PdfPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Pdf,
+ contentDescription = "Pdf",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PeerGraded.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PeerGraded.kt
new file mode 100644
index 0000000000..184056f3dc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PeerGraded.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.PeerGraded: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.PeerGraded",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M716.582 133c212.77 0 385.853 173.192 385.853 385.852v110.244c0 116.747-53.138 220.266-135.38 291.042 59.642 7.276 119.284 16.316 178.154 28.774 166.798 35.057 287.956 194.139 287.956 378.245v211.888l-22.49 16.426c-120.937 88.746-367.22 232.393-694.974 232.393-17.309 0-34.837-.44-52.587-1.212-288.727-13.56-507.781-133.174-640.735-231.18L0 1538.934v-211.888c0-184.107 121.268-343.188 288.287-378.245 58.539-12.348 117.85-21.829 177.381-28.994-82.02-70.887-134.938-174.185-134.938-290.712V518.852C330.73 306.192 503.813 133 716.582 133Zm405.917 923.73c-149.931-31.64-304.162-45.751-455.416-41.782-119.173 2.976-239.008 17.087-356.086 41.672-116.307 24.474-200.754 138.245-200.754 270.427v155.774c122.15 85.439 312.54 182.122 558.053 193.698 303.39 14.552 532.035-108.59 654.625-193.808v-155.554c0-132.292-84.336-245.953-200.422-270.427ZM625.08 518.852c-38.695 0-55.342 15.324-82.903 40.68-23.702 21.938-53.909 49.61-101.203 62.398v7.166c0 152.025 123.583 275.608 275.608 275.608 152.026 0 275.61-123.583 275.61-275.608v-45.2c-29.326 23.261-68.242 45.2-127.883 45.2-81.69 0-125.568-40.35-157.648-69.785-27.23-25.245-43.657-40.459-81.58-40.459ZM1842.058 307.66 1920 385.6l-431.713 431.713-235.37-235.37 77.942-77.942 157.428 157.428 353.77-353.771ZM716.582 243.243c-145.3 0-263.481 113.441-273.624 256.206 7.717-5.953 15.545-12.678 24.474-20.946 32.081-29.435 75.958-69.894 157.648-69.894 80.92 0 124.575 40.238 156.326 69.563 27.56 25.356 44.207 40.68 82.903 40.68 37.593 0 53.798-15.103 80.918-40.129 11.025-10.142 22.82-20.946 36.491-30.978-31.64-117.41-137.915-204.502-265.136-204.502Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PeerGradedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.PeerGraded,
+ contentDescription = "PeerGraded",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PeerReview.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PeerReview.kt
new file mode 100644
index 0000000000..76ca8a93d8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PeerReview.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.PeerReview: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.PeerReview",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1281.536 1465.487c-118.756 82.552-340.248 201.842-634.147 187.745-237.831-11.213-422.266-104.872-540.594-187.638v-150.9c0-128.048 81.804-238.26 194.473-261.968 113.416-23.815 229.502-37.485 344.947-40.369 146.522-3.844 295.928 9.825 441.168 40.476 112.455 23.708 194.153 133.813 194.153 261.967v150.687ZM427.179 638.576v-6.942c45.815-12.388 75.076-39.193 98.037-60.445 26.699-24.563 42.825-39.408 80.31-39.408 36.737 0 52.65 14.738 79.028 39.194 31.077 28.514 73.581 67.601 152.716 67.601 57.776 0 95.475-21.252 123.882-43.786v43.786c0 147.27-119.717 266.987-266.987 266.987-147.27 0-266.986-119.717-266.986-266.987Zm266.986-373.781c123.241 0 226.191 84.367 256.842 198.104-13.243 9.718-24.67 20.184-35.35 30.01-26.271 24.241-41.97 38.872-78.387 38.872-37.485 0-53.61-14.844-80.31-39.407-30.756-28.407-73.047-67.387-151.434-67.387-79.135 0-121.64 39.193-152.717 67.707-8.65 8.01-16.232 14.525-23.708 20.291 9.825-138.299 124.309-248.19 265.064-248.19Zm415.218 683.592c-57.028-12.067-114.804-20.825-172.58-27.873 79.669-68.562 131.144-168.842 131.144-281.938V531.781C1067.947 325.774 900.279 158 694.165 158c-206.113 0-373.781 167.774-373.781 373.781v106.795c0 112.882 51.261 212.949 130.717 281.618-57.67 6.941-115.125 16.126-171.833 28.087C117.474 982.24 0 1136.346 0 1314.693v205.26l21.68 16.019c128.794 94.94 340.995 210.812 620.69 223.948 17.194.748 34.174 1.175 50.941 1.175 317.5 0 556.08-139.154 673.234-225.123l21.786-15.913V1314.8c0-178.346-117.368-332.45-278.948-366.412Zm399.818-256.37h-120.892V571.23l225.764-225.764 120.785 120.785-225.657 225.764Zm389.48-341.85L1730.16 181.75c-27.446-27.553-75.29-27.873-103.27-.107l-324.336 324.229c-13.563 13.776-21.038 32.038-21.038 51.368v241.57h241.57c19.222 0 37.27-7.37 51.688-21.36l324.015-324.014c28.3-28.408 28.3-74.756-.107-103.27Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PeerReviewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.PeerReview,
+ contentDescription = "PeerReview",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Permissions.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Permissions.kt
new file mode 100644
index 0000000000..c182b85fb8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Permissions.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Permissions: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Permissions",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1707 1760c0 29.44-23.893 53.333-53.333 53.333h-320c-29.44 0-53.334-23.893-53.334-53.333v-266.667H1707V1760ZM213.667 1484.053V1337.6c0-86.613 56.426-162.133 140.48-187.947 182.826-56 373.12-82.24 562.346-82.986 146.88.746 292.8 19.413 436.267 54.4-44.053 39.04-72.427 95.466-72.427 158.933v106.667h-106.666v288.32c-87.467 20.266-176.96 31.68-266.667 31.68-144.427 0-423.467-29.334-693.333-222.614ZM1387 1280c0-58.773 47.893-106.667 106.667-106.667 58.773 0 106.666 47.894 106.666 106.667v106.667H1387V1280ZM899.533 106.667h14.934c174.08 0 322.346 122.56 357.653 290.24-30.187 17.493-61.44 29.76-115.52 29.76-69.547 0-101.12-19.947-141.227-45.227-45.653-28.8-97.28-61.44-196.906-61.44-100.374 0-152.32 32.747-198.187 61.653-26.773 16.96-49.813 31.467-82.987 39.147 25.28-177.28 178.134-314.133 362.24-314.133Zm807.467 1280V1280c0-61.653-26.667-116.8-68.587-155.733l.107-.107c-37.867-43.733-123.093-69.76-146.88-76.267-100.373-30.826-202.88-53.013-306.453-67.626C1306.893 894.72 1387 753.813 1387 594.133h-106.667c0 201.707-164.16 365.867-365.866 365.867h-14.934c-201.706 0-365.866-164.16-365.866-365.867v-64.32c66.24-9.173 106.88-34.773 143.573-57.92 40.107-25.28 71.787-45.226 141.227-45.226 68.693 0 100.16 19.84 139.946 45.013 45.867 28.907 97.814 61.653 198.187 61.653 100.373 0 152.533-33.066 202.453-64.746l28.267-18.027-3.84-33.28C1355.427 179.413 1153.72 0 914.467 0h-14.934C638.947 0 427 211.947 427 480v114.133c0 159.787 80.107 300.694 201.92 386.24-103.36 14.507-205.653 36.587-306.133 67.307C193.72 1087.36 107 1203.84 107 1337.6v200.213l21.333 15.894C429.453 1779.627 745.4 1813.333 907 1813.333c90.453 0 180.48-11.52 268.907-30.506 11.306 77.333 77.333 137.173 157.76 137.173h320c88.213 0 160-71.787 160-160v-373.333H1707Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PermissionsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Permissions,
+ contentDescription = "Permissions",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pin.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pin.kt
new file mode 100644
index 0000000000..f182140f0b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pin.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Pin: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Pin",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m692.08 851.622 343.003 343.002c53.309 53.308 82.673 124.235 82.673 199.567 0 75.445-29.364 146.372-82.673 199.68l-16.49 16.49-742.361-742.25 16.489-16.49c106.73-106.842 292.743-106.842 399.36 0Zm340.18-387.389 390.437 390.438-286.193 286.193c-7.34-8.584-13.44-18.07-21.571-26.09L771.93 771.773c-4.752-4.819-10.019-8.805-15.309-12.757l-1.983-1.482c-2.974-2.225-5.936-4.471-8.797-6.88l286.419-286.42Zm102.776-304.489 592.15 592.038-83.914 83.915c-22.024 22.023-57.826 22.023-79.85 0l-20.442-20.442c-.226-.226-.226-.452-.452-.678-.226-.113-.452-.113-.565-.339L1072.806 345.08c-.226-.225-.34-.564-.565-.79-.226-.226-.565-.339-.79-.452l-20.33-20.33c-22.024-22.023-22.024-57.938 0-79.962l83.915-83.802Zm0-159.699L971.272 163.697c-59.295 59.294-62.344 150.776-15.022 216.847L658.876 677.918c-4.066 3.953-6.437 8.81-9.035 13.553-144.565-60.085-322.899-33.656-436.97 80.301l-96.338 96.34 411.106 411.105-511.06 511.059c-22.136 22.023-22.136 57.826 0 79.85 10.956 11.067 25.413 16.602 39.869 16.602s28.913-5.535 39.981-16.603l511.059-511.059 411.106 410.993 96.339-96.339c74.654-74.54 115.764-173.816 115.764-279.529 0-55.115-11.745-108.31-33.091-157.327 2.597-1.92 5.647-3.05 8.018-5.421l300.763-300.763c29.365 20.895 62.456 34.448 96.903 34.448 43.37 0 86.852-16.603 119.83-49.582l163.766-163.764L1135.036.045Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PinPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Pin,
+ contentDescription = "Pin",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pinterest.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pinterest.kt
new file mode 100644
index 0000000000..f0201af439
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Pinterest.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Pinterest: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Pinterest",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1368.619 1166.432c-90.774 96.64-206.614 142.4-334.614 132.8-95.573-7.253-220.053-73.707-221.333-74.347l-63.787-34.24-13.76 71.04c-37.653 193.6-82.346 334.827-181.653 439.787-11.627-214.613 38.933-400.213 88-580.48 20.587-75.52 41.813-153.707 58.027-232.213l4.16-20.374-10.774-17.813c-50.88-84.267-35.946-233.6 31.254-313.387 25.28-30.186 53.44-45.12 85.226-45.12 14.614 0 29.974 3.2 46.187 9.494 68.587 26.773 62.187 92.8 9.813 265.173-34.88 114.773-70.933 233.387-18.986 320.213 27.093 45.227 74.133 74.774 139.946 87.787 146.56 28.693 276.054-39.573 355.307-188.16 98.987-185.387 101.973-486.827-51.307-640.107-168.32-168.106-443.733-199.04-670.08-75.306-201.706 110.293-298.56 308.586-252.906 517.44 20.16 91.946-16.64 136.533-41.28 155.306-58.56-45.973-62.187-170.24-58.347-277.013 11.84-321.6 295.253-525.76 556.16-554.453 320.427-35.414 669.12 103.253 715.627 436.586 32.106 230.294-34.88 472.64-170.88 617.387m276.48-632.107C1595.712 180.62 1245.312-41.14 812.139 6.432c-305.174 33.6-637.014 275.2-650.987 656.64-5.973 162.027 6.613 335.253 144.96 391.467l19.52 7.893 19.52-7.467c60.587-23.146 164.907-113.386 126.4-289.173-35.733-163.2 39.04-313.067 199.893-401.067 151.36-82.773 386.027-100.053 543.467 57.28 106.667 106.667 121.92 346.987 32.64 514.347-39.893 74.773-113.813 158.72-240.533 133.76-52.587-10.453-65.067-31.147-69.12-37.973-27.627-46.187 2.666-146.134 29.546-234.347 44.374-146.133 99.734-328.213-73.066-395.627-94.08-36.586-185.707-12.373-251.947 66.347-91.307 108.48-112.853 294.4-51.52 417.813-14.72 68.587-33.067 135.787-52.373 206.72-59.414 218.134-120.854 443.734-80.854 723.52l12.48 86.934 71.36-51.094c165.12-118.08 235.627-281.706 284.374-503.253 52.8 22.933 130.133 51.093 200 56.427 162.133 12.16 306.88-45.227 420.48-166.08 157.226-167.467 235.2-444.16 198.72-705.174"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PinterestPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Pinterest,
+ contentDescription = "Pinterest",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Play.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Play.kt
new file mode 100644
index 0000000000..2d508fdae4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Play.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Play: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Play",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M175 .024V1920l1570.845-959.927L175 .024Zm121.648 216.9 1215.875 743.149-1215.875 743.028V216.923Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PlayPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Play,
+ contentDescription = "Play",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Plus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Plus.kt
new file mode 100644
index 0000000000..be540e94e6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Plus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Plus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Plus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M915.744 213v702.744H213v87.842h702.744v702.744h87.842v-702.744h702.744v-87.842h-702.744V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PlusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Plus,
+ contentDescription = "Plus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PostToSis.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PostToSis.kt
new file mode 100644
index 0000000000..7e4b457240
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/PostToSis.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.PostToSis: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.PostToSis",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M922.315 1188.96c20.8-20.8 54.613-20.8 75.413 0l266.667 266.667-75.414 75.413-175.68-175.573v564.586h-106.56v-564.586l-175.68 175.573-75.413-75.413ZM508.928 220.405c88.533-23.36 205.013 12.694 275.84 85.654l-76.373 74.346c-43.734-44.906-120.96-70.4-172.48-56.746-25.387 6.613-40.32 21.333-46.827 45.973-17.28 65.493 113.92 112.853 115.307 113.387 86.08 28.16 221.653 111.253 182.4 243.306-18.454 62.08-63.68 104.96-127.36 120.534-17.707 4.373-36.374 6.506-55.36 6.506-76.587 0-159.254-34.24-215.68-92.266l76.373-74.347c43.2 44.48 117.653 69.547 169.067 56.533 26.986-6.613 43.093-21.653 50.666-47.253 19.414-64.96-112.213-111.253-113.493-111.787-85.227-28.16-219.733-110.72-185.067-241.813 16.32-62.187 60.16-105.493 122.987-122.027Zm746.613 0c88.534-23.36 205.014 12.694 275.84 85.654l-76.373 74.346c-43.733-44.906-120.96-70.4-172.48-56.746-25.387 6.613-40.32 21.333-46.827 45.973-17.28 65.493 113.92 112.853 115.307 113.387 86.08 28.16 221.653 111.253 182.4 243.306-18.453 62.08-63.68 104.96-127.36 120.534-17.707 4.373-36.373 6.506-55.36 6.506-76.587 0-159.253-34.24-215.68-92.266l76.373-74.347c43.2 44.48 117.654 69.547 169.067 56.533 26.987-6.613 43.093-21.653 50.667-47.253 19.413-64.96-112.214-111.253-113.494-111.787-85.226-28.16-219.733-110.72-185.066-241.813 16.32-62.187 60.16-105.493 122.986-122.027Zm-242.208-7.072v640H906.667v-640h106.666Zm639.968 693.334c0 29.333-24 53.333-53.333 53.333h-1280c-29.333 0-53.333-24-53.333-53.333V160c0-29.333 24-53.333 53.333-53.333h1280c29.333 0 53.333 24 53.333 53.333v746.667ZM1599.968 0h-1280c-88.213 0-160 71.787-160 160v746.667c0 88.213 71.787 160 160 160h1280c88.213 0 160-71.787 160-160V160c0-88.213-71.787-160-160-160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PostToSisPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.PostToSis,
+ contentDescription = "PostToSis",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Predictive.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Predictive.kt
new file mode 100644
index 0000000000..6c877ec107
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Predictive.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Predictive: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Predictive",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1515.03 881.587C1548.92 894.559 1585.07 901.308 1621.73 901.302C1700.81 901.2 1776.63 869.736 1832.54 813.81C1888.46 757.885 1919.91 682.065 1920 602.982C1920 543.977 1902.5 486.298 1869.72 437.239C1836.94 388.179 1790.34 349.943 1735.83 327.365C1681.32 304.788 1621.33 298.883 1563.46 310.397C1505.59 321.912 1452.44 350.329 1410.72 392.054C1369 433.78 1340.59 486.94 1329.09 544.812C1317.58 602.683 1323.49 662.667 1346.08 717.177C1362.85 757.657 1388.26 793.768 1420.32 823.097L1287.34 1038.33C1234.89 1018.28 1177.78 1013.41 1122.6 1024.39C1105.93 1027.71 1089.65 1032.43 1073.92 1038.46L940.742 822.916C943.974 819.958 947.146 816.922 950.257 813.81C1006.17 757.885 1037.63 682.065 1037.71 602.982C1037.71 543.977 1020.22 486.298 987.435 437.239C954.653 388.179 908.059 349.943 853.545 327.365C799.032 304.788 739.047 298.883 681.177 310.397C623.308 321.912 570.152 350.329 528.433 392.054C486.714 433.78 458.306 486.94 446.801 544.812C435.295 602.683 441.21 662.667 463.796 717.177C480.566 757.648 505.966 793.752 538.018 823.078L404.983 1038.4C352.486 1018.29 295.318 1013.4 240.075 1024.39C182.207 1035.9 129.051 1064.31 87.3305 1106.03C45.6097 1147.76 17.1974 1200.91 5.6867 1258.78C-5.82405 1316.65 0.0836871 1376.63 22.6628 1431.14C45.2419 1485.65 83.4784 1532.24 132.537 1565.02C181.595 1597.8 239.272 1615.3 298.275 1615.3C377.367 1615.21 453.194 1583.75 509.12 1527.82C565.047 1471.9 596.506 1396.07 596.595 1316.98C596.595 1257.98 579.098 1200.3 546.318 1151.24C532.939 1131.22 517.258 1113 499.677 1096.91L632.719 881.577C666.615 894.556 702.774 901.308 739.442 901.302C776.254 901.254 812.357 894.412 846.075 881.47L979.261 1097.03C976.066 1099.96 972.93 1102.96 969.857 1106.03C928.136 1147.76 899.723 1200.91 888.213 1258.78C876.702 1316.65 882.61 1376.63 905.189 1431.14C927.768 1485.65 966.004 1532.24 1015.06 1565.02C1064.12 1597.8 1121.8 1615.3 1180.8 1615.3C1259.89 1615.21 1335.72 1583.75 1391.65 1527.82C1447.57 1471.9 1479.03 1396.07 1479.12 1316.98C1479.12 1257.98 1461.62 1200.3 1428.84 1151.24C1415.43 1131.17 1399.7 1112.9 1382.07 1096.78L1515.03 881.587ZM1517.66 447.454C1548.48 426.913 1584.69 415.974 1621.73 416.022C1671.33 416.085 1718.89 435.836 1753.94 470.936C1789 506.036 1808.69 553.615 1808.69 603.222C1808.69 640.256 1797.7 676.459 1777.12 707.249C1756.54 738.039 1727.29 762.033 1693.07 776.195C1658.85 790.356 1621.2 794.049 1584.88 786.807C1548.56 779.564 1515.2 761.711 1489.03 735.507C1462.86 709.302 1445.05 675.924 1437.86 639.595C1430.66 603.266 1434.4 565.619 1448.61 531.417C1462.81 497.215 1486.84 467.995 1517.66 447.454ZM298.275 1130.02C261.25 1130.02 225.057 1141 194.272 1161.57C163.487 1182.14 139.493 1211.37 125.324 1245.58C111.156 1279.79 107.448 1317.43 114.672 1353.74C121.895 1390.05 139.724 1423.41 165.904 1449.59C192.085 1475.77 225.44 1493.6 261.754 1500.82C298.067 1508.05 335.707 1504.34 369.913 1490.17C404.119 1476 433.356 1452.01 453.926 1421.22C474.495 1390.44 485.475 1354.24 485.475 1317.22C485.475 1267.57 465.752 1219.96 430.645 1184.85C395.538 1149.74 347.923 1130.02 298.275 1130.02ZM1180.8 1130.02C1143.78 1130.02 1107.58 1141 1076.8 1161.57C1046.01 1182.14 1022.02 1211.37 1007.85 1245.58C993.682 1279.79 989.974 1317.43 997.198 1353.74C1004.42 1390.05 1022.25 1423.41 1048.43 1449.59C1074.61 1475.77 1107.97 1493.6 1144.28 1500.82C1180.59 1508.05 1218.23 1504.34 1252.44 1490.17C1286.65 1476 1315.88 1452.01 1336.45 1421.22C1357.02 1390.44 1368 1354.24 1368 1317.22C1368 1267.57 1348.28 1219.96 1313.17 1184.85C1278.06 1149.74 1230.45 1130.02 1180.8 1130.02ZM739.442 416.022C702.418 416.022 666.225 427.001 635.44 447.571C604.655 468.14 580.661 497.377 566.492 531.583C552.323 565.79 548.616 603.429 555.839 639.742C563.062 676.056 580.892 709.412 607.072 735.592C633.252 761.772 666.608 779.601 702.921 786.825C739.235 794.048 776.874 790.341 811.081 776.172C845.287 762.003 874.524 738.009 895.093 707.224C915.663 676.439 926.642 640.246 926.642 603.222C926.642 553.573 906.92 505.958 871.813 470.851C836.706 435.744 789.091 416.022 739.442 416.022Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PredictivePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Predictive,
+ contentDescription = "Predictive",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Prerequisite.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Prerequisite.kt
new file mode 100644
index 0000000000..c814d77314
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Prerequisite.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Prerequisite: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Prerequisite",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1652.322 1040.534 258.812 1040c-55.317 0-98.812 42.749-98.812 96.078v528.271c0 53.276 43.049 95.651 98.421 95.651H1661.58c55.372 0 98.421-42.375 98.421-95.65v-528.272c0-53.276-52.305-95.544-107.622-95.544h-.056ZM808.96 1358.48h76.16c0-10.453 1.027-21 3.08-31.64s5.507-20.347 10.36-29.12 11.293-15.867 19.32-21.28c8.027-5.413 17.827-8.12 29.4-8.12 17.173 0 31.267 5.32 42.28 15.96 11.013 10.64 16.52 25.48 16.52 44.52 0 11.947-2.707 22.587-8.12 31.92-5.413 9.333-12.133 17.733-20.16 25.2-8.027 7.467-16.893 14.28-26.6 20.44-9.707 6.16-18.853 12.227-27.44 18.2-16.8 11.573-32.76 22.96-47.88 34.16-15.12 11.2-28.28 23.427-39.48 36.68-11.2 13.253-20.067 28.28-26.6 45.08-6.533 16.8-9.8 36.587-9.8 59.36h287.84v-68.32H902.48c9.707-13.44 20.907-25.2 33.6-35.28a520.677 520.677 0 0 1 39.2-28.28 2976.634 2976.634 0 0 0 40.04-26.6c13.253-8.96 25.107-18.947 35.56-29.96 10.453-11.013 18.853-23.613 25.2-37.8 6.347-14.187 9.52-31.173 9.52-50.96 0-19.04-3.64-36.213-10.92-51.52-7.28-15.307-17.08-28.187-29.4-38.64s-26.6-18.48-42.84-24.08c-16.24-5.6-33.32-8.4-51.24-8.4-23.52 0-44.333 4.013-62.44 12.04s-33.133 19.227-45.08 33.6c-11.947 14.373-20.907 31.173-26.88 50.4-5.973 19.227-8.587 40.04-7.84 62.44ZM1104 160v72h-72v-72h72Zm-576 72h144v-72H528v72Zm288 0h72v-72h-72v72Zm576-72h-144v72h144v-72Zm288 320v80h80v-80h-80Zm-64-248.655s46.073.819 46.073 36.819V304h97.925v-72.655S1761.78 160 1664.665 160h-48.611v71.345H1616ZM672 880v-72H528v72h144Zm720-72h-144v72h144v-72ZM160 559.623h80.284V480H160v79.623ZM304 808h-35.06c-35.713 0-34.772-33.756-34.772-33.756V736H160v73.589S159.427 880 232.205 880H304v-72Zm1358.056-72v38.233s-5.778 35.732-46.056 35.732V880h40.602c105.178 0 103.396-70.392 103.396-70.392V736h-97.942ZM1032 808v72h72v-72h-72Zm-216 0v72h72v-72h-72ZM257.944 304v-35.877c0-33.628 46.056-36.818 46.056-36.818V160h-48.702C201.683 160 160 188.39 160 229.136V304h97.944Zm774.269 416.498V317.109h-70.055c-2.496 20.496-7.536 13.833-15.168 24.68-7.68 10.849-17.04 20.16-28.08 26.88a115.607 115.607 0 0 1-37.632 14.113c-13.92 2.592-27.936 3.984-43.296 3.6l53.147 62.16h71.029v271.956h70.055Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PrerequisitePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Prerequisite,
+ contentDescription = "Prerequisite",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Printer.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Printer.kt
new file mode 100644
index 0000000000..9d665deb3b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Printer.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Printer: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Printer",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1440 1080c0 44.16-35.84 80-80 80s-80-35.84-80-80 35.84-80 80-80 80 35.84 80 80ZM560 520H400V40h1120v480h-160V200H560v320Zm1040 880h-80v-160H400v160h-80V840c0-44.16 35.92-80 80-80v160h1120V760c44.08 0 80 35.84 80 80v560ZM560 1720h800v-320H560v320Zm960-1120h-160v160H560V600H400c-132.32 0-240 107.68-240 240v720h240v320h1120v-320h240V840c0-132.32-107.68-240-240-240Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PrinterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Printer,
+ contentDescription = "Printer",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Progress.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Progress.kt
new file mode 100644
index 0000000000..5432bd5d55
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Progress.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Progress: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Progress",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M320.006 960.032c0 352.866 287.052 639.974 640.026 639.974 173.767 0 334.093-69.757 451.938-188.072l-211.928-211.912h480.019v479.981l-155.046-155.114C1377.649 1672.883 1177.24 1760 960.032 1760 518.814 1760 160 1401.134 160 960.032ZM959.968 160C1401.186 160 1760 518.866 1760 959.968h-160.006c0-352.866-287.052-639.974-640.026-639.974-173.767 0-334.093 69.757-451.938 188.072l211.928 211.912H239.94V239.997L394.985 395.03C542.351 247.117 742.76 160 959.968 160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ProgressPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Progress,
+ contentDescription = "Progress",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Protractor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Protractor.kt
new file mode 100644
index 0000000000..869f11382b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Protractor.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Protractor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Protractor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1312 806.001c0 44.182-35.82 80-80 80s-80-35.818-80-80c0-44.183 35.82-80 80-80s80 35.817 80 80zm-624 80c44.183 0 80-35.818 80-80 0-44.183-35.817-80-80-80s-80 35.817-80 80c0 44.182 35.817 80 80 80zm837.33 69.333c0 44.182-35.81 80-80 80-44.18 0-80-35.818-80-80 0-44.183 35.82-80 80-80 44.19 0 80 35.817 80 80zm48 303.996c44.19 0 80-35.81 80-80 0-44.18-35.81-80-80-80-44.18 0-80 35.82-80 80 0 44.19 35.82 80 80 80zM554.666 955.334c0 44.182-35.817 80-80 80-44.182 0-80-35.818-80-80 0-44.183 35.818-80 80-80 44.183 0 80 35.817 80 80zM346.667 1259.33c44.182 0 80-35.81 80-80 0-44.18-35.818-80-80-80-44.183 0-80 35.82-80 80 0 44.19 35.817 80 80 80zM1040 747.334c0 44.182-35.82 80-80 80-44.183 0-80-35.818-80-80 0-44.183 35.817-80 80-80 44.18 0 80 35.817 80 80z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.NonZero,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1440.67c0-530.196 429.807-960.003 960-960.003 530.19 0 960 429.807 960 960.003H0ZM658.209 1334h603.581c-43.93-124.29-162.46-213.33-301.79-213.33S702.138 1209.71 658.209 1334Zm715.011 0c-47.36-184.02-214.41-320-413.22-320-198.81 0-365.86 135.98-413.225 320H113.269C165.759 913.06 524.841 587.334 960 587.334c435.16 0 794.24 325.726 846.73 746.666h-433.51Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ProtractorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Protractor,
+ contentDescription = "Protractor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Publish.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Publish.kt
new file mode 100644
index 0000000000..d25767afe3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Publish.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Publish: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Publish",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0M854.344 1157.975 583.059 886.69l-79.85 79.85 351.135 351.133L1454.4 717.617l-79.85-79.85-520.206 520.208Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PublishPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Publish,
+ contentDescription = "Publish",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Question.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Question.kt
new file mode 100644
index 0000000000..a1772c9b4e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Question.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Question: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Question",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0m.056 1355.181 56.471.113h-56.47v-.113ZM752.64 409.65c83.69-64.715 191.661-86.4 296.696-59.294 114.862 29.703 208.264 123.106 237.968 237.967 23.378 90.466 10.729 183.303-35.464 261.459-45.515 77.026-121.186 133.948-207.586 156.084-13.779 3.502-27.783 14.796-27.783 31.85v91.708H903.529v-91.708c0-66.07 46.306-124.123 112.716-141.29 57.6-14.682 107.971-52.63 138.353-104.018 30.833-52.292 39.19-114.749 23.378-175.85-19.651-75.67-81.204-137.223-156.875-156.875-70.927-18.184-143.548-3.953-199.341 39.303-55.68 43.144-87.642 108.311-87.642 178.673H621.176c0-105.6 47.888-203.294 131.464-268.01Zm207.416 832.704c-62.343 0-112.94 50.71-112.94 112.941 0 62.23 50.597 112.941 112.94 112.941 62.231 0 112.942-50.71 112.942-112.94 0-62.231-50.71-112.942-112.942-112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuestionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Question,
+ contentDescription = "Question",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Quiz.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Quiz.kt
new file mode 100644
index 0000000000..cdc71f6152
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Quiz.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Quiz: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Quiz",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m746.255 1466.764 80.484 80.712-248.748 248.634-80.484-80.598 248.748-248.748Zm-165.904-165.836 80.598 80.598-331.626 331.626-80.598-80.598 331.626-331.626Zm-165.847-165.721 80.598 80.598-414.504 414.504L0 1549.71l414.504-414.504ZM1119.32 264.6c356.478-356.478 725.268-178.296 729.03-176.472l17.1 8.436 8.436 17.1c1.824 3.648 180.006 372.438-176.586 729.03l-146.604 146.604-2.622 665.874-222.642 222.642-331.626-331.512-578.094-578.094-331.626-331.74 222.642-222.642 665.874-2.508Zm316.92 839.154-361.836 361.95 251.028 250.914 108.87-108.87 1.938-503.994Zm343.026-921.348c-69.084-25.992-321.366-95.304-579.348 162.792l-623.01 623.01 416.898 416.898 622.896-623.01c256.956-256.956 187.986-511.176 162.564-579.69Zm-921.12 343.368-503.994 1.824-108.87 108.87L496.31 887.61l361.836-361.836Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1534.987 372.558c-51.072-1.368-131.67 12.768-213.294 94.392l-40.47 40.356 173.394 173.28 40.356-40.242c82.194-82.308 96.9-161.31 94.848-213.18l-2.166-52.554-52.668-2.052Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Quiz,
+ contentDescription = "Quiz",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizInstructions.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizInstructions.kt
new file mode 100644
index 0000000000..dd84a2a853
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizInstructions.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizInstructions: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizInstructions",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 332v1257H0V332h1920Zm-115 114H115v1032h1690V446Zm-574 683v113H409v-113h822Zm275-226v113H409V903h1097Zm-275-226v113H409V677h822Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizInstructionsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizInstructions,
+ contentDescription = "QuizInstructions",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsAvg.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsAvg.kt
new file mode 100644
index 0000000000..632ef68182
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsAvg.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizStatsAvg: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizStatsAvg",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0m282.353 1129.412V621.176h-112.941V960c0 93.402-76.01 169.412-169.412 169.412S790.588 1053.402 790.588 960V621.176h-112.94v847.059h112.94v-283.82c47.323 35.914 105.6 57.938 169.412 57.938 67.539 0 128.753-24.734 177.318-64.377 21.007 69.572 85.044 120.848 161.506 120.848v-112.942c-31.06 0-56.471-25.298-56.471-56.47"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsAvgPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizStatsAvg,
+ contentDescription = "QuizStatsAvg",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsCronbachsAlpha.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsCronbachsAlpha.kt
new file mode 100644
index 0000000000..90dc8128f4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsCronbachsAlpha.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizStatsCronbachsAlpha: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizStatsCronbachsAlpha",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0m15.224 1125.222c-69.232 38.851-195.162 95.21-258.409 32.866-59.972-59.069-56.696-208.829 7.115-327.078 52.292-96.678 136.998-146.259 200.81-146.259 9.487 0 18.41 1.13 26.767 3.275 61.44 16.15 95.435 94.08 93.176 213.798-1.242 66.41 2.146 123.896 10.052 172.687-23.83 17.28-50.259 34.221-79.51 50.71m241.129 44.16c-5.308-2.484-21.233-12.762-35.238-51.388 207.247-182.738 207.021-382.305 206.908-392.357l-112.94 1.355c0 6.777-1.808 125.93-116.443 254.457-1.13-22.928-1.581-48.678-1.017-77.591 4.518-250.165-122.54-310.588-177.43-325.045-125.365-32.979-275.577 50.26-355.539 198.438-77.816 144-94.193 355.878 12.988 461.365 32.98 32.414 82.447 60.762 155.181 60.762 61.44 0 139.37-20.33 237.742-75.67 20.442-11.52 39.755-23.267 57.938-35.238 19.991 40.207 46.871 67.877 80.64 83.463 65.62 30.043 144.678 7.68 223.624-62.23l-74.993-84.48c-40.659 36.254-80.075 53.534-101.421 44.16"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsCronbachsAlphaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizStatsCronbachsAlpha,
+ contentDescription = "QuizStatsCronbachsAlpha",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsDeviation.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsDeviation.kt
new file mode 100644
index 0000000000..659b534be7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsDeviation.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizStatsDeviation: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizStatsDeviation",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0m169.412 1047.902c0 107.181-87.19 194.485-194.485 194.485h-62.795c-107.294 0-194.485-87.304-194.485-194.485v-175.85c0-107.18 87.19-194.371 194.485-194.371h62.795c107.294 0 194.485 87.19 194.485 194.372v175.85ZM960 567.224c-8.358-.677-16.49-2.484-25.073-2.484h-62.795c-169.525 0-307.426 137.788-307.426 307.313v175.85c0 169.524 137.901 307.425 307.426 307.425h62.795c169.525 0 307.426-137.901 307.426-307.426v-175.85c0-74.089-27.445-141.289-71.266-194.371h240.678V564.74H960v2.484Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsDeviationPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizStatsDeviation,
+ contentDescription = "QuizStatsDeviation",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsHigh.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsHigh.kt
new file mode 100644
index 0000000000..fa244e3aa9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsHigh.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizStatsHigh: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizStatsHigh",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0M790.588 677.647h371.916l-581.309 581.195 79.963 79.963 581.195-581.309v371.916h112.941V564.706H790.588v112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsHighPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizStatsHigh,
+ contentDescription = "QuizStatsHigh",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsLow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsLow.kt
new file mode 100644
index 0000000000..f2e418eb00
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsLow.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizStatsLow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizStatsLow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0m282.353 1162.504L661.158 581.308l-79.963 79.85 581.309 581.195H790.588v112.941h564.706V790.588h-112.941v371.916Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsLowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizStatsLow,
+ contentDescription = "QuizStatsLow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsTime.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsTime.kt
new file mode 100644
index 0000000000..40506383ce
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizStatsTime.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizStatsTime: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizStatsTime",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059M960 1920C430.645 1920 0 1489.355 0 960S430.645 0 960 0s960 430.645 960 960-430.645 960-960 960m417.905-575.955L903.552 988.28V395.34h112.941v536.47l429.177 321.77-67.765 90.465Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsTimePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizStatsTime,
+ contentDescription = "QuizStatsTime",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizTitle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizTitle.kt
new file mode 100644
index 0000000000..9e58e80aab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/QuizTitle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.QuizTitle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.QuizTitle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1751 0v1920H169V0h1582Zm-115 112H290v9h-1v1678h1v20h1346V112Zm-234 235v321H514V347h888Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizTitlePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.QuizTitle,
+ contentDescription = "QuizTitle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Record.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Record.kt
new file mode 100644
index 0000000000..4973cf8b33
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Record.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Record: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Record",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.36 0 960 430.645 960 960 0 529.36-430.64 960-960 960-529.355 0-960-430.64-960-960C0 430.645 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.12 379.934 847.06 847.059 847.06 467.12 0 847.06-379.94 847.06-847.06 0-467.125-379.94-847.059-847.06-847.059ZM960 320c353.46 0 640 286.538 640 640 0 353.46-286.54 640-640 640-353.462 0-640-286.54-640-640 0-353.462 286.538-640 640-640Zm0 106.667c-294.552 0-533.333 238.781-533.333 533.333 0 294.55 238.781 533.33 533.333 533.33 294.55 0 533.33-238.78 533.33-533.33 0-294.552-238.78-533.333-533.33-533.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RecordPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Record,
+ contentDescription = "Record",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Redo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Redo.kt
new file mode 100644
index 0000000000..f86e226ad8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Redo.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Redo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Redo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1273.53 53.3336L1181.04 145.821L1669.51 634.291L641.182 634.167V765.312L1669.51 765.108L1181.04 1253.71L1273.53 1346.2L1919.9 699.7L1273.53 53.3336Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M641.182 765.312C378.45 772.29 142.719 987.357 142.707 1251.77C142.707 1516.19 353.51 1731.14 616.248 1738.12V1866.67C452.81 1866.67 296.089 1801.71 180.519 1686.15C64.9501 1570.58 0.000324154 1413.86 -0.00183105 1250.42C-0.00181677 1086.97 64.9482 930.258 180.519 814.687C296.09 699.117 477.74 634.167 641.182 634.167V765.312Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RedoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Redo,
+ contentDescription = "Redo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Refresh.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Refresh.kt
new file mode 100644
index 0000000000..a3a81951ac
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Refresh.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Refresh: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Refresh",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0v112.941c467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059-467.125 0-847.059-379.934-847.059-847.059 0-267.106 126.607-515.915 338.824-675.727v393.374h112.94V112.941H0v112.941h342.89C127.058 407.38 0 674.711 0 960c0 529.355 430.645 960 960 960s960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RefreshPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Refresh,
+ contentDescription = "Refresh",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveBookmark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveBookmark.kt
new file mode 100644
index 0000000000..57823c3f59
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveBookmark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RemoveBookmark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RemoveBookmark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1415.377 0H505.586C411.536 0 335 76.536 335 170.586V1920l625.481-375.289L1585.963 1920V170.586C1585.963 76.536 1509.426 0 1415.377 0Zm56.862 1719.164L960.48 1412.109l-511.757 307.055V170.586c0-31.388 25.474-56.862 56.862-56.862h909.79c31.389 0 56.863 25.474 56.863 56.862v1548.578Zm-230.28-1181-80.516-80.403-200.95 201.064-201.064-201.064-80.403 80.403L880.09 739.228l-201.064 200.95 80.403 80.403 201.064-200.95 200.95 200.95 80.516-80.403-201.064-200.95 201.064-201.064Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RemoveBookmarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RemoveBookmark,
+ contentDescription = "RemoveBookmark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveFromCollection.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveFromCollection.kt
new file mode 100644
index 0000000000..aa36112edb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveFromCollection.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RemoveFromCollection: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RemoveFromCollection",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1920h1242.353V677.647H0V1920ZM1129.412 790.588v1016.47H112.942V790.589h1016.47Zm451.764-451.764v1242.352h-225.882v-112.94h112.941V451.764H451.765v112.94H338.824V338.825h1242.352ZM1920.034-.011v1242.353h-225.882V1129.4h112.94V112.93H790.623v112.94H677.681V-.01h1242.353ZM338.824 1355.294h564.705v-112.941H338.824v112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RemoveFromCollectionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RemoveFromCollection,
+ contentDescription = "RemoveFromCollection",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveLink.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveLink.kt
new file mode 100644
index 0000000000..07e455aa03
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RemoveLink.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RemoveLink: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RemoveLink",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1406.942 1536.22V1920h-127.927v-383.78h127.927ZM461.217 901.701c35.052-35.18 78.035-59.87 130.741-54.113 48.74.256 94.282 19.7 128.439 54.625l-91.596 89.42c-9.978-10.49-19.7-16.118-37.866-16.118-14.584 0-28.528 5.885-39.146 16.63L144.598 1399.21c-20.98 21.108-20.98 55.392.128 76.5l299.349 299.349c20.34 20.212 56.16 20.212 76.5 0l407.063-406.935c10.746-10.746 16.63-24.946 16.503-39.658 0-14.2-5.757-27.504-15.991-37.61l89.293-91.468c34.924 34.029 54.369 79.57 54.627 128.31.253 49.253-18.808 95.69-53.988 130.87L611.02 1865.503c-34.284 34.412-79.954 53.218-128.694 53.218-48.74 0-94.538-18.806-128.823-53.218L54.154 1566.154c-70.872-70.871-70.872-186.517 0-257.388Zm1182.824 653.259 255.854 255.853-90.444 90.445-255.854-255.854 90.444-90.444Zm274.608-274.595v127.927h-383.78v-127.927h383.78ZM1309.871 53.074c70.487-70.616 186.133-70.744 258.156-.512l298.71 298.71c70.615 72.406 70.36 188.18 0 258.54l-407.064 406.935c-34.156 34.412-79.954 53.217-128.694 53.217-48.74 0-94.41-18.805-128.695-53.217l90.445-90.444c20.34 20.212 56.287 20.212 76.5 0l407.063-406.936c21.108-21.108 20.852-56.16-.512-78.29l-297.813-297.559c-21.492-20.98-56.544-20.98-77.652 0L993.38 550.454c-10.106 10.106-15.735 23.666-15.735 38.122 0 14.711 5.629 28.272 15.735 38.378l-90.445 90.444c-70.999-70.871-70.999-186.517 0-257.389Zm-937.346 459.73v127.927H10.748V512.805h361.777ZM639.381 12.1v361.777H511.454V12.1H639.38Zm-530.462 7.74 255.854 255.853-90.444 90.445L18.475 110.283l90.444-90.444Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RemoveLinkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RemoveLink,
+ contentDescription = "RemoveLink",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Replied.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Replied.kt
new file mode 100644
index 0000000000..a991eaa67e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Replied.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Replied: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Replied",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M835.942 632.563H244.966l478.08-478.08-90.496-90.496L-.026 696.563 632.55 1329.14l90.496-90.496-478.08-478.08h590.976c504.448 0 914.816 410.368 914.816 914.816v109.184h128V1675.38c0-574.976-467.84-1042.816-1042.816-1042.816"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RepliedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Replied,
+ contentDescription = "Replied",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reply.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reply.kt
new file mode 100644
index 0000000000..d2367d16be
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reply.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Reply: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Reply",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M835.942 632.563H244.966l478.08-478.08-90.496-90.496L-.026 696.563 632.55 1329.14l90.496-90.496-478.08-478.08h590.976c504.448 0 914.816 410.368 914.816 914.816v109.184h128V1675.38c0-574.976-467.84-1042.816-1042.816-1042.816"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ReplyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Reply,
+ contentDescription = "Reply",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reply2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reply2.kt
new file mode 100644
index 0000000000..9964a990c7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reply2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Reply2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Reply2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M835.942 632.563H244.966l478.08-478.08-90.496-90.496L-.026 696.563 632.55 1329.14l90.496-90.496-478.08-478.08h590.976c504.448 0 914.816 410.368 914.816 914.816v109.184h128V1675.38c0-574.976-467.84-1042.816-1042.816-1042.816"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Reply2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Reply2,
+ contentDescription = "Reply2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ReplyAll2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ReplyAll2.kt
new file mode 100644
index 0000000000..219ed28660
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ReplyAll2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ReplyAll2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ReplyAll2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1030.975 188 81.249 81.249-429.228 429.228h300.747c516.223 0 936.257 420.034 936.257 936.257v98.028h-114.92v-98.028c0-452.901-368.436-821.337-821.337-821.337H682.996l429.228 429.229-81.25 81.248-567.936-567.937L1030.975 188Zm-463.038.011 81.249 81.25-486.688 486.688 486.688 486.688-81.249 81.249L0 755.949 567.937 188.01Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ReplyAll2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ReplyAll2,
+ contentDescription = "ReplyAll2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reset.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reset.kt
new file mode 100644
index 0000000000..0c4d9fe12a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Reset.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Reset: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Reset",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0v112.941c467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059-467.125 0-847.059-379.934-847.059-847.059 0-267.106 126.607-515.915 338.824-675.727v393.374h112.94V112.941H0v112.941h342.89C127.058 407.38 0 674.711 0 960c0 529.355 430.645 960 960 960s960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ResetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Reset,
+ contentDescription = "Reset",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Restore.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Restore.kt
new file mode 100644
index 0000000000..b4cc87cee3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Restore.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Restore: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Restore",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0V112.941C492.875 112.941 112.941 492.875 112.941 960C112.941 1427.12 492.875 1807.06 960 1807.06C1427.12 1807.06 1807.06 1427.12 1807.06 960C1807.06 692.894 1680.45 444.085 1468.24 284.273V677.647H1355.29V112.941H1920V225.882H1577.11C1792.94 407.379 1920 674.711 1920 960C1920 1489.36 1489.36 1920 960 1920C430.645 1920 0 1489.36 0 960C0 430.645 430.645 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M905.23 958.422L497.115 1264.57L564.961 1355.2L1018.31 1014.99V447.995H905.23V958.422Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RestorePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Restore,
+ contentDescription = "Restore",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ReviewScreen.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ReviewScreen.kt
new file mode 100644
index 0000000000..c770a72df4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ReviewScreen.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ReviewScreen: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ReviewScreen",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 53v1813.33h1386.67v-320H1280v213.34H106.667V159.667H1280V373h106.67V53z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.NonZero,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1226.67 1439.67c113.33 0 217.48-39.28 299.6-104.96l302.37 302.65c20.82 20.84 54.59 20.85 75.42.04 20.84-20.82 20.86-54.59.04-75.43l-302.41-302.68c65.7-82.12 104.98-186.29 104.98-299.623 0-265.097-214.91-480-480-480-265.1 0-480.003 214.903-480.003 480 0 265.093 214.903 480.003 480.003 480.003Zm0-106.67c206.18 0 373.33-167.15 373.33-373.333 0-206.187-167.15-373.334-373.33-373.334-206.19 0-373.337 167.147-373.337 373.334 0 206.183 167.147 373.333 373.337 373.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ReviewScreenPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ReviewScreen,
+ contentDescription = "ReviewScreen",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rewind.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rewind.kt
new file mode 100644
index 0000000000..feedc96c4d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rewind.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Rewind: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Rewind",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1064.719 308.99 0 959.644 1064.719 1610.3v-522.363l855.174 521.829V309.524L1064.72 831.246V308.989ZM204.947 959.644 957.7 499.61v920.07L204.947 959.644Zm859.772 3.1v-6.308l748.264-456.506v919.32l-748.264-456.506Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RewindPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Rewind,
+ contentDescription = "Rewind",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RotateLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RotateLeft.kt
new file mode 100644
index 0000000000..a922c285a0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RotateLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RotateLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RotateLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1251.45 447.883 1120 316.432h160c176.73 0 320 143.269 320 320h106.67c0-235.641-191.03-426.666-426.67-426.666h-159.97l134.34-134.341L1178.94 0 915.833 263.111l260.197 260.196 75.42-75.424Zm28.55 405.45C1280 735.513 1184.49 640 1066.67 640H213.333C95.513 640 0 735.513 0 853.333v853.337C0 1824.49 95.513 1920 213.333 1920h853.337c117.82 0 213.33-95.51 213.33-213.33V853.333Zm-213.33-106.666H213.333c-58.91 0-106.666 47.756-106.666 106.666v853.337c0 58.91 47.756 106.66 106.666 106.66h853.337c58.91 0 106.66-47.75 106.66-106.66V853.333c0-58.91-47.75-106.666-106.66-106.666Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RotateLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RotateLeft,
+ contentDescription = "RotateLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RotateRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RotateRight.kt
new file mode 100644
index 0000000000..ee09aac1c0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RotateRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RotateRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RotateRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M639.999 209.777h116.019L621.665 75.425 697.09 0l263.111 263.111-260.196 260.196-75.425-75.424 131.439-131.439h-116.02c-176.731 0-320 143.269-320 320H213.332c0-235.642 191.025-426.667 426.667-426.667Zm0 643.556c0-117.82 95.512-213.333 213.333-213.333h853.338c117.82 0 213.33 95.513 213.33 213.333v853.337c0 117.82-95.51 213.33-213.33 213.33H853.332c-117.821 0-213.333-95.51-213.333-213.33V853.333Zm213.333-106.666h853.338c58.91 0 106.66 47.756 106.66 106.666v853.337c0 58.91-47.75 106.66-106.66 106.66H853.332c-58.91 0-106.667-47.75-106.667-106.66V853.333c0-58.91 47.757-106.666 106.667-106.666Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RotateRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RotateRight,
+ contentDescription = "RotateRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rss.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rss.kt
new file mode 100644
index 0000000000..aa17e657e9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rss.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Rss: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Rss",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1616.875 1813.333c-27.627-820.266-689.92-1482.56-1510.187-1510.186V107.52c928.213 27.733 1678.08 777.6 1705.813 1705.813h-195.626ZM53.355 0H.02v408.853h53.334c803.733 0 1457.706 653.974 1457.706 1457.814V1920h408.96v-53.333C1920.021 837.44 1082.581 0 53.355 0Zm933.984 1813.333c-26.667-473.493-407.147-853.973-880.64-880.746V736.853c581.226 27.094 1049.28 495.254 1076.373 1076.48H987.339ZM53.365 628.907H.032v408.853h53.333c456.96 0 828.8 371.947 828.8 828.907V1920h408.854v-53.333c0-682.454-555.2-1237.76-1237.654-1237.76ZM267.19 1812.288c-88 0-159.573-71.573-159.573-159.467 0-87.893 71.573-159.466 159.573-159.466 87.894 0 159.467 71.573 159.467 159.466 0 87.894-71.573 159.467-159.467 159.467m0-425.6c-146.773 0-266.24 119.36-266.24 266.133 0 146.774 119.467 266.134 266.24 266.134 146.774 0 266.134-119.36 266.134-266.134 0-146.773-119.36-266.133-266.134-266.133"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RssPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Rss,
+ contentDescription = "Rss",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RssAdd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RssAdd.kt
new file mode 100644
index 0000000000..3a86769134
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RssAdd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RssAdd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RssAdd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M903.53 0v903.53H0v112.94h903.53V1920h112.94v-903.53H1920V903.53h-903.53V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RssAddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RssAdd,
+ contentDescription = "RssAdd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rubric.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rubric.kt
new file mode 100644
index 0000000000..9a21d4c2f7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Rubric.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Rubric: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Rubric",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1344.962 112.94C1321.584 47.324 1259.466 0 1185.942 0H734.177c-73.525 0-135.643 47.323-159.022 112.94H113V1920h1694.118V112.94h-462.156Zm349.214 1694.119H225.942V225.882h338.823v225.884h790.589V225.882h338.822v1581.177ZM677.706 225.882v-56.47c0-31.171 25.299-56.471 56.47-56.471h451.766c31.172 0 56.47 25.3 56.47 56.472v169.412H677.706V225.882Zm-225.86 790.589h338.823V677.647H451.846v338.824Zm112.941-112.942h112.941V790.588H564.787v112.941Zm338.824-112.941h564.707V677.647H903.611v112.941Zm0 564.706h564.707v-112.941H903.611v112.941Zm0-338.823h338.823V903.529H903.611v112.942Zm0 564.706h338.823v-112.941H903.611v112.941Zm-338.824-112.942h112.941v-112.941H564.787v112.941Zm-112.941 112.942h338.823v-338.824H451.846v338.824Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RubricPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Rubric,
+ contentDescription = "Rubric",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RubricDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RubricDark.kt
new file mode 100644
index 0000000000..9f00e68041
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/RubricDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.RubricDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.RubricDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1344.962 112.94C1321.584 47.324 1259.466 0 1185.942 0H734.177c-73.525 0-135.643 47.323-159.022 112.94H113V1920h1694.118V112.94h-462.156Zm349.214 1694.119H225.942V225.882h338.823v225.884h790.589V225.882h338.822v1581.177ZM677.706 225.882v-56.47c0-31.171 25.299-56.471 56.47-56.471h451.766c31.172 0 56.47 25.3 56.47 56.472v169.412H677.706V225.882Zm-225.86 790.589h338.823V677.647H451.846v338.824Zm112.941-112.942h112.941V790.588H564.787v112.941Zm338.824-112.941h564.707V677.647H903.611v112.941Zm0 564.706h564.707v-112.941H903.611v112.941Zm0-338.823h338.823V903.529H903.611v112.942Zm0 564.706h338.823v-112.941H903.611v112.941Zm-338.824-112.942h112.941v-112.941H564.787v112.941Zm-112.941 112.942h338.823v-338.824H451.846v338.824Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RubricDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.RubricDark,
+ contentDescription = "RubricDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Ruler.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Ruler.kt
new file mode 100644
index 0000000000..b9fa38fd7c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Ruler.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Ruler: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Ruler",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1493.492.024.941 1492.583l426.444 426.438 180.887-180.886.12.12 75.385-75.381-.12-.12 75.387-75.39.118.12 75.385-75.382-.118-.12 75.385-75.39.12.12 75.384-75.381-.118-.12 75.388-75.38.12.11 75.38-75.381-.12-.12 75.391-75.381.12.11 75.38-75.381-.12-.12 75.392-75.385.12.12 75.38-75.386-.12-.12 75.391-75.384.11.118 75.39-75.385-.12-.119 75.392-75.386.11.12 75.39-75.386-.12-.118 180.886-180.888L1493.492.024Zm170.182 531.947 105.495-105.502-275.677-275.674-1341.78 1341.788 275.673 275.676 105.502-105.505-100.144-100.148 75.385-75.38 100.144 100.137 75.386-75.38-100.144-100.148 75.385-75.381 100.145 100.138 75.384-75.381-175.53-175.529 75.387-75.39 175.53 175.528 75.385-75.38-100.144-100.148 75.385-75.381 100.147 100.148 75.38-75.39-100.138-100.144 75.381-75.385 100.148 100.143 75.38-75.385-175.528-175.53 75.391-75.385 175.529 175.53 75.38-75.386-100.148-100.144 75.391-75.385 100.148 100.143 75.38-75.385-100.147-100.144 75.39-75.386 100.149 100.145Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RulerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Ruler,
+ contentDescription = "Ruler",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Save.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Save.kt
new file mode 100644
index 0000000000..8814156723
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Save.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Save: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Save",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.706 338.824v112.94H395.412c-31.06 0-56.47 25.3-56.47 56.471v744.509c17.73-6.325 36.592-10.391 56.47-10.391h1129.412c19.877 0 38.738 4.066 56.47 10.39V508.236c0-31.171-25.412-56.47-56.47-56.47h-395.295V338.824h395.295c93.402 0 169.411 76.009 169.411 169.411v1242.353c0 93.403-76.01 169.412-169.411 169.412H395.412C302.009 1920 226 1843.99 226 1750.588V508.235c0-93.402 76.01-169.411 169.412-169.411h395.294Zm734.118 1016.47H395.412c-31.06 0-56.47 25.299-56.47 56.47v338.824c0 31.172 25.41 56.47 56.47 56.47h1129.412c31.058 0 56.47-25.298 56.47-56.47v-338.823c0-31.172-25.412-56.47-56.47-56.47ZM1016.622-.023v880.151l246.212-246.325 79.85 79.85-382.532 382.644-382.645-382.644 79.85-79.85L903.68 880.128V-.022h112.941ZM564.824 1468.235c-62.344 0-112.942 50.71-112.942 112.941s50.598 112.942 112.942 112.942c62.343 0 112.94-50.71 112.94-112.942 0-62.23-50.597-112.94-112.94-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SavePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Save,
+ contentDescription = "Save",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ScreenCapture.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ScreenCapture.kt
new file mode 100644
index 0000000000..fd72b621c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ScreenCapture.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ScreenCapture: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ScreenCapture",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1706.67 106.667h-320V0h320C1824.49 0 1920 95.513 1920 213.333v320h-106.67v-320c0-58.91-47.75-106.666-106.66-106.666ZM533.333 0v106.667h-320c-58.91 0-106.666 47.756-106.666 106.666v320H0v-320C0 95.513 95.513 0 213.333 0h320ZM0 1386.67h106.667v320c0 58.91 47.756 106.66 106.666 106.66h320V1920h-320C95.513 1920 0 1824.49 0 1706.67v-320ZM1386.67 1920v-106.67h320c58.91 0 106.66-47.75 106.66-106.66v-320H1920v320c0 117.82-95.51 213.33-213.33 213.33h-320ZM1280 960c0 176.73-143.27 320-320 320-176.731 0-320-143.27-320-320 0-176.731 143.269-320 320-320 176.73 0 320 143.269 320 320Zm106.67 0c0 235.64-191.03 426.67-426.67 426.67-235.641 0-426.667-191.03-426.667-426.67 0-235.641 191.026-426.667 426.667-426.667 235.64 0 426.67 191.026 426.67 426.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ScreenCapturePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ScreenCapture,
+ contentDescription = "ScreenCapture",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Search.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Search.kt
new file mode 100644
index 0000000000..df31e233e1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Search.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Search: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Search",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.588 1468.235c-373.722 0-677.647-303.924-677.647-677.647 0-373.722 303.925-677.647 677.647-677.647 373.723 0 677.647 303.925 677.647 677.647 0 373.723-303.924 677.647-677.647 677.647Zm596.781-160.715c120.396-138.692 193.807-319.285 193.807-516.932C1581.176 354.748 1226.428 0 790.588 0S0 354.748 0 790.588s354.748 790.588 790.588 790.588c197.647 0 378.24-73.411 516.932-193.807l516.028 516.142 79.963-79.963-516.142-516.028Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Search,
+ contentDescription = "Search",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SearchAddressBook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SearchAddressBook.kt
new file mode 100644
index 0000000000..6cb1684e92
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SearchAddressBook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SearchAddressBook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SearchAddressBook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.588 1468.235c-373.722 0-677.647-303.924-677.647-677.647 0-373.722 303.925-677.647 677.647-677.647 373.723 0 677.647 303.925 677.647 677.647 0 373.723-303.924 677.647-677.647 677.647Zm596.781-160.715c120.396-138.692 193.807-319.285 193.807-516.932C1581.176 354.748 1226.428 0 790.588 0S0 354.748 0 790.588s354.748 790.588 790.588 790.588c197.647 0 378.24-73.411 516.932-193.807l516.028 516.142 79.963-79.963-516.142-516.028Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchAddressBookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SearchAddressBook,
+ contentDescription = "SearchAddressBook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SearchAi.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SearchAi.kt
new file mode 100644
index 0000000000..d324eb322e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SearchAi.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SearchAi: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SearchAi",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1077.93 50.9427C990.631 18.0208 896.094 0 797.437 0C357.821 0 0 357.821 0 797.437C0 1237.05 357.821 1594.87 797.437 1594.87C996.796 1594.87 1178.95 1520.83 1318.85 1399.39L1839.35 1920L1920 1839.35L1399.39 1318.85C1520.83 1178.95 1594.87 996.796 1594.87 797.437C1594.87 756.403 1591.76 716.082 1585.75 676.698L1476.06 715.392C1479.29 742.295 1480.95 769.675 1480.95 797.437C1480.95 1174.4 1174.4 1480.95 797.437 1480.95C420.477 1480.95 113.92 1174.4 113.92 797.437C113.92 420.477 420.477 113.92 797.437 113.92C881.581 113.92 962.217 129.194 1036.72 157.117L1077.93 50.9427Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1212.8 0L1350.51 372.156L1722.67 509.867L1350.51 647.577L1212.8 1019.73L1075.09 647.577L702.933 509.867L1075.09 372.156L1212.8 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchAiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SearchAi,
+ contentDescription = "SearchAi",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Settings.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Settings.kt
new file mode 100644
index 0000000000..604c51382b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Settings.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Settings: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Settings",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1739.34 1293.414-105.827 180.818-240.225-80.188-24.509 22.25c-69.91 63.586-150.211 109.666-238.644 136.771l-32.076 9.94-49.468 244.065H835.584l-49.468-244.179-32.076-9.939c-88.432-27.105-168.734-73.185-238.644-136.771l-24.508-22.25-240.226 80.189-105.826-180.82 189.74-164.442-7.453-32.978c-10.39-45.742-15.586-91.483-15.586-135.869 0-44.386 5.195-90.127 15.586-135.868l7.454-32.979-189.741-164.442 105.826-180.819 240.226 80.075 24.508-22.25c69.91-63.585 150.212-109.665 238.644-136.884l32.076-9.826 49.468-244.066h213.007l49.468 244.18 32.076 9.825c88.433 27.219 168.734 73.186 238.644 136.885l24.509 22.25 240.225-80.189 105.826 180.819-189.74 164.442 7.453 32.98c10.39 45.74 15.586 91.481 15.586 135.867 0 44.386-5.195 90.127-15.586 135.869l-7.454 32.978 189.741 164.556Zm-53.76-333.403c0-41.788-3.84-84.48-11.634-127.284l210.184-182.062-199.454-340.856-265.186 88.433c-66.974-55.567-143.322-99.388-223.85-128.414L1140.977.01H743.198l-54.663 269.704c-81.431 29.139-156.424 72.282-223.963 128.414L199.5 309.809.045 650.665l210.07 182.062c-7.68 42.804-11.52 85.496-11.52 127.284 0 41.789 3.84 84.48 11.52 127.172L.046 1269.357 199.5 1610.214l265.186-88.546c66.974 55.68 143.323 99.388 223.85 128.527l54.663 269.816h397.779l54.663-269.703c81.318-29.252 156.424-72.283 223.85-128.527l265.186 88.546 199.454-340.857-210.184-182.174c7.793-42.805 11.633-85.496 11.633-127.285ZM942.075 564.706C724.1 564.706 546.782 742.024 546.782 960c0 217.976 177.318 395.294 395.294 395.294 217.977 0 395.294-177.318 395.294-395.294 0-217.976-177.317-395.294-395.294-395.294m0 677.647c-155.633 0-282.353-126.72-282.353-282.353s126.72-282.353 282.353-282.353S1224.43 804.367 1224.43 960s-126.72 282.353-282.353 282.353"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SettingsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Settings,
+ contentDescription = "Settings",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Settings2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Settings2.kt
new file mode 100644
index 0000000000..2aacb266fa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Settings2.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Settings2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Settings2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1739.34 1293.414-105.827 180.818-240.225-80.188-24.509 22.25c-69.91 63.586-150.211 109.666-238.644 136.771l-32.076 9.94-49.468 244.065H835.584l-49.468-244.179-32.076-9.939c-88.432-27.105-168.734-73.185-238.644-136.771l-24.508-22.25-240.226 80.189-105.826-180.82 189.74-164.442-7.453-32.978c-10.39-45.742-15.586-91.483-15.586-135.869 0-44.386 5.195-90.127 15.586-135.868l7.454-32.979-189.741-164.442 105.826-180.819 240.226 80.075 24.508-22.25c69.91-63.585 150.212-109.665 238.644-136.884l32.076-9.826 49.468-244.066h213.007l49.468 244.18 32.076 9.825c88.433 27.219 168.734 73.186 238.644 136.885l24.509 22.25 240.225-80.189 105.826 180.819-189.74 164.442 7.453 32.98c10.39 45.74 15.586 91.481 15.586 135.867 0 44.386-5.195 90.127-15.586 135.869l-7.454 32.978 189.741 164.556Zm-53.76-333.403c0-41.788-3.84-84.48-11.634-127.284l210.184-182.062-199.454-340.856-265.186 88.433c-66.974-55.567-143.322-99.388-223.85-128.414L1140.977.01H743.198l-54.663 269.704c-81.431 29.139-156.424 72.282-223.963 128.414L199.5 309.809.045 650.665l210.07 182.062c-7.68 42.804-11.52 85.496-11.52 127.284 0 41.789 3.84 84.48 11.52 127.172L.046 1269.357 199.5 1610.214l265.186-88.546c66.974 55.68 143.323 99.388 223.85 128.527l54.663 269.816h397.779l54.663-269.703c81.318-29.252 156.424-72.283 223.85-128.527l265.186 88.546 199.454-340.857-210.184-182.174c7.793-42.805 11.633-85.496 11.633-127.285ZM942.075 564.706C724.1 564.706 546.782 742.024 546.782 960c0 217.976 177.318 395.294 395.294 395.294 217.977 0 395.294-177.318 395.294-395.294 0-217.976-177.317-395.294-395.294-395.294m0 677.647c-155.633 0-282.353-126.72-282.353-282.353s126.72-282.353 282.353-282.353S1224.43 804.367 1224.43 960s-126.72 282.353-282.353 282.353"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Settings2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Settings2,
+ contentDescription = "Settings2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapeOval.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapeOval.kt
new file mode 100644
index 0000000000..c6fedbd076
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapeOval.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ShapeOval: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ShapeOval",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShapeOvalPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ShapeOval,
+ contentDescription = "ShapeOval",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapePolygon.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapePolygon.kt
new file mode 100644
index 0000000000..640644488c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapePolygon.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ShapePolygon: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ShapePolygon",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.36.011 109 508.785v902.442L960.36 1920l851.475-508.773V508.785L960.36.01ZM222.516 1346.864v-773.83L960.36 132.143l737.96 440.89v773.831l-737.96 441.005-737.846-441.005Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShapePolygonPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ShapePolygon,
+ contentDescription = "ShapePolygon",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapeRectangle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapeRectangle.kt
new file mode 100644
index 0000000000..6c07fb27e7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ShapeRectangle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ShapeRectangle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ShapeRectangle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 169v1581.176H0V169h1920Zm-112.941 112.941H112.94v1355.294h1694.12V281.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShapeRectanglePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ShapeRectangle,
+ contentDescription = "ShapeRectangle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Share.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Share.kt
new file mode 100644
index 0000000000..86455f62ab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Share.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Share: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Share",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1478.496 1318.496c132.692 0 240.602 107.91 240.602 240.602 0 132.691-107.91 240.601-240.602 240.601-132.691 0-240.601-107.91-240.601-240.601 0-21.053 3.609-41.143 8.661-60.632 10.467-39.94 30.557-76.03 58.346-105.143 43.79-45.834 105.263-74.827 173.594-74.827ZM440.902 716.992c67.61 0 128.481 28.15 172.27 73.143 28.031 28.873 48.121 64.842 58.948 104.782 5.534 20.09 9.384 40.782 9.384 62.677 0 24.18-4.692 47.278-11.429 69.293-11.91 39.459-32.962 74.948-61.955 103.098-43.308 41.985-102.135 68.21-167.218 68.21-132.691 0-240.601-107.91-240.601-240.601 0-132.692 107.91-240.602 240.601-240.602Zm1037.594-596.691c132.692 0 240.602 107.91 240.602 240.601 0 132.692-107.91 240.602-240.602 240.602-67.488 0-128.24-28.03-171.91-72.782-28.15-28.872-48.36-64.842-59.188-104.782-5.533-20.21-9.503-41.023-9.503-63.038 0-132.691 107.91-240.601 240.601-240.601Zm0 1077.894c-112.842 0-212.571 53.053-278.737 134.497L776.421 1088.24c15.88-40.662 25.384-84.452 25.384-130.647 0-43.79-9.023-85.173-23.339-124.03l422.978-244.33c66.285 80.24 165.173 132.57 277.052 132.57 198.978 0 360.902-161.924 360.902-360.902C1839.399 161.925 1677.475 0 1478.496 0c-198.977 0-360.902 161.925-360.902 360.902 0 43.91 9.023 85.534 23.459 124.391l-422.858 244.21c-66.165-80.36-165.172-132.811-277.293-132.811C241.925 596.692 80 758.617 80 957.594c0 198.977 161.925 360.902 360.902 360.902 109.594 0 206.797-50.165 272.963-127.519l426.346 246.136c-13.835 38.376-22.617 79.037-22.617 121.985 0 198.977 161.925 360.902 360.902 360.902 198.978 0 360.902-161.925 360.902-360.902 0-198.978-161.924-360.903-360.902-360.903"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SharePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Share,
+ contentDescription = "Share",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SidebarRightHide.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SidebarRightHide.kt
new file mode 100644
index 0000000000..2ecc0477eb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SidebarRightHide.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SidebarRightHide: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SidebarRightHide",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1008.33 960L562.292 1406.04L496.25 1340L876.146 960L496.25 580L562.292 513.958L1008.33 960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1750.62 0C1844 0.019942 1919.98 76.0017 1920 169.375V1750.62C1919.98 1844 1844 1919.98 1750.62 1920H169.375C76.0018 1919.98 0.019942 1844 0 1750.62V169.375C0.0199683 76.0018 76.0017 0.0199517 169.375 0H1750.62ZM169.375 112.917C138.345 112.937 112.937 138.345 112.917 169.375V1750.62C112.937 1781.65 138.345 1807.06 169.375 1807.08H1261.15V112.917H169.375ZM1374.17 1807.08H1750.62C1781.65 1807.06 1807.06 1781.65 1807.08 1750.62V169.375C1807.06 138.345 1781.65 112.937 1750.62 112.917H1374.17V1807.08Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SidebarRightHidePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SidebarRightHide,
+ contentDescription = "SidebarRightHide",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SidebarRightShow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SidebarRightShow.kt
new file mode 100644
index 0000000000..3430fe33dc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SidebarRightShow.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SidebarRightShow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SidebarRightShow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M883.229 580L503.333 960L883.229 1340L817.187 1406.04L371.146 960L817.187 513.958L883.229 580Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1750.62 0C1844 0.019942 1919.98 76.0017 1920 169.375V1750.62C1919.98 1844 1844 1919.98 1750.62 1920H169.375C76.0018 1919.98 0.019942 1844 0 1750.62V169.375C0.0199683 76.0018 76.0017 0.0199517 169.375 0H1750.62ZM169.375 112.917C138.345 112.937 112.937 138.345 112.917 169.375V1750.62C112.937 1781.65 138.345 1807.06 169.375 1807.08H1261.15V112.917H169.375ZM1374.17 1807.08H1750.62C1781.65 1807.06 1807.06 1781.65 1807.08 1750.62V169.375C1807.06 138.345 1781.65 112.937 1750.62 112.917H1374.17V1807.08Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SidebarRightShowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SidebarRightShow,
+ contentDescription = "SidebarRightShow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SingleMetric.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SingleMetric.kt
new file mode 100644
index 0000000000..ec9c8db6cb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SingleMetric.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SingleMetric: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SingleMetric",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M170.667 0C76.4101 0 0 76.4101 0 170.667V1749.33C0 1843.59 76.4101 1920 170.667 1920H1749.33C1843.59 1920 1920 1843.59 1920 1749.33V170.667C1920 76.4101 1843.59 0 1749.33 0H170.667ZM213.333 106.667C154.423 106.667 106.667 154.423 106.667 213.333V1706.67C106.667 1765.58 154.423 1813.33 213.333 1813.33H1706.67C1765.58 1813.33 1813.33 1765.58 1813.33 1706.67V213.333C1813.33 154.423 1765.58 106.667 1706.67 106.667H213.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1044.8 1485.23C1015.79 1480.12 996.419 1452.45 1001.53 1423.45L1168.24 478.031C1173.35 449.023 1201.01 429.654 1230.02 434.769C1259.03 439.884 1278.4 467.546 1273.28 496.554L1106.58 1441.97C1101.47 1470.98 1073.8 1490.35 1044.8 1485.23Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M426.667 773.333C426.667 743.878 450.545 720 480 720H1440C1469.46 720 1493.33 743.878 1493.33 773.333 1493.33 802.789 1469.46 826.667 1440 826.667H480C450.545 826.667 426.667 802.789 426.667 773.333ZM426.667 1146.67C426.667 1117.21 450.545 1093.33 480 1093.33H1440C1469.46 1093.33 1493.33 1117.21 1493.33 1146.67 1493.33 1176.12 1469.46 1200 1440 1200H480C450.545 1200 426.667 1176.12 426.667 1146.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M671.464 1485.23C642.456 1480.12 623.087 1452.45 628.202 1423.45L794.904 478.031C800.019 449.023 827.681 429.654 856.688 434.769C885.696 439.884 905.065 467.546 899.95 496.554L733.248 1441.97C728.133 1470.98 700.471 1490.35 671.464 1485.23Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SingleMetricPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SingleMetric,
+ contentDescription = "SingleMetric",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisImported.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisImported.kt
new file mode 100644
index 0000000000..25123cb5a5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisImported.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SisImported: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SisImported",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m807.186 686.592 272.864 272.864H0v112.94h1080.05l-272.864 272.978 79.736 79.849 409.296-409.183-409.296-409.184-79.736 79.736ZM1870.419 434.69l-329.221-329.11C1509.688 74.07 1465.979 56 1421.48 56H451.773v730.612h112.94V168.941h790.584v451.762h451.762v1129.405H564.714v-508.233h-112.94v621.173H1920V554.52c0-45.176-17.619-87.754-49.58-119.83Zm-402.181-242.37 315.443 315.442h-315.443V192.319Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SisImportedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SisImported,
+ contentDescription = "SisImported",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisNotSynced.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisNotSynced.kt
new file mode 100644
index 0000000000..1e1b610007
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisNotSynced.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SisNotSynced: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SisNotSynced",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960c0-285.29 127.059-552.621 342.89-734.118H0v-112.94h564.706v564.705H451.765V284.273C239.548 444.085 112.94 692.894 112.94 960c0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm242.428 694.193 79.85 79.85-242.372 242.371 242.372 242.485-79.85 79.85-242.484-242.373-242.372 242.372-79.85-79.85 242.372-242.484-242.372-242.372 79.85-79.85 242.372 242.373 242.484-242.372Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SisNotSyncedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SisNotSynced,
+ contentDescription = "SisNotSynced",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisSynced.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisSynced.kt
new file mode 100644
index 0000000000..fd4f8ed9b4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SisSynced.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SisSynced: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SisSynced",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960c0-285.29 127.059-552.621 342.89-734.118H0v-112.94h564.706v564.705H451.765V284.273C239.548 444.085 112.94 692.894 112.94 960c0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm355.37 714.376 79.849 79.849-475.483 475.482-282.014-281.9 79.85-79.85 202.164 202.051 395.633-395.632Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SisSyncedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SisSynced,
+ contentDescription = "SisSynced",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Skype.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Skype.kt
new file mode 100644
index 0000000000..cd6e176457
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Skype.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Skype: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Skype",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1363.844 1807.059c-73.186 0-145.807-17.958-209.958-51.84l-17.28-9.261-19.2 3.5c-48.903 8.923-98.598 13.328-147.84 13.328-444.085 0-805.27-355.878-805.27-793.412 0-53.76 5.42-107.407 16.15-159.247l4.518-21.459-11.294-18.86c-39.756-66.975-60.763-143.21-60.763-220.575 0-240.565 198.89-436.292 443.407-436.292 83.803 0 165.46 23.153 236.16 67.087l18.184 11.294 21.12-3.614c45.29-7.793 91.708-11.633 137.788-11.633 444.085 0 805.497 355.878 805.497 793.3 0 56.809-6.325 114.07-18.636 170.201l-4.404 19.652 9.148 17.958c30.494 60.536 45.854 125.59 45.854 193.581 0 240.565-198.777 436.292-443.181 436.292m506.88-662.513a897.833 897.833 0 0 0 17.28-175.172c0-499.765-412.01-906.24-918.438-906.24-45.402 0-91.03 3.275-135.981 9.939C749.444 25.186 654.008 0 556.315 0 249.565 0-.035 246.438-.035 549.233c0 90.353 22.701 179.463 65.845 259.087-9.6 52.856-14.457 106.842-14.457 161.054 0 499.765 411.897 906.353 918.212 906.353 49.581 0 99.614-3.953 148.97-11.859 76.009 36.82 160.376 56.132 245.308 56.132 306.635 0 556.122-246.438 556.122-549.233 0-78.946-16.49-154.955-49.242-226.221m-506.056 170.88c-33.543 47.774-83.124 85.722-147.275 112.715-63.812 26.541-140.16 40.094-227.012 40.094-104.132 0-191.548-18.41-259.652-54.89-48.79-26.427-88.997-62.456-119.604-106.841-30.833-44.725-46.42-89.224-46.42-132.029 0-26.767 10.166-49.92 30.382-69.12 19.765-18.748 45.177-28.348 75.558-28.348 24.96 0 46.531 7.68 64.037 22.475 16.603 14.344 30.946 35.35 42.58 62.683 12.762 29.59 26.766 54.55 41.562 74.428 14.343 18.974 34.898 34.899 60.988 47.435 26.315 12.424 61.666 18.861 105.374 18.861 59.972 0 109.214-12.875 146.146-38.287 36.14-24.96 53.76-54.776 53.76-91.256 0-28.913-9.148-51.501-28.01-69.459-19.877-18.522-45.967-33.092-77.477-42.918-32.98-10.277-77.817-21.458-133.158-33.204-75.332-16.264-139.37-35.577-190.306-57.374-51.953-22.25-93.967-53.083-124.574-91.935-31.172-39.303-46.983-88.545-46.983-146.484 0-55.228 16.602-104.923 49.355-147.84 32.414-42.692 79.736-75.784 140.725-98.598 60.31-22.25 131.915-33.77 213.007-33.77 64.715 0 121.863 7.455 169.411 22.476 47.774 15.021 88.094 35.238 119.83 60.198 31.963 25.073 55.68 51.953 70.59 79.85 14.907 28.234 22.7 56.357 22.7 83.35 0 26.202-10.164 49.92-29.816 70.588-19.878 20.781-44.95 31.398-74.541 31.398-26.767 0-47.887-6.551-62.57-19.652-13.553-12.085-27.67-30.946-43.256-58.052-18.184-34.673-40.094-61.892-65.167-81.205-24.396-18.635-65.054-28.122-121.073-28.122-52.066 0-94.306 10.503-125.704 31.285-30.38 19.99-45.063 42.917-45.063 70.023 0 16.715 4.743 30.607 14.57 42.579 10.277 12.762 24.846 23.83 43.143 32.979 19.087 9.826 38.739 17.393 58.39 22.927 20.217 5.647 54.1 13.892 100.405 24.734 58.73 12.762 112.715 26.88 160.49 42.353 48.338 15.586 90.24 34.786 124.235 57.148 34.56 22.701 62.23 51.953 81.656 86.965 19.652 35.012 29.59 78.381 29.59 128.753 0 60.085-17.053 114.974-50.823 163.087m35.012-448.715c7.68-6.212 15.134-12.989 22.25-20.443 40.094-41.788 61.214-93.176 61.214-148.63 0-45.403-12.085-91.144-35.803-136.094-22.588-42.353-56.47-81.205-100.856-115.991-42.014-33.205-94.532-59.859-155.633-79.059-58.165-18.296-126.607-27.67-203.181-27.67-94.08 0-179.012 13.778-252.085 40.771-81.544 30.381-145.807 76.123-191.548 135.981-48 63.135-72.396 135.982-72.396 216.396 0 84.14 24.057 156.988 71.492 216.734a378.74 378.74 0 0 0 31.962 35.576c-21.12 9.713-40.432 22.814-57.6 39.078-43.03 40.885-65.731 93.064-65.731 151.115 0 66.297 22.362 132.254 66.41 196.18 40.997 59.406 94.418 107.18 158.794 141.966 84.932 45.515 190.306 68.555 313.412 68.555 101.647 0 192.678-16.376 270.494-48.79 84.367-35.464 150.325-86.626 196.292-152.132 47.322-67.539 71.266-144.226 71.266-227.915 0-69.91-14.795-131.69-43.821-183.868-21.685-38.965-50.26-73.073-84.932-101.76"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SkypePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Skype,
+ contentDescription = "Skype",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Sort.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Sort.kt
new file mode 100644
index 0000000000..184b364fd6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Sort.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Sort: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Sort",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1539.045 215.441v1249.74l299.206-299.206L1920 1247.84l-438.966 438.966-438.85-438.966 81.864-81.865 299.206 299.206V215.44h115.791ZM438.966 160l438.967 439.082-81.865 81.749-299.206-299.206v1249.74H381.186V381.625L81.981 680.831 0 599.082 438.966 160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SortPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Sort,
+ contentDescription = "Sort",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SpeedGrader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SpeedGrader.kt
new file mode 100644
index 0000000000..096621d1be
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/SpeedGrader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.SpeedGrader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.SpeedGrader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1865.912 880.774c18.862 57.939 32.189 117.798 39.643 178.108 4.743 39.643 7.228 79.172 7.228 119.83 0 40.66-2.485 80.19-7.228 119.719-21.007 170.089-88.207 332.385-194.372 469.383l-89.223-69.12c93.74-120.96 153.035-264.17 171.557-413.93 4.179-35.011 6.325-70.023 6.325-106.051 0-36.028-2.146-71.04-6.438-106.165-6.437-52.97-18.183-105.713-34.899-156.65Zm-1753.874 403.99c18.522 149.76 77.816 292.97 171.557 413.93l-89.223 69.12C88.207 1630.816 21.007 1468.52 0 1298.544ZM1816.33 456.59l79.85 79.962-886.927 886.927L498.76 912.985l79.849-79.85 430.645 430.645 807.077-807.19ZM194.371 589.612l89.224 69.12c-93.74 120.96-153.035 264.17-171.557 413.93L0 1058.881c21.007-169.976 88.207-332.273 194.372-469.27Zm878.265-363.66c169.977 20.895 332.273 88.208 469.27 194.372l-69.12 89.224c-121.072-93.741-264.169-153.036-413.929-171.558Zm-239.695-.01 13.779 112.037C696.96 356.5 553.75 415.795 432.79 509.536l-69.12-89.223C500.669 314.148 662.966 246.948 832.942 225.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SpeedGraderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.SpeedGrader,
+ contentDescription = "SpeedGrader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Standards.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Standards.kt
new file mode 100644
index 0000000000..9a12fa2957
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Standards.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Standards: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Standards",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 1077.91c0 323.238-470.174 580.066-670.87 689.732-25.864 14.118-47.435 25.864-63.247 35.238-15.812-9.374-37.384-21.12-63.247-35.238-200.697-109.666-670.87-366.494-670.87-689.731V437.534L960.058 122.88l734.117 314.654v640.377ZM960.06 0 113 362.993v714.918c0 390.211 511.398 669.628 729.713 788.894 27.445 15.02 49.694 27.106 64.941 36.254v.113c16.15 9.713 34.221 14.57 52.405 14.57a100.79 100.79 0 0 0 52.405-14.683c15.247-9.148 37.496-21.233 64.94-36.254 218.316-119.266 729.714-398.683 729.714-788.894V362.993L960.058 0ZM604.69 868.563l-79.849 79.85 322.221 322.333 604.687-604.687-79.85-79.85-524.837 524.726L604.69 868.563Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StandardsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Standards,
+ contentDescription = "Standards",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Star.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Star.kt
new file mode 100644
index 0000000000..8cdbe0b9a3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Star.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Star: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Star",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1915.918 737.475c-10.955-33.543-42.014-56.131-77.364-56.131h-612.029l-189.063-582.1v-.112C1026.394 65.588 995.335 43 959.984 43c-35.237 0-66.41 22.588-77.365 56.245L693.443 681.344H81.415c-35.35 0-66.41 22.588-77.365 56.131-10.955 33.544.79 70.137 29.478 91.03l495.247 359.831-189.177 582.212c-10.955 33.657 1.13 70.25 29.817 90.918 14.23 10.278 30.946 15.487 47.66 15.487 16.716 0 33.432-5.21 47.775-15.6l495.134-359.718 495.021 359.718c28.574 20.781 67.087 20.781 95.662.113 28.687-20.668 40.658-57.261 29.703-91.03l-189.176-582.1 495.36-359.83c28.574-20.894 40.433-57.487 29.364-91.03"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StarPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Star,
+ contentDescription = "Star",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/StarLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/StarLight.kt
new file mode 100644
index 0000000000..962cddc166
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/StarLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.StarLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.StarLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1306.181 1110.407c-28.461 20.781-40.32 57.261-29.477 91.03l166.136 511.398-435.05-316.122c-28.686-20.781-67.086-20.781-95.66 0l-435.05 316.122 166.25-511.623c10.842-33.544-1.017-70.024-29.591-90.805L178.577 794.285h537.825c35.351 0 66.523-22.701 77.365-56.245l166.25-511.51 166.136 511.397a81.155 81.155 0 0 0 77.365 56.358h537.939l-435.276 316.122Zm609.77-372.819c-10.956-33.656-42.014-56.244-77.365-56.244h-612.141l-189.064-582.1C1026.426 65.589 995.367 43 960.017 43c-35.351 0-66.523 22.588-77.365 56.245L693.475 681.344H81.335c-35.351 0-66.41 22.588-77.366 56.244-10.842 33.657 1.017 70.137 29.591 90.918l495.247 359.718-189.29 582.211c-10.842 33.657 1.017 70.137 29.704 90.918 14.23 10.39 31.059 15.586 47.661 15.586 16.829 0 33.657-5.195 47.887-15.699l495.248-359.718 495.02 359.718c28.575 20.894 67.088 20.894 95.775.113 28.574-20.781 40.433-57.261 29.59-91.03l-189.289-582.1 495.247-359.717c28.687-20.781 40.546-57.261 29.59-90.918Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StarLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.StarLight,
+ contentDescription = "StarLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Stats.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Stats.kt
new file mode 100644
index 0000000000..baef2afff0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Stats.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Stats: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Stats",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 106.667V1493.33H1173.33V106.667H746.667ZM1056 224H864V1376H1056V224ZM106.667 533.333H533.333V1493.33H106.667V533.333ZM224 650.667H416V1376H224V650.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1706.67H0V1824H1920V1706.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.67 746.667H1813.33V1493.33H1386.67V746.667ZM1504 864H1696V1376H1504V864Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StatsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Stats,
+ contentDescription = "Stats",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Stop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Stop.kt
new file mode 100644
index 0000000000..04869f60ca
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Stop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Stop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Stop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 0v1920H0V0h1920Zm-137.143 137.143H137.143v1645.714h1645.714V137.143Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StopPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Stop,
+ contentDescription = "Stop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Strikethrough.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Strikethrough.kt
new file mode 100644
index 0000000000..bf12d574bd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Strikethrough.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Strikethrough: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Strikethrough",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1388.388 1178.604c35.04 82.32 37.92 177.6 8.64 283.32-60.36 216-199.32 294.72-305.4 322.68-42.12 11.16-85.68 16.2-129.6 16.2-191.52 0-390.24-96.24-502.68-207.96l-50.88-54.6 87.84-81.72 49.2 52.8c114.72 114 339.72 205.8 515.4 159.24 110.16-29.04 184.44-109.44 220.56-238.92 22.08-79.8 21-146.52-3.48-203.88ZM758.472 137.928c226.68-61.68 498.72 45.24 639.84 177l-81.84 87.72c-116.64-108.72-350.88-196.92-526.44-148.92-106.08 28.8-177.6 103.08-212.52 220.68-74.4 250.32 135.72 335.16 418.08 420 74.64 22.44 139.2 42.48 186.36 67.8h738v120h-1920v-120h814.92c-213.24-76.92-444.6-211.92-352.44-522.12 46.92-157.68 149.28-262.2 296.04-302.16Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StrikethroughPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Strikethrough,
+ contentDescription = "Strikethrough",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/StudentView.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/StudentView.kt
new file mode 100644
index 0000000000..1548c993a9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/StudentView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.StudentView: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.StudentView",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1395.06 960c165.12 0 299.4 134.16 299.88 299.04 0 .3.083.6.111.83l.009.13c0 165.36-134.64 300-300 300s-300-134.64-300-300 134.64-300 300-300Zm-975 0c165.36 0 300 134.64 300 300s-134.64 300-300 300c-165.48 0-300-134.64-300-300s134.52-300 300-300Zm1394.88 299.04c-.36-124.8-96.96-781.8-100.92-808.44-14.76-120-117.12-210.6-238.2-210.6h-155.76v120h155.76c60.48 0 111.72 45.24 119.28 106.68 15 101.88 42.84 297.24 65.4 470.64-72.6-59.88-164.28-97.32-265.44-97.32-210.96 0-384.48 157.08-414 360H833.94c-29.4-202.92-202.92-360-413.88-360-101.28 0-192.96 37.44-265.56 97.32 22.56-173.52 50.52-369.48 65.52-472.08 7.44-60 58.68-105.24 119.16-105.24h140.88V240H339.18c-121.08 0-223.44 90.6-237.96 209.28C97.02 477.24.06 1137 .06 1260c0 231.6 188.4 420 420 420 210.96 0 384.48-157.08 413.88-360h147.12c29.52 202.92 203.04 360 414 360 231.6 0 420-188.4 420-420 0-.24-.12-.6-.12-.96"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StudentViewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.StudentView,
+ contentDescription = "StudentView",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Studio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Studio.kt
new file mode 100644
index 0000000000..871a9a09bb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Studio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Studio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Studio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1735.135 0c32.46 0 58.775 26.315 58.775 58.776v1125.587c0 32.46-26.314 58.775-58.775 58.775h-245.278v199.818c0 14.201 11.512 25.714 25.714 25.714h61.463c23.377-65.684 86.101-112.707 159.808-112.707 93.658 0 169.582 75.924 169.582 169.581 0 93.657-75.924 169.582-169.582 169.582-74.315 0-137.465-47.803-160.379-114.337l-59.1.048c-77.131 0-139.628-62.497-139.628-139.592l.033-198.107h-123.405v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H777.214v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H541.656l.033 198.107c0 77.095-62.497 139.592-139.592 139.592l-59.136-.048c-22.914 66.534-86.064 114.337-160.38 114.337C88.924 1695.126 13 1619.2 13 1525.544s75.924-169.581 169.581-169.581c73.707 0 136.431 47.023 159.809 112.707h61.463c14.201 0 25.714-11.513 25.714-25.714v-199.818H183.115c-32.461 0-58.776-26.314-58.776-58.775V58.776C124.339 26.315 150.654 0 183.115 0h1552.02ZM1199.67 1694.79c-30.723 0-55.629 24.906-55.629 55.629s24.906 55.629 55.63 55.629c30.722 0 55.628-24.906 55.628-55.63 0-30.722-24.906-55.628-55.629-55.628Zm-477.149 0c-30.723 0-55.629 24.906-55.629 55.629s24.906 55.629 55.629 55.629 55.629-24.906 55.629-55.63c0-30.722-24.906-55.628-55.629-55.628Zm1015.672-224.875c-30.723 0-55.63 24.906-55.63 55.63 0 30.722 24.907 55.628 55.63 55.628 30.723 0 55.628-24.906 55.628-55.629s-24.905-55.629-55.628-55.629Zm-1556.964 0c-30.723 0-55.629 24.906-55.629 55.63 0 30.722 24.906 55.628 55.63 55.628 30.722 0 55.628-24.906 55.628-55.629s-24.906-55.629-55.629-55.629ZM1687.202 1040H231.047v67.099c0 16.23 13.157 29.387 29.388 29.387h1397.38c16.23 0 29.387-13.157 29.387-29.387V1040Zm-29.388-933.333H260.434c-16.23 0-29.387 13.157-29.387 29.387v797.28h1456.155v-797.28c0-16.23-13.157-29.387-29.388-29.387ZM901.047 348.665l220.035 131.796C1133.59 489.628 1141 504.338 1141 520c0 15.662-7.41 30.372-19.918 39.539L901.047 691.335a47.406 47.406 0 0 1-48.007.014c-14.858-8.697-24.02-24.777-24.04-42.189V390.84c.02-17.412 9.182-33.492 24.04-42.19a47.406 47.406 0 0 1 48.007.015Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StudioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Studio,
+ contentDescription = "Studio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Subaccounts.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Subaccounts.kt
new file mode 100644
index 0000000000..f8f72ca533
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Subaccounts.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Subaccounts: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Subaccounts",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1242.24 0v564.706h-225.77v301.101h677.648v489.487H1920V1920h-564.819v-564.706h225.995V978.861h-564.705v376.433h225.769V1920H677.647v-564.706H903.53V978.861H338.711v376.433h225.995V1920H0v-564.706h225.77V865.807h677.76V564.706H677.646V0h564.593Zm564.819 1468.348h-338.937v338.824h338.937v-338.824Zm-677.647 0H790.588v338.824h338.824v-338.824Zm-677.647 0H112.94v338.824h338.824v-338.824Zm677.647-1355.407H790.588v338.937h338.824V112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SubaccountsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Subaccounts,
+ contentDescription = "Subaccounts",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Subtitles.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Subtitles.kt
new file mode 100644
index 0000000000..3b650ce20e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Subtitles.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Subtitles: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Subtitles",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M320 1221.33c0-32.4 26.266-58.66 58.667-58.66h736.003c32.4 0 58.66 26.26 58.66 58.66 0 32.4-26.26 58.67-58.66 58.67H378.667c-32.401 0-58.667-26.27-58.667-58.67zm1066.67 0c0-32.4 26.26-58.66 58.66-58.66h96c32.4 0 58.67 26.26 58.67 58.66 0 32.4-26.27 58.67-58.67 58.67h-96c-32.4 0-58.66-26.27-58.66-58.67zm-581.337 261.34c-32.4 0-58.666 26.26-58.666 58.66 0 32.4 26.266 58.67 58.666 58.67h735.997c32.4 0 58.67-26.27 58.67-58.67 0-32.4-26.27-58.66-58.67-58.66H805.333zM320 1541.33c0-32.4 26.266-58.66 58.667-58.66h96c32.4 0 58.666 26.26 58.666 58.66 0 32.4-26.266 58.67-58.666 58.67h-96c-32.401 0-58.667-26.27-58.667-58.67z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 213.333C0 95.513 95.513 0 213.333 0H1706.67C1824.49 0 1920 95.513 1920 213.333V1706.67c0 117.82-95.51 213.33-213.33 213.33H213.333C95.513 1920 0 1824.49 0 1706.67V213.333Zm213.333-96H1706.67c53.02 0 96 42.981 96 96V1706.67c0 53.02-42.98 96-96 96H213.333c-53.019 0-96-42.98-96-96V213.333c0-53.019 42.981-96 96-96Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SubtitlesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Subtitles,
+ contentDescription = "Subtitles",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Syllabus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Syllabus.kt
new file mode 100644
index 0000000000..220b5c37ba
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Syllabus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Syllabus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Syllabus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1801.441 0v1920H219.03v-439.216h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.47 56.515-56.47h56.514V1029.02h-56.514c-31.196 0-56.515-25.3-56.515-56.471 0-31.172 25.319-56.47 56.515-56.47h56.514V577.254h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.471 56.515-56.471h56.514V0h1582.412Zm-113.03 112.941H332.06v351.373h56.515c31.196 0 56.514 25.299 56.514 56.47 0 31.172-25.318 56.47-56.514 56.47H332.06v338.824h56.515c31.196 0 56.514 25.3 56.514 56.471 0 31.172-25.318 56.47-56.514 56.47H332.06v338.824h56.515c31.196 0 56.514 25.299 56.514 56.47 0 31.172-25.318 56.471-56.514 56.471H332.06v326.275h1356.353V112.94ZM640.289 425.201H1388.9v112.94H640.288v-112.94Zm0 214.83h639.439v112.94h-639.44v-112.94Zm0 534.845H1388.9v112.94H640.288v-112.94Zm0 214.83h639.439v112.94h-639.44v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SyllabusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Syllabus,
+ contentDescription = "Syllabus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Table.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Table.kt
new file mode 100644
index 0000000000..b44e504538
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Table.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Table: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Table",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1800 1320v420c0 33-27 60-60 60h-420v-480h480Zm-600 0v480H720v-480h480Zm-600 0v480H180c-33 0-60-27-60-60v-420h480Zm1200-600v480h-480V720h480Zm-600 0v480H720V720h480Zm-600 0v480H120V720h480Zm1140-600c33 0 60 27 60 60v420h-480V120h420Zm-540 0v480H720V120h480Zm-600 0v480H120V180c0-33 27-60 60-60h420ZM1740 0H180C80.76 0 0 80.76 0 180v1560c0 99.24 80.76 180 180 180h1560c99.24 0 180-80.76 180-180V180c0-99.24-80.76-180-180-180Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TablePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Table,
+ contentDescription = "Table",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableCellSelectAll.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableCellSelectAll.kt
new file mode 100644
index 0000000000..d1416b7e34
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableCellSelectAll.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableCellSelectAll: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableCellSelectAll",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560ZM894 1800v-774H120v677.25c0 53.213 43.537 96.75 96.75 96.75H894Zm0-906V120H216.75c-53.213 0-96.75 43.537-96.75 96.75V894h774Zm906 809.25V1026h-774v774h677.25c53.213 0 96.75-43.537 96.75-96.75Zm0-809.25V216.75c0-53.213-43.537-96.75-96.75-96.75H1026v774h774Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableCellSelectAllPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableCellSelectAll,
+ contentDescription = "TableCellSelectAll",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteColumn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteColumn.kt
new file mode 100644
index 0000000000..9dc626f4bf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteColumn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableDeleteColumn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableDeleteColumn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1800 1740c0 33-27 60-60 60h-420v-300h-120v300H720v-300H600v300H180c-33.12 0-60-27-60-60V180c0-33 26.88-60 60-60h420v300h120V120h480v300h120V120h420c33 0 60 27 60 60v1560ZM1740 0H180C80.76 0 0 80.76 0 180v1560c0 99.24 80.76 180 180 180h1560c99.24 0 180-80.76 180-180V180c0-99.24-80.76-180-180-180Zm-305.16 654.84-169.68-169.68L960 790.32 654.84 485.16 485.16 654.84 790.32 960l-305.16 305.16 169.68 169.68L960 1129.68l305.16 305.16 169.68-169.68L1129.68 960l305.16-305.16Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableDeleteColumnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableDeleteColumn,
+ contentDescription = "TableDeleteColumn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteRow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteRow.kt
new file mode 100644
index 0000000000..c37c406d78
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteRow.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableDeleteRow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableDeleteRow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M180 1800c-33 0-60-27-60-60v-420h300v-120H120V720h300V600H120V180c0-33.12 27-60 60-60h1560c33 0 60 26.88 60 60v420h-300v120h300v480h-300v120h300v420c0 33-27 60-60 60H180Zm1740-60V180c0-99.24-80.76-180-180-180H180C80.76 0 0 80.76 0 180v1560c0 99.24 80.76 180 180 180h1560c99.24 0 180-80.76 180-180ZM485.32 1265 655 1434.68l305.16-305.16 305.16 305.16L1435 1265l-305.16-305.16L1435 654.68 1265.32 485 960.16 790.16 655 485 485.32 654.68l305.16 305.16L485.32 1265Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableDeleteRowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableDeleteRow,
+ contentDescription = "TableDeleteRow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteTable.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteTable.kt
new file mode 100644
index 0000000000..7db05e878a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableDeleteTable.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableDeleteTable: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableDeleteTable",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1800 1740c0 33-26.88 60-60 60H180c-33.12 0-60-27-60-60V180c0-33.12 26.88-60 60-60h1560c33.12 0 60 26.88 60 60v1560ZM1740 0H180C80.76 0 0 80.76 0 180v1560c0 99.24 80.76 180 180 180h1560c99.24 0 180-80.76 180-180V180c0-99.24-80.76-180-180-180Zm-235.08 245.388L960 790.308l-544.92-544.92-169.68 169.68 544.92 544.92-544.92 544.92 169.68 169.68L960 1129.668l544.92 544.92 169.68-169.68-544.92-544.92 544.92-544.92-169.68-169.68Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableDeleteTablePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableDeleteTable,
+ contentDescription = "TableDeleteTable",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertColumnAfter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertColumnAfter.kt
new file mode 100644
index 0000000000..c0892d35d3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertColumnAfter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableInsertColumnAfter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableInsertColumnAfter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560Zm60 1740V180c0-33-26.88-60-60-60H720v1680h1020c33.12 0 60-27 60-60Zm-1620 60h420v-480H120v420c0 33 26.88 60 60 60Zm-60-600h480V720H120v480Zm60-1080c-33.12 0-60 27-60 60v420h480V120H180Zm963.516 390h240v330h330v240h-330v330h-240v-330h-330V840h330V510Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertColumnAfterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableInsertColumnAfter,
+ contentDescription = "TableInsertColumnAfter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertColumnBefore.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertColumnBefore.kt
new file mode 100644
index 0000000000..5ce0b4447b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertColumnBefore.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableInsertColumnBefore: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableInsertColumnBefore",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M120 180v1560c0 33 26.88 60 60 60h1020V120H180c-33.12 0-60 27-60 60Zm1620-60h-420v480h480V180c0-33-26.88-60-60-60Zm60 600h-480v480h480V720Zm-60 1080c33.12 0 60-27 60-60v-420h-480v480h420ZM180 1920c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180Zm596.484-510h-240v-330h-330V840h330V510h240v330h330v240h-330v330Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertColumnBeforePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableInsertColumnBefore,
+ contentDescription = "TableInsertColumnBefore",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertRowAbove.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertRowAbove.kt
new file mode 100644
index 0000000000..6510a802e8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertRowAbove.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableInsertRowAbove: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableInsertRowAbove",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 120H180c-33 0-60 26.88-60 60v1020h1680V180c0-33.12-27-60-60-60Zm60 1620v-420h-480v480h420c33 0 60-26.88 60-60Zm-600 60v-480H720v480h480Zm-1080-60c0 33.12 27 60 60 60h420v-480H120v420ZM0 180C0 80.76 80.76 0 180 0h1560c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180Zm510 596.484v-240h330v-330h240v330h330v240h-330v330H840v-330H510Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertRowAbovePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableInsertRowAbove,
+ contentDescription = "TableInsertRowAbove",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertRowAfter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertRowAfter.kt
new file mode 100644
index 0000000000..1172b4bbde
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableInsertRowAfter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableInsertRowAfter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableInsertRowAfter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M180 1800h1560c33 0 60-26.88 60-60V720H120v1020c0 33.12 27 60 60 60ZM120 180v420h480V120H180c-33 0-60 26.88-60 60Zm600-60v480h480V120H720Zm1080 60c0-33.12-27-60-60-60h-420v480h480V180Zm120 1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560c99.24 0 180 80.76 180 180v1560Zm-510-596.484v240h-330v330H840v-330H510v-240h330v-330h240v330h330Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertRowAfterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableInsertRowAfter,
+ contentDescription = "TableInsertRowAfter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableLeftHeader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableLeftHeader.kt
new file mode 100644
index 0000000000..d2971b7304
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableLeftHeader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableLeftHeader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableLeftHeader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560Zm60 1320h-480v480h420c33 0 60-27 60-60v-420Zm-600 0H720v480h480v-480Zm600-600h-480v480h480V720Zm-600 0H720v480h480V720Zm540-600h-420v480h480V180c0-33-27-60-60-60Zm-540 0H720v480h480V120Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableLeftHeaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableLeftHeader,
+ contentDescription = "TableLeftHeader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableMergeCells.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableMergeCells.kt
new file mode 100644
index 0000000000..36530d8a81
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableMergeCells.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableMergeCells: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableMergeCells",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560Zm60 600V180c0-33-27-60-60-60h-420v480h480Zm0 1065V720H720v1080h945c74.25 0 135-60.75 135-135ZM720 600h480V120H720v480Zm-120 0V120H180c-33 0-60 27-60 60v420h480Zm-480 600h480V720H120v480Zm480 600v-480H120v420c0 33 27 60 60 60h420Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableMergeCellsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableMergeCells,
+ contentDescription = "TableMergeCells",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableRowProperties.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableRowProperties.kt
new file mode 100644
index 0000000000..90cca68ce4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableRowProperties.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableRowProperties: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableRowProperties",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0Zm60 1320h-480v480h420c33 0 60-27 60-60v-420Zm-600 0H720v480h480v-480Zm-600 0H120v420c0 33 27 60 60 60h420v-480ZM1740 120h-420v480h480V180c0-33-27-60-60-60Zm-540 0H720v480h480V120Zm-600 0H180c-33 0-60 27-60 60v420h480V120Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableRowPropertiesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableRowProperties,
+ contentDescription = "TableRowProperties",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableSplitCells.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableSplitCells.kt
new file mode 100644
index 0000000000..d7dacab1ad
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableSplitCells.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableSplitCells: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableSplitCells",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0Zm60 720H720v1080h945c74.25 0 135-60.75 135-135V720ZM600 1320H120v420c0 33 27 60 60 60h420v-480Zm0-600H120v480h480V720Zm1140-600h-420v480h480V180c0-33-27-60-60-60Zm-540 0H720v480h480V120Zm-600 0H180c-33 0-60 27-60 60v420h480V120Zm1134 841.559L1564.441 792 1259.5 1096.941 954.559 792 785 961.559l304.941 304.941L785 1571.441 954.559 1741l304.941-304.941L1564.441 1741 1734 1571.441 1429.059 1266.5 1734 961.559Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableSplitCellsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableSplitCells,
+ contentDescription = "TableSplitCells",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableTopHeader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableTopHeader.kt
new file mode 100644
index 0000000000..12a5709314
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TableTopHeader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TableTopHeader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TableTopHeader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740 0c99.24 0 180 80.76 180 180v1560c0 99.24-80.76 180-180 180H180c-99.24 0-180-80.76-180-180V180C0 80.76 80.76 0 180 0h1560Zm-420 1200h480V720h-480v480Zm480 540v-420h-480v480h420c33 0 60-27 60-60ZM720 1200h480V720H720v480Zm0 600h480v-480H720v480Zm-600-600h480V720H120v480Zm480 600v-480H120v420c0 33 27 60 60 60h420Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableTopHeaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TableTopHeader,
+ contentDescription = "TableTopHeader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Tag.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Tag.kt
new file mode 100644
index 0000000000..a1e0f4fd0c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Tag.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Tag: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Tag",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1152.821 372.968c-2.453 17.493-4.693 35.093-4.693 53.333 0 18.24 2.24 36.16 4.907 53.974-56.214-1.28-112.96 19.093-155.734 61.866-83.093 83.094-83.093 218.56 0 301.654 41.6 41.6 96.214 62.4 150.827 62.4s109.227-20.8 150.827-62.4c83.093-83.094 83.093-218.56 0-301.654-8.214-8.213-17.387-15.146-26.56-21.653l-.747-2.027c-11.093-29.866-16.853-60.906-16.853-92.16 0-18.453 2.346-36.053 6.186-53.333h153.814c29.333 0 53.333 24 53.333 53.333v625.494l-638.4 638.506-678.933-678.933 638.506-638.4h363.52Zm-4.693 213.44c14.827 0 29.227 3.627 42.987 9.707 16 31.68 36.48 60.48 61.44 86.08 3.306 30.826-5.44 62.613-29.014 86.186-41.706 41.707-109.12 41.707-150.826 0-41.6-41.6-41.6-109.226 0-150.826 20.8-20.8 48.106-31.147 75.413-31.147Zm373.333-533.44c-146.24 0-276.48 85.333-335.68 213.333h-440.64L-.032 1011.368l829.76 829.76 745.067-745.173V426.3c0-88.213-71.787-160-160-160h-106.347c48.853-65.706 127.147-106.666 213.013-106.666 147.094 0 266.667 119.573 266.667 266.666h106.667c0-205.866-167.467-373.333-373.334-373.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TagPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Tag,
+ contentDescription = "Tag",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Target.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Target.kt
new file mode 100644
index 0000000000..54137ca309
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Target.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Target: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Target",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1691.249 1016.47c-27.558 359.718-315.106 647.154-674.824 674.824v-223.059h-112.94v223.06c-359.718-27.671-647.154-315.107-674.711-674.824H451.72V903.529H228.774c27.557-359.717 314.993-647.153 674.71-674.823v223.059h112.941v-223.06c359.718 27.671 647.266 315.107 674.824 674.824H1468.19v112.942h223.059Zm112.941-112.94c-28.01-421.949-365.703-759.756-787.765-787.765V0h-112.94v115.765c-421.949 28.01-759.643 365.816-787.653 787.764H-.045v112.942h115.877c28.01 421.948 365.704 759.755 787.652 787.764V1920h112.941v-115.765c422.062-28.01 759.756-365.816 787.765-787.764h115.765V903.529H1804.19ZM960 1242.352c-155.633 0-282.353-126.72-282.353-282.353S804.367 677.647 960 677.647 1242.353 804.367 1242.353 960 1115.633 1242.353 960 1242.353m0-677.647c-217.976 0-395.294 177.318-395.294 395.294 0 217.976 177.318 395.294 395.294 395.294 217.976 0 395.294-177.318 395.294-395.294 0-217.976-177.318-395.294-395.294-395.294"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TargetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Target,
+ contentDescription = "Target",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Text.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Text.kt
new file mode 100644
index 0000000000..867542581f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Text.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Text: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Text",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M247 0h1426.286v501.943h-202.972V202.97H1072.6v1514.06h301.714V1920H543.23v-202.971h301.714V202.97H449.97v298.972H247z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Text,
+ contentDescription = "Text",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextBackgroundColor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextBackgroundColor.kt
new file mode 100644
index 0000000000..664b05681c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextBackgroundColor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextBackgroundColor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextBackgroundColor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m742.81 1024.051 185.984-512h62.336l186.112 512H742.81Zm605.056 469.888 120.32-43.776-387.328-1066.112H839.194L451.866 1450.163l120.32 43.776 124.16-341.888h527.36l124.16 341.888ZM1792 1728.051c0 35.2-28.672 64-64 64H192c-35.328 0-64-28.8-64-64v-1536c0-35.2 28.672-64 64-64h1536c35.328 0 64 28.8 64 64v1536Zm-64-1728H192c-105.856 0-192 86.144-192 192v1536c0 105.856 86.144 192 192 192h1536c105.856 0 192-86.144 192-192v-1536c0-105.856-86.144-192-192-192Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextBackgroundColorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextBackgroundColor,
+ contentDescription = "TextBackgroundColor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextCentered.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextCentered.kt
new file mode 100644
index 0000000000..ecbf52af27
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextCentered.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextCentered: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextCentered",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1664 1664v128H256v-128h1408Zm256-384v128H0v-128h1920Zm-127.872-384v128H128V896h1664.128ZM1920 512v128H0V512h1920Zm-256-384v128H256V128h1408Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextCenteredPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextCentered,
+ contentDescription = "TextCentered",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextColor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextColor.kt
new file mode 100644
index 0000000000..d8619ed1a8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextColor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextColor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextColor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1846.308 1476.923V1920H74v-443.077h1772.308Zm-147.693 147.692H221.692v147.693h1476.923v-147.693ZM1109.751.06l509.391 1227.028-136.468 56.566-164.972-397.588H602.576l-164.972 397.588-136.468-56.566L810.526.059h299.225Zm-98.658 147.692h-101.76L663.868 738.373h592.542L1011.093 147.75Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextColorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextColor,
+ contentDescription = "TextColor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextDirectionLtr.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextDirectionLtr.kt
new file mode 100644
index 0000000000..72e37e9601
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextDirectionLtr.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextDirectionLtr: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextDirectionLtr",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1384.152 1232.856 270.293 270.22H288.975v85.892h1365.47l-270.293 270.306 60.743 60.726 374.08-373.892-374.08-373.892-60.743 60.64ZM650.967 85.893h162.897V629.51H650.967c-149.924 0-271.926-121.883-271.926-271.766 0-149.969 122.002-271.851 271.926-271.851m0 629.51h162.897v540.782h85.917V85.893h225.874v1170.292h85.916V85.893h165.905V0h-726.51c-197.262 0-357.84 160.448-357.84 357.744 0 197.21 160.578 357.659 357.842 357.659"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextDirectionLtrPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextDirectionLtr,
+ contentDescription = "TextDirectionLtr",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextDirectionRtl.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextDirectionRtl.kt
new file mode 100644
index 0000000000..6b5894ca52
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextDirectionRtl.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextDirectionRtl: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextDirectionRtl",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m188 1544.887 373.633 373.6 60.77-60.678-270.118-270.095h1372.732v-85.74H352.285l270.118-270.095-60.77-60.593L188 1544.886ZM755.599 85.827h162.74v543.192h-162.74c-149.78 0-271.663-121.787-271.663-271.553 0-149.853 121.883-271.64 271.663-271.64m0 629.02h162.74v540.36h85.833V85.827h225.656v1169.38h85.833V85.827h165.744V0H755.6C558.525 0 398.103 160.323 398.103 357.466c0 197.056 160.422 357.38 357.496 357.38"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextDirectionRtlPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextDirectionRtl,
+ contentDescription = "TextDirectionRtl",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextEnd.kt
new file mode 100644
index 0000000000..72d6f28604
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextEnd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1663.898v127.991H255.983v-127.991H1920Zm-.128-383.975v127.992H0v-127.992h1919.872ZM1920 895.95v127.991H255.983V895.95H1920Zm-.128-383.975v127.992H0V511.974h1919.872ZM1920 128v127.991H255.983V128H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextEnd,
+ contentDescription = "TextEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextLeft.kt
new file mode 100644
index 0000000000..4fcdbee144
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1664 1664v128H0v-128h1664Zm256-384v128H0v-128h1920Zm-256-384v128H0V896h1664Zm256-384v128H0V512h1920Zm-256-384v128H0V128h1664Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextLeft,
+ contentDescription = "TextLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextRight.kt
new file mode 100644
index 0000000000..b007e97e9c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1663.898v127.991H255.983v-127.991H1920Zm-.128-383.975v127.992H0v-127.992h1919.872ZM1920 895.95v127.991H255.983V895.95H1920Zm-.128-383.975v127.992H0V511.974h1919.872ZM1920 128v127.991H255.983V128H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextRight,
+ contentDescription = "TextRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextStart.kt
new file mode 100644
index 0000000000..244e631bb9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1664 1664v128H0v-128h1664Zm256-384v128H0v-128h1920Zm-256-384v128H0V896h1664Zm256-384v128H0V512h1920Zm-256-384v128H0V128h1664Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextStart,
+ contentDescription = "TextStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextSubscript.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextSubscript.kt
new file mode 100644
index 0000000000..3bc1b1a5c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextSubscript.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextSubscript: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextSubscript",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1543.86 983c98.653 0 190.053 60.343 227.27 150.243 36.807 88.942 12.588 188.42-64.856 265.867-90.306 90.31-213.04 201.008-288.431 268.057h365.465V1804h-478.895c-37.764 0-68.413-30.65-68.413-68.417v-59.933c0-19.704 8.62-38.587 23.534-51.586 2.19-1.916 216.46-188.146 350.004-321.695 38.585-38.587 50.762-78.953 35.164-116.856-16.009-38.723-57.467-65.68-100.841-65.68-100.158 0-183.896 108.51-184.854 109.74l-109.324-82.373c5.062-6.705 125.196-164.2 294.178-164.2ZM1373 162v136.8H825.889V1530H689.11V298.8H142V162h1231Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextSubscriptPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextSubscript,
+ contentDescription = "TextSubscript",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextSuperscript.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextSuperscript.kt
new file mode 100644
index 0000000000..de44af2eaa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TextSuperscript.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TextSuperscript: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TextSuperscript",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1231.314 481.452v136.812h-547.25v1231.314H547.25V618.264H0V481.452h1231.314ZM1675.886 71c98.642 0 190.033 60.334 227.246 150.22 36.802 88.928 12.587 188.391-64.85 265.827-90.296 90.296-213.017 200.978-288.4 268.016h365.426v136.813h-478.844c-37.76 0-68.406-30.646-68.406-68.407v-59.924c0-19.7 8.619-38.58 23.532-51.578 2.189-1.915 216.437-188.117 349.966-321.646 38.581-38.582 50.758-78.941 35.161-116.838-16.007-38.718-57.461-65.67-100.83-65.67-100.148 0-183.877 108.492-184.835 109.723l-109.313-82.36C1386.801 228.47 1506.923 71 1675.886 71Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextSuperscriptPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TextSuperscript,
+ contentDescription = "TextSuperscript",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Textarea.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Textarea.kt
new file mode 100644
index 0000000000..3593d10063
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Textarea.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Textarea: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Textarea",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M480 660h960V540H480v120Zm0 360h720V900H480v120Zm-60 810H300c0-231.6 188.4-420 420-420h1080V210H120v1620H0V90h1920v1440H720c-165.36 0-300 134.64-300 300"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextareaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Textarea,
+ contentDescription = "Textarea",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Timer.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Timer.kt
new file mode 100644
index 0000000000..0701312d37
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Timer.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Timer: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Timer",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960c0-172.687 46.419-341.986 134.174-489.6l97.017 57.713C153.826 658.22 112.94 807.529 112.94 960c0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-448.038-349.779-816-790.588-845.139v223.963H903.529V0ZM322.334 242.372l482.259 482.372c44.612-29.704 97.92-47.097 155.407-47.097 155.633 0 282.353 126.72 282.353 282.353S1115.633 1242.353 960 1242.353 677.647 1115.633 677.647 960c0-57.487 17.393-110.795 47.097-155.407L242.372 322.334l79.962-79.962ZM960 790.588c-93.402 0-169.412 76.01-169.412 169.412s76.01 169.412 169.412 169.412 169.412-76.01 169.412-169.412S1053.402 790.588 960 790.588Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TimerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Timer,
+ contentDescription = "Timer",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleEnd.kt
new file mode 100644
index 0000000000..0a03db6f6c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleEnd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ToggleEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ToggleEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1072.941 113C1540.066 113 1920 492.934 1920 960.059c0 467.125-379.934 847.059-847.059 847.059-256.15 0-495.247-113.845-656.075-312.283l87.868-71.153c139.257 171.897 346.278 270.494 568.207 270.494 404.781 0 734.118-329.336 734.118-734.117 0-404.781-329.337-734.118-734.118-734.118-221.93 0-428.95 98.598-568.207 270.494l-87.868-71.153C577.694 226.845 816.79 113 1072.94 113ZM943.443 524.885l435.162 435.163-435.162 435.162-79.85-79.737 298.956-298.955H.045V903.577H1162.55L863.593 604.735l79.85-79.85Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ToggleEnd,
+ contentDescription = "ToggleEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleLeft.kt
new file mode 100644
index 0000000000..788ce7b50a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ToggleLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ToggleLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M847.059 113c256.15 0 495.247 113.845 656.075 312.282l-87.868 71.153c-139.257-171.896-346.278-270.494-568.207-270.494-404.781 0-734.118 329.337-734.118 734.118 0 404.781 329.337 734.117 734.118 734.117 221.93 0 428.95-98.597 568.207-270.494l87.868 71.153c-160.828 198.438-399.925 312.283-656.075 312.283C379.934 1807.118 0 1427.184 0 960.058 0 492.935 379.934 113 847.059 113Zm129.476 411.817 79.849 79.963-298.955 298.842h1162.616v112.828H757.43l298.955 298.956-79.85 79.85-435.162-435.163 435.163-435.276Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ToggleLeft,
+ contentDescription = "ToggleLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleRight.kt
new file mode 100644
index 0000000000..7dd9098fbf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ToggleRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ToggleRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1072.941 113C1540.066 113 1920 492.934 1920 960.059c0 467.125-379.934 847.059-847.059 847.059-256.15 0-495.247-113.845-656.075-312.283l87.868-71.153c139.257 171.897 346.278 270.494 568.207 270.494 404.781 0 734.118-329.336 734.118-734.117 0-404.781-329.337-734.118-734.118-734.118-221.93 0-428.95 98.598-568.207 270.494l-87.868-71.153C577.694 226.845 816.79 113 1072.94 113ZM943.443 524.885l435.162 435.163-435.162 435.162-79.85-79.737 298.956-298.955H.045V903.577H1162.55L863.593 604.735l79.85-79.85Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ToggleRight,
+ contentDescription = "ToggleRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleStart.kt
new file mode 100644
index 0000000000..3342aa3cfa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ToggleStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ToggleStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ToggleStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M847.059 113c256.15 0 495.247 113.845 656.075 312.282l-87.868 71.153c-139.257-171.896-346.278-270.494-568.207-270.494-404.781 0-734.118 329.337-734.118 734.118 0 404.781 329.337 734.117 734.118 734.117 221.93 0 428.95-98.597 568.207-270.494l87.868 71.153c-160.828 198.438-399.925 312.283-656.075 312.283C379.934 1807.118 0 1427.184 0 960.058 0 492.935 379.934 113 847.059 113Zm129.476 411.817 79.849 79.963-298.955 298.842h1162.616v112.828H757.43l298.955 298.956-79.85 79.85-435.162-435.163 435.163-435.276Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ToggleStart,
+ contentDescription = "ToggleStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Trash.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Trash.kt
new file mode 100644
index 0000000000..bd5be0ca88
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Trash.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Trash: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Trash",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1581.176 1750.588c0 31.06-25.411 56.47-56.47 56.47H395.294c-31.059 0-56.47-25.41-56.47-56.47V564.706H225.882v1185.882c0 93.403 76.01 169.412 169.412 169.412h1129.412c93.402 0 169.412-76.01 169.412-169.412V564.706h-112.942v1185.882Zm-903.529-169.412h112.941V677.647h-112.94v903.53Zm451.765 0h112.94V677.647h-112.94v903.53Zm211.211-1242.352L1217.065 0H694.6L571.268 338.824H.01v112.94h1920v-112.94h-579.388Zm-649.299 0 82.334-225.883h364.462l82.334 225.883h-529.13Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TrashPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Trash,
+ contentDescription = "Trash",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Trouble.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Trouble.kt
new file mode 100644
index 0000000000..e02a4855c9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Trouble.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Trouble: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Trouble",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M961 1C431.645 1 1 431.645 1 961s430.645 960 960 960 960-430.645 960-960S1490.355 1 961 1m0 1807.059c-467.125 0-847.059-379.934-847.059-847.059 0-467.125 379.934-847.059 847.059-847.059 467.125 0 847.059 379.934 847.059 847.059 0 467.125-379.934 847.059-847.059 847.059m319.465-1246.374-319.51 319.51-319.398-319.51-79.85 79.85 319.398 319.51-319.397 319.398 79.85 79.85 319.397-319.398 319.51 319.397 79.85-79.85-319.51-319.397 319.51-319.51-79.85-79.85Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TroublePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Trouble,
+ contentDescription = "Trouble",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Twitter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Twitter.kt
new file mode 100644
index 0000000000..b55c56d94f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Twitter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Twitter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Twitter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1643.825 518.606c-14.457 11.294-22.588 28.8-21.685 47.096.565 16.377 1.017 32.753 1.017 49.355 0 530.372-373.497 1079.153-998.513 1079.153-122.203 0-242.598-24.282-355.765-71.153 136.433-22.588 266.428-82.447 374.965-173.816 17.957-15.247 24.62-39.868 16.828-62.005-7.793-22.136-28.574-37.157-52.179-37.722-105.374-2.146-200.81-62.682-256.376-157.214 38.06-1.13 79.059-7.116 109.779-16.038 24.847-7.228 41.562-30.381 40.771-56.132-.903-25.863-19.2-47.774-44.499-53.308-112.15-24.282-194.71-116.781-222.607-243.84 32.076 6.438 62.344 8.47 79.06 8.922 24.62 2.711 47.322-14.456 55.453-38.06 8.02-23.492-.226-49.582-20.442-64.151-78.042-56.245-161.619-161.167-161.619-286.42 0-30.832 3.84-61.326 11.181-90.804 195.163 217.186 461.478 348.31 743.83 363.558 18.975 1.016 34.674-6.438 46.08-19.765 11.408-13.327 15.926-31.398 12.312-48.565-5.648-25.637-8.471-52.178-8.471-79.058 0-188.951 141.063-342.664 314.428-342.664 87.19 0 168.283 37.835 228.141 106.73 13.327 15.36 34.334 22.475 54.212 18.183 28.687-6.099 56.922-13.779 84.706-23.153-16.49 16.715-34.673 31.624-54.438 44.386-22.25 14.343-31.51 42.014-22.475 66.861s34.56 39.868 60.31 36.593c14.683-1.92 29.252-4.179 43.709-7.002-18.297 17.731-37.497 34.447-57.713 50.033m261.685-199.68c-16.716-18.636-43.596-23.83-66.41-13.214-4.066 1.92-8.132 3.84-12.31 5.76 17.054-30.269 30.946-62.683 40.997-96.678 6.777-22.588-1.242-46.984-20.103-61.214-18.974-14.118-44.5-15.247-64.49-2.485-58.277 37.384-120.96 64.828-186.466 82.108-78.268-76.8-181.948-120.17-289.355-120.17-235.595 0-427.37 204.424-427.37 455.606 0 9.487.227 18.974.791 28.348C626 564.008 390.517 424.977 226.64 208.469c-11.52-15.247-30.155-23.04-49.242-22.136-19.2 1.468-36.367 12.536-45.516 29.477-37.157 68.894-56.809 147.614-56.809 227.464 0 86.626 28.687 165.007 70.25 230.739-19.426 9.035-32.98 28.574-32.98 51.388v5.195c0 139.821 49.808 261.91 133.497 344.47-9.035 2.937-17.28 8.246-23.943 15.36a56.566 56.566 0 0 0-12.537 54.326c40.772 136.997 137.788 242.145 258.41 289.807-122.88 69.571-268.688 97.129-404.443 80.753-26.541-3.953-50.485 11.858-59.633 36.028-9.261 24.282-.677 51.84 20.781 66.522 179.69 123.784 387.276 189.29 600.17 189.29 695.717 0 1111.454-606.156 1111.454-1192.095 0-8.583-.113-17.054-.339-25.524 68.555-57.149 127.51-125.365 175.737-203.069 13.214-21.345 10.842-48.903-5.986-67.538"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TwitterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Twitter,
+ contentDescription = "Twitter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TwitterBoxed.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TwitterBoxed.kt
new file mode 100644
index 0000000000..e03db28773
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/TwitterBoxed.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.TwitterBoxed: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.TwitterBoxed",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1643.825 518.606c-14.457 11.294-22.588 28.8-21.685 47.096.565 16.377 1.017 32.753 1.017 49.355 0 530.372-373.497 1079.153-998.513 1079.153-122.203 0-242.598-24.282-355.765-71.153 136.433-22.588 266.428-82.447 374.965-173.816 17.957-15.247 24.62-39.868 16.828-62.005-7.793-22.136-28.574-37.157-52.179-37.722-105.374-2.146-200.81-62.682-256.376-157.214 38.06-1.13 79.059-7.116 109.779-16.038 24.847-7.228 41.562-30.381 40.771-56.132-.903-25.863-19.2-47.774-44.499-53.308-112.15-24.282-194.71-116.781-222.607-243.84 32.076 6.438 62.344 8.47 79.06 8.922 24.62 2.711 47.322-14.456 55.453-38.06 8.02-23.492-.226-49.582-20.442-64.151-78.042-56.245-161.619-161.167-161.619-286.42 0-30.832 3.84-61.326 11.181-90.804 195.163 217.186 461.478 348.31 743.83 363.558 18.975 1.016 34.674-6.438 46.08-19.765 11.408-13.327 15.926-31.398 12.312-48.565-5.648-25.637-8.471-52.178-8.471-79.058 0-188.951 141.063-342.664 314.428-342.664 87.19 0 168.283 37.835 228.141 106.73 13.327 15.36 34.334 22.475 54.212 18.183 28.687-6.099 56.922-13.779 84.706-23.153-16.49 16.715-34.673 31.624-54.438 44.386-22.25 14.343-31.51 42.014-22.475 66.861s34.56 39.868 60.31 36.593c14.683-1.92 29.252-4.179 43.709-7.002-18.297 17.731-37.497 34.447-57.713 50.033m261.685-199.68c-16.716-18.636-43.596-23.83-66.41-13.214-4.066 1.92-8.132 3.84-12.31 5.76 17.054-30.269 30.946-62.683 40.997-96.678 6.777-22.588-1.242-46.984-20.103-61.214-18.974-14.118-44.5-15.247-64.49-2.485-58.277 37.384-120.96 64.828-186.466 82.108-78.268-76.8-181.948-120.17-289.355-120.17-235.595 0-427.37 204.424-427.37 455.606 0 9.487.227 18.974.791 28.348C626 564.008 390.517 424.977 226.64 208.469c-11.52-15.247-30.155-23.04-49.242-22.136-19.2 1.468-36.367 12.536-45.516 29.477-37.157 68.894-56.809 147.614-56.809 227.464 0 86.626 28.687 165.007 70.25 230.739-19.426 9.035-32.98 28.574-32.98 51.388v5.195c0 139.821 49.808 261.91 133.497 344.47-9.035 2.937-17.28 8.246-23.943 15.36a56.566 56.566 0 0 0-12.537 54.326c40.772 136.997 137.788 242.145 258.41 289.807-122.88 69.571-268.688 97.129-404.443 80.753-26.541-3.953-50.485 11.858-59.633 36.028-9.261 24.282-.677 51.84 20.781 66.522 179.69 123.784 387.276 189.29 600.17 189.29 695.717 0 1111.454-606.156 1111.454-1192.095 0-8.583-.113-17.054-.339-25.524 68.555-57.149 127.51-125.365 175.737-203.069 13.214-21.345 10.842-48.903-5.986-67.538"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TwitterBoxedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.TwitterBoxed,
+ contentDescription = "TwitterBoxed",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unarchive.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unarchive.kt
new file mode 100644
index 0000000000..baac0470d9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unarchive.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Unarchive: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Unarchive",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M533.333 586.667v106.666h-320v479.997h.422l233.6 213.34H1472.64l233.6-213.34h.43V693.333h-320V586.667h352c41.23 0 74.66 33.429 74.66 74.666v511.997H1856c35.35 0 64 28.66 64 64V1856c0 35.35-28.65 64-64 64H64c-35.346 0-64-28.65-64-64v-618.67c0-35.34 28.654-64 64-64h42.667V661.333c0-41.237 33.429-74.666 74.666-74.666h352ZM172.378 1280h-65.711v533.33H1813.33V1280h-65.71l-233.6 213.33H405.978L172.378 1280ZM960.001 0l357.709 357.712-75.42 75.425-228.96-228.959v969.152H906.667V204.183L677.713 433.137l-75.425-75.425L960.001 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnarchivePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Unarchive,
+ contentDescription = "Unarchive",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Underline.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Underline.kt
new file mode 100644
index 0000000000..182f3afab7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Underline.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Underline: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Underline",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1698.923 1772.308V1920H222v-147.692h1476.923ZM369.693 0v812.308c0 285.046 231.876 516.923 516.922 516.923h147.693c285.046 0 516.923-231.877 516.923-516.923V0h147.692v812.308c0 366.424-298.19 664.615-664.615 664.615H886.615c-366.424 0-664.615-298.19-664.615-664.615V0h147.692Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnderlinePreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Underline,
+ contentDescription = "Underline",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Undo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Undo.kt
new file mode 100644
index 0000000000..b096a381ea
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Undo.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Undo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Undo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M646.365 53.3336L738.853 145.821L250.382 634.291L1278.71 634.167V765.312L250.382 765.108L738.853 1253.71L646.365 1346.2L-0.00188191 699.7L646.365 53.3336Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1278.71 765.312C1541.45 772.29 1777.18 987.357 1777.19 1251.77C1777.19 1516.19 1566.39 1731.14 1303.65 1738.12V1866.67C1467.08 1866.67 1623.81 1801.71 1739.38 1686.15C1854.94 1570.58 1919.89 1413.86 1919.9 1250.42C1919.9 1086.97 1854.95 930.258 1739.38 814.687C1623.8 699.117 1442.15 634.167 1278.71 634.167V765.312Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UndoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Undo,
+ contentDescription = "Undo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unlock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unlock.kt
new file mode 100644
index 0000000000..77f095ab38
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unlock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Unlock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Unlock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1581.294 1694.118c0 62.23-50.71 112.94-112.941 112.94H451.883c-62.231 0-112.942-50.71-112.942-112.94V1016.47h1242.353v677.647ZM564.824 903.529V508.235c0-217.976 177.317-395.294 395.294-395.294 217.976 0 395.294 177.318 395.294 395.294h112.94C1468.353 228.028 1240.326 0 960.119 0S451.882 228.028 451.882 508.235V903.53H226v790.589C226 1818.692 327.308 1920 451.882 1920h1016.47c124.575 0 225.883-101.308 225.883-225.882V903.529H564.824Zm338.823 677.647h112.941v-338.823h-112.94v338.823Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnlockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Unlock,
+ contentDescription = "Unlock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unmuted.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unmuted.kt
new file mode 100644
index 0000000000..587959da13
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unmuted.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Unmuted: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Unmuted",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.928 1581.176c0 124.575-101.309 225.883-225.883 225.883-124.574 0-225.882-101.308-225.882-225.883h451.765ZM960.045 225.882c342.438 0 621.177 278.626 621.177 621.177v395.294c0 86.739 32.753 165.91 86.4 225.882H252.356c53.76-59.971 86.513-139.143 86.513-225.882V847.059c0-342.55 278.626-621.177 621.176-621.177Zm734.118 1016.47V847.06c0-385.694-299.294-702.268-677.647-731.294V0H903.575v115.765c-378.466 29.026-677.647 345.6-677.647 731.294v395.294c0 124.574-101.309 225.882-225.883 225.882v112.941h621.177c0 186.805 151.906 338.824 338.823 338.824 186.805 0 338.824-152.019 338.824-338.824h621.176v-112.94c-124.574 0-225.882-101.309-225.882-225.883Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnmutedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Unmuted,
+ contentDescription = "Unmuted",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unpublish.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unpublish.kt
new file mode 100644
index 0000000000..454e8ce3f1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unpublish.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Unpublish: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Unpublish",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1599.04 1523.627 396.373 320.96C546.88 188.053 743.787 106.667 960 106.667c470.507 0 853.333 382.826 853.333 853.333 0 216.107-81.386 413.12-214.293 563.627M106.667 960c0-216.213 81.28-413.12 214.293-563.627L1523.627 1599.04c-150.507 132.907-347.52 214.293-563.627 214.293-470.507 0-853.333-382.826-853.333-853.333M960 0C429.76 0 0 429.76 0 960s429.76 960 960 960c530.133 0 960-429.76 960-960S1490.133 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnpublishPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Unpublish,
+ contentDescription = "Unpublish",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unpublished.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unpublished.kt
new file mode 100644
index 0000000000..a12dc75bf8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Unpublished.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Unpublished: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Unpublished",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1599.04 1523.627 396.373 320.96C546.88 188.053 743.787 106.667 960 106.667c470.507 0 853.333 382.826 853.333 853.333 0 216.107-81.386 413.12-214.293 563.627M106.667 960c0-216.213 81.28-413.12 214.293-563.627L1523.627 1599.04c-150.507 132.907-347.52 214.293-563.627 214.293-470.507 0-853.333-382.826-853.333-853.333M960 0C429.76 0 0 429.76 0 960s429.76 960 960 960c530.133 0 960-429.76 960-960S1490.133 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnpublishedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Unpublished,
+ contentDescription = "Unpublished",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Updown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Updown.kt
new file mode 100644
index 0000000000..2fe3d40193
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Updown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Updown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Updown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.182.012 451 509.193l82.7 82.817 368.112-368.113v1472.217L533.7 1328.12l-82.7 82.7L960.182 1920l509.181-509.182-82.582-82.7-368.113 367.996V223.897l368.113 368.113 82.582-82.817z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UpdownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Updown,
+ contentDescription = "Updown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Upload.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Upload.kt
new file mode 100644
index 0000000000..e45c86c555
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Upload.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Upload: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Upload",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1838.86 1451.576 81.14 81.37-361.566 361.566H361.566L0 1532.946l81.255-81.37 327.891 328.007h1101.708l328.006-328.007ZM962.333 25l500.285 500.285-81.14 81.37-361.795-361.681v1187.559H904.869V244.973L543.188 606.655l-81.14-81.37L962.333 25Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UploadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Upload,
+ contentDescription = "Upload",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/User.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/User.kt
new file mode 100644
index 0000000000..28e261451a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/User.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.User: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.User",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M970.11 1129.48c195.05.903 388.857 30.494 575.888 87.98 88.658 27.22 148.178 107.069 148.178 198.777v155.068c-133.27 94.984-388.969 235.709-734.117 235.709-152.923 0-448.377-31.06-734.118-235.709v-155.068c0-91.708 59.746-171.67 148.744-198.89 193.58-59.406 393.826-87.19 595.426-87.867Zm-2.145-1016.584c184.32 0 341.308 129.882 378.691 307.313-31.962 18.522-65.054 31.51-122.315 31.51-73.637 0-107.068-21.12-149.534-47.774-48.339-30.494-103.002-65.167-208.49-65.167-106.277 0-161.28 34.786-209.844 65.393-28.348 17.845-52.744 33.205-87.868 41.45C595.372 257.8 757.216 112.896 952.153 112.896h15.812Zm611.124 996.593c-106.277-32.64-214.814-56.019-324.48-71.605 128.866-90.579 213.685-239.774 213.685-408.847h-112.941c0 213.685-173.817 387.388-387.388 387.388h-15.812c-213.572 0-387.388-173.703-387.388-387.388v-67.99c70.136-9.713 113.167-36.82 152.019-61.44 42.465-26.767 76.009-47.887 149.534-47.887 72.734 0 106.051 21.007 148.178 47.66 48.565 30.608 103.568 65.28 209.845 65.28 106.278 0 161.506-35.011 214.363-68.555l29.929-18.974-4.066-35.35C1434.864 189.92 1221.292-.045 967.965-.045h-15.812c-275.915 0-500.33 224.527-500.33 508.235v120.847c0 169.412 85.045 318.72 214.137 409.299-109.553 15.247-218.09 38.4-324.48 71.04C204.821 1151.277 113 1274.722 113 1416.237v211.99l22.588 16.942c318.833 239.096 653.365 274.786 824.47 274.786 398.457 0 687.587-172.235 824.471-274.786l22.589-16.941v-211.99c0-141.63-91.709-264.848-228.029-306.75Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.User,
+ contentDescription = "User",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/UserAdd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/UserAdd.kt
new file mode 100644
index 0000000000..9b9d38e439
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/UserAdd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.UserAdd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.UserAdd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M903.53 0v903.53H0v112.94h903.53V1920h112.94v-903.53H1920V903.53h-903.53V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserAddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.UserAdd,
+ contentDescription = "UserAdd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/UserAssign.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/UserAssign.kt
new file mode 100644
index 0000000000..21ea94846f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/UserAssign.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.UserAssign: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.UserAssign",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.052 0.980957C1166.75 1.00097 1334.93 169.287 1334.95 375.877V483.064C1334.93 596.466 1283.27 697.019 1203.39 765.773C1261.31 772.839 1319.23 781.593 1376.41 793.689C1538.45 827.748 1656.18 982.334 1656.2 1161.19V1367.13L1634.43 1383.06C1573.68 1427.64 1480.23 1486.21 1360.26 1532.65L1277.03 1449.52C1393.67 1410.33 1485.93 1356.26 1549.11 1312.34V1161.19C1549.1 1032.69 1467.19 922.27 1354.43 898.481C1208.76 867.741 1058.88 854.001 911.927 857.856C796.152 860.748 679.73 874.495 565.99 898.377C453.001 922.153 370.902 1032.68 370.886 1161.09V1312.44C452.742 1369.69 566.169 1432.17 706.927 1469.11L620.677 1555.36C479.086 1509.73 366.068 1442.4 285.573 1383.06L263.802 1367.02V1161.09C263.82 982.229 381.647 827.644 543.906 793.585C600.763 781.593 658.378 772.421 716.198 765.46C636.532 696.6 585.172 596.248 585.156 483.064V375.877C585.171 169.274 753.339 0.980957 960.052 0.980957ZM871.094 375.877C833.513 375.882 817.346 390.829 790.573 415.46C767.547 436.773 738.181 463.663 692.24 476.085V483.064C692.268 630.745 812.365 750.773 960.052 750.773C1107.72 750.753 1227.73 630.733 1227.76 483.064V439.106C1199.28 461.693 1161.5 483.052 1103.59 483.064C1024.24 483.064 981.532 443.849 950.365 415.252C923.909 390.724 907.94 375.877 871.094 375.877ZM960.052 108.168C818.893 108.168 704.089 218.331 694.219 357.023C701.702 351.247 709.31 344.727 717.969 336.71C749.134 308.115 791.745 268.8 871.094 268.793C949.707 268.793 992.122 307.907 1022.97 336.398C1049.75 361.033 1066 375.877 1103.59 375.877C1140.07 375.863 1155.81 361.212 1182.14 336.918C1192.85 327.064 1204.37 316.561 1217.66 306.814C1186.92 192.754 1083.64 108.185 960.052 108.168Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1001.87 1281.02L660.329 1622.56L740.176 1702.41L945.515 1497.07L945.515 1921.02H1058.34V1497.07L1269.61 1708.45L1349.57 1628.6L1001.87 1281.02Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserAssignPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.UserAssign,
+ contentDescription = "UserAssign",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Video.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Video.kt
new file mode 100644
index 0000000000..dd2dd3e50f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Video.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Video: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Video",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1813.333 1557.195c-557.76 126.826-1148.48 126.826-1706.666 0V468.448c557.76-126.827 1148.48-126.933 1706.666 0v1088.747ZM1879.04 374.26c-600.32-143.573-1238.4-143.466-1838.08 0L0 384.075v1257.493l40.96 9.813c300.053 71.787 609.28 108.054 919.04 108.054 309.867 0 619.2-36.267 919.04-108.054l40.96-9.813V384.075l-40.96-9.814ZM853.333 786.987l376.32 225.813-376.32 225.813V786.987Zm-106.666 640 690.346-414.187-690.346-414.187v828.374Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun VideoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Video,
+ contentDescription = "Video",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/VideoCamera.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/VideoCamera.kt
new file mode 100644
index 0000000000..2b99b5de4b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/VideoCamera.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.VideoCamera: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.VideoCamera",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 240v1440h1500.536v-438.89L1920 1574.062V346.051L1500.536 678.89V240H0Zm109.779 109.779h1280.979v556.348l177.995-141.29 241.468-191.66v773.646l-241.468-191.549-177.995-141.29v556.236H109.778V349.78Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun VideoCameraPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.VideoCamera,
+ contentDescription = "VideoCamera",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/VideoCameraOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/VideoCameraOff.kt
new file mode 100644
index 0000000000..951b98e727
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/VideoCameraOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.VideoCameraOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.VideoCameraOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1421.141 2.417 91.775 64.262L215.481 1918.962l.595.416-.378.54-92.37-64.678L246.074 1680H0V240h1254.726L1421.141 2.416Zm79.395 278.487V678.89L1920 346.052v1228.01l-419.464-332.951V1680H520.538l76.895-109.78 793.325.001v-556.235l177.995 141.29 241.468 191.548V573.176l-241.468 191.662-177.995 141.29-.001-468.498 109.779-156.726Zm-322.705 68.874H109.779v1220.443h213.19l854.862-1220.443Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun VideoCameraOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.VideoCameraOff,
+ contentDescription = "VideoCameraOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Warning.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Warning.kt
new file mode 100644
index 0000000000..bde509e2ea
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Warning.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Warning: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Warning",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c530.193 0 960 429.807 960 960s-429.807 960-960 960S0 1490.193 0 960 429.807 0 960 0Zm0 101.053c-474.384 0-858.947 384.563-858.947 858.947S485.616 1818.947 960 1818.947 1818.947 1434.384 1818.947 960 1434.384 101.053 960 101.053Zm-9.32 1221.49c-80.024 0-145.128 65.105-145.128 145.129 0 80.024 65.104 145.128 145.128 145.128 80.024 0 145.128-65.104 145.128-145.128 0-80.024-65.104-145.128-145.128-145.128Zm192.785-968.859h-385.57l93.901 851.327h197.768l93.901-851.327Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WarningPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Warning,
+ contentDescription = "Warning",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/WarningBorderless.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/WarningBorderless.kt
new file mode 100644
index 0000000000..b351b482fb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/WarningBorderless.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.WarningBorderless: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.WarningBorderless",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M933.974 1477.394c-122.027 0-221.303 99.276-221.303 221.303S811.947 1920 933.974 1920s221.303-99.276 221.303-221.303-99.276-221.303-221.303-221.303zM1227.948 0H640l143.188 1298.171h301.572z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WarningBorderlessPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.WarningBorderless,
+ contentDescription = "WarningBorderless",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Windows.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Windows.kt
new file mode 100644
index 0000000000..c628912f25
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Windows.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Windows: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Windows",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m677.647 1642.605-564.706-78.268V1129.4h564.706v513.205Zm56.47-626.146H56.472c-31.172 0-56.471 25.3-56.471 56.47v540.537c0 28.236 20.781 52.066 48.79 55.906l677.648 93.967c2.484.452 5.195.565 7.68.565 13.553 0 26.654-4.856 37.044-13.892 12.31-10.73 19.426-26.202 19.426-42.579V1072.93c0-31.172-25.299-56.47-56.47-56.47Zm37.045-846.483c-12.31-10.729-28.574-15.811-44.724-13.327L48.79 250.616C20.78 254.456 0 278.287 0 306.522V847.06c0 31.172 25.299 56.47 56.47 56.47h677.648c31.171 0 56.47-25.298 56.47-56.47V212.555c0-16.376-7.115-31.85-19.426-42.579Zm-93.515 620.612H112.941V355.652l564.706-78.268v513.204Zm1223.04-776.583c-12.198-10.843-28.8-15.7-44.725-13.553l-903.53 123.332c-28.008 3.84-48.903 27.783-48.903 56.018V847.06c0 31.172 25.3 56.47 56.471 56.47h903.53c31.171 0 56.47-25.298 56.47-56.47V56.47c0-16.377-7.115-31.85-19.313-42.466Zm-93.628 776.583H1016.47V229.045l790.588-107.86v669.403Zm56.47 225.905H960c-31.172 0-56.47 25.186-56.47 56.47v667.257c0 28.236 20.894 52.066 48.903 56.02l903.53 123.218c2.484.339 5.082.565 7.566.565 13.553 0 26.767-4.97 37.158-14.005 12.198-10.73 19.313-26.202 19.313-42.466v-790.588c0-31.285-25.299-56.47-56.47-56.47Zm-56.47 782.344-790.588-107.972v-561.43h790.588v669.402Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WindowsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Windows,
+ contentDescription = "Windows",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Wordpress.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Wordpress.kt
new file mode 100644
index 0000000000..22fbc922d8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Wordpress.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Wordpress: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Wordpress",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1595.881 168.919c184.998 0 205.892 209.844 205.892 209.844 12.198 72.396 3.614 195.501-31.172 303.925-91.143 282.24-316.46 790.024-403.764 983.379-46.42 45.967-99.84 53.873-130.9 53.873-15.81 0-25.75-2.146-25.75-2.146l-210.296-561.43-240.79 563.124c-91.031-2.259-143.775-57.148-143.775-57.148L256.286 535.639s-14.005-55.906-94.193-55.906h-49.13l32.64-84.932h458.542v84.932s-45.515 36.706-34.786 87.53c10.73 50.71 194.259 782.907 194.259 782.907l176.979-391.793-82.109-259.087c-31.51-79.623-57.374-156.31-78.042-176.753-29.139-31.51-82.108-42.804-82.108-42.804V394.8h565.045v84.932h-93.403s-49.242 9.939-53.534 82.22c-.903 14.57 7.454 65.168 7.454 65.168l219.22 720.79s225.317-413.477 228.592-503.604c3.275-89.901-31.624-237.064-129.995-295.906-157.327-94.758-117.798-283.37 3.727-350.005 51.84-28.348 97.92-29.477 150.437-29.477Zm-288.677 414.945c21.459 23.153 47.096 43.709 76.235 61.215 47.774 28.574 77.93 125.703 75.332 195.162-4.066 26.767-40.32 109.44-88.433 208.602L1234.13 601.144c-.339-2.371-.79-5.308-1.355-8.47h30.607c15.585 0 30.38-3.162 43.82-8.81Zm-614.74 12.876c1.356.677 2.712 1.355 3.84 2.033 5.874 11.085 14.753 32.907 23.63 55.54l.82 2.09c.818 2.094 1.637 4.19 2.452 6.284l.814 2.093c3.386 8.71 6.704 17.315 9.781 25.25l18.071 46.757 68.104 214.475-25.638 56.47C752.324 839.45 712.23 678.17 692.465 596.74Zm1221.234-233.11c-12.198-108.763-93.29-307.653-317.817-307.653-52.969 0-125.59 0-204.762 43.37-71.266 39.19-124.913 106.052-150.099 182.513H698.338c-16.715 0-32.753 3.614-47.097 10.277-14.343-6.663-30.155-10.277-47.096-10.277H145.604c-46.758 0-88.546 28.8-105.487 72.395l-32.64 84.932C-5.85 473.86-1.22 513.05 19.9 543.657c21.007 30.72 55.906 49.017 93.064 49.017h43.03l351.7 1104c5.307 16.49 14.23 31.51 26.089 43.934 8.696 9.035 88.771 88.433 222.607 91.821h2.71c45.177 0 86.061-26.88 103.906-68.555l129.995-303.925 111.36 297.487c13.666 36.367 45.064 63.134 82.9 71.04 6.437 1.243 23.943 4.405 48.677 4.405 79.398 0 154.165-30.833 210.41-86.626 9.825-9.713 17.844-21.233 23.378-33.77 92.047-203.858 316.01-709.044 408.395-995.011 36.932-115.2 51.163-256.602 35.577-353.845"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WordpressPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Wordpress,
+ contentDescription = "Wordpress",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/X.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/X.kt
new file mode 100644
index 0000000000..b96eb15532
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/X.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.X: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.X",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M954.64 826.418 426.667 298.445 298.445 426.667 826.418 954.64l-527.973 527.973 128.222 128.222 527.973-527.973 527.973 527.973 128.222-128.222-527.973-527.973 527.973-527.973-128.222-128.222z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun XPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.X,
+ contentDescription = "X",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Zipped.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Zipped.kt
new file mode 100644
index 0000000000..86ef65d969
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/Zipped.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.Zipped: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.Zipped",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.47 112.941v451.765h451.765v1242.353H846.873v-338.824h112.715v-112.94H846.873v-112.942h112.715v-112.941H846.873V1016.47h112.715V903.529H846.873V790.59h112.715V677.646H846.873V441.261c65.506-23.379 112.715-85.496 112.715-158.908V112.94h225.883Zm-564.705 0v169.412c0 73.638 47.435 135.755 113.167 159.134v123.219H620.765v112.941h113.167v112.941H620.765V903.53h113.167v112.942H620.765v112.94h113.167v112.942H620.765v112.941h113.167v112.941H620.765v112.941h113.167v225.883h-451.99V112.94h338.823Zm677.647 23.379 315.444 315.445h-315.444V136.32Zm-451.765-23.379v169.412c0 31.172-25.412 56.47-56.47 56.47-31.06 0-56.471-25.298-56.471-56.47V112.94h112.941Zm853.948 265.864L1371.485 49.58C1339.86 18.071 1296.265 0 1251.655 0H169v1920h1581.176V498.522c0-45.176-17.618-87.755-49.58-119.717Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ZippedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.Zipped,
+ contentDescription = "Zipped",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ZoomIn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ZoomIn.kt
new file mode 100644
index 0000000000..03949327ea
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ZoomIn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ZoomIn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ZoomIn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M854.397 1594.874c-408.288 0-740.477-332.19-740.477-740.477 0-408.288 332.189-740.477 740.477-740.477 408.287 0 740.477 332.189 740.477 740.477 0 408.287-332.19 740.477-740.477 740.477ZM1920 1839.345l-423.325-423.211c131.577-150.488 212.118-346.543 212.118-561.737C1708.793 383.225 1325.568 0 854.397 0 383.225 0 0 383.225 0 854.397c0 471.17 383.225 854.396 854.397 854.396 215.08 0 411.363-80.54 561.737-212.118L1839.345 1920l80.655-80.655ZM911.356 455.678h-113.92v341.759H455.679v113.92h341.759v341.758h113.92V911.356h341.758v-113.92h-341.76V455.679Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ZoomInPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ZoomIn,
+ contentDescription = "ZoomIn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ZoomOut.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ZoomOut.kt
new file mode 100644
index 0000000000..a2652cfd44
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/line/ZoomOut.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.line
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Line.ZoomOut: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Line.ZoomOut",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M853 1600c-382.293 0-693.333-311.04-693.333-693.333 0-382.294 311.04-693.334 693.333-693.334 382.293 0 693.333 311.04 693.333 693.334C1546.333 1288.96 1235.293 1600 853 1600Zm997.76 228.907-396.373-396.267C1577.587 1291.733 1653 1108.16 1653 906.667c0-441.174-358.827-800-800-800s-800 358.826-800 800c0 441.173 358.827 800 800 800 201.387 0 385.173-75.414 525.973-198.614l396.267 396.374 75.52-75.52ZM479.667 960.053h746.666V853.387H479.667v106.666Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ZoomOutPreview() {
+ Icon(
+ imageVector = InstUIIcons.Line.ZoomOut,
+ contentDescription = "ZoomOut",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/A11y.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/A11y.kt
new file mode 100644
index 0000000000..fe541d947d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/A11y.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.A11y: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.A11y",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 2c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1491.355 0 962 430.645 2 960 2Zm436.704 633.232h-914.56c-31.04 0-55.467 24.427-55.467 55.467 0 31.146 24.427 55.573 55.467 55.573h275.307v887.787c0 31.146 24.32 55.573 55.466 55.573 31.04 0 55.467-24.427 55.467-55.573v-375.04h146.453v375.04c0 31.146 24.427 55.573 55.467 55.573 31.147 0 55.573-24.427 55.573-55.573V744.032h275.307c31.04 0 55.467-24.427 55.467-55.467-6.72-28.906-31.04-53.333-59.947-53.333Zm-457.29-315.21c-73.494 0-133.227 59.626-133.227 133.226 0 73.493 59.733 133.12 133.226 133.12 73.6 0 133.227-59.627 133.227-133.12 0-73.6-59.627-133.227-133.227-133.227Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun A11yPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.A11y,
+ contentDescription = "A11y",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Add.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Add.kt
new file mode 100644
index 0000000000..eb4a3d6d0e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Add.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Add: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Add",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M866.332 213v653.332H213v186.666h653.332v653.332h186.666v-653.332h653.332V866.332h-653.332V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Add,
+ contentDescription = "Add",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddFolder.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddFolder.kt
new file mode 100644
index 0000000000..a0311f6e7f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddFolder.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AddFolder: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AddFolder",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m764.386 112.941 225.882 338.824H225.882v112.94H1920v1072.942c0 93.402-76.01 169.412-169.412 169.412H169.412C76.009 1807.059 0 1731.049 0 1637.647V112.941h764.386ZM1040 858.846H880v240H640v160h240v240h160v-240h240v-160h-240v-240Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddFolderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AddFolder,
+ contentDescription = "AddFolder",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddMedia.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddMedia.kt
new file mode 100644
index 0000000000..1a3d435413
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddMedia.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AddMedia: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AddMedia",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 293.333v160H186.667C171.939 453.333 160 465.272 160 480v1253.33c0 14.73 11.939 26.67 26.667 26.67H1440c14.73 0 26.67-11.94 26.67-26.67V960h160v773.33c0 103.1-83.58 186.67-186.67 186.67H186.667C83.573 1920 0 1836.43 0 1733.33V480c0-103.093 83.573-186.667 186.667-186.667H960ZM586.667 800 1120 1120l-533.333 320V800ZM1626.67 0v293.333H1920v160h-293.33v293.334h-160V453.333h-293.34v-160h293.34V0h160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddMediaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AddMedia,
+ contentDescription = "AddMedia",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddressBook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddressBook.kt
new file mode 100644
index 0000000000..adb611233d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AddressBook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AddressBook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AddressBook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1801.441 0v1920H219.03v-439.216h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.47 56.515-56.47h56.514V1029.02h-56.514c-31.196 0-56.515-25.3-56.515-56.471 0-31.172 25.319-56.47 56.515-56.47h56.514V577.254h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.471 56.515-56.471h56.514V0h1582.412ZM1029 499c-112.782 0-236.48 91.718-236.48 204.5v102.25c0 45.604 16.128 87.22 41.383 121.269-32.159 9.38-50.769 20.118-91.408 39.468C669.163 1001.404 620 1072.214 620 1154.116v139.98l23.824 15.03c100 63.089 214.112 101.126 330.166 110.022 18.2 1.329 35.89 2.045 53.374 2.045 178.835 0 316.975-68.406 386.607-111.862l24.029-15.03v-140.799c0-81.8-48.876-155.726-124.438-188.446-39.06-16.872-64.487-28.426-105.285-38.038 24.744-33.844 47.167-76.278 47.167-121.268V703.5c0-112.782-113.662-204.5-226.444-204.5Zm-306.697 655.5c0-41.003 23.825-77.813 60.839-93.764 76.279-33.027 155.216-49.694 235.277-51.125 3.579.102 15.747.307 18.405.204 13.19.205 26.279-.306 39.469.716 67.485 5.113 133.743 21.575 196.831 48.773 38.037 16.463 62.68 53.58 62.68 94.582v83.333c-72.087 40.39-197.957 92.128-353.99 80.369-90.39-6.953-179.551-34.56-259.51-80.164v-82.925Zm165.835-450.947c0-56.34 84.58-102.25 141.022-102.25 56.442 0 131.051 45.91 131.051 102.25v102.25c0 55.318-73.178 100-128.086 101.637-2.147 0-4.294-.102-6.442-.102-54.703-1.943-137.545-46.422-137.545-101.535v-102.25Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AddressBookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AddressBook,
+ contentDescription = "AddressBook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Admin.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Admin.kt
new file mode 100644
index 0000000000..26f3918559
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Admin.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Admin: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Admin",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M983.727 5.421 1723.04 353.62c19.765 9.374 32.414 29.252 32.414 51.162v601.525c0 489.6-424.207 719.774-733.779 887.943l-34.899 18.975c-8.47 4.517-17.731 6.889-27.105 6.889-9.262 0-18.523-2.372-26.993-6.89l-34.9-18.974C588.095 1726.08 164 1495.906 164 1006.306V404.78c0-21.91 12.65-41.788 32.414-51.162L935.727 5.42c15.134-7.228 32.866-7.228 48 0ZM757.088 383.322c-176.075 0-319.285 143.323-319.285 319.398 0 176.075 143.21 319.285 319.285 319.285 1.92 0 3.84 0 5.76-.113l58.504 58.503h83.689v116.781h116.781v83.803l91.595 91.482h313.412V1059.05l-350.57-350.682c.114-1.807.114-3.727.114-5.647 0-176.075-143.21-319.398-319.285-319.398Zm0 112.942c113.732 0 206.344 92.724 205.327 216.62l-3.953 37.271 355.426 355.652v153.713h-153.713l-25.412-25.299v-149.986h-116.78v-116.78H868.108l-63.812-63.7-47.209 5.309c-113.732 0-206.344-92.5-206.344-206.344 0-113.732 92.612-206.456 206.344-206.456Zm4.98 124.98c-46.757 0-84.705 37.948-84.705 84.706s37.948 84.706 84.706 84.706c46.757 0 84.706-37.948 84.706-84.706s-37.949-84.706-84.706-84.706Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AdminPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Admin,
+ contentDescription = "Admin",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AdminTools.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AdminTools.kt
new file mode 100644
index 0000000000..90179991c3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AdminTools.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AdminTools: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AdminTools",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1556.611 1920c-54.084 0-108.168-20.692-149.333-61.857L740.095 1190.96c-198.162 41.712-406.725-19.269-550.475-163.019C14.449 852.771-35.256 582.788 65.796 356.27l32.406-72.696 390.194 390.193c24.414 24.305 64.266 24.305 88.68 0l110.687-110.686c11.824-11.934 18.283-27.59 18.283-44.34 0-16.751-6.46-32.516-18.283-44.34L297.569 84.207 370.265 51.8C596.893-49.252 866.875.453 1041.937 175.515c155.026 155.136 212.833 385.157 151.851 594.815l650.651 650.651c39.961 39.852 61.967 92.95 61.967 149.443 0 56.383-22.006 109.482-61.967 149.334l-138.275 138.385c-41.275 41.165-95.36 61.857-149.553 61.857Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AdminToolsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AdminTools,
+ contentDescription = "AdminTools",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Ai.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Ai.kt
new file mode 100644
index 0000000000..ba57fe7285
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Ai.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Ai: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Ai",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0L1219.29 700.713L1920 960L1219.29 1219.29L960 1920L700.713 1219.29L0 960L700.713 700.713L960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1600 0L1686.43 233.571L1920 320L1686.43 406.429L1600 640L1513.57 406.429L1280 320L1513.57 233.571L1600 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Ai,
+ contentDescription = "Ai",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AiColored.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AiColored.kt
new file mode 100644
index 0000000000..b7b751301d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AiColored.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AiColored: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AiColored",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0L1219.29 700.713L1920 960L1219.29 1219.29L960 1920L700.713 1219.29L0 960L700.713 700.713L960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1600 0L1686.43 233.571L1920 320L1686.43 406.429L1600 640L1513.57 406.429L1280 320L1513.57 233.571L1600 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiColoredPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AiColored,
+ contentDescription = "AiColored",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AiInfo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AiInfo.kt
new file mode 100644
index 0000000000..79cc93ec41
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AiInfo.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AiInfo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AiInfo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M900.68 1005.14H791.34L846.01 815.57L900.68 1005.14Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0C1489.35 0 1920 430.645 1920 960C1920 1489.35 1489.35 1920 960 1920C430.645 1920 0 1489.35 0 960C0 430.645 430.645 0 960 0ZM774.3 725.4L613.84 1194H736.67L768.62 1088.21H923.399L954.64 1194H1080.31L920.56 725.4H774.3ZM1135.01 725.4V1194H1257.13V725.4H1135.01Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AiInfoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AiInfo,
+ contentDescription = "AiInfo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Alerts.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Alerts.kt
new file mode 100644
index 0000000000..5ce2e1078d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Alerts.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Alerts: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Alerts",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1298.824 1581.176c0 186.805-152.02 338.824-338.824 338.824-186.805 0-338.824-152.019-338.824-338.824h677.648ZM1016.47 0v115.765c378.465 29.026 677.647 345.6 677.647 731.294v282.353c0 124.574 101.308 225.882 225.882 225.882v112.941H0v-112.94c124.574 0 225.882-101.31 225.882-225.883V847.059c0-385.694 299.182-702.268 677.647-731.294V0h112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AlertsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Alerts,
+ contentDescription = "Alerts",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Analytics.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Analytics.kt
new file mode 100644
index 0000000000..a9078e206f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Analytics.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Analytics: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Analytics",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 106.667H1173.33V1493.33H746.667V106.667ZM533.333 533.333H106.667V1493.33H533.333V533.333ZM1920 1706.67H0V1824H1920V1706.67ZM1813.33 746.667H1386.67V1493.33H1813.33V746.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AnalyticsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Analytics,
+ contentDescription = "Analytics",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Android.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Android.kt
new file mode 100644
index 0000000000..9537d4c30b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Android.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Android: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Android",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1306.086 25.225c17.167-25.976 52.29-33.091 78.267-15.698 25.976 17.28 32.978 52.29 15.698 78.266l-85.72 128.637c29.25 18.861 57.372 39.416 83.122 62.907 118.473 108.648 183.752 253.435 183.752 407.71v734.102c0 88.318-76.008 160.034-169.408 160.034h-169.409V1920H1129.45v-338.817H790.633V1920H677.694v-338.817H508.286c-93.4 0-169.408-71.716-169.408-160.034V709.296c0-200.58 107.292-380.266 269.246-488.913L519.58 87.906c-17.393-25.976-10.39-60.987 15.472-78.38 25.863-17.28 60.987-10.277 78.38 15.586l94.304 141.06c59.858-25.862 123.78-44.61 191.883-50.596 109.325-9.6 216.956 7.906 314.083 48.112ZM225.939 734.142v564.694H113V734.142h112.939Zm1581.144 0v564.694h-112.94V734.142h112.94Zm-621.164-282.347c-62.23 0-112.939 50.71-112.939 112.939 0 62.23 50.71 112.939 112.939 112.939 62.23 0 112.939-50.71 112.939-112.94 0-62.228-50.71-112.938-112.939-112.938Zm-451.755 0c-62.23 0-112.94 50.71-112.94 112.939 0 62.23 50.71 112.939 112.94 112.939 62.229 0 112.938-50.71 112.938-112.94 0-62.228-50.71-112.938-112.938-112.938Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AndroidPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Android,
+ contentDescription = "Android",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Annotate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Annotate.kt
new file mode 100644
index 0000000000..3feaa1e1ea
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Annotate.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Annotate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Annotate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.235 113v91.142L822.674 862.89a87.85 87.85 0 0 0-24.598 61.495l-.002 429.859c-.24.366-.477.736-.71 1.109-23.717 42.918-79.058 105.035-112.94 101.647-33.883-3.388-44.048-27.106-72.283-96-36.141-89.224-94.87-206.682-190.87-197.647-120.847 10.165-179.577 225.882-199.906 320.753-6.55 31.188 13.424 61.78 44.611 68.33 31.188 6.549 61.78-13.425 68.33-44.612a484.518 484.518 0 0 1 97.13-225.883s30.493 10.165 77.929 127.624c47.435 117.459 99.388 161.506 169.411 166.023h9.036c112.94 0 196.517-143.435 205.553-160.376 10.037-16.097 10.996-35.285 4.266-51.575h339.697a87.85 87.85 0 0 0 61.496-26.355l169.411-172.872v642.708H0V113h1468.235Zm-903.53 564.706H225.883v112.941h338.824V677.706Zm225.883-225.882H225.882v112.94h564.706v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1903.059 468.765-225.883-225.883a56.47 56.47 0 0 0-80.188 0L919.341 920.53a56.476 56.476 0 0 0-15.813 39.53v282.353h282.354a56.47 56.47 0 0 0 39.53-16.941l677.647-677.647c21.523-21.959 21.523-57.101 0-79.06Zm-208.941 128.753-145.694-145.694 89.223-89.224 145.694 145.694-89.223 89.224Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AnnotatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Annotate,
+ contentDescription = "Annotate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Announcement.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Announcement.kt
new file mode 100644
index 0000000000..fc1acf637f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Announcement.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Announcement: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Announcement",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M959.342 1355.283c4.287.007 20.897.18 45.834 4.517l-3.388 55.341c-1.13 29.365-25.976 53.083-55.34 53.083-65.507 0-110.683 19.2-141.177 57.6-68.895 88.094-45.177 263.153-30.495 324.14 4.518 16.942 0 35.013-10.164 48.566-11.294 13.553-27.106 21.458-44.047 21.458h-212.33c-31.623 0-56.47-24.847-56.47-56.47v-508.235Zm627.82-1324.044c11.633-23.492 37.61-35.576 63.473-29.816 25.525 6.099 43.483 28.8 43.483 55.002V570.42C1822.87 596.623 1920 710.693 1920 847.013c0 136.32-97.13 250.504-225.882 276.706v513.883c0 26.202-17.958 49.016-43.483 55.002a57.279 57.279 0 0 1-12.988 1.468c-21.12 0-40.772-11.746-50.485-31.172C1379.238 1247.164 964.18 1242.307 960 1242.307H395.294c-155.746 0-282.353-126.607-282.353-282.352v-56.471h-56.47C25.299 903.484 0 878.298 0 847.014c0-31.172 25.299-56.471 56.47-56.471h56.471v-56.47c0-155.634 126.607-282.354 282.353-282.354h564.593c16.941-.113 420.48-7.002 627.275-420.48Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AnnouncementPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Announcement,
+ contentDescription = "Announcement",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Apple.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Apple.kt
new file mode 100644
index 0000000000..b89aa52393
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Apple.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Apple: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Apple",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M972.669 550.592c74.37 0 213.815-103.393 360.63-88.315 61.446 2.608 233.881 25.282 344.644 190.462-8.843 5.895-205.88 122.78-203.5 366.184 2.495 290.908 249.982 387.499 252.816 388.973-2.268 6.575-39.566 137.857-130.489 273.448-78.565 117.111-159.965 233.655-288.3 236.036-126.18 2.494-166.767-76.298-311.087-76.298-144.206 0-189.214 73.917-308.706 78.792-123.913 4.762-218.237-126.52-297.37-243.178-161.892-238.87-285.578-674.665-119.491-968.86 82.42-146.133 229.8-238.643 389.879-241.024 121.646-2.267 236.603 83.78 310.974 83.78ZM1367.75 0c13.038 110.536-34.69 221.525-105.093 301.45-70.743 79.813-186.494 141.94-299.977 133.55-15.305-108.495 41.947-221.184 107.248-292.154C1142.939 63.034 1266.172 3.855 1367.75 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ApplePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Apple,
+ contentDescription = "Apple",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Arc.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Arc.kt
new file mode 100644
index 0000000000..15066436df
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Arc.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Arc: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Arc",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1142.277 1243.138H777.214v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H541.656l.033 198.107c0 77.095-62.497 139.592-139.592 139.592l-59.136-.048c-22.914 66.534-86.064 114.337-160.38 114.337C88.924 1695.126 13 1619.2 13 1525.544s75.924-169.581 169.581-169.581c73.707 0 136.431 47.023 159.809 112.707h61.463c14.201 0 25.714-11.513 25.714-25.714v-199.818H183.115c-32.461 0-58.776-26.314-58.776-58.775V58.776C124.339 26.315 150.654 0 183.115 0h1552.02c32.46 0 58.775 26.315 58.775 58.776v1125.587c0 32.46-26.314 58.775-58.775 58.775h-245.278v199.818c0 14.201 11.512 25.714 25.714 25.714h61.463c23.377-65.684 86.101-112.707 159.808-112.707 93.658 0 169.582 75.924 169.582 169.581 0 93.657-75.924 169.582-169.582 169.582-74.315 0-137.465-47.803-160.379-114.337l-59.1.048c-77.131 0-139.628-62.497-139.628-139.592l.033-198.107h-123.405v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178Zm57.394 562.91c30.723 0 55.629-24.906 55.629-55.63 0-30.722-24.906-55.628-55.629-55.628s-55.629 24.906-55.629 55.629 24.906 55.629 55.63 55.629Zm-477.149 0c30.723 0 55.629-24.906 55.629-55.63 0-30.722-24.906-55.628-55.629-55.628s-55.629 24.906-55.629 55.629 24.906 55.629 55.629 55.629Zm1015.672-224.875c30.723 0 55.628-24.906 55.628-55.629s-24.905-55.629-55.628-55.629-55.63 24.906-55.63 55.63c0 30.722 24.907 55.628 55.63 55.628Zm-1556.964 0c30.723 0 55.63-24.906 55.63-55.629s-24.907-55.629-55.63-55.629c-30.723 0-55.629 24.906-55.629 55.63 0 30.722 24.906 55.628 55.63 55.628ZM901.047 348.665l220.035 131.796C1133.59 489.628 1141 504.338 1141 520c0 15.662-7.41 30.372-19.918 39.539L901.047 691.335a47.406 47.406 0 0 1-48.007.014c-14.858-8.697-24.02-24.777-24.04-42.189V390.84c.02-17.412 9.182-33.492 24.04-42.19a47.406 47.406 0 0 1 48.007.015Zm786.155 584.668V136.054c0-16.23-13.157-29.387-29.388-29.387H260.434c-16.23 0-29.387 13.157-29.387 29.387v797.28h1456.155Zm0 106.667H231.047v67.099c0 16.23 13.157 29.387 29.388 29.387h1397.38c16.23 0 29.387-13.157 29.387-29.387V1040Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArcPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Arc,
+ contentDescription = "Arc",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Archive.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Archive.kt
new file mode 100644
index 0000000000..7cf069774d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Archive.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Archive: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Archive",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M533.333 560v160H240l.008 453.33 209.066 213.34H1470.93l209.06-213.34L1680 720h-293.33V560h352c55.96 0 101.33 45.368 101.33 101.333v511.997h16c35.35 0 64 28.66 64 64V1856c0 35.35-28.65 64-64 64H64c-35.346 0-64-28.65-64-64v-618.67c0-35.34 28.654-64 64-64h16V661.333C80 605.368 125.369 560 181.333 560h352ZM1040 0v958.86l183.43-183.429 113.14 113.138L960 1265.14 583.431 888.569l113.138-113.138L880 958.86V0h160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArchivePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Archive,
+ contentDescription = "Archive",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDoubleEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDoubleEnd.kt
new file mode 100644
index 0000000000..deee799693
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDoubleEnd.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowDoubleEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowDoubleEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 176.142 176.13.012l960.12 960.119L176.13 1920 0 1743.87l783.864-783.739L0 176.142Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M784 176.142 960.13.012l960.12 960.119L960.13 1920 784 1743.87l783.86-783.739L784 176.142Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowDoubleEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowDoubleEnd,
+ contentDescription = "ArrowDoubleEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDoubleStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDoubleStart.kt
new file mode 100644
index 0000000000..9d798e9b8c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDoubleStart.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowDoubleStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowDoubleStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1136 176.142 959.87.012-.248 960.131 959.87 1920 1136 1743.87 352.136 960.131 1136 176.142Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 176.142 1743.87.012 783.752 960.131 1743.87 1920 1920 1743.87l-783.86-783.739L1920 176.142Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowDoubleStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowDoubleStart,
+ contentDescription = "ArrowDoubleStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDown.kt
new file mode 100644
index 0000000000..dbb6152eae
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M849.973.011v1497.931L486.9 1134.871 331 1290.772 960.228 1920l629.228-629.228-155.901-155.901-363.071 363.071V.011z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowDown,
+ contentDescription = "ArrowDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowEnd.kt
new file mode 100644
index 0000000000..0634a731d1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowEnd.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1290.761 331.004 1134.86 486.905l363.071 363.071H0v220.511h1497.931l-363.071 363.071 155.901 155.902 629.228-629.228z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowEnd,
+ contentDescription = "ArrowEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowLeft.kt
new file mode 100644
index 0000000000..4e5f475004
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowLeft.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M629.228 331.011 0 960.239l629.228 629.228 155.901-155.901-363.071-363.071h1497.931V849.984H422.058l363.071-363.072z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowLeft,
+ contentDescription = "ArrowLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowNest.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowNest.kt
new file mode 100644
index 0000000000..6e4d336808
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowNest.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowNest: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowNest",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M320 0H106.667L106.677 1392.14H1497.94L1134.87 1761.43L1290.77 1920L1920 1280L1290.77 640L1134.87 798.57L1497.94 1167.86H320V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowNestPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowNest,
+ contentDescription = "ArrowNest",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenDown.kt
new file mode 100644
index 0000000000..b9b28049e8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowOpenDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowOpenDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m.08 568.063 176.13-176.13 783.988 783.864 783.74-783.864 176.129 176.13-959.87 960.118z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowOpenDown,
+ contentDescription = "ArrowOpenDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenEnd.kt
new file mode 100644
index 0000000000..56e1a5c1a7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenEnd.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowOpenEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowOpenEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M568.13.012 392 176.142l783.864 783.989L392 1743.87 568.13 1920l960.118-959.87z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowOpenEnd,
+ contentDescription = "ArrowOpenEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenLeft.kt
new file mode 100644
index 0000000000..68031501b1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenLeft.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowOpenLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowOpenLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1352.005.012 176.13 176.13-783.864 783.989 783.864 783.74L1352.005 1920 391.887 960.13z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowOpenLeft,
+ contentDescription = "ArrowOpenLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenRight.kt
new file mode 100644
index 0000000000..f9b1933040
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenRight.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowOpenRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowOpenRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M568.13.012 392 176.142l783.864 783.989L392 1743.87 568.13 1920l960.118-959.87z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowOpenRight,
+ contentDescription = "ArrowOpenRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenStart.kt
new file mode 100644
index 0000000000..7cfee1d12e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenStart.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowOpenStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowOpenStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1352.005.012 176.13 176.13-783.864 783.989 783.864 783.74L1352.005 1920 391.887 960.13z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowOpenStart,
+ contentDescription = "ArrowOpenStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenUp.kt
new file mode 100644
index 0000000000..dd4cf3d6e7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowOpenUp.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowOpenUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowOpenUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m.08 1351.937 176.13 176.13 783.988-783.864 783.74 783.864 176.129-176.13-959.87-960.118z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowOpenUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowOpenUp,
+ contentDescription = "ArrowOpenUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowRight.kt
new file mode 100644
index 0000000000..4d55fbcc80
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowRight.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1290.761 331.004 1134.86 486.905l363.071 363.071H0v220.511h1497.931l-363.071 363.071 155.901 155.902 629.228-629.228z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowRight,
+ contentDescription = "ArrowRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowStart.kt
new file mode 100644
index 0000000000..f3763320bd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowStart.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M629.228 331.011 0 960.239l629.228 629.228 155.901-155.901-363.071-363.071h1497.931V849.984H422.058l363.071-363.072z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowStart,
+ contentDescription = "ArrowStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowUp.kt
new file mode 100644
index 0000000000..0f655b9c47
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ArrowUp.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M906.228.001 277 629.229 432.901 785.13l363.072-363.071V1919.99h220.51V422.059l363.073 363.071 155.9-155.901z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ArrowUp,
+ contentDescription = "ArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Assignment.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Assignment.kt
new file mode 100644
index 0000000000..6e0af00f9a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Assignment.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Assignment: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Assignment",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.214 0v551.145L840.27 1179.089c-31.623 31.623-49.693 74.54-49.693 119.715v395.289h395.288c45.176 0 88.093-18.07 119.716-49.694l162.633-162.633v438.206H0V0h1468.214Zm129.428 581.3c22.137-22.136 57.825-22.136 79.962 0l225.879 225.879c22.023 22.023 22.023 57.712 0 79.848l-677.638 677.637c-10.616 10.503-24.96 16.49-39.98 16.49H903.516v-282.35c0-15.02 5.986-29.364 16.49-39.867Zm-920.005 548.095H338.82v112.94h338.818v-112.94Zm225.88-225.879H338.818v112.94h564.697v-112.94Zm734.106-202.5-89.561 89.56 146.03 146.031 89.562-89.56-146.031-146.031Zm-508.228-362.197H338.82v338.818h790.576V338.82Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AssignmentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Assignment,
+ contentDescription = "Assignment",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AttachMedia.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AttachMedia.kt
new file mode 100644
index 0000000000..7910a76c85
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AttachMedia.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AttachMedia: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AttachMedia",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 707.04v712.403c-.104 105.76-84.587 191.8-188.376 191.8-103.892 0-188.272-86.143-188.272-192.111 0-105.968 84.38-192.216 188.272-192.216 30.618 0 59.16 8.095 84.588 21.38V846.013l-442.035 130.773v604.048h-.83c-4.359 102.024-86.455 183.809-187.441 183.809-103.893 0-188.376-86.144-188.376-192.216 0-105.864 84.483-192.112 188.376-192.112 30.513 0 58.951 8.095 84.483 21.38V899.256L1920 707.04ZM.208 244.954c704.307-200.207 1350.804.104 1350.804.104v480.54l-201.972 60.716v459.99C527.97 1362.13 0 1199.91 0 1199.91V245.058Zm541.567 235.807v496.004l210.794-124.027 210.898-123.923-210.898-124.13L541.775 480.76Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AttachMediaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AttachMedia,
+ contentDescription = "AttachMedia",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Audio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Audio.kt
new file mode 100644
index 0000000000..b2f05e2fbb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Audio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Audio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Audio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.432 113v1694.148H903.545l-451.772-451.773V564.773L903.545 113h225.887Zm542.545 248.057C1832.017 521.097 1920 733.882 1920 960.107c0 226.226-87.983 438.898-248.023 598.938l-79.851-79.85c138.694-138.582 214.93-323.018 214.93-519.087 0-196.183-76.236-380.506-214.93-519.2ZM338.83 564.773v790.602H169.415C75.672 1355.375 0 1279.703 0 1185.96V734.187c0-93.742 75.672-169.414 169.415-169.414H338.83Zm1093.922 36.085c95.776 97.018 148.407 224.644 148.407 359.16 0 134.628-52.631 262.253-148.407 359.272l-80.303-79.174c74.656-75.897 115.767-175.4 115.767-280.099 0-104.585-41.111-204.088-115.767-279.986Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AudioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Audio,
+ contentDescription = "Audio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AudioOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AudioOff.kt
new file mode 100644
index 0000000000..4e80116c22
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/AudioOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.AudioOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.AudioOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.433 113v1694.15H903.547l-451.774-451.773V564.773L903.547 113h225.886ZM338.83 564.773v790.604H169.415c-92.806 0-167.9-74.166-169.392-166.609L0 1185.962V734.188c0-92.805 74.166-167.9 166.608-169.392l2.807-.023H338.83ZM1789.951 635 1920 764.926 1724.988 959.94 1920 1154.95 1789.951 1285l-194.89-195.012L1400.05 1285 1270 1154.951l195.012-195.012L1270 764.926 1400.049 635l195.012 195.012L1789.951 635Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AudioOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.AudioOff,
+ contentDescription = "AudioOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Award.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Award.kt
new file mode 100644
index 0000000000..f5778a299b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Award.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Award: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Award",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M357.542 0H1562.46V119.181H1920V542.868C1920 655.236 1875.36 763.003 1795.91 842.46C1731.12 907.242 1647.52 948.879 1557.95 962.049C1544.78 1051.62 1503.15 1135.22 1438.36 1200C1360.45 1277.91 1255.32 1322.35 1145.33 1324.05V1496.31C1145.33 1510.38 1150.91 1523.87 1160.86 1533.81C1170.81 1543.76 1184.3 1549.35 1198.36 1549.35C1263.32 1549.35 1325.61 1575.15 1371.54 1621.08C1417.47 1667.01 1443.28 1729.31 1443.28 1794.26V1920H476.723V1794.26C476.723 1729.31 502.528 1667.01 548.458 1621.08C594.388 1575.15 656.682 1549.35 721.639 1549.35C735.705 1549.35 749.195 1543.76 759.14 1533.81C769.086 1523.87 774.674 1510.38 774.674 1496.31V1324.05C664.677 1322.35 559.547 1277.91 481.637 1200C416.854 1135.22 375.218 1051.62 362.048 962.049C272.477 948.879 188.877 907.242 124.095 842.46C44.6379 763.003 0 655.236 0 542.868V119.181H357.542V0ZM357.542 251.471H132.29V542.868C132.29 620.151 162.991 694.269 217.638 748.917C256.412 787.69 304.988 814.409 357.542 826.659V251.471ZM1562.46 826.659V251.471H1787.71V542.868C1787.71 620.151 1757.01 694.269 1702.36 748.917C1663.59 787.69 1615.01 814.409 1562.46 826.659ZM959.198 320L1034.59 564.21H1280L1081.1 715.79L1159.7 960L960.801 808.422L761.906 960L838.898 714.104L640 562.527H885.413L959.198 320Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun AwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Award,
+ contentDescription = "Award",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bank.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bank.kt
new file mode 100644
index 0000000000..8c6891ea43
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bank.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Bank: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Bank",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M933.333 368.375C903.878 368.375 880 392.277 880 421.762C880 451.247 903.878 475.15 933.333 475.15C962.788 475.15 986.667 451.247 986.667 421.762C986.667 392.277 962.788 368.375 933.333 368.375Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 213.55H517.333V632.308H624V0H1600V747.424H516.667L234.126 1633.06L337.468 1665.34L596.094 854.199H1920L1729.66 1789.36C1714.51 1865.08 1647.52 1920 1570.48 1920H162.318C72.8265 1920 0 1847.1 0 1757.52V213.55ZM773.333 421.762C773.333 333.307 844.968 261.6 933.333 261.6C1021.7 261.6 1093.33 333.307 1093.33 421.762C1093.33 510.217 1021.7 581.925 933.333 581.925C844.968 581.925 773.333 510.217 773.333 421.762ZM1200 368.375H1466.67V475.15H1200V368.375Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BankPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Bank,
+ contentDescription = "Bank",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Blueprint.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Blueprint.kt
new file mode 100644
index 0000000000..7f50dd7d29
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Blueprint.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Blueprint: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Blueprint",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M790.589 1750.588v56.471h56.47V1920H677.647v-169.412h112.942Zm417.794 56.471V1920h-180.662v-112.941h180.662Zm361.433 0V1920h-180.662v-112.941h180.662ZM1920 1750.588V1920h-169.412v-112.941h56.471v-56.471H1920ZM1581.177 338.824v225.882h-112.942V451.765H451.765v1016.47h112.941v112.942H338.824V338.824h1242.353ZM1920 1389.265v180.662h-112.941v-180.662H1920Zm-1129.412-.111v180.662H677.647v-180.662h112.941ZM1242.353 0v225.882h-112.941v-112.94H112.941v1016.47h112.941v112.94H0V0h1242.353ZM1920 1027.831v180.661h-112.941v-180.661H1920Zm-1129.412-.11v180.662H677.647v-180.662h112.941ZM1920 677.647v169.412h-112.941v-56.47h-56.471V677.647H1920Zm-1072.942 0v112.942h-56.47v56.47h-112.94V677.647h169.41Zm361.434 0v112.941h-180.661V677.647h180.661Zm361.435 0v112.941h-180.662V677.647h180.662Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BlueprintPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Blueprint,
+ contentDescription = "Blueprint",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BlueprintLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BlueprintLock.kt
new file mode 100644
index 0000000000..95ace9e4e8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BlueprintLock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.BlueprintLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.BlueprintLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1300.007 677c185.514 0 336.508 150.938 336.508 336.507V1247h142.5v514.632c0 87.354-71.03 158.383-158.383 158.383h-641.25c-87.353 0-158.382-71.03-158.382-158.383V1247h142.5v-233.493C963.5 827.937 1114.492 677 1300.007 677Zm281.17-338.177v225.882h-112.942v-112.94H451.765v1016.47h112.941v112.941H338.824V338.823h1242.353Zm-281.17 441.192c-128.713 0-233.492 104.779-233.492 233.492V1247H1533.5v-233.493c0-128.713-104.779-233.492-233.493-233.492ZM1242.353 0v225.882h-112.941V112.941H112.941v1016.471h112.941v112.94H0V0h1242.353Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BlueprintLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.BlueprintLock,
+ contentDescription = "BlueprintLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bold.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bold.kt
new file mode 100644
index 0000000000..319191f395
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bold.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Bold: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Bold",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M480.286 822.857h548.571c151.269 0 274.286-123.017 274.286-274.286 0-151.268-123.017-274.285-274.286-274.285H480.286v548.571Zm0 822.857H1166c151.269 0 274.286-123.017 274.286-274.285 0-151.269-123.017-274.286-274.286-274.286H480.286v548.571ZM1166 1920H206V0h822.857c302.537 0 548.572 246.034 548.572 548.571 0 134.263-48.549 257.418-128.778 352.732 159.223 96.137 265.92 270.994 265.92 470.126 0 302.537-246.034 548.571-548.571 548.571Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BoldPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Bold,
+ contentDescription = "Bold",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bookmark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bookmark.kt
new file mode 100644
index 0000000000..85ebb70396
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Bookmark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Bookmark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Bookmark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1585.963 1920 960.48 1544.711 335 1920V170.586C335 76.536 411.536 0 505.586 0h909.79c94.05 0 170.587 76.536 170.587 170.586V1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BookmarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Bookmark,
+ contentDescription = "Bookmark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Box.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Box.kt
new file mode 100644
index 0000000000..5153d19491
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Box.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Box: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Box",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.235 0v112.941H451.765V0H0v451.878h112.941v1016.47H0V1920h451.765v-112.941h1016.47V1920h451.878v-451.652h-112.941V451.878h112.94V0h-451.877ZM225.882 451.878h225.883V225.882h1016.47v225.996h225.996v1016.47h-225.996v225.77H451.765v-225.77H225.882V451.878Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BoxPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Box,
+ contentDescription = "Box",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletList.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletList.kt
new file mode 100644
index 0000000000..9a36efbe14
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletList.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.BulletList: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.BulletList",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M225.882 1298.412c124.574 0 225.883 101.308 225.883 225.882s-101.309 225.882-225.883 225.882C101.308 1750.176 0 1648.868 0 1524.294s101.308-225.882 225.882-225.882ZM1920 1411.352v225.883H677.647v-225.882H1920ZM225.882 733.707c124.574 0 225.883 101.308 225.883 225.882s-101.309 225.883-225.883 225.883C101.308 1185.47 0 1084.162 0 959.588c0-124.574 101.308-225.882 225.882-225.882ZM1920 846.647v225.882H677.647V846.647H1920ZM225.882 169c124.574 0 225.883 101.308 225.883 225.882S350.456 620.765 225.882 620.765C101.308 620.765 0 519.456 0 394.882 0 270.308 101.308 169 225.882 169ZM1920 281.941v225.883H677.647V281.94H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.BulletList,
+ contentDescription = "BulletList",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListAlpha.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListAlpha.kt
new file mode 100644
index 0000000000..2bb1619fb2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListAlpha.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.BulletListAlpha: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.BulletListAlpha",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M626.15 530.675h1280v-225h-1280v225Zm0 565h1280v-225h-1280v225Zm0 563h1280v-225h-1280v225ZM271.675 429.5 234.55 319.775c-2.75-6.967-5.683-15.171-8.8-24.613-3.117-9.441-6.233-19.662-9.35-30.662-2.75 11.183-5.683 21.542-8.8 31.075-3.117 9.533-6.05 17.783-8.8 24.75L161.95 429.5h109.725ZM419.35 582.675H347.3c-8.067 0-14.575-1.879-19.525-5.638-4.95-3.758-8.708-8.57-11.275-14.437l-23.65-69.85H140.5l-23.65 69.85c-2.017 5.133-5.637 9.762-10.862 13.887-5.226 4.126-11.688 6.188-19.388 6.188H14L169.1 182h95.15l155.1 400.675ZM230.325 1112.55c12.283 0 22.321-1.558 30.112-4.675 7.792-3.117 13.888-7.15 18.288-12.1 4.4-4.95 7.425-10.541 9.075-16.775a73.843 73.843 0 0 0 2.475-18.975c0-7.333-.963-13.933-2.887-19.8-1.925-5.866-5.226-10.816-9.9-14.85-4.676-4.034-10.863-7.15-18.563-9.35-7.7-2.2-17.416-3.3-29.15-3.3h-64.9v99.825h65.45Zm-65.45-260.975v99h48.4c10.267 0 19.525-.733 27.775-2.2s15.262-4.033 21.038-7.7c5.775-3.667 10.175-8.708 13.199-15.125 3.025-6.417 4.538-14.483 4.538-24.2 0-9.533-1.192-17.462-3.575-23.788-2.383-6.324-6.05-11.412-11-15.262-4.95-3.85-11.229-6.6-18.838-8.25-7.608-1.65-16.637-2.475-27.087-2.475h-54.45ZM219.325 782c27.684 0 51.242 2.567 70.675 7.7s35.292 12.375 47.575 21.725c12.283 9.35 21.221 20.716 26.813 34.1 5.591 13.384 8.387 28.325 8.387 44.825 0 8.983-1.283 17.646-3.85 25.987-2.567 8.342-6.6 16.134-12.1 23.375-5.5 7.242-12.558 13.888-21.175 19.938-8.616 6.05-18.975 11.275-31.075 15.675 26.4 6.417 45.925 16.775 58.575 31.075 12.65 14.301 18.975 32.816 18.975 55.55 0 17.05-3.3 32.909-9.9 47.575-6.6 14.667-16.271 27.454-29.012 38.362-12.742 10.909-28.463 19.434-47.163 25.575-18.7 6.142-40.058 9.213-64.075 9.213H71.925V782h147.4Zm126.65 847c2.2 0 4.4.412 6.6 1.238 2.2.825 4.308 2.246 6.325 4.262l36.85 38.775c-16.133 21.084-36.346 36.987-60.637 47.713-24.292 10.724-53.03 16.087-86.213 16.087-30.433 0-57.704-5.179-81.812-15.538-24.109-10.358-44.551-24.658-61.326-42.9-16.774-18.241-29.654-39.874-38.637-64.899-8.984-25.026-13.475-52.204-13.475-81.538 0-29.883 4.858-57.337 14.575-82.363 9.717-25.024 23.375-46.612 40.975-64.762s38.683-32.267 63.25-42.35c24.567-10.083 51.608-15.125 81.125-15.125 15.033 0 29.196 1.329 42.487 3.987 13.292 2.658 25.713 6.325 37.263 11 11.55 4.675 22.183 10.313 31.9 16.913 9.717 6.6 18.333 13.75 25.85 21.45l-31.35 42.075c-2.017 2.567-4.4 4.904-7.15 7.012-2.75 2.109-6.6 3.163-11.55 3.163-3.3 0-6.417-.733-9.35-2.2-2.933-1.466-6.05-3.255-9.35-5.363a1772.26 1772.26 0 0 0-10.862-6.875c-3.942-2.475-8.617-4.767-14.026-6.875-5.408-2.107-11.733-3.895-18.974-5.362-7.242-1.467-15.721-2.2-25.438-2.2-15.4 0-29.471 2.841-42.213 8.525-12.741 5.684-23.741 13.979-33 24.888-9.258 10.908-16.408 24.291-21.449 40.149-5.042 15.858-7.563 33.963-7.563 54.313 0 20.534 2.796 38.775 8.387 54.725 5.592 15.95 13.2 29.379 22.825 40.287 9.625 10.908 20.855 19.204 33.688 24.888 12.833 5.684 26.583 8.525 41.25 8.525 8.434 0 16.133-.413 23.1-1.238 6.967-.824 13.475-2.199 19.525-4.125 6.05-1.925 11.733-4.491 17.05-7.699 5.317-3.209 10.725-7.288 16.225-12.238a32.536 32.536 0 0 1 7.15-4.538c2.567-1.191 5.225-1.787 7.975-1.787Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListAlphaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.BulletListAlpha,
+ contentDescription = "BulletListAlpha",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListCircleOutline.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListCircleOutline.kt
new file mode 100644
index 0000000000..78848f8210
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListCircleOutline.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.BulletListCircleOutline: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.BulletListCircleOutline",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M640 498h1280V273H640v225Zm0 565h1280V838H640v225Zm0 565h1280v-225H640v225ZM226.5 612C101.408 612 0 510.592 0 385.5S101.408 159 226.5 159 453 260.408 453 385.5 351.592 612 226.5 612Zm0-110c64.341 0 116.5-52.159 116.5-116.5 0-64.341-52.159-116.5-116.5-116.5-64.341 0-116.5 52.159-116.5 116.5 0 64.341 52.159 116.5 116.5 116.5Zm0 1248C101.408 1750 0 1648.593 0 1523.5S101.408 1297 226.5 1297 453 1398.407 453 1523.5 351.592 1750 226.5 1750Zm0-110c64.341 0 116.5-52.159 116.5-116.5 0-64.341-52.159-116.5-116.5-116.5-64.341 0-116.5 52.159-116.5 116.5 0 64.341 52.159 116.5 116.5 116.5Zm0-463C101.408 1177 0 1075.593 0 950.5S101.408 724 226.5 724 453 825.407 453 950.5 351.592 1177 226.5 1177Zm0-110c64.341 0 116.5-52.159 116.5-116.5 0-64.341-52.159-116.5-116.5-116.5-64.341 0-116.5 52.159-116.5 116.5 0 64.341 52.159 116.5 116.5 116.5Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListCircleOutlinePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.BulletListCircleOutline,
+ contentDescription = "BulletListCircleOutline",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListRoman.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListRoman.kt
new file mode 100644
index 0000000000..4a44546ddd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListRoman.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.BulletListRoman: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.BulletListRoman",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M375 585.675h93.5V185H375v400.675Zm265.225-53h1280v-225h-1280v225Zm-264.95 652h93.5V784h-93.5v400.675Zm-185.05 0h93.5V784h-93.5v400.675Zm450-86.999h1280V872.675h-1280v225.001Zm-265 636.999h93.499v-400.676h-93.499v400.676Zm-184 0h93.5v-400.676h-93.5v400.676Zm-183.225 0h93.5v-400.676H8v400.676Zm632.225-74h1280v-225h-1280v225Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListRomanPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.BulletListRoman,
+ contentDescription = "BulletListRoman",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListSquare.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListSquare.kt
new file mode 100644
index 0000000000..46dc7d262d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/BulletListSquare.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.BulletListSquare: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.BulletListSquare",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 612.001h425V187H0v425.001Zm640-105h1280v-225H640v225Zm-640 665h425v-425H0v425Zm640-100h1280v-225H640v225Zm-640 660h425v-425H0v425Zm640-97h1280v-225H640v225Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun BulletListSquarePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.BulletListSquare,
+ contentDescription = "BulletListSquare",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ButtonAndIconMaker.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ButtonAndIconMaker.kt
new file mode 100644
index 0000000000..aa1f113025
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ButtonAndIconMaker.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ButtonAndIconMaker: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ButtonAndIconMaker",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 426.667C0 191.025 191.025 0 426.667 0c235.641 0 426.666 191.025 426.666 426.667 0 235.641-191.025 426.666-426.666 426.666C191.025 853.333 0 662.308 0 426.667zm853.333 640.003V1920H0v-853.33h853.333zM1360 1920v-346.67h-346.67v-160H1360v-346.66h160v346.66h346.67v160H1520V1920h-160zm560-1066.667L1440 0 960 853.333h960z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ButtonAndIconMakerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ButtonAndIconMaker,
+ contentDescription = "ButtonAndIconMaker",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Calculator.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Calculator.kt
new file mode 100644
index 0000000000..bee010da35
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Calculator.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Calculator: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Calculator",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M480 0h960c176.731 0 320 143.269 320 320v1280c0 176.731-143.269 320-320 320H480c-176.731 0-320-143.269-320-320V320C160 143.269 303.269 0 480 0Zm106.667 213.333c-117.821 0-213.334 95.513-213.334 213.334 0 117.82 95.513 213.333 213.334 213.333h746.666c117.821 0 213.334-95.513 213.334-213.333 0-117.821-95.513-213.334-213.334-213.334H586.667ZM480 853.333c-58.91 0-106.667 47.757-106.667 106.667 0 58.91 47.757 106.667 106.667 106.667h106.667c58.91 0 106.666-47.757 106.666-106.667 0-58.91-47.756-106.667-106.666-106.667H480Zm426.667 0C847.757 853.333 800 901.09 800 960c0 58.91 47.756 106.667 106.667 106.667h106.666c58.91 0 106.667-47.757 106.667-106.667 0-58.91-47.756-106.667-106.667-106.667H906.667Zm426.666 0c-58.91 0-106.666 47.757-106.666 106.667 0 58.91 47.756 106.667 106.666 106.667H1440c58.91 0 106.667-47.757 106.667-106.667 0-58.91-47.757-106.667-106.667-106.667h-106.667Zm-853.333 320c-58.91 0-106.667 47.757-106.667 106.667 0 58.91 47.757 106.667 106.667 106.667h106.667c58.91 0 106.666-47.757 106.666-106.667 0-58.91-47.756-106.667-106.666-106.667H480Zm426.667 0C847.757 1173.333 800 1221.09 800 1280c0 58.91 47.756 106.667 106.667 106.667h106.666c58.91 0 106.667-47.757 106.667-106.667 0-58.91-47.756-106.667-106.667-106.667H906.667Zm426.666 0c-58.91 0-106.666 47.757-106.666 106.667 0 58.91 47.756 106.667 106.666 106.667H1440c58.91 0 106.667-47.757 106.667-106.667 0-58.91-47.757-106.667-106.667-106.667h-106.667Zm-853.333 320c-58.91 0-106.667 47.757-106.667 106.667 0 58.91 47.757 106.667 106.667 106.667h106.667c58.91 0 106.666-47.757 106.666-106.667 0-58.91-47.756-106.667-106.666-106.667H480Zm426.667 0C847.757 1493.333 800 1541.09 800 1600c0 58.91 47.756 106.667 106.667 106.667h106.666c58.91 0 106.667-47.757 106.667-106.667 0-58.91-47.756-106.667-106.667-106.667H906.667Zm426.666 0c-58.91 0-106.666 47.757-106.666 106.667 0 58.91 47.756 106.667 106.666 106.667H1440c58.91 0 106.667-47.757 106.667-106.667 0-58.91-47.757-106.667-106.667-106.667h-106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalculatorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Calculator,
+ contentDescription = "Calculator",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalculatorDesmos.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalculatorDesmos.kt
new file mode 100644
index 0000000000..c014b75897
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalculatorDesmos.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalculatorDesmos: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalculatorDesmos",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M160 320C160 143.269 303.269 0 480 0h960c176.73 0 320 143.269 320 320v1280c0 176.73-143.27 320-320 320H480c-176.731 0-320-143.27-320-320V320Zm320 853.33h106.667c58.91 0 106.666 47.76 106.666 106.67 0 58.91-47.756 106.67-106.666 106.67H480c-58.91 0-106.667-47.76-106.667-106.67 0-58.91 47.757-106.67 106.667-106.67Zm106.667-319.997H480c-58.91 0-106.667 47.757-106.667 106.667 0 58.91 47.757 106.67 106.667 106.67h106.667c58.91 0 106.666-47.76 106.666-106.67 0-58.91-47.756-106.667-106.666-106.667Zm320 319.997h106.663c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67H906.667C847.756 1386.67 800 1338.91 800 1280c0-58.91 47.756-106.67 106.667-106.67Zm106.663-319.997H906.667C847.756 853.333 800 901.09 800 960c0 58.91 47.756 106.67 106.667 106.67h106.663c58.91 0 106.67-47.76 106.67-106.67 0-58.91-47.76-106.667-106.67-106.667Zm320 319.997H1440c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67h-106.67c-58.91 0-106.66-47.76-106.66-106.67 0-58.91 47.75-106.67 106.66-106.67ZM1440 853.333h-106.67c-58.91 0-106.66 47.757-106.66 106.667 0 58.91 47.75 106.67 106.66 106.67H1440c58.91 0 106.67-47.76 106.67-106.67 0-58.91-47.76-106.667-106.67-106.667ZM480 1493.33h106.667c58.91 0 106.666 47.76 106.666 106.67 0 58.91-47.756 106.67-106.666 106.67H480c-58.91 0-106.667-47.76-106.667-106.67 0-58.91 47.757-106.67 106.667-106.67Zm533.33 0H906.667C847.756 1493.33 800 1541.09 800 1600c0 58.91 47.756 106.67 106.667 106.67h106.663c58.91 0 106.67-47.76 106.67-106.67 0-58.91-47.76-106.67-106.67-106.67Zm320 0H1440c58.91 0 106.67 47.76 106.67 106.67 0 58.91-47.76 106.67-106.67 106.67h-106.67c-58.91 0-106.66-47.76-106.66-106.67 0-58.91 47.75-106.67 106.66-106.67ZM527.414 579.177c19.473-37.808 59.94-81.802 112.373-113.085 52.083-31.074 110.656-46.535 166.557-36.244 51.437 9.469 87.147 45.931 137.467 97.312l2.088 2.132C992.311 576.674 1054.89 640 1152 640c89.53 0 164.33-42.707 219.34-91.005 55.07-48.348 94.99-106.234 116.07-147.179 13.49-26.186 3.2-58.347-22.99-71.834-26.19-13.487-58.35-3.192-71.83 22.994-15.84 30.746-47.92 77.495-91.62 115.86-43.76 38.414-94.5 64.497-148.97 64.497-46.89 0-80.31-28.055-129.9-78.681-2.95-3.007-5.96-6.11-9.04-9.287-43.604-44.893-101.621-104.629-187.404-120.421-88.099-16.218-172.911 9.208-240.52 49.546-67.259 40.128-122.792 98.069-152.55 155.848-13.487 26.186-3.192 58.347 22.994 71.834 26.186 13.487 58.348 3.192 71.834-22.995Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalculatorDesmosPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalculatorDesmos,
+ contentDescription = "CalculatorDesmos",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarAdd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarAdd.kt
new file mode 100644
index 0000000000..425334dcab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarAdd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalendarAdd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalendarAdd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 451.765H225.942V282.353c0-31.172 25.411-56.471 56.47-56.471h169.411v56.471c0 31.172 25.3 56.471 56.471 56.471 31.172 0 56.471-25.299 56.471-56.471v-56.471h790.589v56.471c0 31.172 25.3 56.471 56.47 56.471 31.171 0 56.47-25.299 56.47-56.471v-56.471h169.412c31.059 0 56.47 25.299 56.47 56.471v169.412Zm-338.822 790.586H1016.53v338.826H903.589v-338.826H564.765v-112.939h338.824V790.588h112.941v338.824h338.824v112.939Zm282.352-1129.41h-169.412v-56.47c0-31.172-25.299-56.471-56.47-56.471-31.17 0-56.47 25.299-56.47 56.471v56.47H564.765v-56.47C564.765 25.299 539.466 0 508.294 0c-31.171 0-56.471 25.299-56.471 56.471v56.47H282.412c-93.403 0-169.412 76.01-169.412 169.412V1920h1694.118V282.353c0-93.402-76.008-169.412-169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarAddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalendarAdd,
+ contentDescription = "CalendarAdd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarClock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarClock.kt
new file mode 100644
index 0000000000..2855c68607
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarClock.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalendarClock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalendarClock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1439.667 1417.92v-191.253H1333V1440c0 14.188 5.653 27.733 15.573 37.76l123.414 123.306 75.413-75.413-107.733-107.733Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.333 1813.333C1180.467 1813.333 1013 1645.867 1013 1440c0-205.867 167.467-373.333 373.333-373.333 205.867 0 373.334 167.466 373.334 373.333 0 205.867-167.467 373.333-373.334 373.333ZM159.666 266.667c0-29.44 24-53.334 53.334-53.334h160v53.334c0 29.44 23.894 53.333 53.333 53.333 29.44 0 53.333-23.893 53.333-53.333v-53.334h746.667v53.334c0 29.44 23.894 53.333 53.334 53.333 29.44 0 53.333-23.893 53.333-53.333v-53.334h160c29.333 0 53.333 23.894 53.333 53.334v160H159.666v-160ZM1653 1041.28V266.667c0-88.214-71.787-160-160-160h-160V53.333C1333 23.893 1309.107 0 1279.667 0c-29.44 0-53.334 23.893-53.334 53.333v53.334H479.666V53.333C479.666 23.893 455.773 0 426.333 0 396.894 0 373 23.893 373 53.333v53.334H213c-88.213 0-160 71.786-160 160v1546.666h1035.307C1170.547 1879.04 1273.16 1920 1386.333 1920c264.64 0 480-215.36 480-480 0-166.08-84.8-312.533-213.333-398.72Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarClockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalendarClock,
+ contentDescription = "CalendarClock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarDay.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarDay.kt
new file mode 100644
index 0000000000..a89e37ac8b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarDay.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalendarDay: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalendarDay",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 451.765H225.942V282.353c0-31.624 24.846-56.471 56.47-56.471h169.411v56.471c0 31.623 24.848 56.471 56.471 56.471 31.624 0 56.471-24.848 56.471-56.471v-56.471h790.589v56.471c0 31.623 24.846 56.471 56.47 56.471 31.623 0 56.47-24.848 56.47-56.471v-56.471h169.412c31.623 0 56.47 24.847 56.47 56.471v169.412Zm-477.74 849.317c0 134.4-105.035 231.529-258.636 231.529-128.753 0-221.364-53.082-283.482-128.752l90.353-83.577c53.082 62.118 112.941 96 195.388 96 72.282 0 127.624-42.917 127.624-109.554v-2.257c0-72.284-66.636-112.942-170.542-112.942h-59.859l-21.459-80.188L1035.73 902.4H716.106V790.588h489.035v96L998.459 1094.4c111.812 13.553 217.977 70.024 217.977 204.423v2.259Zm421.27-1188.141h-169.412v-56.47c0-31.624-24.847-56.471-56.47-56.471-31.624 0-56.47 24.847-56.47 56.471v56.47H564.765v-56.47C564.765 24.847 539.918 0 508.294 0c-31.623 0-56.471 24.847-56.471 56.471v56.47H282.412C188.671 112.941 113 188.612 113 282.353V1920h1694.118V282.353c0-93.741-75.671-169.412-169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarDayPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalendarDay,
+ contentDescription = "CalendarDay",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarDays.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarDays.kt
new file mode 100644
index 0000000000..0fe67d1979
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarDays.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalendarDays: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalendarDays",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 451.765H225.942V282.353c0-31.624 24.846-56.471 56.47-56.471h169.411v56.471c0 31.623 24.848 56.471 56.471 56.471 31.624 0 56.471-24.848 56.471-56.471v-56.471h790.589v56.471c0 31.623 24.846 56.471 56.47 56.471 31.623 0 56.47-24.848 56.47-56.471v-56.471h169.412c31.623 0 56.47 24.847 56.47 56.471v169.412Zm-477.74 849.317c0 134.4-105.035 231.529-258.636 231.529-128.753 0-221.364-53.082-283.482-128.752l90.353-83.577c53.082 62.118 112.941 96 195.388 96 72.282 0 127.624-42.917 127.624-109.554v-2.257c0-72.284-66.636-112.942-170.542-112.942h-59.859l-21.459-80.188L1035.73 902.4H716.106V790.588h489.035v96L998.459 1094.4c111.812 13.553 217.977 70.024 217.977 204.423v2.259Zm421.27-1188.141h-169.412v-56.47c0-31.624-24.847-56.471-56.47-56.471-31.624 0-56.47 24.847-56.47 56.471v56.47H564.765v-56.47C564.765 24.847 539.918 0 508.294 0c-31.623 0-56.471 24.847-56.471 56.471v56.47H282.412C188.671 112.941 113 188.612 113 282.353V1920h1694.118V282.353c0-93.741-75.671-169.412-169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarDaysPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalendarDays,
+ contentDescription = "CalendarDays",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarMonth.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarMonth.kt
new file mode 100644
index 0000000000..eabaa4417a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarMonth.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalendarMonth: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalendarMonth",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1411.824 0c31.171 0 56.47 25.299 56.47 56.471v56.47h169.412c93.404 0 169.412 76.01 169.412 169.412V1920H113V282.353c0-93.402 76.009-169.412 169.412-169.412h169.411v-56.47c0-31.172 25.3-56.471 56.471-56.471 31.172 0 56.471 25.299 56.471 56.471v56.47h790.589v-56.47c0-31.172 25.299-56.471 56.47-56.471Zm169.413 1242.354h-338.823v338.823h338.823v-338.823Zm-451.766 0H790.647v338.823h338.824v-338.823Zm-451.765 0H338.882v338.823h338.824v-338.823Zm903.531-451.766h-338.823v338.824h338.823V790.588Zm-451.766 0H790.647v338.824h338.824V790.588Zm-451.765 0H338.882v338.824h338.824V790.588ZM451.823 225.882H282.412c-31.059 0-56.47 25.299-56.47 56.471v169.412h1468.234V282.353c0-31.172-25.411-56.471-56.47-56.471h-169.412v56.471c0 31.172-25.299 56.471-56.47 56.471s-56.47-25.299-56.47-56.471v-56.471H564.765v56.471c0 31.172-25.299 56.471-56.471 56.471-31.171 0-56.471-25.299-56.471-56.471v-56.471Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarMonthPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalendarMonth,
+ contentDescription = "CalendarMonth",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarReserved.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarReserved.kt
new file mode 100644
index 0000000000..d79b7cb77c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CalendarReserved.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CalendarReserved: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CalendarReserved",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 451.765H225.942V282.353c0-31.624 24.846-56.471 56.47-56.471h169.411v56.471c0 31.623 24.848 56.471 56.471 56.471 31.624 0 56.471-24.848 56.471-56.471v-56.471h790.589v56.471c0 31.623 24.846 56.471 56.47 56.471 31.623 0 56.47-24.848 56.47-56.471v-56.471h169.412c31.623 0 56.47 24.847 56.47 56.471v169.412ZM847.118 1491.953l-378.353-379.482 79.058-79.059 299.295 298.164 525.176-524.047 79.06 79.059-604.236 605.365Zm790.588-1379.012h-169.412v-56.47c0-31.624-24.847-56.471-56.47-56.471-31.624 0-56.47 24.847-56.47 56.471v56.47H564.765v-56.47C564.765 24.847 539.918 0 508.294 0c-31.623 0-56.471 24.847-56.471 56.471v56.47H282.412C188.671 112.941 113 188.612 113 282.353V1920h1694.118V282.353c0-93.741-75.671-169.412-169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CalendarReservedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CalendarReserved,
+ contentDescription = "CalendarReserved",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CanvasLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CanvasLogo.kt
new file mode 100644
index 0000000000..56f8388067
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CanvasLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CanvasLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CanvasLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M958.568 277.97C1100.42 277.97 1216.48 171.94 1233.67 34.3881 1146.27 12.8955 1054.57 0 958.568 0 864.001 0 770.867 12.8955 683.464 34.3881 700.658 171.94 816.718 277.97 958.568 277.97ZM35.8207 682.031C173.373 699.225 279.403 815.285 279.403 957.136 279.403 1098.99 173.373 1215.05 35.8207 1232.24 12.8953 1144.84 1.43262 1051.7 1.43262 957.136 1.43262 862.569 12.8953 769.434 35.8207 682.031ZM528.713 957.142C528.713 1005.41 489.581 1044.55 441.31 1044.55 393.038 1044.55 353.907 1005.41 353.907 957.142 353.907 908.871 393.038 869.74 441.31 869.74 489.581 869.74 528.713 908.871 528.713 957.142ZM1642.03 957.136C1642.03 1098.99 1748.06 1215.05 1885.61 1232.24 1908.54 1144.84 1920 1051.7 1920 957.136 1920 862.569 1908.54 769.434 1885.61 682.031 1748.06 699.225 1642.03 815.285 1642.03 957.136ZM1567.51 957.142C1567.51 1005.41 1528.38 1044.55 1480.11 1044.55 1431.84 1044.55 1392.71 1005.41 1392.71 957.142 1392.71 908.871 1431.84 869.74 1480.11 869.74 1528.38 869.74 1567.51 908.871 1567.51 957.142ZM958.568 1640.6C816.718 1640.6 700.658 1746.63 683.464 1884.18 770.867 1907.11 864.001 1918.57 958.568 1918.57 1053.14 1918.57 1146.27 1907.11 1233.67 1884.18 1216.48 1746.63 1100.42 1640.6 958.568 1640.6ZM1045.98 1480.11C1045.98 1528.38 1006.85 1567.51 958.575 1567.51 910.304 1567.51 871.172 1528.38 871.172 1480.11 871.172 1431.84 910.304 1392.71 958.575 1392.71 1006.85 1392.71 1045.98 1431.84 1045.98 1480.11ZM1045.98 439.877C1045.98 488.148 1006.85 527.28 958.575 527.28 910.304 527.28 871.172 488.148 871.172 439.877 871.172 391.606 910.304 352.474 958.575 352.474 1006.85 352.474 1045.98 391.606 1045.98 439.877ZM1441.44 1439.99C1341.15 1540.29 1333.98 1697.91 1418.52 1806.8 1579 1712.23 1713.68 1577.55 1806.82 1418.5 1699.35 1332.53 1541.74 1339.7 1441.44 1439.99ZM1414.21 1325.37C1414.21 1373.64 1375.08 1412.77 1326.8 1412.77 1278.53 1412.77 1239.4 1373.64 1239.4 1325.37 1239.4 1277.1 1278.53 1237.97 1326.8 1237.97 1375.08 1237.97 1414.21 1277.1 1414.21 1325.37ZM478.577 477.145C578.875 376.846 586.039 219.234 501.502 110.339 341.024 204.906 206.338 339.592 113.203 498.637 220.666 584.607 378.278 576.01 478.577 477.145ZM679.155 590.32C679.155 638.591 640.024 677.723 591.752 677.723 543.481 677.723 504.349 638.591 504.349 590.32 504.349 542.048 543.481 502.917 591.752 502.917 640.024 502.917 679.155 542.048 679.155 590.32ZM1440 475.712C1540.3 576.01 1697.91 583.174 1806.8 498.637 1712.24 338.159 1577.55 203.473 1418.51 110.339 1332.54 217.801 1341.13 375.413 1440 475.712ZM1414.21 590.32C1414.21 638.591 1375.08 677.723 1326.8 677.723 1278.53 677.723 1239.4 638.591 1239.4 590.32 1239.4 542.048 1278.53 502.917 1326.8 502.917 1375.08 502.917 1414.21 542.048 1414.21 590.32ZM477.145 1438.58C376.846 1338.28 219.234 1331.12 110.339 1415.65 204.906 1576.13 339.593 1710.82 498.637 1805.39 584.607 1696.49 577.443 1538.88 477.145 1438.58ZM679.155 1325.37C679.155 1373.64 640.024 1412.77 591.752 1412.77 543.481 1412.77 504.349 1373.64 504.349 1325.37 504.349 1277.1 543.481 1237.97 591.752 1237.97 640.024 1237.97 679.155 1277.1 679.155 1325.37Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CanvasLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CanvasLogo,
+ contentDescription = "CanvasLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Certified.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Certified.kt
new file mode 100644
index 0000000000..56a0708546
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Certified.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Certified: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Certified",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 15 693.227 257.027 333.44 243.053 284.693 599.96 0 820.547l192 304.64-76.267 352 342.934 109.973 167.893 318.613L960 1769.56l333.44 136.213 167.893-318.613 342.934-109.973-76.267-352 192-304.64-284.693-220.587-48.747-356.907-359.893 13.974L960 15Zm352.747 616.427 147.84 153.813-600 577.28-402.774-402.773L608.64 808.92l254.933 254.827 449.174-432.32Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CertifiedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Certified,
+ contentDescription = "Certified",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartLine.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartLine.kt
new file mode 100644
index 0000000000..3c24065ccb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartLine.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ChartLine: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ChartLine",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1443.24 156.765C1427.14 140.674 1404.96 132.197 1382.24 133.456 1359.52 134.714 1338.41 145.589 1324.2 163.358L937.932 646.19 569.11 461.779C533.024 443.736 489.149 455.387 466.769 488.957L40.1027 1128.96C15.5945 1165.72 25.5284 1215.39 62.2907 1239.9 99.053 1264.41 148.723 1254.47 173.231 1217.71L560.723 636.471 924.223 818.221C957.963 835.091 998.904 826.099 1022.47 796.642L1393.3 333.104 1756.76 696.568C1788.01 727.81 1838.66 727.81 1869.9 696.568 1901.14 665.326 1901.14 614.673 1869.9 583.431L1443.24 156.765ZM106.667 1520C62.4839 1520 26.6667 1555.82 26.6667 1600 26.6667 1644.18 62.4839 1680 106.667 1680H1813.33C1857.52 1680 1893.33 1644.18 1893.33 1600 1893.33 1555.82 1857.52 1520 1813.33 1520H106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChartLinePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ChartLine,
+ contentDescription = "ChartLine",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartPie.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartPie.kt
new file mode 100644
index 0000000000..648a6cf9c5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartPie.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ChartPie: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ChartPie",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1916.71 880C1916.21 873.932 1915.66 867.88 1915.04 861.845 1869.31 411.518 1512.33 53.2039 1062.61 5.41895 1055.1 4.62088 1047.56 3.90946 1040 3.28564V880H1916.71ZM880 3.28564V926.862L226.955 1579.91C86.6134 1414.12 1.50085 1200.08.0196554 966.208.00655833 964.14 0 962.071 0 960 0 496.081 329.071 109.02 766.527 19.5035 803.617 11.9137 841.486 6.46298 880 3.28564ZM340.092 1693.04C343.162 1695.64 346.248 1698.22 349.351 1700.78 515.295 1837.73 728.04 1920 960 1920 1463.25 1920 1876.06 1532.76 1916.71 1040H993.137L340.092 1693.04Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChartPiePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ChartPie,
+ contentDescription = "ChartPie",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartScatter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartScatter.kt
new file mode 100644
index 0000000000..aba63ae280
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ChartScatter.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ChartScatter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ChartScatter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 80C0 35.8173 35.8172 0 80 0C124.183 0 160 35.8172 160 80V1840C160 1884.18 124.183 1920 80 1920C35.8172 1920 0 1884.18 0 1840V80Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1840 1760C1884.18 1760 1920 1795.82 1920 1840 1920 1884.18 1884.18 1920 1840 1920H80C35.8172 1920 0 1884.18 0 1840 .00000193129 1795.82 35.8172 1760 80 1760H1840ZM605.415 1120C605.415 1208.37 533.78 1280 445.415 1280 357.049 1280 285.415 1208.37 285.415 1120 285.415 1031.63 357.049 960 445.415 960 533.78 960 605.415 1031.63 605.415 1120ZM1440 1485.8C1440 1574.16 1368.37 1645.8 1280 1645.8 1191.63 1645.8 1120 1574.16 1120 1485.8 1120 1397.43 1191.63 1325.8 1280 1325.8 1368.37 1325.8 1440 1397.43 1440 1485.8ZM605.415 342.331C605.415 430.697 533.78 502.331 445.415 502.331 357.049 502.331 285.415 430.697 285.415 342.331 285.415 253.966 357.049 182.331 445.415 182.331 533.78 182.331 605.415 253.966 605.415 342.331ZM1882.17 1120C1882.17 1208.37 1810.54 1280 1722.17 1280 1633.81 1280 1562.17 1208.37 1562.17 1120 1562.17 1031.63 1633.81 960 1722.17 960 1810.54 960 1882.17 1031.63 1882.17 1120ZM1155.62 884.581C1155.62 972.947 1083.98 1044.58 995.616 1044.58 907.251 1044.58 835.616 972.947 835.616 884.581 835.616 796.215 907.251 724.581 995.616 724.581 1083.98 724.581 1155.62 796.215 1155.62 884.581Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChartScatterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ChartScatter,
+ contentDescription = "ChartScatter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Chat.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Chat.kt
new file mode 100644
index 0000000000..59ef097bae
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Chat.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Chat: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Chat",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1242.353 451.753v1016.471H757.496l-418.672 418.673v-418.673H0V451.754h1242.353ZM1920.033.033v1016.471h-225.881v419.012l-338.937-338.936V338.857H677.681V.034h1242.353ZM677.76 1016.46H338.824v112.94H677.76v-112.94Zm225.77-225.882H338.823V903.63h564.705V790.577Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ChatPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Chat,
+ contentDescription = "Chat",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Check.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Check.kt
new file mode 100644
index 0000000000..af91ddaa4e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Check.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Check: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Check",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1743.858 267.012 710.747 1300.124 176.005 765.382 0 941.387l710.747 710.871 1209.24-1209.116z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Check,
+ contentDescription = "Check",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckDark.kt
new file mode 100644
index 0000000000..2776e1c134
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CheckDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CheckDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1743.858 267.012 710.747 1300.124 176.005 765.382 0 941.387l710.747 710.871 1209.24-1209.116z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CheckDark,
+ contentDescription = "CheckDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckMark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckMark.kt
new file mode 100644
index 0000000000..73546d6926
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckMark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CheckMark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CheckMark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1743.858 267.012 710.747 1300.124 176.005 765.382 0 941.387l710.747 710.871 1209.24-1209.116z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckMarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CheckMark,
+ contentDescription = "CheckMark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckMarkIndeterminate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckMarkIndeterminate.kt
new file mode 100644
index 0000000000..b6012a37eb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckMarkIndeterminate.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CheckMarkIndeterminate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CheckMarkIndeterminate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M288 864v192h1344V864z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckMarkIndeterminatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CheckMarkIndeterminate,
+ contentDescription = "CheckMarkIndeterminate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckPlus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckPlus.kt
new file mode 100644
index 0000000000..34ec78af73
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CheckPlus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CheckPlus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CheckPlus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M459.897 902.842v689.845h1034.767v-574.87h230.064v804.819H229.948V902.842h229.949Zm1299.37-570.916L1920 496.455l-845.06 825.86-408.044-398.846 160.85-164.413 247.194 241.675 684.326-668.805ZM459.896 98v230.063H689.96v229.949H459.897v229.833H229.948V558.012H0V328.063h229.948V98h229.949Zm919.816 229.983V557.93h-574.87V327.983h574.87Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CheckPlusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CheckPlus,
+ contentDescription = "CheckPlus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CircleArrowDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CircleArrowDown.kt
new file mode 100644
index 0000000000..649289a017
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CircleArrowDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CircleArrowDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CircleArrowDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1359.492 1119.797-79.898-79.899-263.106 263.106.08-822.395H903.432l.08 822.395-263.106-263.106-79.898 79.899L960 1519.289l399.492-399.492Zm-1078.629 519.34c-374.484-374.484-374.484-983.79 0-1358.274 374.484-374.484 983.79-374.484 1358.274 0 374.484 374.484 374.484 983.79 0 1358.274-374.484 374.484-983.79 374.484-1358.274 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CircleArrowDown,
+ contentDescription = "CircleArrowDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CircleArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CircleArrowUp.kt
new file mode 100644
index 0000000000..9c74a88303
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CircleArrowUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CircleArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CircleArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1359.492 800.203 960 400.711 560.508 800.203l79.898 79.899 263.106-263.106-.08 822.395h113.136l-.08-822.395 263.106 263.106 79.898-79.899ZM280.863 280.863c374.484-374.484 983.79-374.484 1358.274 0 374.484 374.484 374.484 983.79 0 1358.274-374.484 374.484-983.79 374.484-1358.274 0-374.484-374.484-374.484-983.79 0-1358.274Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CircleArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CircleArrowUp,
+ contentDescription = "CircleArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClearTextFormatting.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClearTextFormatting.kt
new file mode 100644
index 0000000000..d99925738c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClearTextFormatting.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ClearTextFormatting: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ClearTextFormatting",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1902.45 1037.571c23.399 23.399 23.399 61.439 0 84.839l-599.99 599.99c-11.281 11.28-26.521 17.64-42.48 17.64H0v-119.998h875.146l-137.518-137.638c-23.399-23.399-23.399-61.438 0-84.839l719.989-719.988c23.399-23.4 61.438-23.4 84.839 0l359.994 359.994Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M243.452 1360.186 615.086 300.003H120.094V180.005h1079.983v119.998H742.164L356.61 1399.786z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClearTextFormattingPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ClearTextFormatting,
+ contentDescription = "ClearTextFormatting",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Clock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Clock.kt
new file mode 100644
index 0000000000..48e1bace00
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Clock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Clock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Clock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1377.882 1344 903.53 988.235v-592.94h112.942v536.47l429.176 321.77-67.765 90.465ZM960 0C430.645 0 0 430.645 0 960c0 529.242 430.645 960 960 960 529.242 0 960-430.758 960-960 0-529.355-430.758-960-960-960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Clock,
+ contentDescription = "Clock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioning.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioning.kt
new file mode 100644
index 0000000000..0243a31459
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioning.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ClosedCaptioning: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ClosedCaptioning",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1706.667 0H213.333C94.933 0 0 108 0 240v1440c0 132 94.933 240 213.333 240h1493.334C1824 1920 1920 1812 1920 1680V240c0-132-96-240-213.333-240ZM853.333 853.333h-160V800H480v320h213.333v-53.333h160v106.666c0 58.667-48 106.667-106.666 106.667h-320C368 1280 320 1232 320 1173.333V746.667C320 688 368 640 426.667 640h320c58.666 0 106.666 48 106.666 106.667v106.666Zm747 0h-160V800H1227v320h213.333v-53.333h160v106.666c0 58.667-48 106.667-106.666 106.667h-320C1115 1280 1067 1232 1067 1173.333V746.667C1067 688 1115 640 1173.667 640h320c58.666 0 106.666 48 106.666 106.667v106.666Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptioningPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ClosedCaptioning,
+ contentDescription = "ClosedCaptioning",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioningOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioningOff.kt
new file mode 100644
index 0000000000..05c91c7a29
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioningOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ClosedCaptioningOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ClosedCaptioningOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1264.84 456.279c31.013 194.462 200.329 343.66 404.01 343.66 2.516 0 5.03 0 7.545-.837v830.653c0 92.202-75.438 167.64-167.64 167.64H167.64c-92.202 0-167.64-75.438-167.64-167.64V623.918c0-92.201 75.438-167.64 167.64-167.64ZM754.378 783.243h-251.46c-138.302 0-251.459 113.157-251.459 251.46v167.639c0 138.302 113.157 251.459 251.46 251.459h251.459v-167.64h-251.46c-46.1 0-83.82-37.719-83.82-83.82v-167.639c0-46.1 37.72-83.82 83.82-83.82h251.46V783.243Zm670.558 0h-251.46c-138.302 0-251.459 113.157-251.459 251.46v167.639c0 138.302 113.157 251.459 251.46 251.459h251.458v-167.64h-251.459c-46.1 0-83.82-37.719-83.82-83.82v-167.639c0-46.1 37.72-83.82 83.82-83.82h251.46V783.243ZM1822.686 121 1920 219.32l-157.749 159.342L1920 538.087l-97.315 98.237-157.748-159.342-157.833 159.342-97.315-98.237 157.833-159.425-157.833-159.341L1507.104 121l157.833 159.425L1822.685 121Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptioningOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ClosedCaptioningOff,
+ contentDescription = "ClosedCaptioningOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioningOn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioningOn.kt
new file mode 100644
index 0000000000..a139387392
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ClosedCaptioningOn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ClosedCaptioningOn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ClosedCaptioningOn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1220.701 478.258c30.279 186.41 190.667 329.13 385.59 321.259v803.145c0 88.346-72.283 160.63-160.629 160.63H160.63C72.283 1763.291 0 1691.007 0 1602.661V638.887c0-88.346 72.283-160.629 160.63-160.629Zm144.647 313.251h-240.944c-132.84 0-240.944 108.104-240.944 240.944v160.629c0 132.84 108.104 240.944 240.944 240.944h240.944v-160.63h-240.944c-44.253 0-80.315-36.06-80.315-80.314v-160.63c0-44.252 36.062-80.314 80.315-80.314h240.944V791.51Zm-642.517 0H481.887c-132.84 0-240.943 108.104-240.943 240.944v160.629c0 132.84 108.103 240.944 240.943 240.944h240.944v-160.63H481.887c-44.253 0-80.314-36.06-80.314-80.314v-160.63c0-44.252 36.061-80.314 80.314-80.314h240.944V791.51ZM1825.871 157 1920 251.209l-380.049 380.049-246.887-246.887 94.21-94.13L1539.95 442.92 1825.871 157Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ClosedCaptioningOnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ClosedCaptioningOn,
+ contentDescription = "ClosedCaptioningOn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudDownload.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudDownload.kt
new file mode 100644
index 0000000000..7a3e8c5bf5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudDownload.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CloudDownload: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CloudDownload",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 73c221.816 0 408.847 143.661 478.08 342.212 10.052-.678 19.99-3.388 30.155-3.388 249.149 0 451.765 202.616 451.765 451.764s-202.616 451.765-451.765 451.765h-451.764v315.445l185.9-186.014 79.963 79.849L960 1846.967l-322.334-322.334 79.962-79.85 185.901 186.015v-315.445H395.294C177.318 1315.353 0 1138.035 0 920.059c0-217.977 177.318-395.294 395.294-395.294 20.894 0 41.224 2.71 61.553 5.986C482.597 274.487 697.073 73 960 73Zm56.47 847.059H903.53v282.353h112.94V920.059Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudDownloadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CloudDownload,
+ contentDescription = "CloudDownload",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudLock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudLock.kt
new file mode 100644
index 0000000000..ef87b7e09d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudLock.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CloudLock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CloudLock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.418 1185.458h-225.88v-112.94c0-62.23 50.71-112.94 112.941-112.94 62.229 0 112.939 50.71 112.939 112.94v112.94Zm112.94 0v-112.94c0-124.573-101.307-225.88-225.879-225.88-124.574 0-225.881 101.307-225.881 225.88v112.94H677.657v395.29c0 93.402 76.009 169.412 169.41 169.412h338.821c93.402 0 169.411-76.01 169.411-169.411v-395.291h-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.24 507.818c-10.166 0-20.33 2.259-30.495 3.388-68.895-198.775-256.374-342.21-477.737-342.21-263.15 0-477.738 201.035-502.584 457.409-20.33-3.388-41.789-5.648-62.118-5.648-245.08 0-438.773 224.187-386.82 478.19C46.321 1283.83 217.99 1411.339 406.6 1411.339h158.117v-282.351c0-31.171 25.298-56.47 56.47-56.47h56.47c0-186.351 152.47-338.82 338.821-338.82 186.351 0 338.821 152.469 338.821 338.82h56.47c31.17 0 56.47 25.299 56.47 56.47v282.35c249.598 0 451.761-202.162 451.761-451.76 0-249.597-202.163-451.76-451.76-451.76"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudLockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CloudLock,
+ contentDescription = "CloudLock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudUpload.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudUpload.kt
new file mode 100644
index 0000000000..ea53388dda
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CloudUpload.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CloudUpload: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CloudUpload",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1451.06 557.975C1456.76 557.082 1462.44 556.191 1468.24 556.191C1717.38 556.191 1920 761.334 1920 1013.33C1920 1265.33 1717.38 1470.48 1468.24 1470.48H1016.47V1094.13L1202.37 1282.36L1282.33 1201.45L960 875.391L637.666 1201.45L717.628 1282.36L903.529 1094.13V1470.48H395.294C177.318 1470.48 0 1291.05 0 1070.48C0 849.905 177.318 670.477 395.294 670.477C416.188 670.477 436.631 673.22 456.847 676.534C482.598 417.105 697.073 213.334 960 213.334C1181.82 213.334 1368.85 358.705 1438.08 559.62C1442.45 559.325 1446.76 558.649 1451.06 557.975ZM1016.47 1813.33H903.53V1470.48H1016.47V1813.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CloudUploadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CloudUpload,
+ contentDescription = "CloudUpload",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Code.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Code.kt
new file mode 100644
index 0000000000..f5df156020
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Code.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Code: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Code",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m590.454 251 125.963 104.97-502.979 603.575 502.98 603.575-125.964 104.97L0 959.544 590.454 251Zm738.395 0 590.454 708.545-590.454 708.544-126.073-104.97 503.089-603.574-503.089-603.575L1328.85 251Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CodePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Code,
+ contentDescription = "Code",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Collapse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Collapse.kt
new file mode 100644
index 0000000000..33a59c9490
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Collapse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Collapse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Collapse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1694v112.941H0V1694h1920ZM1016.47 338.882v654.269l242.372-242.485 79.963 79.85L960 1209.32 581.195 830.515l79.963-79.85 242.371 242.486V338.882h112.942ZM1750.589 113H169.412C76.009 113 0 189.01 0 282.412v1185.882h1920V282.412C1920 189.009 1843.99 113 1750.588 113Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollapsePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Collapse,
+ contentDescription = "Collapse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Collection.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Collection.kt
new file mode 100644
index 0000000000..122bdb639d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Collection.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Collection: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Collection",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1242.353 677.647V1920H0V677.647h1242.353Zm-338.824 790.588H338.824v112.941h564.705v-112.94Zm677.647-1129.411v1242.352h-225.882V564.706H338.824V338.824h1242.352Zm-790.475 903.529H338.824v112.941H790.7v-112.941ZM1920.034-.011v1242.353h-225.882V225.872H677.68V-.012h1242.353ZM903.529 1016.47H338.824v112.94h564.705v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollectionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Collection,
+ contentDescription = "Collection",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CollectionSave.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CollectionSave.kt
new file mode 100644
index 0000000000..9da1a969e2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CollectionSave.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CollectionSave: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CollectionSave",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1467.552 1700.252H459.79l-297.43-297.428L7 1558.186 368.814 1920h1189.713l361.815-361.814-155.362-155.362-297.428 297.428Zm-501.65-276.947L448.724 906.129l155.362-155.362 251.94 251.94V0h219.748v1002.708l251.94-251.94 155.362 155.36L965.9 1423.305Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollectionSavePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CollectionSave,
+ contentDescription = "CollectionSave",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Comment.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Comment.kt
new file mode 100644
index 0000000000..18c0fdd21e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Comment.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Comment: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Comment",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1662.178 0v1359.964h-648.703l-560.154 560.154v-560.154H0V0h1662.178ZM906.794 755.55H453.32v117.53h453.473V755.55Zm302.063-302.365H453.32v117.529h755.536V453.185Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Comment,
+ contentDescription = "Comment",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CommentsOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CommentsOff.kt
new file mode 100644
index 0000000000..7a50ee70bd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CommentsOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CommentsOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CommentsOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M971.153 416.338c41.771 250.846 257.282 442.253 517.54 442.253v707.606H729.81L262.71 1920v-353.803H0V416.337ZM1689.51 0l123.824 125.07-200.798 202.817 200.798 202.817-123.824 125.07-200.798-202.818-200.799 202.818-123.824-125.07 200.798-202.817-200.798-202.818L1287.912 0l200.799 202.818L1689.509 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommentsOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CommentsOff,
+ contentDescription = "CommentsOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CommentsOn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CommentsOn.kt
new file mode 100644
index 0000000000..74f7df176b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CommentsOn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CommentsOn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CommentsOn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M981.139 416c42.2 250.991 259.926 442.353 522.861 442.353v707.765H737.314L265.412 1920v-353.882H0V416ZM1794.882 0 1920 125.098 1415.015 630 1087 302.039l125.118-125.098 202.897 202.864L1794.882 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommentsOnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CommentsOn,
+ contentDescription = "CommentsOn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Commons.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Commons.kt
new file mode 100644
index 0000000000..4b892494b7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Commons.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Commons: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Commons",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1063.68 251v282.33H714.24c-238.08 0-432 192.06-432 426.375s192 426.375 430.08 426.375h349.44v282.33H712.32C320.64 1668.41 0 1351.505 0 959.705 0 567.901 320.64 251 712.32 251h351.36Zm282.24 201.668L1920 959.705v.007l-574.08 507.03v-338.024h-604.8c-94.08 0-168.96-74.903-168.96-169.013s74.88-169.013 168.96-169.013h604.8V452.668Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CommonsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Commons,
+ contentDescription = "Commons",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compare.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compare.kt
new file mode 100644
index 0000000000..98fcf73cf7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compare.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Compare: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Compare",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1866.67 200C1896.12 200 1920 223.878 1920 253.333L1920 1866.67C1920 1896.12 1896.12 1920 1866.67 1920L1066.67 1920C1037.21 1920 1013.33 1896.12 1013.33 1866.67L1013.33 253.333C1013.33 223.878 1037.21 200 1066.67 200L1866.67 200ZM1494.2 913.146L1419.11 838L1169.13 1087.97L1419.11 1338L1494.2 1262.85L1372.43 1141.13L1750.87 1141.13V1034.87L1372.43 1034.87L1494.2 913.146Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M853.334 3.49691e-05C882.789 3.62566e-05 906.667 23.8782 906.667 53.3334L906.667 1566.67C906.667 1596.12 882.789 1620 853.333 1620H53.3334C23.8782 1620 -1.28753e-06 1596.12 0 1566.67L6.61499e-05 53.3334C6.74374e-05 23.8782 23.8782 -1.28753e-06 53.3334 0L853.334 3.49691e-05ZM424.8 974.854L499.892 1050L749.866 800.027L499.892 550L424.8 625.146L546.573 746.867L168.135 746.867V853.133H546.573L424.8 974.854Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ComparePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Compare,
+ contentDescription = "Compare",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compass.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compass.kt
new file mode 100644
index 0000000000..d46fa4b8e2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compass.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Compass: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Compass",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c-29.455 0-53.333 23.878-53.333 53.333v164.425C755.322 243.149 640 374.774 640 533.333c0 35.57 5.803 69.784 16.515 101.748L142.857 1524.76c-78.897 136.66-32.076 311.4 104.579 390.3 16.399 9.46 37.368 3.84 46.835-12.55l297.82-515.84h314.576v106.66c0 29.46 23.878 53.34 53.333 53.34s53.33-23.88 53.33-53.34v-106.66h314.37l297.82 515.84c9.47 16.39 30.44 22.01 46.84 12.55 136.65-78.9 183.48-253.64 104.58-390.3l-513.53-889.454c10.76-32.028 16.59-66.319 16.59-101.973 0-158.559-115.32-290.184-266.67-315.575V53.333C1013.33 23.878 989.455 0 960 0Zm306.12 1280-249.25-431.706a321.827 321.827 0 0 1-56.87 5.039 321.882 321.882 0 0 1-57.06-5.072L653.675 1280h252.992v-106.67c0-29.45 23.878-53.33 53.333-53.33s53.33 23.88 53.33 53.33V1280h252.79ZM960 714.667c100.15 0 181.33-81.186 181.33-181.334C1141.33 433.186 1060.15 352 960 352c-100.148 0-181.333 81.186-181.333 181.333 0 100.148 81.185 181.334 181.333 181.334Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CompassPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Compass,
+ contentDescription = "Compass",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Complete.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Complete.kt
new file mode 100644
index 0000000000..6ae23bc25e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Complete.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Complete: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Complete",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M854.344 1317.685 503.209 966.55l79.85-79.85 271.285 271.285 520.207-520.32 79.849 79.962-600.056 600.057ZM960.056 0c-529.355 0-960 430.645-960 960s430.645 960 960 960c529.243 0 960-430.645 960-960S1489.3 0 960.056 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CompletePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Complete,
+ contentDescription = "Complete",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compose.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compose.kt
new file mode 100644
index 0000000000..1f73a3cd91
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Compose.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Compose: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Compose",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1108.675 239.002-837.6 838.368a96.377 96.377 0 0 0-26.304 49.056l-99.84 499.2c-6.24 31.488 3.552 64.032 26.208 86.784 18.24 18.144 42.72 28.128 67.968 28.128 6.24 0 12.48-.672 18.816-1.92l499.2-99.84a96.94 96.94 0 0 0 49.056-26.208l825.792-825.216v1083.648h-1632v-1632h1108.704ZM1442.9 40.33c54.624-53.76 149.76-53.76 203.52 0l196.8 196.8a143.766 143.766 0 0 1 42.144 101.76c0 38.4-15.264 74.88-42.144 101.76l-199.68 198.72-905.376 905.28-499.104 99.84 99.84-499.2 905.28-905.28Zm-977.376 1113.6-38.304 38.4-66.24 330.24 330.24-66.24 38.304-38.4-264-264Zm840-644.16L712.34 1103.05l68.16 68.16 593.28-593.28-68.256-68.16ZM1544.66 94.09c-12.48 0-24.96 5.76-33.6 14.4l-131.52 131.52 264 264 131.52-131.52c8.64-8.64 14.304-21.12 14.304-33.6 0-13.44-5.664-24.96-14.304-34.56l-195.84-195.84c-9.696-8.64-21.12-14.4-34.56-14.4Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ComposePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Compose,
+ contentDescription = "Compose",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Configure.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Configure.kt
new file mode 100644
index 0000000000..d945eb39cb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Configure.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Configure: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Configure",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M230.053 453.333H0V240H230.053C275.043 100.733 405.758 0 560 0 714.242 0 844.957 100.733 889.947 240H1920V453.333H889.947C844.957 592.601 714.242 693.333 560 693.333 405.758 693.333 275.043 592.601 230.053 453.333ZM426.667 346.667C426.667 273.029 486.362 213.333 560 213.333 633.638 213.333 693.333 273.029 693.333 346.667 693.333 420.305 633.638 480 560 480 486.362 480 426.667 420.305 426.667 346.667ZM0 853.333H976.72C1021.71 714.066 1152.42 613.333 1306.67 613.333 1460.91 613.333 1591.62 714.066 1636.61 853.333H1920V1066.67H1636.61C1591.62 1205.93 1460.91 1306.67 1306.67 1306.67 1152.42 1306.67 1021.71 1205.93 976.72 1066.67H0V853.333ZM1306.67 826.667C1233.03 826.667 1173.33 886.362 1173.33 960 1173.33 1033.64 1233.03 1093.33 1306.67 1093.33 1380.3 1093.33 1440 1033.64 1440 960 1440 886.362 1380.3 826.667 1306.67 826.667ZM889.947 1680C844.957 1819.27 714.242 1920 560 1920 405.758 1920 275.043 1819.27 230.053 1680H0V1466.67H230.053C275.043 1327.4 405.758 1226.67 560 1226.67 714.242 1226.67 844.957 1327.4 889.947 1466.67H1920V1680H889.947ZM426.667 1573.33C426.667 1499.7 486.362 1440 560 1440 633.638 1440 693.333 1499.7 693.333 1573.33 693.333 1646.97 633.638 1706.67 560 1706.67 486.362 1706.67 426.667 1646.97 426.667 1573.33Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ConfigurePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Configure,
+ contentDescription = "Configure",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Copy.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Copy.kt
new file mode 100644
index 0000000000..bdf3528b9c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Copy.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Copy: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Copy",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.183 451.76v1468.184H0V451.76h1468.183ZM1920 0v1468.296h-338.812V338.812H451.704V0H1920ZM338.812 1016.446h790.56V903.509h-790.56v112.937Zm0 225.874h564.686v-112.937H338.812v112.937Zm0 225.988h790.56v-113.05h-790.56v113.05Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Copy,
+ contentDescription = "Copy",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CopyCourse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CopyCourse.kt
new file mode 100644
index 0000000000..4263f37f8a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/CopyCourse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.CopyCourse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.CopyCourse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.183 451.76v1468.184H0V451.76h1468.183ZM1920 0v1468.296h-338.812V338.812H451.704V0H1920ZM338.812 1016.446h790.56V903.509h-790.56v112.937Zm0 225.874h564.686v-112.937H338.812v112.937Zm0 225.988h790.56v-113.05h-790.56v113.05Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CopyCoursePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.CopyCourse,
+ contentDescription = "CopyCourse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Courses.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Courses.kt
new file mode 100644
index 0000000000..df1916a493
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Courses.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Courses: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Courses",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1750.176 0v1468.235h-225.882v338.824h169.412V1920H451.353c-82.447 0-161.506-36.141-215.718-99.388-42.917-50.824-66.635-116.33-66.635-182.965V282.353C169 126.494 295.494 0 451.353 0h1298.823Zm-338.823 1468.235H463.776c-89.223 0-166.023 60.989-179.576 140.047-1.13 9.036-2.259 18.07-2.259 25.977v3.388c0 40.659 13.553 79.059 40.659 109.553 31.624 38.4 79.059 59.859 128.753 59.859h960v-112.941H408.435v-112.942h1002.918v-112.94Zm-56.47-564.706h-790.59v112.942h790.588V903.529Zm56.47-564.705h-903.53v451.764h903.53V338.824ZM620.765 677.647h677.647V451.765H620.765v225.882Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CoursesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Courses,
+ contentDescription = "Courses",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Crop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Crop.kt
new file mode 100644
index 0000000000..05cc85949d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Crop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Crop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Crop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M400 0h160v1360h1360v160H400V0zM266.667 400H0v160h266.667V400zm426.666 0v160H1360v666.67h160V400H693.333zM1520 1653.33h-160V1920h160v-266.67z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CropPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Crop,
+ contentDescription = "Crop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Dashboard.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Dashboard.kt
new file mode 100644
index 0000000000..acc3e86ed0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Dashboard.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Dashboard: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Dashboard",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 282c529.355 0 960 430.758 960 960 0 77.139-8.922 153.148-26.541 225.882l-10.504 43.144h-560.188c-27.106 74.88-79.85 140.838-155.52 181.045-47.887 25.185-101.647 38.625-155.633 38.625-123.445 0-236.047-67.651-293.76-176.64-5.873-11.18-11.859-25.75-17.845-43.03H37.045l-10.504-43.144C8.922 1395.148 0 1319.14 0 1242c0-529.242 430.645-960 960-960Zm168.17 1229.026c47.66-49.355 61.214-125.139 27.331-189.064-42.24-79.51-403.765-413.59-403.765-413.59s73.638 486.776 115.765 566.287c7.341 13.892 16.941 25.525 27.219 36.367h-.904c2.033 2.146 4.518 3.614 6.551 5.534 4.63 4.405 9.374 8.47 14.344 12.198 3.727 2.823 7.68 5.308 11.52 7.68 5.195 3.162 10.39 6.098 15.924 8.81 4.292 1.92 8.584 3.726 13.101 5.42 5.422 1.92 10.956 3.727 16.716 5.083a159.91 159.91 0 0 0 14.23 3.049c5.76.904 11.407 1.468 17.167 1.694 2.824.113 5.535.79 8.245.79 1.92 0 3.84-.677 5.76-.677 8.245-.226 16.377-1.355 24.508-2.936 3.727-.791 7.567-1.13 11.294-2.146 11.746-3.163 23.266-7.229 34.335-13.214h.338v-.113c15.7-8.245 28.687-19.2 40.32-31.172Zm361.524-625.807 112.715-112.715-119.717-119.831-112.828 112.715 119.83 119.83Zm-614.4-254.457h169.412V471.29H875.294v159.473ZM430.306 885.22l119.83-119.83-112.715-112.716-119.83 119.83L430.306 885.22Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DashboardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Dashboard,
+ contentDescription = "Dashboard",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DeactivateUser.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DeactivateUser.kt
new file mode 100644
index 0000000000..f8f329a2ef
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DeactivateUser.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DeactivateUser: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DeactivateUser",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M696.208 156.026c206.72 0 374.882 168.161 374.882 374.881v107.11c0 113.428-51.734 214.003-131.637 282.874 58.053 6.962 115.892 15.745 173.195 27.741 162.056 34.168 279.768 188.726 279.768 367.598v205.757l-21.85 16.066c-117.391 86.223-356.78 225.786-675.108 225.786-16.923 0-33.953-.429-51.198-1.179-280.518-13.174-493.343-129.387-622.517-224.714L0 1521.879v-205.756c0-178.872 117.82-333.43 279.983-367.598 56.982-11.889 114.606-21.1 172.445-28.17-79.689-68.763-131.101-169.124-131.101-282.339V530.907c0-206.72 168.16-374.88 374.881-374.88Zm-88.9 321.327c-94.899 0-113.536 69.942-178.872 96.398v64.265c0 147.596 120.176 267.773 267.772 267.773s267.773-120.177 267.773-267.773V530.907c0-2.463-.643-4.82-.75-7.39-.636.578-1.271 1.158-1.905 1.738l-1.9 1.745-.948.874-1.895 1.75-1.893 1.751-1.894 1.751-.948.875-1.898 1.748c-27.24 25.027-56.053 48.713-110.216 48.713-116.749 0-116.749-107.11-232.426-107.11ZM1839.915 156 1920 236.085l-200.269 200.269L1920 636.623l-80.085 80.085-200.269-200.27-200.156 200.27-80.198-80.085 200.27-200.269-200.27-200.269L1439.49 156l200.156 200.269L1839.915 156Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DeactivateUserPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DeactivateUser,
+ contentDescription = "DeactivateUser",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Discussion.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Discussion.kt
new file mode 100644
index 0000000000..6e97fbaefc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Discussion.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Discussion: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Discussion",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1242.353 451.753v1016.471H757.496l-418.672 418.673v-418.673H0V451.754h1242.353ZM1920.033.033v1016.471h-225.881v419.012l-338.937-338.936V338.857H677.681V.034h1242.353ZM677.76 1016.46H338.824v112.94H677.76v-112.94Zm225.77-225.882H338.823V903.63h564.705V790.577Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Discussion,
+ contentDescription = "Discussion",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionCheck.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionCheck.kt
new file mode 100644
index 0000000000..ee18b1d14d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionCheck.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionCheck: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionCheck",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1743.858 267.012 710.747 1300.124 176.005 765.382 0 941.387l710.747 710.871 1209.24-1209.116z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionCheckPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionCheck,
+ contentDescription = "DiscussionCheck",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionNew.kt
new file mode 100644
index 0000000000..c9dea9247f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionNew.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionNew: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionNew",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M866.332 213v653.332H213v186.666h653.332v653.332h186.666v-653.332h653.332V866.332h-653.332V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionNewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionNew,
+ contentDescription = "DiscussionNew",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReply.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReply.kt
new file mode 100644
index 0000000000..563f14a434
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReply.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionReply: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionReply",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1468.235c93.448 0 169.412 75.965 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.447 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.447-75.964 169.412-169.412 169.412-93.448 0-169.412-75.965-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionReplyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionReply,
+ contentDescription = "DiscussionReply",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReply2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReply2.kt
new file mode 100644
index 0000000000..67170d6bc0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReply2.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionReply2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionReply2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M874.738 645.126H462.691L810.92 296.898 640.009 126 0 765.996l640.008 640.008 170.91-170.91-348.227-348.228h412.047c442.99 0 803.425 360.435 803.425 803.425v103.102h241.74v-103.102c0-576.31-468.735-1045.165-1045.165-1045.165"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionReply2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionReply2,
+ contentDescription = "DiscussionReply2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReplyDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReplyDark.kt
new file mode 100644
index 0000000000..f77b079420
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionReplyDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionReplyDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionReplyDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1468.235c93.448 0 169.412 75.965 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.447 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.447-75.964 169.412-169.412 169.412-93.448 0-169.412-75.965-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionReplyDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionReplyDark,
+ contentDescription = "DiscussionReplyDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionSearch.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionSearch.kt
new file mode 100644
index 0000000000..b57699bc47
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionSearch.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionSearch: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionSearch",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1458.948 1305.626c104.637-136.95 167.527-307.187 167.527-492.388C1626.475 364.764 1261.711 0 813.238 0 364.764 0 0 364.764 0 813.238c0 448.473 364.764 813.237 813.238 813.237 185.201 0 355.547-62.89 492.496-167.527L1766.678 1920 1920 1766.678l-461.052-461.052Zm-645.71 103.986c-328.874 0-596.375-267.61-596.375-596.374 0-328.765 267.501-596.375 596.375-596.375 328.873 0 596.374 267.61 596.374 596.375s-267.501 596.374-596.374 596.374Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionSearchPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionSearch,
+ contentDescription = "DiscussionSearch",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionX.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionX.kt
new file mode 100644
index 0000000000..70951d91f1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DiscussionX.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DiscussionX: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DiscussionX",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1743.858.012 959.869 783.877 176.005.012 0 176.142l783.74 783.989L0 1743.87 176.005 1920l783.864-783.74L1743.858 1920l176.13-176.13-783.865-783.74 783.865-783.988z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DiscussionXPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DiscussionX,
+ contentDescription = "DiscussionX",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Document.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Document.kt
new file mode 100644
index 0000000000..0fbf9122a7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Document.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Document: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Document",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.471 0v564.706h564.705V1920H169V0h1016.471Zm-225.77 1355.294H507.823v113.054h451.878v-113.054Zm338.711-225.881H507.823v112.94h790.589v-112.94Zm-112.941-225.884H507.823v112.941h677.648V903.529Zm225.882-225.882h-903.53v112.941h903.53V677.647ZM959.701 451.878H507.823v112.941h451.878V451.878Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1667.673 345.623c30.38 30.268 51.84 66.635 65.619 106.164h-434.937V16.851c39.53 13.779 75.897 35.35 106.278 65.619l263.04 263.153Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DocumentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Document,
+ contentDescription = "Document",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Download.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Download.kt
new file mode 100644
index 0000000000..3dcaa26ccd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Download.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Download: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Download",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1764.098 1355.412 1920 1511.314l-363.073 363.073H363.073L0 1511.314l155.902-155.902 298.463 298.463h1011.27l298.463-298.463ZM1070.333 0v949.967l250.502-250.612 155.902 155.902-518.975 518.975-518.976-518.975 155.902-155.902 255.023 255.022V0h220.622Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DownloadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Download,
+ contentDescription = "Download",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DragHandle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DragHandle.kt
new file mode 100644
index 0000000000..b76cb9c425
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DragHandle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DragHandle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DragHandle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M600 1440c132.36 0 240 107.64 240 240s-107.64 240-240 240-240-107.64-240-240 107.64-240 240-240Zm720 0c132.36 0 240 107.64 240 240s-107.64 240-240 240-240-107.64-240-240 107.64-240 240-240ZM600 720c132.36 0 240 107.64 240 240s-107.64 240-240 240-240-107.64-240-240 107.64-240 240-240Zm720 0c132.36 0 240 107.64 240 240s-107.64 240-240 240-240-107.64-240-240 107.64-240 240-240ZM600 0c132.36 0 240 107.64 240 240S732.36 480 600 480 360 372.36 360 240 467.64 0 600 0Zm720 0c132.36 0 240 107.64 240 240s-107.64 240-240 240-240-107.64-240-240S1187.64 0 1320 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DragHandlePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DragHandle,
+ contentDescription = "DragHandle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DropDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DropDown.kt
new file mode 100644
index 0000000000..fbae1db543
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/DropDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.DropDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.DropDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1491.614 524.725 1056.34l79.962-79.85 298.842 298.956v-823.68h112.942v823.68l298.842-298.956 79.962 79.85L960 1491.614ZM960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DropDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.DropDown,
+ contentDescription = "DropDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Duplicate.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Duplicate.kt
new file mode 100644
index 0000000000..c0edf91872
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Duplicate.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Duplicate: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Duplicate",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.183 451.76v1468.184H0V451.76h1468.183ZM777.203 800h-112l-.001 318.041H333v112h332.202V1580h112v-349.959H1113v-112H777.202V800ZM1920 0v1468.296h-338.812V338.812H451.704V0H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun DuplicatePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Duplicate,
+ contentDescription = "Duplicate",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Edit.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Edit.kt
new file mode 100644
index 0000000000..44cb6a9a79
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Edit.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Edit: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Edit",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1392.7 1700.332-44.782-44.781 307.872-307.872 44.781 44.782 77.248 385.12-385.12-77.249Zm-104.117-332.501L596.711 675.959l79.487-79.487 691.872 691.872-79.487 79.487ZM282.123 589.755 128.745 436.38c-10.075-10.076-16.793-24.63-16.793-39.184 0-15.673 6.718-29.108 16.793-40.303L357.13 128.508c11.196-10.076 24.63-16.793 40.303-16.793 14.554 0 29.108 6.717 39.184 16.793l153.376 153.376-307.872 307.872Zm1521.446 747.848L747.849 281.883 516.104 49.02c-63.813-62.693-174.647-62.693-237.341 0L49.259 278.525C17.913 309.872 0 352.414 0 397.195c0 44.782 17.913 87.324 49.26 118.67L282.121 747.61l1055.72 1055.72L1920 1919.761l-116.431-582.158Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EditPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Edit,
+ contentDescription = "Edit",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Educators.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Educators.kt
new file mode 100644
index 0000000000..e36b069157
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Educators.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Educators: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Educators",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M640.376 734.118c121.977 0 121.977 112.94 245.083 112.94 58.937 0 89.362-26.5 118.905-53.795l2.013-1.862c3.354-3.104 6.705-6.211 10.094-9.283v64.94c0 155.747-126.607 282.354-282.353 282.354s-282.353-126.607-282.353-282.353v-11.294c25.49-10.364 44.24-26.974 62.816-43.79l3.012-2.727c30.625-27.73 61.743-55.13 122.783-55.13ZM1920-.012V1129.4h-338.824v-112.94h225.883V112.93H112.94v903.53h112.941v112.94H0V-.01h1920ZM1471.85 714.24l-356.33 948.932c-174.268 10.39-448.941 17.957-631.002-48.113l38.4-106.165c130.334 47.435 337.807 53.873 529.807 41.675l132.593-354.635-60.424-15.812c-46.758-12.197-93.854-21.346-141.176-29.138 88.207-72.509 145.694-181.045 145.694-303.925V734.118c0-217.977-177.318-395.294-395.294-395.294-217.977 0-395.294 177.317-395.294 395.294v112.94c0 122.655 57.374 231.078 145.242 303.587-56.019 9.374-111.473 20.894-166.024 36.48-120.734 34.334-205.1 146.371-205.1 272.075v329.11l34.898 14.457C332.273 1879.454 535.115 1920 734.118 1920c180.254 0 348.65-15.925 474.127-44.725 50.371-11.407 90.917-46.983 108.65-95.096l31.849-87.304c14.343-39.19 7.567-81.995-18.41-114.522-12.988-16.49-29.816-28.913-48.565-36.48l295.793-787.878-105.713-39.755Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EducatorsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Educators,
+ contentDescription = "Educators",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ElevateLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ElevateLogo.kt
new file mode 100644
index 0000000000..a080dd0c45
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ElevateLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ElevateLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ElevateLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1070.45 53.9152C1104.97 88.4365 1124.36 135.258 1124.36 184.078L1123.51 1188.09C1123.74 1229.1 1110.25 1269.01 1085.18 1301.47 1060.11 1333.93 1024.9 1357.08 985.16 1367.22 945.419 1377.35 903.428 1373.91 865.87 1357.43 828.312 1340.95 797.346 1312.38 777.899 1276.28 763.314 1249.19 755.85 1218.85 756.21 1188.09V184.078C756.21 135.258 775.603 88.4365 810.124 53.9152 844.646 19.3939 891.467 0 940.288 0 989.108 0 1035.93 19.3939 1070.45 53.9152ZM161.091 1320.33C194.624 1353.7 240.009 1372.44 287.319 1372.44 310.767 1372.44 333.985 1367.81 355.644 1358.83 377.304 1349.85 396.98 1336.69 413.547 1320.1 430.113 1303.5 443.246 1283.8 452.193 1262.13 461.141 1240.45 465.726 1217.23 465.689 1193.78L463.406 359.01 106.666 741.15 108.378 1194.35C108.605 1241.67 127.558 1286.96 161.091 1320.33ZM1592.41 1372.44C1639.74 1372.51 1685.17 1353.81 1718.72 1320.42 1752.27 1287.02 1771.2 1241.69 1771.35 1194.35L1773.06 741.15 1416.33 359.01 1414.32 1193.78C1414.29 1217.21 1418.87 1240.41 1427.79 1262.06 1436.72 1283.71 1449.83 1303.41 1466.37 1319.99 1482.9 1336.58 1502.55 1349.75 1524.17 1358.75 1545.8 1367.75 1568.99 1372.4 1592.41 1372.44ZM1123.46 1752.39C1126.77 1716.09 1119.25 1679.61 1101.83 1647.56 1090.29 1626.27 1074.66 1607.47 1055.85 1592.22 1037.03 1576.97 1015.39 1565.59 992.163 1558.73 968.939 1551.86 944.588 1549.64 920.506 1552.2 896.423 1554.76 873.083 1562.05 851.822 1573.65 819.782 1591.06 793.627 1617.59 776.661 1649.87 759.697 1682.14 752.685 1718.73 756.513 1754.99 760.341 1791.25 774.837 1825.57 798.168 1853.59 821.499 1881.62 852.616 1902.09 887.585 1912.44 922.554 1922.77 959.804 1922.51 994.623 1911.68 1029.44 1900.84 1060.27 1879.94 1083.2 1851.58 1106.13 1823.23 1120.14 1788.71 1123.46 1752.39Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ElevateLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ElevateLogo,
+ contentDescription = "ElevateLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Email.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Email.kt
new file mode 100644
index 0000000000..e54686baf6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Email.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Email: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Email",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 428.266v1189.54l-464.16-580.146-88.203 70.585 468.679 585.904H83.684l468.679-585.904-88.202-70.585L0 1617.805V428.265l959.944 832.441L1920 428.266ZM1919.932 226v52.627l-959.943 832.44L.045 278.628V226h1919.887Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EmailPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Email,
+ contentDescription = "Email",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Empty.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Empty.kt
new file mode 100644
index 0000000000..988662233b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Empty.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Empty: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Empty",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EmptyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Empty,
+ contentDescription = "Empty",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/End.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/End.kt
new file mode 100644
index 0000000000..fcd1d3d2d9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/End.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.End: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.End",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M797.32 985.882 344.772 1438.43l188.561 188.562 452.549-452.549 452.548 452.549 188.562-188.562-452.549-452.548 452.549-452.549-188.562-188.561L985.882 797.32 533.333 344.772 344.772 533.333z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.End,
+ contentDescription = "End",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Eportfolio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Eportfolio.kt
new file mode 100644
index 0000000000..726b9fb1bd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Eportfolio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Eportfolio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Eportfolio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M640 960.333v213.334h640V960.333h640V1547c0 146.987-119.68 266.667-266.667 266.667H266.667C119.68 1813.667 0 1693.987 0 1547V960.333h640ZM1120 107c88.213 0 160 71.787 160 160v160h373.333C1800.32 427 1920 546.68 1920 693.667v160h-640V747H640v106.667H0v-160C0 546.68 119.68 427 266.667 427H640V267c0-88.213 71.787-160 160-160Zm0 106.667H800c-29.44 0-53.333 23.893-53.333 53.333v160h426.666V267c0-29.44-23.893-53.333-53.333-53.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EportfolioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Eportfolio,
+ contentDescription = "Eportfolio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Equation.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Equation.kt
new file mode 100644
index 0000000000..2eb38c4ee2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Equation.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Equation: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Equation",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1919.989 168.955V394.95h-832.716l-476.16 1251.388-212.78-4.743-194.373-588.537H-.01V827.176h285.515l107.294 77.59L513.08 1268.89 903.857 241.802l105.6-72.847h910.532ZM1265.72 788.99l240.177 240.176 240.162-240.12 159.7 159.586-240.2 240.197 240.2 240.198-159.7 159.586-240.163-240.12-240.176 240.177-159.698-159.7 240.183-240.141-240.183-240.14 159.698-159.7Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EquationPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Equation,
+ contentDescription = "Equation",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Equella.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Equella.kt
new file mode 100644
index 0000000000..aca515155f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Equella.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Equella: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Equella",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M878.722 1814.601c1.569-8.451 10.381-15.333 19.676-15.333h74.482c9.174 0 15.21 6.882 13.52 15.333l-14.486 70.507c-1.69 8.452-10.502 15.454-19.797 15.454h-74.602c-9.054 0-15.09-7.002-13.28-15.454l14.487-70.507ZM159.62 1834.16c1.69-8.452 10.503-15.454 19.677-15.454h74.602c9.174 0 15.21 7.002 13.279 15.454l-14.245 70.507c-1.81 8.451-10.623 15.333-19.797 15.333h-74.481c-9.175 0-15.21-6.882-13.52-15.333l14.485-70.507ZM131.01 591.828c1.69-8.451 10.503-15.454 19.677-15.454h74.482c9.174 0 15.21 7.003 13.279 15.454l-14.245 70.507c-1.931 8.452-10.864 15.333-19.918 15.333h-74.481c-9.175 0-15.21-6.881-13.52-15.333l14.485-70.507h.242ZM630.049 15.333C631.858 6.882 640.671 0 649.845 0h74.482c9.295 0 15.33 7.002 13.64 15.333l-14.485 70.628c-1.69 8.451-10.623 15.454-19.798 15.454h-74.602c-9.174 0-15.21-7.244-13.278-15.454l14.244-70.628Zm784.167 0C1415.905 6.882 1424.717 0 1433.892 0h74.481c9.174 0 15.21 7.002 13.279 15.333l-14.245 70.628c-1.81 8.451-10.623 15.333-19.918 15.333h-74.481c-9.174 0-15.21-7.244-13.52-15.454l14.486-70.628.241.121ZM930.63 397.208c1.932-8.693 10.865-15.695 19.918-15.695h74.482c9.174 0 15.21 7.244 13.52 15.695l-14.486 70.387c-1.69 8.451-10.502 15.333-19.797 15.333h-74.482c-9.174 0-15.09-6.882-13.278-15.333l14.244-70.508-.12.121Zm-209.2-140.411c1.811-8.451 10.865-15.212 19.677-15.212h132.546c9.174 0 15.09 7.002 13.278 15.333l-25.108 125.078c-1.811 8.451-10.865 15.212-19.798 15.212H709.237c-9.053 0-15.089-6.882-13.278-15.212l25.35-125.2h.12ZM381.375 1479.57c1.811-8.451 10.865-15.212 19.677-15.212h132.425c9.295 0 15.21 6.76 13.52 15.091l-25.592 125.2c-1.69 8.45-10.623 15.211-19.556 15.211H369.062c-8.933 0-14.97-6.881-13.28-15.212l25.592-125.199v.12Zm535.615 128.58c1.81-8.452 10.864-15.334 19.676-15.334h132.546c9.174 0 15.089 6.882 13.278 15.213l-25.35 125.199c-1.81 8.45-10.864 15.091-19.797 15.091H904.796c-9.053 0-15.09-6.882-13.278-15.091l25.35-125.32.12.241Zm348.988-97.793c5.19-25.354 31.627-45.879 58.909-45.879h207.268c27.402 0 45.389 20.525 40.198 45.879l-40.077 196.068c-5.191 25.354-31.748 45.878-59.15 45.878h-206.907c-27.402 0-45.389-20.283-40.077-45.878l40.077-196.068h-.241Zm-964.275-467.233c5.191-25.354 31.628-46.12 58.91-46.12H567.88c27.402 0 45.389 20.525 40.198 45.878L568 1239.192c-5.19 25.354-31.748 45.879-59.15 45.879H301.702c-27.281 0-45.389-20.525-40.077-45.878l40.077-196.07Zm66.394-405.176c5.07-25.354 31.386-45.879 58.909-45.879h207.147c27.403 0 45.39 20.525 40.199 45.879l-40.078 196.31c-5.19 25.353-31.748 45.878-59.15 45.878H368.096c-27.403 0-45.51-20.525-40.198-45.878l40.077-196.31h.12ZM1494.61 240.86c5.191-25.353 31.749-45.878 59.151-45.878h207.148c27.402 0 45.389 20.525 40.198 45.878l-39.957 196.19c-5.19 25.353-31.627 45.878-58.91 45.878h-207.267c-27.403 0-45.39-20.525-40.199-45.878l40.078-196.19h-.242ZM853.613 699.038c12.071-59.159 73.878-107.09 137.857-107.09h629.651c63.98 0 106.23 47.931 94.158 107.21l-121.922 595.813c-12.072 59.158-73.878 107.21-137.857 107.21H825.848c-63.979 0-106.23-47.93-94.158-107.21l121.923-595.692v-.241Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EquellaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Equella,
+ contentDescription = "Equella",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Essay.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Essay.kt
new file mode 100644
index 0000000000..34b95e7c95
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Essay.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Essay: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Essay",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1400.414 1433.303c-23.153 0-47.661-2.711-72.282-6.1l-15.247-2.032-71.605 145.468c-5.082 10.165-12.762 18.748-22.475 24.847l-180.254 113.845c-39.643 25.073-91.709-1.581-94.532-48.339l-12.875-210.748c-.678-10.617 1.468-21.346 6.211-30.946l47.323-96.226c11.971-24.17 5.534-52.292-13.44-71.379-48.79-49.016-85.27-105.713-109.102-169.75-41.9-116.443-43.369-254.683 9.713-378.127 24.622-69.46 84.593-158.909 84.593-158.909 64.603-101.308 149.534-202.955 245.422-293.647l-.113-.564c1.016-1.13 13.44-12.311 32.753-30.495H-.056V1914.32H1694.06v-575.661c-19.2 13.214-38.965 26.315-60.197 37.496-72.848 37.949-151.229 57.149-233.45 57.149M1828.461.023l19.2 51.953c28.01 73.524 46.419 153.26 57.261 234.691l-121.411 74.767 131.576 43.822c5.534 118.136-4.743 236.16-25.299 344.696l-139.256 33.882 110.57 90.24c-19.088 67.652-41.224 130.334-67.653 183.078-21.458 42.918-54.211 92.612-99.388 136.659-31.623 31.623-70.023 59.859-112.941 82.447-51.953 27.106-111.812 44.047-180.706 44.047-18.296 0-37.61-2.259-56.922-4.97l133.27-423.755c18.636-59.52 10.956-62.682-17.28-7.002l-208.037 409.75-105.149 213.46-94.757 59.858-6.89-110.682 103.906-211.2c-87.98-50.824-148.97-118.588-180.706-203.294-42.804-119.153-14.23-233.563 10.052-299.86h151.454l-77.703-136.884c56.81-89.11 134.626-184.207 228.028-272.527 0 0 72.17-70.023 131.012-112.941 111.699-85.835 237.063-158.118 365.816-202.165l51.953-18.07ZM617.167 1356.954c27.445 68.782 55.115 94.42 71.718 95.549 29.703 2.597 84.819-59.069 108.875-102.1 15.134-27.331 49.468-37.044 76.8-21.797 27.219 15.134 37.045 49.581 21.798 76.8-9.374 16.715-92.5 160.038-206.118 160.038-2.824 0-5.647-.113-8.584-.226-70.023-4.518-127.058-60.537-169.411-166.362-46.984-117.46-77.478-127.398-77.817-127.511-25.186 9.261-73.637 121.638-96.79 231.078-6.438 30.494-36.48 50.258-66.974 43.708-30.495-6.55-49.92-36.48-43.596-66.974 19.54-92.725 78.156-309.685 199.454-320.189 96.113-8.357 154.956 108.989 190.645 197.986Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EssayPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Essay,
+ contentDescription = "Essay",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExitFullScreen.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExitFullScreen.kt
new file mode 100644
index 0000000000..f821b34006
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExitFullScreen.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ExitFullScreen: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ExitFullScreen",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M884.311 1035.689v696.318H675.186v-339.162L147.926 1920 0 1772.074l527.26-527.155H187.889v-209.23H884.31ZM1772.116 0l147.926 147.926-527.155 527.155h339.162v209.335h-696.423V187.889h209.335v339.266L1772.116 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExitFullScreenPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ExitFullScreen,
+ contentDescription = "ExitFullScreen",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Expand.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Expand.kt
new file mode 100644
index 0000000000..bb5b631532
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Expand.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Expand: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Expand",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1694.176v112.942H0v-112.942h1920ZM960.056 371.918l378.692 378.804-79.85 79.85-242.37-242.372v654.155H903.585V588.2L661.1 830.572l-79.85-79.85 378.805-378.804Zm790.589-258.974H169.468C75.953 112.944.056 188.953.056 282.355v1185.883h1920V282.355c0-93.402-76.009-169.411-169.411-169.411Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Expand,
+ contentDescription = "Expand",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandItems.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandItems.kt
new file mode 100644
index 0000000000..e5916c7cdf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandItems.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ExpandItems: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ExpandItems",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M959.921.01 453 506.933l152.28 152.28 246.946-246.944v1095.475L605.28 1260.798 453 1413.078 959.921 1920l506.921-506.921-152.28-152.281-246.946 246.945V412.268l246.945 246.945 152.281-152.281z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandItemsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ExpandItems,
+ contentDescription = "ExpandItems",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandLeft.kt
new file mode 100644
index 0000000000..a578bcd2f8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ExpandLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ExpandLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1807.124.056V1920h-112.938V.056h112.938ZM1468.254 0v1919.944H282.407c-93.4 0-169.407-75.895-169.407-169.407V169.407C113 76.007 189.007 0 282.407 0h1185.847ZM830.607 661.138 588.242 903.503h654.137v112.938H588.242l242.365 242.477-79.847 79.847-378.793-378.793 378.793-378.68 79.847 79.846Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ExpandLeft,
+ contentDescription = "ExpandLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandStart.kt
new file mode 100644
index 0000000000..8bd86a5919
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExpandStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ExpandStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ExpandStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1637.718 0c93.4 0 169.406 76.007 169.406 169.407v1581.13c0 93.512-76.007 169.407-169.406 169.407H451.87V0h1185.848zM1158.7 581l-79.861 79.861 242.422 242.423H667v112.94h654.262l-242.422 242.423 79.861 79.862 378.755-378.755L1158.7 581zM225.938 1920h112.938V.056H225.938z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExpandStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ExpandStart,
+ contentDescription = "ExpandStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Export.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Export.kt
new file mode 100644
index 0000000000..f1cc146eb8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Export.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Export: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Export",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1352.685 168.955V733.66h564.706v1016.47H675.038v-677.647h-458.88l272.979 272.98-79.962 79.848L-.011 1016.127l409.186-409.3 79.962 79.85-272.979 272.866h458.88V168.955h677.647Zm0 790.588H787.98v112.941h564.706v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1465.649 620.776h434.823L1465.65 185.84z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Export,
+ contentDescription = "Export",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExportContent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExportContent.kt
new file mode 100644
index 0000000000..852f706f6e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExportContent.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ExportContent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ExportContent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1352.685 168.955V733.66h564.706v1016.47H675.038v-677.647h-458.88l272.979 272.98-79.962 79.848L-.011 1016.127l409.186-409.3 79.962 79.85-272.979 272.866h458.88V168.955h677.647Zm0 790.588H787.98v112.941h564.706v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1465.649 620.776h434.823L1465.65 185.84z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExportContentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ExportContent,
+ contentDescription = "ExportContent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExternalLink.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExternalLink.kt
new file mode 100644
index 0000000000..9eefc30f48
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ExternalLink.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ExternalLink: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ExternalLink",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1386.667 426.003c0-88.213-71.787-160-160-160H160c-88.213 0-160 71.787-160 160v160h1386.667v-160zm517.706 602.293-320-320-75.413 75.414 228.907 229.013h-351.254v106.613h-533.28V1012.67h533.334v-320H0v800c0 88.533 71.467 160 160 160h1066.667c88.533 0 160-71.467 160-160v-373.28h351.2l-228.907 228.906 75.413 75.414 320-320c20.8-20.8 20.8-54.613 0-75.414"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ExternalLinkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ExternalLink,
+ contentDescription = "ExternalLink",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Eye.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Eye.kt
new file mode 100644
index 0000000000..765af3db26
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Eye.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Eye: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Eye",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1277.853c-175.297 0-317.951-142.654-317.951-317.951 0-175.297 142.654-317.951 317.951-317.951 175.297 0 317.951 142.654 317.951 317.951 0 175.297-142.654 317.95-317.951 317.95Zm948.342-341.585C1720.645 558.648 1357.332 324 960 324c-397.333 0-760.645 234.648-948.342 612.268L0 959.902l11.658 23.634c187.697 377.62 551.01 612.268 948.342 612.268 397.333 0 760.645-234.648 948.342-612.268L1920 959.902l-11.658-23.634Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun EyePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Eye,
+ contentDescription = "Eye",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Facebook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Facebook.kt
new file mode 100644
index 0000000000..ce2c0d0afb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Facebook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Facebook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Facebook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1168.737 487.897c44.672-41.401 113.824-36.889 118.9-36.663l289.354-.113 6.317-417.504L1539.65 22.9C1511.675 16.02 1426.053 0 1237.324 0 901.268 0 675.425 235.206 675.425 585.137v93.97H337v451.234h338.425V1920h451.234v-789.66h356.7l62.045-451.233H1126.66v-69.152c0-54.937 14.214-96.112 42.078-122.058"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FacebookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Facebook,
+ contentDescription = "Facebook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FacebookBoxed.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FacebookBoxed.kt
new file mode 100644
index 0000000000..7c7c10c9ac
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FacebookBoxed.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FacebookBoxed: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FacebookBoxed",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1168.737 487.897c44.672-41.401 113.824-36.889 118.9-36.663l289.354-.113 6.317-417.504L1539.65 22.9C1511.675 16.02 1426.053 0 1237.324 0 901.268 0 675.425 235.206 675.425 585.137v93.97H337v451.234h338.425V1920h451.234v-789.66h356.7l62.045-451.233H1126.66v-69.152c0-54.937 14.214-96.112 42.078-122.058"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FacebookBoxedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FacebookBoxed,
+ contentDescription = "FacebookBoxed",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FastForward.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FastForward.kt
new file mode 100644
index 0000000000..34d0510481
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FastForward.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FastForward: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FastForward",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M855.281 308.99v522.256L0 309.524v1300.242l855.281-521.83V1610.3l1064.612-650.655z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FastForwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FastForward,
+ contentDescription = "FastForward",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Feedback.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Feedback.kt
new file mode 100644
index 0000000000..744ce2d92e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Feedback.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Feedback: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Feedback",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M84 0v1423.143h437.875V1920l621.235-496.857h692.39V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FeedbackPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Feedback,
+ contentDescription = "Feedback",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FileLocked.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FileLocked.kt
new file mode 100644
index 0000000000..b813cc9067
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FileLocked.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FileLocked: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FileLocked",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m764.612 56 225.882 338.824H225.882v112.94H1920v504.057c0 23.83-30.833 30.72-42.353 9.939-58.052-104.245-169.299-175.172-296.47-175.172-186.353 0-338.824 152.47-338.824 338.824h-67.765c-24.96 0-45.176 20.216-45.176 45.176v463.06c0 19.2 2.259 38.4 5.647 56.47H169.412C75.896 1750.118 0 1674.334 0 1580.706V56h764.612Zm816.564 1016.47c62.231 0 112.942 50.711 112.942 112.942v112.94h-225.883v-112.94c0-62.23 50.71-112.941 112.941-112.941Zm225.883 112.942c0-124.574-101.195-225.883-225.883-225.883-124.687 0-225.882 101.309-225.882 225.883v112.94h-112.941v395.295c0 93.402 76.01 169.412 169.412 169.412h338.823c93.403 0 169.412-76.01 169.412-169.412v-395.294h-112.941v-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FileLockedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FileLocked,
+ contentDescription = "FileLocked",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesCopyright.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesCopyright.kt
new file mode 100644
index 0000000000..afa45474d3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesCopyright.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FilesCopyright: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FilesCopyright",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm9.118 620.06c90.587-.06 155.402 35.788 194.567 106.071h.06l-97.941 51.144c-10.523-21.784-23.319-37.07-38.507-45.807-15.307-8.738-29.418-13.106-42.453-13.106-65.294 0-98 43.209-98 129.686 0 39.32 8.31 70.738 24.814 94.317 16.503 23.64 40.898 35.429 73.186 35.429 42.573 0 72.648-20.946 90.048-62.898l90.108 45.842c-19.133 35.847-45.681 64.034-79.644 84.5-33.962 20.588-71.392 30.821-112.351 30.821-65.293 0-117.911-20.11-157.972-60.327C775.03 1088.576 755 1032.676 755 961.04c0-69.9 20.21-125.386 60.75-166.38C856.17 753.544 907.353 733 969.118 733Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesCopyrightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FilesCopyright,
+ contentDescription = "FilesCopyright",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesCreativeCommons.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesCreativeCommons.kt
new file mode 100644
index 0000000000..3fffa80da1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesCreativeCommons.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FilesCreativeCommons: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FilesCreativeCommons",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059ZM760.808 727c92.101-.046 158.033 35.78 197.89 107.502l-.046.023-99.63 51.81c-10.645-22.117-23.706-37.638-39.16-46.466-15.502-8.83-29.888-13.29-43.181-13.29-66.374 0-99.608 43.796-99.608 131.432 0 39.823 8.436 71.653 25.24 95.56 16.825 23.931 41.6 35.873 74.368 35.873 43.412 0 73.95-21.282 91.683-63.753L960 1072.158c-19.475 36.314-46.48 64.822-81.015 85.64-34.49 20.817-72.58 31.202-114.203 31.202-66.397 0-119.99-20.33-160.707-61.104C563.36 1087.236 543 1030.547 543 958.01c0-70.815 20.59-126.994 61.75-168.606C645.885 747.817 697.943 727 760.808 727Zm430.024 0c92.088-.046 157.656 35.781 196.588 107.507l-98.317 51.812c-10.599-22.119-23.708-37.64-39.165-46.468-15.573-8.83-30.401-13.29-44.51-13.29-66.404 0-99.641 43.796-99.641 131.436 0 39.825 8.436 71.656 25.241 95.564 16.805 23.932 41.605 35.874 74.377 35.874 43.372 0 73.912-21.283 91.623-63.755l92.972 46.468c-20.338 36.316-47.81 64.825-82.28 85.643a214.414 214.414 0 0 1-112.913 31.204c-67.312 0-121.095-20.33-161.306-61.107-40.372-40.66-60.501-97.352-60.501-169.89 0-70.82 20.57-127 61.78-168.613 41.163-41.567 93.157-62.385 156.052-62.385Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesCreativeCommonsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FilesCreativeCommons,
+ contentDescription = "FilesCreativeCommons",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesFairUse.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesFairUse.kt
new file mode 100644
index 0000000000..db4cddd724
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesFairUse.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FilesFairUse: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FilesFairUse",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059ZM1113 721v84.047H893.112v105.506h190.39v77.788h-190.39V1177H793V721h320Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesFairUsePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FilesFairUse,
+ contentDescription = "FilesFairUse",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesObtainedPermission.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesObtainedPermission.kt
new file mode 100644
index 0000000000..e3a8bf3f81
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesObtainedPermission.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FilesObtainedPermission: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FilesObtainedPermission",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059Zm-167.463 643.25c8.007-8.051 19.014-12.934 30.371-12.099h273.303c11.09 0 21.017 3.892 29.734 12.1 8.65 8.207 13.055 17.932 13.055 29.623v268.056h-75.974V1372H855.974v-318.129H780V785.815c0-11.712 4.242-21.438 12.537-29.624ZM960.023 525c62.023 0 92.977 30.837 92.977 92.556 0 60.962-31 91.444-92.978 91.444C898.044 709 867 678.518 867 617.577v-.044C867 555.881 898 525 960.023 525Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesObtainedPermissionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FilesObtainedPermission,
+ contentDescription = "FilesObtainedPermission",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesPublicDomain.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesPublicDomain.kt
new file mode 100644
index 0000000000..cdffd96312
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FilesPublicDomain.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FilesPublicDomain: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FilesPublicDomain",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.355 0 960 430.645 960 960s-430.645 960-960 960S0 1489.355 0 960 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.125 379.934 847.059 847.059 847.059 467.125 0 847.059-379.934 847.059-847.059 0-467.125-379.934-847.059-847.059-847.059ZM800.157 711C913.347 711 970 762.572 970 865.418c0 17.658-2.726 34.752-8.177 50.905-5.45 16.153-14.907 32.355-28.312 48.563-13.405 16.152-33.513 29.48-60.35 39.756-26.782 10.22-58.57 15.6-95.31 15.6H687.2V1167H571V711ZM686 797v138h99.1c23.94 0 41.9-6.51 53.911-19.733C851.021 902.043 857 885.923 857 866.283c0-46.114-24.944-68.845-74.86-68.845h-95.753L686 797Zm496.205-86c73.564 0 131.301 18.77 173.154 55.976C1397.101 804.182 1418 861.64 1418 938.978c0 77.421-20.899 134.908-62.64 172.059-41.854 37.206-99.563 55.963-173.155 55.963h-179.171l-.034-.279V711ZM1118 806l.185.027V1072h66.635c40.731 0 70.258-12.192 88.635-36.362 18.35-24.115 27.545-56.367 27.545-96.706 0-40.34-9.155-72.619-27.505-96.762-18.35-24.057-48.338-36.087-90.043-36.087L1118 806Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilesPublicDomainPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FilesPublicDomain,
+ contentDescription = "FilesPublicDomain",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Filmstrip.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Filmstrip.kt
new file mode 100644
index 0000000000..3fe1834cd3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Filmstrip.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Filmstrip: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Filmstrip",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 1374.31V545.935l690.346 414.187-690.346 414.186ZM1879.04 321.615c-600.107-143.467-1238.4-143.467-1838.08 0L0 331.429v1257.494l40.96 9.813c300.053 71.68 609.28 108.053 919.04 108.053 309.867 0 619.2-36.373 919.04-108.053l40.96-9.813V331.429l-40.96-9.813Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilmstripPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Filmstrip,
+ contentDescription = "Filmstrip",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Filter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Filter.kt
new file mode 100644
index 0000000000..7666304e03
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Filter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Filter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Filter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1672.853 0 1171.84 640H748.053L426.56 213.333h637.227L1241.173 0H0l746.667 991.147V1600l426.56 320V991.147L1920 0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FilterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Filter,
+ contentDescription = "Filter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Flag.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Flag.kt
new file mode 100644
index 0000000000..485519fabd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Flag.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Flag: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Flag",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M168.941-.011v1920H56v-1920h112.941Zm112.941 68.453c308.669-81.656 496.15 26.429 677.196 133.045 203.407 119.944 413.59 244.066 833.844 139.03 20.217-4.969 41.676 1.469 55.793 17.168 13.892 15.699 18.07 37.835 10.843 57.487-203.407 542.343-504.17 552.734-794.993 562.786-223.285 7.906-454.25 15.811-686.344 247.906l-96.339 96.338Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FlagPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Flag,
+ contentDescription = "Flag",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Folder.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Folder.kt
new file mode 100644
index 0000000000..6ceabab33f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Folder.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Folder: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Folder",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M225.882 564.765V451.824h764.386L764.386 113H0v1524.706c0 93.402 76.01 169.412 169.412 169.412h1581.176c93.403 0 169.412-76.01 169.412-169.412V564.765H225.882Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FolderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Folder,
+ contentDescription = "Folder",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FolderLocked.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FolderLocked.kt
new file mode 100644
index 0000000000..9848314e24
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FolderLocked.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FolderLocked: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FolderLocked",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m764.612 56 225.882 338.824H225.882v112.94H1920v504.057c0 23.83-30.833 30.72-42.353 9.939-58.052-104.245-169.299-175.172-296.47-175.172-186.353 0-338.824 152.47-338.824 338.824h-67.765c-24.96 0-45.176 20.216-45.176 45.176v463.06c0 19.2 2.259 38.4 5.647 56.47H169.412C75.896 1750.118 0 1674.334 0 1580.706V56h764.612Zm816.564 1016.47c62.231 0 112.942 50.711 112.942 112.942v112.94h-225.883v-112.94c0-62.23 50.71-112.941 112.941-112.941Zm225.883 112.942c0-124.574-101.195-225.883-225.883-225.883-124.687 0-225.882 101.309-225.882 225.883v112.94h-112.941v395.295c0 93.402 76.01 169.412 169.412 169.412h338.823c93.403 0 169.412-76.01 169.412-169.412v-395.294h-112.941v-112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FolderLockedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FolderLocked,
+ contentDescription = "FolderLocked",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Forward.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Forward.kt
new file mode 100644
index 0000000000..8b8ea45e5f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Forward.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Forward: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Forward",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1270.776 60-169.68 169.68 340.44 340.44h-403.92C465.456 570.12-.024 1035.6-.024 1607.76v162.36h240v-162.36c0-439.8 357.96-797.64 797.64-797.64h414.48l-351 351.12 169.68 169.68 635.4-635.52-635.4-635.4Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ForwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Forward,
+ contentDescription = "Forward",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FullScreen.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FullScreen.kt
new file mode 100644
index 0000000000..e7a06fae83
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/FullScreen.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.FullScreen: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.FullScreen",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1146.616-.012V232.38h376.821L232.391 1523.309v-376.705H0V1920h773.629v-232.39H396.69L1687.737 396.68V773.5h232.275V-.011z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun FullScreenPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.FullScreen,
+ contentDescription = "FullScreen",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Github.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Github.kt
new file mode 100644
index 0000000000..34142746ad
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Github.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Github: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Github",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1821.63 637.76c0-130.027-43.627-236.373-116.054-319.68 11.627-30.187 50.347-151.36-11.2-315.307 0 0-94.72-32-310.4 122.134-90.133-26.454-186.773-39.68-282.773-40.107-96 .427-192.64 13.653-282.667 40.107C602.749-29.227 507.923 2.773 507.923 2.773c-61.547 163.947-22.72 285.12-11.094 315.307-72.32 83.307-116.266 189.653-116.266 319.68 0 456.533 263.68 558.72 514.453 588.8 0 0-180.267 111.68-180.267 299.413-64.32 30.507-336.533 123.947-437.333-58.133 0 0-59.627-114.347-173.013-122.773 0 0-110.294-1.494-7.787 72.426 0 0 74.027 36.694 125.44 174.294 0 0 57.173 289.92 489.067 159.68 4.373 2.24 1.6 140.266 1.6 168.533h777.173s1.28-277.013 1.28-365.12c0-216.64-144.64-292.48-185.28-329.28 251.627-29.44 515.733-130.133 515.733-587.84"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GithubPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Github,
+ contentDescription = "Github",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GiveAward.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GiveAward.kt
new file mode 100644
index 0000000000..7c69e66c9d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GiveAward.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.GiveAward: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.GiveAward",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1360.53 0 1516.13 374.104 1920 406.482 1612.29 670.07 1706.3 1064.18 1360.53 852.987 1014.75 1064.18 1108.76 670.07 801.052 406.482 1204.93 374.104 1360.53 0ZM0 912.705H373.333C442.789 922.705 426.667 996.583 426.667 936.038V1786.17C426.667 1815.63 402.789 1839.51 373.333 1839.51H0V882.705Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 915.2H373.333C402.789 915.2 426.667 939.078 426.667 968.533V1012.91C454.891 1010.14 492.767 1010.71 543.323 1018.13C656.109 1034.68 706.358 1066.35 756.859 1098.17C780.491 1113.07 804.179 1128 834.356 1141.43C887.648 1165.14 1035.02 1193.38 1153.65 1213.54C1242.33 1228.6 1302.82 1312.35 1287.92 1400.37L1636.86 1218C1731.61 1168.48 1848.56 1205.15 1898.09 1299.9C1947.61 1394.65 1910.94 1511.61 1816.19 1561.13L1280.07 1841.33C1272.55 1845.26 1262.25 1850.82 1250.87 1856.96C1225.48 1870.66 1194.76 1887.23 1177.81 1894.96C1175.36 1896.08 1172.8 1897.37 1170.05 1898.75C1145.3 1911.17 1104.97 1931.4 984.215 1910.55L512.935 1791.11C477.124 1784.82 448.895 1778.62 426.667 1772.38V1818.67C426.667 1848.12 402.789 1872 373.333 1872H0V915.2ZM426.667 1659.63L572.651 1692.52L885.284 1771.76L1049.07 1801.95C1061.94 1805.22 1067.91 1804.99 1080.74 1804.51L1086.13 1804.31C1102.91 1803.75 1115.81 1795.93 1115.81 1795.93L1494.73 1603.45L1639.77 1528.96L1765.13 1463.44C1805.93 1442.12 1821.71 1391.76 1800.39 1350.96C1779.07 1310.16 1728.71 1294.38 1687.91 1315.7C1687.91 1315.7 1502.45 1412.67 1475.71 1426.61L1470.58 1429.3C1433.72 1448.73 1295.48 1521.59 1184.82 1530.22C1079.51 1538.43 828.201 1470.25 780.054 1456.83C778.82 1456.53 777.601 1456.19 776.399 1455.81L772.003 1454.57L772.074 1454.26C750.827 1445.63 735.844 1424.79 735.844 1400.45C735.844 1368.4 761.829 1342.41 793.882 1342.41C795.013 1342.41 796.136 1342.45 797.25 1342.51L797.518 1341.32L1100.97 1418.23L1120.72 1422.23C1147.45 1427.65 1173.51 1410.38 1178.92 1383.65C1184.45 1356.36 1165.85 1327.42 1135.19 1322.21C1075.17 1312.02 1006.9 1299.61 946.325 1286.59C901.723 1277 854.428 1265.7 817.427 1252.96L817.498 1252.64L787.7 1241.31C758.312 1228.1 734.4 1214.04 714.185 1201.52C707.317 1197.26 701.319 1193.48 695.8 1190C683.474 1182.23 673.53 1175.96 661.581 1169.27C633.089 1153.32 596.825 1137.39 527.322 1127.2C488.966 1121.57 444.919 1122.03 444.919 1122.03L426.667 1122.79V1659.63ZM106.667 1021.87H288C305.673 1021.87 320 1036.19 320 1053.87V1733.33C320 1751.01 305.673 1765.33 288 1765.33H106.667V1021.87Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GiveAwardPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.GiveAward,
+ contentDescription = "GiveAward",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Gradebook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Gradebook.kt
new file mode 100644
index 0000000000..a3e6469450
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Gradebook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Gradebook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Gradebook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M219.03 0v464.314h-56.515c-31.196 0-56.515 25.299-56.515 56.47 0 31.172 25.319 56.47 56.515 56.47h56.514v338.824h-56.514c-31.196 0-56.515 25.3-56.515 56.471 0 31.172 25.319 56.47 56.515 56.47h56.514v338.824h-56.514c-31.196 0-56.515 25.299-56.515 56.47 0 31.172 25.319 56.471 56.515 56.471h56.514V1920h1582.412V0H219.03Zm960.578 338.824v112.94H671.373v677.648h677.647V734.118h112.94v508.235H558.432v-903.53h621.177Zm207.326 75.817 79.85 79.85-432.452 432.451-224.866-224.979 79.85-79.85 145.016 145.13 352.602-352.602Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GradebookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Gradebook,
+ contentDescription = "Gradebook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GradebookExport.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GradebookExport.kt
new file mode 100644
index 0000000000..37fc5f98b3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GradebookExport.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.GradebookExport: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.GradebookExport",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1352.685 168.955V733.66h564.706v1016.47H675.038v-677.647h-458.88l272.979 272.98-79.962 79.848L-.011 1016.127l409.186-409.3 79.962 79.85-272.979 272.866h458.88V168.955h677.647Zm0 790.588H787.98v112.941h564.706v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1465.649 620.776h434.823L1465.65 185.84z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GradebookExportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.GradebookExport,
+ contentDescription = "GradebookExport",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GradebookImport.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GradebookImport.kt
new file mode 100644
index 0000000000..b8241b54bb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GradebookImport.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.GradebookImport: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.GradebookImport",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1574.513 138.515c-30.381-30.268-66.748-51.84-106.278-65.619v434.936h434.937c-13.78-39.529-35.238-75.896-65.62-106.164l-263.04-263.153Zm-219.219 482.19V56h-903.53v903.53H0v112.94h451.765v790.589H1920V620.706h-564.706ZM887.04 1425.3l-79.85-79.85 272.866-272.978h-515.35V959.529h515.35L807.191 686.664l79.849-79.85L1296.226 1016 887.04 1425.299Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GradebookImportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.GradebookImport,
+ contentDescription = "GradebookImport",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GridView.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GridView.kt
new file mode 100644
index 0000000000..248fc29189
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GridView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.GridView: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.GridView",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 53.3333C0 23.8781 23.8781 0 53.3333 0H853.333C882.788 0 906.667 23.8781 906.667 53.3333V853.333C906.667 882.788 882.788 906.667 853.333 906.667H53.3333C23.8781 906.667 0 882.788 0 853.333V53.3333ZM0 1066.67C0 1037.21 23.8781 1013.33 53.3333 1013.33H853.333C882.788 1013.33 906.667 1037.21 906.667 1066.67V1866.67C906.667 1896.12 882.788 1920 853.333 1920H53.3333C23.8781 1920 0 1896.12 0 1866.67V1066.67ZM1013.33 53.3333C1013.33 23.8781 1037.21 0 1066.67 0H1866.67C1896.12 0 1920 23.8781 1920 53.3333V853.333C1920 882.788 1896.12 906.667 1866.67 906.667H1066.67C1037.21 906.667 1013.33 882.788 1013.33 853.333V53.3333ZM1013.33 1066.67C1013.33 1037.21 1037.21 1013.33 1066.67 1013.33H1866.67C1896.12 1013.33 1920 1037.21 1920 1066.67V1866.67C1920 1896.12 1896.12 1920 1866.67 1920H1066.67C1037.21 1920 1013.33 1896.12 1013.33 1866.67V1066.67Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GridViewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.GridView,
+ contentDescription = "GridView",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Group.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Group.kt
new file mode 100644
index 0000000000..5a0b29a14c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Group.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Group: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Group",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M735.385 336.094c218.24 0 395.977 177.624 395.977 395.976v113.137c0 121.96-56.568 229.78-143.57 302.526 94.13 13.916 187.354 34.959 278.315 64.6 122.414 39.825 204.664 155.676 204.664 288.159v200.364l-26.814 16.63c-148.434 92.32-392.017 202.515-708.572 202.515-174.795 0-439.76-35.186-708.685-202.514L0 1700.856v-189.39c0-140.629 89.264-263.042 221.973-304.79 85.418-26.7 172.533-46.498 260.327-59.509-86.55-72.746-142.891-180.339-142.891-301.96V732.07c0-218.352 177.623-395.976 395.976-395.976ZM1183.405 0c218.24 0 395.976 177.624 395.976 395.977v113.136c0 121.96-56.568 229.893-143.57 302.526 94.13 13.916 187.241 35.072 278.316 64.6 122.413 40.051 204.663 155.79 204.663 288.272v200.364l-26.7 16.631c-77.612 48.31-181.81 101.03-308.183 140.742v-21.723c0-181.696-113.589-340.766-282.727-395.75a1720.133 1720.133 0 0 0-111.553-32.244c35.751-69.805 54.871-147.416 54.871-227.29V732.104c0-250.483-182.036-457.975-420.414-500.175C886.762 95.487 1023.656 0 1183.404 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GroupPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Group,
+ contentDescription = "Group",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GroupDarkNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GroupDarkNew.kt
new file mode 100644
index 0000000000..7e44862db4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GroupDarkNew.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.GroupDarkNew: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.GroupDarkNew",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M866.332 213v653.332H213v186.666h653.332v653.332h186.666v-653.332h653.332V866.332h-653.332V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GroupDarkNewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.GroupDarkNew,
+ contentDescription = "GroupDarkNew",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GroupNew.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GroupNew.kt
new file mode 100644
index 0000000000..99f3e0eb2a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/GroupNew.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.GroupNew: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.GroupNew",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M866.332 213v653.332H213v186.666h653.332v653.332h186.666v-653.332h653.332V866.332h-653.332V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun GroupNewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.GroupNew,
+ contentDescription = "GroupNew",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Hamburger.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Hamburger.kt
new file mode 100644
index 0000000000..eb4a4bde3c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Hamburger.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Hamburger: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Hamburger",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1411.412v225.882H0v-225.882h1920Zm0-564.706v225.882H0V846.706h1920ZM1920 282v225.882H0V282h1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HamburgerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Hamburger,
+ contentDescription = "Hamburger",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Header.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Header.kt
new file mode 100644
index 0000000000..af14cd161c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Header.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Header: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Header",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HeaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Header,
+ contentDescription = "Header",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Heart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Heart.kt
new file mode 100644
index 0000000000..6ed2e422b1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Heart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Heart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Heart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1771.731 291.037C1675.709 193.659 1547.944 140 1411.818 140h-.113c-136.125 0-263.777 53.66-359.573 150.924-37.618 38.07-68.571 80.997-92.294 127.426-23.61-46.429-54.563-89.356-92.068-127.313C771.86 193.659 644.208 140 507.97 140h-.113c-136.012 0-263.777 53.66-359.8 151.037-197.691 200.629-197.691 527.103 1.695 729.088l810.086 760.154 811.893-761.736c197.692-200.403 197.692-526.877 0-727.506"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HeartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Heart,
+ contentDescription = "Heart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Highlighter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Highlighter.kt
new file mode 100644
index 0000000000..9d1a5fa9aa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Highlighter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Highlighter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Highlighter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M110 1920h1699.932v-113.329H110V1920Zm367.548-528.792 143.474 95.65-60.29 93.156H326.82l150.727-188.806Zm-164.893 302.134h309.84l123.189-190.732 59.724-89.416c16.433-24.593 45.105-37.626 72.644-32.186 76.61 14.28 154.24-22.099 192.66-88.396l575.256-903.571c40.345-69.697 20.626-158.66-44.991-202.632l-242.75-161.834c-65.731-43.518-155.375-27.765-203.54 35.586L488.542 901.627c-47.712 62.784-51.338 148.688-8.953 213.512 15.3 23.685 14.62 54.964-1.7 79.67l-58.251 87.263-190.166 238.444c-25.839 32.299-30.712 75.477-12.806 112.649 17.906 37.058 54.738 60.177 95.99 60.177Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HighlighterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Highlighter,
+ contentDescription = "Highlighter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Home.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Home.kt
new file mode 100644
index 0000000000..fdc057d47c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Home.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Home: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Home",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.16 1083.131c-92.279 0-167.374-75.095-167.374-167.373 0-92.28 75.095-167.374 167.374-167.374s167.374 75.095 167.374 167.374c0 92.278-75.095 167.373-167.374 167.373ZM960.16 0 28 932.049l79 79 127.874-127.985V1920h557.912v-557.912h334.748V1920h557.912V883.064l127.874 127.985 79-79L960.16 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HomePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Home,
+ contentDescription = "Home",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/HourGlass.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/HourGlass.kt
new file mode 100644
index 0000000000..d46f6d173e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/HourGlass.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.HourGlass: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.HourGlass",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1190.725 1368.395c77.93 63.247 151.68 122.993 191.096 252.763l22.25 72.96H515.336l22.137-72.96c39.416-129.77 113.167-189.516 191.21-252.763l169.524-137.675c35.577-28.913 87.304-29.026 122.993.113l169.525 137.562Zm142.306-641.393c135.529-109.891 304.263-246.663 304.263-670.531V0H282v56.47c0 423.869 168.734 560.64 304.264 670.532 88.884 72.057 147.5 119.605 147.5 232.998 0 113.393-58.616 160.941-147.5 232.885C450.734 1302.889 282 1439.66 282 1863.529V1920h1355.294v-56.47c0-423.869-168.734-560.64-304.263-670.645-88.772-71.944-147.502-119.492-147.502-232.885 0-113.393 58.73-160.941 147.502-232.998Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun HourGlassPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.HourGlass,
+ contentDescription = "HourGlass",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Image.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Image.kt
new file mode 100644
index 0000000000..23e72ec7b4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Image.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Image: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Image",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1493.602 1468.294H225.837C523.211 387.9 755.305 1443.9 983.898 1115.918c284.612-408.283 590.57-405.685 710.174 352.376h-200.47Zm-816-1129.412c124.8 0 225.882 101.196 225.882 225.883 0 124.687-101.082 225.882-225.882 225.882-124.687 0-225.882-101.195-225.882-225.882 0-124.687 101.195-225.883 225.882-225.883ZM-.045 1807.118h1920V113h-1920v1694.118Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImagePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Image,
+ contentDescription = "Image",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImmersiveReader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImmersiveReader.kt
new file mode 100644
index 0000000000..840ecf72c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImmersiveReader.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ImmersiveReader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ImmersiveReader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1921f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1579.74 1372.56c-7.79 139.03-69.52 272.68-155.93 386.86l-128.05-95.17c73.65-97.32 118.62-201.59 124.17-300.49 5.38-96.06-25.87-193.14-116.74-283.19l113.18-112.157c122.55 121.437 171.33 262.287 163.37 404.147Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1918.78 1399.41c-11.46 186.68-102.32 366.84-230.38 521.37l-123.7-100.66c114.62-138.3 185.55-287.57 194.31-430.34 8.54-139.11-41.2-281.04-186.43-412.47l107.94-117.124c178.34 161.404 249.94 348.904 238.26 539.224ZM160.063 159.401h409.945c147.283 0 266.771 118.411 266.771 264.464v232.231h1.882v125.751h160.062V423.763c0-146.003 119.437-264.362 266.767-264.362h388.49v622.446h.18v-70.375h159.88V.784h-548.55c-143.45 0-270.374 70.13-347.763 177.68C840.334 70.923 713.432.784 570.008.784H0V1660.6h330.804v-158.62H160.063V159.401Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1014.36 885.009 784.214 1113.07H497.901v546.88h269.988l246.471 244.24h193.21V885.009h-193.21Zm33.15 191.471-196.996 195.21H657.963v229.64h176.226l213.321 211.39v-636.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImmersiveReaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ImmersiveReader,
+ contentDescription = "ImmersiveReader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImpactLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImpactLogo.kt
new file mode 100644
index 0000000000..0d2d7bdd52
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImpactLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ImpactLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ImpactLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M910.001 203.918C910.001 163.587 921.96 124.161 944.366 90.6273 966.773 57.0931 998.621 30.9565 1035.88 15.5225 1073.14.0883516 1114.15-3.9499 1153.7 3.91831 1193.26 11.7866 1229.59 31.2078 1258.11 59.7263 1286.63 88.2447 1306.05 124.579 1313.92 164.135 1321.78 203.692 1317.75 244.693 1302.32 281.954 1286.88 319.215 1260.74 351.062 1227.21 373.47 1193.68 395.876 1154.25 407.836 1113.92 407.836 1087.13 407.869 1060.6 402.617 1035.84 392.38 1011.09 382.144 988.596 367.124 969.654 348.182 950.712 329.241 935.692 306.748 925.457 281.993 915.22 257.237 909.967 230.706 910.001 203.918ZM167.424 913.308 458.311 622.422H1045.04L460.789 1206.68C421.886 1245.58 369.124 1267.44 314.107 1267.44 259.09 1267.44 206.327 1245.58 167.424 1206.68 128.522 1167.77 106.667 1115.01 106.667 1059.99 106.667 1004.97 128.522 952.211 167.424 913.308ZM1738.81 1027.77 1454.11 1313.21H867.136L1444.7 734.406C1483.6 695.405 1536.4 673.455 1591.49 673.386 1646.57 673.316 1699.43 695.132 1738.43 734.034 1777.43 772.936 1799.38 825.739 1799.45 880.826 1799.52 935.911 1777.71 988.769 1738.81 1027.77ZM587.075 1602.79C564.668 1636.33 552.709 1675.75 552.709 1716.08 552.709 1770.16 574.192 1822.02 612.435 1860.27 650.677 1898.51 702.543 1920 756.627 1920 796.957 1920 836.382 1908.04 869.917 1885.63 903.451 1863.23 929.588 1831.38 945.021 1794.12 960.456 1756.85 964.494 1715.85 956.625 1676.29 948.758 1636.74 929.336 1600.4 900.817 1571.89 872.299 1543.37 835.965 1523.94 796.409 1516.08 756.853 1508.21 715.851 1512.25 678.59 1527.69 641.329 1543.12 609.481 1569.25 587.075 1602.79Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImpactLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ImpactLogo,
+ contentDescription = "ImpactLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Import.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Import.kt
new file mode 100644
index 0000000000..9ca447ae89
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Import.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Import: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Import",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1574.513 138.515c-30.381-30.268-66.748-51.84-106.278-65.619v434.936h434.937c-13.78-39.529-35.238-75.896-65.62-106.164l-263.04-263.153Zm-219.219 482.19V56h-903.53v903.53H0v112.94h451.765v790.589H1920V620.706h-564.706ZM887.04 1425.3l-79.85-79.85 272.866-272.978h-515.35V959.529h515.35L807.191 686.664l79.849-79.85L1296.226 1016 887.04 1425.299Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImportPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Import,
+ contentDescription = "Import",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImportContent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImportContent.kt
new file mode 100644
index 0000000000..8cd5088d1f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImportContent.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ImportContent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ImportContent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1574.513 138.515c-30.381-30.268-66.748-51.84-106.278-65.619v434.936h434.937c-13.78-39.529-35.238-75.896-65.62-106.164l-263.04-263.153Zm-219.219 482.19V56h-903.53v903.53H0v112.94h451.765v790.589H1920V620.706h-564.706ZM887.04 1425.3l-79.85-79.85 272.866-272.978h-515.35V959.529h515.35L807.191 686.664l79.849-79.85L1296.226 1016 887.04 1425.299Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImportContentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ImportContent,
+ contentDescription = "ImportContent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImportantDates.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImportantDates.kt
new file mode 100644
index 0000000000..be81f99e27
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ImportantDates.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ImportantDates: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ImportantDates",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1687.84 451.764H219.606V282.353c0-31.624 24.847-56.471 56.471-56.471h169.412v56.471c0 31.623 24.847 56.47 56.47 56.47 31.624 0 56.471-24.847 56.471-56.47v-56.471h790.59v56.471c0 31.623 24.85 56.47 56.47 56.47 31.62 0 56.47-24.847 56.47-56.47v-56.471h169.41c31.62 0 56.47 24.847 56.47 56.471v169.411Zm-303 618.036c-4.86-15.6-18.67-26.11-34.38-26.11h-272.01l-84.027-270.853v-.052c-4.919-15.608-18.723-26.118-34.434-26.118-15.661 0-29.515 10.51-34.384 26.17l-84.078 270.853h-272.01c-15.711 0-29.515 10.51-34.384 26.11-4.869 15.61.352 32.64 13.102 42.36l220.107 167.43-84.077 270.9c-4.869 15.66.502 32.69 13.251 42.3 6.325 4.79 13.754 7.2 21.183 7.2s14.858-2.41 21.233-7.25l220.057-167.37L1180 1592.74c12.7 9.67 29.81 9.67 42.51.05 12.75-9.61 18.07-26.64 13.2-42.35l-84.07-270.85 220.15-167.43c12.7-9.72 17.97-26.75 13.05-42.36m246.53-956.859h-169.41v-56.47c0-31.624-24.85-56.471-56.47-56.471-31.62 0-56.47 24.847-56.47 56.47v56.471H558.431v-56.47C558.431 24.847 533.584 0 501.961 0c-31.624 0-56.471 24.847-56.471 56.47v56.471H276.079c-93.742 0-169.412 75.671-169.412 169.412V1920H1800.78V282.353c0-93.741-75.67-169.412-169.41-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ImportantDatesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ImportantDates,
+ contentDescription = "ImportantDates",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Inbox.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Inbox.kt
new file mode 100644
index 0000000000..86251519c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Inbox.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Inbox: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Inbox",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1750.588 1750.118H169.412c-31.172 0-56.47-25.412-56.47-56.47V1398.08l210.183 126.155h1273.75l210.184-126.155v295.567c0 31.059-25.299 56.47-56.47 56.47ZM451.765 1411.294V168.941h1016.47v1242.353H451.765Zm1298.823-677.647h-169.412V56H338.824v677.647H169.412C76.009 733.647 0 809.657 0 903.06v790.588c0 93.402 76.01 169.412 169.412 169.412h1581.176c93.403 0 169.412-76.01 169.412-169.412V903.06c0-93.403-76.01-169.412-169.412-169.412ZM621.176 488.904h564.706V375.962H621.176v112.942Zm0 677.647h564.706v-112.942H621.176v112.942Zm0-338.824h677.648V714.786H621.176v112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InboxPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Inbox,
+ contentDescription = "Inbox",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Indent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Indent.kt
new file mode 100644
index 0000000000..7aaaedbfb2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Indent.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Indent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Indent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1518.813v225.882H112.941v-225.882H1920Zm0-451.878v225.995H112.941v-225.995H1920ZM282.376 112.955l529.468 389.421-529.468 389.308V615.317H.023V389.435h282.353v-276.48ZM1920 615.283v225.883H903.53V615.283H1920Zm0-451.877V389.4H903.53V163.406H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun IndentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Indent,
+ contentDescription = "Indent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Indent2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Indent2.kt
new file mode 100644
index 0000000000..1b8af64b20
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Indent2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Indent2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Indent2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1518.813v225.882H112.941v-225.882H1920Zm0-451.878v225.995H112.941v-225.995H1920ZM282.376 112.955l529.468 389.421-529.468 389.308V615.317H.023V389.435h282.353v-276.48ZM1920 615.283v225.883H903.53V615.283H1920Zm0-451.877V389.4H903.53V163.406H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Indent2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Indent2,
+ contentDescription = "Indent2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Info.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Info.kt
new file mode 100644
index 0000000000..7785e33570
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Info.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Info: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Info",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c530.193 0 960 429.807 960 960s-429.807 960-960 960S0 1490.193 0 960 429.807 0 960 0Zm223.797 707.147c-28.531-29.561-67.826-39.944-109.227-39.455-55.225.657-114.197 20.664-156.38 40.315-100.942 47.024-178.395 130.295-242.903 219.312-11.616 16.025-17.678 34.946 2.76 49.697 17.428 12.58 29.978 1.324 40.49-9.897l.69-.74c.801-.862 1.591-1.72 2.37-2.565 11.795-12.772 23.194-25.999 34.593-39.237l2.85-3.31 2.851-3.308c34.231-39.687 69.056-78.805 115.144-105.345 27.4-15.778 47.142 8.591 42.912 35.963-2.535 16.413-11.165 31.874-17.2 47.744-21.44 56.363-43.197 112.607-64.862 168.888-23.74 61.7-47.405 123.425-70.426 185.398l-2 5.38-1.998 5.375c-20.31 54.64-40.319 108.872-53.554 165.896-10.575 45.592-24.811 100.906-4.357 145.697 11.781 25.8 36.77 43.532 64.567 47.566 37.912 5.504 78.906 6.133 116.003-2.308 19.216-4.368 38.12-10.07 56.57-17.005 56.646-21.298 108.226-54.146 154.681-92.755 47.26-39.384 88.919-85.972 126.906-134.292 12.21-15.53 27.004-32.703 31.163-52.596 3.908-18.657-12.746-45.302-34.326-34.473-11.395 5.718-19.929 19.867-28.231 29.27-10.42 11.798-21.044 23.423-31.786 34.92-21.488 22.987-43.513 45.463-65.634 67.831-13.54 13.692-30.37 25.263-47.662 33.763-21.59 10.609-38.785-1.157-36.448-25.064 2.144-21.954 7.515-44.145 15.046-64.926 30.306-83.675 61.19-167.135 91.834-250.686 19.157-52.214 38.217-104.461 56.999-156.816 17.554-48.928 32.514-97.463 38.834-149.3 4.357-35.71-4.9-72.647-30.269-98.937Zm63.72-401.498c-91.342-35.538-200.232 25.112-218.574 121.757-13.25 69.784 13.336 131.23 67.998 157.155 105.765 50.16 232.284-29.954 232.29-147.084.005-64.997-28.612-111.165-81.715-131.828Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InfoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Info,
+ contentDescription = "Info",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/InfoBorderless.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/InfoBorderless.kt
new file mode 100644
index 0000000000..8064f7d61c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/InfoBorderless.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.InfoBorderless: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.InfoBorderless",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1229.93 594.767c36.644 37.975 50.015 91.328 43.72 142.909-9.128 74.877-30.737 144.983-56.093 215.657-27.129 75.623-54.66 151.09-82.332 226.512-44.263 120.685-88.874 241.237-132.65 362.1-10.877 30.018-18.635 62.072-21.732 93.784-3.376 34.532 21.462 51.526 52.648 36.203 24.977-12.278 49.288-28.992 68.845-48.768 31.952-32.31 63.766-64.776 94.805-97.98 15.515-16.605 30.86-33.397 45.912-50.438 11.993-13.583 24.318-34.02 40.779-42.28 31.17-15.642 55.226 22.846 49.582 49.794-5.39 25.773-23.135 48.383-39.462 68.957l-1.123 1.416a1559.53 1559.53 0 0 0-4.43 5.6c-54.87 69.795-115.043 137.088-183.307 193.977-67.103 55.77-141.607 103.216-223.428 133.98-26.65 10.016-53.957 18.253-81.713 24.563-53.585 12.192-112.798 11.283-167.56 3.333-40.151-5.828-76.246-31.44-93.264-68.707-29.544-64.698-8.98-144.595 6.295-210.45 18.712-80.625 46.8-157.388 75.493-234.619l2.18-5.867 1.092-2.934 2.182-5.87 2.182-5.873c33.254-89.517 67.436-178.676 101.727-267.797 31.294-81.296 62.72-162.537 93.69-243.95 2.364-6.216 5.004-12.389 7.669-18.558l1-2.313c6.835-15.806 13.631-31.617 16.176-48.092 6.109-39.537-22.406-74.738-61.985-51.947-68.42 39.4-119.656 97.992-170.437 156.944l-6.175 7.17c-15.78 18.323-31.582 36.607-47.908 54.286-16.089 17.43-35.243 39.04-62.907 19.07-29.521-21.308-20.765-48.637-3.987-71.785 93.18-128.58 205.056-248.86 350.86-316.783 60.932-28.386 146.113-57.285 225.882-58.233 59.802-.707 116.561 14.29 157.774 56.99Zm92.038-579.94c76.703 29.846 118.04 96.533 118.032 190.417-.008 169.189-182.758 284.908-335.53 212.455-78.956-37.446-117.358-126.202-98.219-227.002 26.494-139.598 183.78-227.203 315.717-175.87Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InfoBorderlessPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.InfoBorderless,
+ contentDescription = "InfoBorderless",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure.kt
new file mode 100644
index 0000000000..f653baa309
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Instructure: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Instructure",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1642.264c138.868 0 253.585 102.642 271.698 241.51C1147.17 1907.924 1050.566 1920 960 1920c-90.566 0-181.132-12.075-271.698-36.226 12.075-138.868 132.83-241.51 271.698-241.51Zm476.981-205.283c102.642-96.604 259.623-108.68 362.264-18.113-90.566 156.981-223.396 289.811-386.415 386.415-84.528-114.717-72.453-271.698 24.151-368.302Zm-1328.302-24.15c114.717-84.53 271.698-72.454 368.302 24.15 96.604 102.642 108.68 259.623 18.113 362.264-156.98-90.566-289.811-223.396-386.415-386.415ZM960 1394.716c42.264 0 78.49 36.226 84.528 84.528 0 48.302-36.226 90.566-84.528 90.566h-6.038c-48.302 0-84.528-42.264-84.528-90.566s42.264-84.528 90.566-84.528Zm295.85-126.792c36.225-30.19 84.527-30.19 114.716 0 36.226 30.188 36.226 84.528 6.038 120.754 0 5.726-5.43 6.022-5.991 6.037l-.047.001c-36.226 30.189-90.566 30.189-120.755-6.038-30.188-36.226-30.188-90.566 6.038-120.754Zm-724.53-6.038c30.19-30.189 90.567-30.189 120.755 0 36.227 30.188 36.227 84.528 0 120.755-30.188 36.226-84.528 30.188-120.754 0-36.227-30.19-36.227-84.529 0-120.755ZM36.227 688.302c138.868 12.075 241.51 132.83 241.51 271.698 0 138.868-108.68 259.623-241.51 271.698C12.076 1141.132 0 1050.566 0 960c0-90.566 12.075-187.17 36.226-271.698Zm1847.548 0C1907.924 772.83 1920 869.434 1920 960c0 90.566-12.075 181.132-36.226 271.698-132.83-12.075-241.51-132.83-241.51-271.698 0-138.868 102.642-259.623 241.51-271.698Zm-1443.02 187.17c46.672 0 84.529 37.856 84.529 84.528 0 46.672-37.857 84.528-84.528 84.528-46.672 0-84.529-37.856-84.529-84.528 0-46.672 37.857-84.528 84.529-84.528Zm1038.491-6.038c48.302 0 84.529 42.264 84.529 84.528 0 48.302-36.227 84.529-84.529 84.529s-84.528-36.227-84.528-84.529 36.226-84.528 84.528-84.528Zm-211.32-338.113c30.188-30.189 84.528-30.189 114.717 0 36.226 30.188 36.226 84.528 6.037 120.754-36.226 30.19-84.528 30.19-114.717 0-36.226-30.188-36.226-84.528-6.037-120.754Zm-736.604-6.038c30.188-30.189 84.528-30.189 120.754 0 30.19 30.189 36.227 84.528 0 120.755-30.188 36.226-84.528 30.188-120.754 0-36.227-30.189-36.227-84.529 0-120.755Zm887.547-410.566c156.981 90.566 289.811 223.396 386.415 386.415-114.717 84.528-271.698 72.453-368.302-24.15-96.604-96.605-108.68-253.586-18.113-362.265Zm-917.736 0c84.528 108.68 78.49 265.66-24.15 362.264-96.605 96.604-253.586 108.68-362.265 24.151 90.566-163.019 223.396-295.849 386.415-386.415ZM960 356.227c42.264 0 84.528 36.226 84.528 78.49 0 48.302-36.226 90.566-84.528 90.566-48.302 0-84.528-36.226-84.528-84.528 0-48.302 36.226-84.529 84.528-84.529ZM960 0c96.604 0 187.17 12.075 277.736 36.226-18.113 132.83-138.868 241.51-277.736 241.51S700.377 175.094 682.264 36.226C772.83 12.076 863.396 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InstructurePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Instructure,
+ contentDescription = "Instructure",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure1Dot.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure1Dot.kt
new file mode 100644
index 0000000000..cbb4b6a01c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure1Dot.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Instructure1Dot: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Instructure1Dot",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 1670.24C1079.16 1532.23 1190.91 1420.48 1328.92 1420.48C1466.93 1420.48 1578.68 1532.23 1578.68 1670.24C1578.68 1808.25 1466.93 1920 1328.92 1920C1190.91 1920 1079.16 1808.25 1079.16 1670.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M757.363 0H341.318V1920H757.363V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Instructure1DotPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Instructure1Dot,
+ contentDescription = "Instructure1Dot",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure3Dot.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure3Dot.kt
new file mode 100644
index 0000000000..284355ff00
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Instructure3Dot.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Instructure3Dot: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Instructure3Dot",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 1670.24C1079.16 1532.23 1190.91 1420.48 1328.92 1420.48C1466.93 1420.48 1578.68 1532.23 1578.68 1670.24C1578.68 1808.25 1466.93 1920 1328.92 1920C1190.91 1920 1079.16 1808.25 1079.16 1670.24Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 960C1079.16 821.991 1190.91 710.238 1328.92 710.238C1466.93 710.238 1578.68 821.991 1578.68 960C1578.68 1098.01 1466.93 1209.76 1328.92 1209.76C1190.91 1209.76 1079.16 1098.01 1079.16 960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1079.16 250.435C1079.16 112.426 1190.91 0.673227 1328.92 0.673227C1466.93 0.673227 1578.68 112.426 1578.68 250.435C1578.68 388.443 1466.93 500.196 1328.92 500.196C1190.91 500.196 1079.16 388.443 1079.16 250.435Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M757.363 0H341.318V1920H757.363V0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Instructure3DotPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Instructure3Dot,
+ contentDescription = "Instructure3Dot",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/InstructureLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/InstructureLogo.kt
new file mode 100644
index 0000000000..e5df5e8cf3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/InstructureLogo.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.InstructureLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.InstructureLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1448.57 288.052 1084.46 502.746 1448.55 718.026 1813.23 502.732 1448.57 288.052ZM959.966 429.191 1323.92 214.589 959.988 0 596.032 214.602 959.966 429.191ZM835.499 502.732 471.388 288.038 106.704 502.732 471.388 718.026 835.499 502.732ZM106.667 1416.54 960 1920 1813.33 1416.54 960 913.07 106.667 1416.54Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InstructureLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.InstructureLogo,
+ contentDescription = "InstructureLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Integrations.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Integrations.kt
new file mode 100644
index 0000000000..04d0c446e8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Integrations.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Integrations: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Integrations",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 451.765h-225.882V0h-112.941v451.765H790.647V0H677.706v451.765H338.882v112.94h112.942v169.413c0 280.207 228.028 508.235 508.235 508.235h56.47v395.294c0 93.402-76.009 169.412-169.411 169.412-93.403 0-169.412-76.01-169.412-169.412 0-155.633-126.72-282.353-282.353-282.353S113 1482.014 113 1637.647V1920h112.941v-282.353c0-93.402 76.01-169.412 169.412-169.412s169.412 76.01 169.412 169.412c0 155.633 126.72 282.353 282.353 282.353s282.353-126.72 282.353-282.353v-395.294h56.47c280.207 0 508.235-228.028 508.235-508.235V564.706h112.942V451.765h-112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun IntegrationsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Integrations,
+ contentDescription = "Integrations",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Invitation.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Invitation.kt
new file mode 100644
index 0000000000..fff6ae3718
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Invitation.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Invitation: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Invitation",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1387.688 1315.136 387.307 498.24H144.275l387.413-498.24 89.28 71.573h677.44l89.28-71.573ZM53 932.235l395.413 316.48L53 1756.98V932.235Zm1813.333.053v824.64l-395.413-508.267 395.413-316.373ZM1546.408-.011v498.347l319.893 277.333v19.947l-426.666 341.44v-1030.4h-960v1030.4L52.968 795.616v-19.947l320-277.333V-.011h1173.44ZM1013 266.667v266.666h266.667V640H1013v266.667H906.333V640H639.667V533.333h266.666V266.667H1013Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun InvitationPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Invitation,
+ contentDescription = "Invitation",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Italic.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Italic.kt
new file mode 100644
index 0000000000..5600a2eb42
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Italic.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Italic: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Italic",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M754.429 0v274.423h235.885L647.457 1645.85H343V1920h822.994v-274.149H930.11l342.857-1371.428h304.32V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ItalicPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Italic,
+ contentDescription = "Italic",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/KeyboardShortcuts.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/KeyboardShortcuts.kt
new file mode 100644
index 0000000000..63efdf0298
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/KeyboardShortcuts.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.KeyboardShortcuts: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.KeyboardShortcuts",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1524.706 1242.412c31.172 0 56.47 25.299 56.47 56.47v112.942c0 31.171-25.298 56.47-56.47 56.47h-112.941c-31.172 0-56.47-25.299-56.47-56.47v-112.942c0-31.171 25.298-56.47 56.47-56.47h112.94Zm-338.824 0c31.172 0 56.47 25.299 56.47 56.47v112.942c0 31.171-25.298 56.47-56.47 56.47H734.118c-31.172 0-56.47-25.299-56.47-56.47v-112.942c0-31.171 25.298-56.47 56.47-56.47h451.764Zm-677.647 0c31.172 0 56.47 25.299 56.47 56.47v112.942c0 31.171-25.298 56.47-56.47 56.47h-112.94c-31.173 0-56.471-25.299-56.471-56.47v-112.942c0-31.171 25.298-56.47 56.47-56.47h112.941Zm1016.47-338.824c31.173 0 56.471 25.3 56.471 56.47V1073c0 31.172-25.298 56.47-56.47 56.47h-112.941c-31.172 0-56.47-25.298-56.47-56.47V960.059c0-31.172 25.298-56.47 56.47-56.47h112.94Zm-338.823 0c31.172 0 56.47 25.3 56.47 56.47V1073c0 31.172-25.298 56.47-56.47 56.47h-112.94c-31.173 0-56.471-25.298-56.471-56.47V960.059c0-31.172 25.298-56.47 56.47-56.47h112.941Zm-677.647 0c31.172 0 56.47 25.3 56.47 56.47V1073c0 31.172-25.298 56.47-56.47 56.47h-112.94c-31.173 0-56.471-25.298-56.471-56.47V960.059c0-31.172 25.298-56.47 56.47-56.47h112.941Zm338.824 0c31.172 0 56.47 25.3 56.47 56.47V1073c0 31.172-25.298 56.47-56.47 56.47H734.118c-31.172 0-56.47-25.298-56.47-56.47V960.059c0-31.172 25.298-56.47 56.47-56.47h112.94Zm903.53-338.823h-729.262c14.908-86.965 65.958-113.506 133.384-147.163 89.336-44.611 200.583-100.291 200.583-304.602h-112.941c0 134.513-57.939 163.426-138.24 203.633-80.301 40.094-177.544 90.24-196.518 248.132H169.412C76.009 564.765 0 640.775 0 734.176v903.53c0 93.402 76.01 169.412 169.412 169.412h1581.176c93.403 0 169.412-76.01 169.412-169.412v-903.53c0-93.402-76.01-169.411-169.412-169.411Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun KeyboardShortcutsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.KeyboardShortcuts,
+ contentDescription = "KeyboardShortcuts",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Launch.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Launch.kt
new file mode 100644
index 0000000000..578122e638
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Launch.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Launch: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Launch",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M508.235 0H56.471C25.299 0 0 25.299 0 56.47v451.765c0 31.172 25.299 56.47 56.47 56.47h451.765c31.172 0 56.47-25.298 56.47-56.47V56.471C564.706 25.299 539.408 0 508.236 0zm677.647 0H734.118c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.47-25.298 56.47-56.47V56.471c0-31.172-25.298-56.471-56.47-56.471zm677.647 0h-451.764c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.471-25.298 56.471-56.47V56.471C1920 25.299 1894.701 0 1863.53 0zM508.235 677.647H56.471C25.299 677.647 0 702.946 0 734.117v451.765c0 31.172 25.299 56.47 56.47 56.47h451.765c31.172 0 56.47-25.298 56.47-56.47V734.118c0-31.172-25.298-56.47-56.47-56.47zm677.647 0H734.118c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.47-25.298 56.47-56.47V734.118c0-31.172-25.298-56.47-56.47-56.47zm677.647 0h-451.764c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.47 56.47 56.47h451.764c31.172 0 56.471-25.298 56.471-56.47V734.118c0-31.172-25.299-56.47-56.47-56.47zM508.235 1355.294H56.471c-31.172 0-56.471 25.299-56.471 56.47v451.765C0 1894.701 25.299 1920 56.47 1920h451.765c31.172 0 56.47-25.299 56.47-56.47v-451.765c0-31.172-25.298-56.47-56.47-56.47zm677.647 0H734.118c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.471 56.47 56.471h451.764c31.172 0 56.47-25.299 56.47-56.47v-451.765c0-31.172-25.298-56.47-56.47-56.47zm677.647 0h-451.764c-31.172 0-56.47 25.299-56.47 56.47v451.765c0 31.172 25.298 56.471 56.47 56.471h451.764c31.172 0 56.471-25.299 56.471-56.47v-451.765c0-31.172-25.299-56.47-56.47-56.47z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LaunchPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Launch,
+ contentDescription = "Launch",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Learnplatform.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Learnplatform.kt
new file mode 100644
index 0000000000..32d79e6692
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Learnplatform.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Learnplatform: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Learnplatform",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1443.33 1625.47C1155.58 1837.95 763.392 1840 473.344 1630.59L515.712 1572.22C248.832 1380.99 136.192 1039.49 236.928 727.296L305.664 740.352C400.384 460.672 663.296 272.896 958.976 273.92V0.768066C543.104 1.28007 174.848 269.312 46.72 664.576C-81.4079 1059.84 59.776 1492.74 396.544 1736.58C733.184 1980.54 1188.61 1980.03 1524.99 1735.55C1861.12 1490.94 2001.66 1058.05 1872.77 662.912L1809.54 683.52C1931.9 1052.42 1801.98 1457.79 1487.87 1686.91"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LearnplatformPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Learnplatform,
+ contentDescription = "Learnplatform",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/LifePreserver.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/LifePreserver.kt
new file mode 100644
index 0000000000..51abeb5f35
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/LifePreserver.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.LifePreserver: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.LifePreserver",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1758.2 1230.505-334.521-140.56c23.483-83.885 23.596-173.188 2.145-261.363l337.909-133.447c57.804 174.204 57.804 358.005.113 531.531l-5.645 3.839Zm-444.147 439.405-100.029-242.734c90.546-48.998 163.705-121.706 212.929-212.025l241.831 100.48c-77.223 154.221-200.284 277.282-354.73 354.28Zm-620.722 93.82-3.952-5.645 140.673-334.409c84.337 23.596 173.414 23.596 261.25 2.032l133.448 337.91c-174.317 57.804-358.005 57.917-531.419.112Zm-89.078-95.061c-154.108-77.11-277.281-200.397-354.166-354.618l242.621-100.03c49.112 90.546 121.706 163.592 212.026 212.816l-100.48 241.832ZM161.8 689.377l334.522 140.56c-23.596 84.11-23.596 173.414-2.145 261.363L156.38 1224.747c-57.804-174.204-57.804-358.005-.113-531.532l5.532-3.838Zm444.035-439.519L706.09 492.593C615.43 541.59 542.27 614.41 493.047 704.73L251.216 604.25c77.11-154.109 200.397-277.282 354.618-354.393Zm620.835-93.706 3.839 5.645-140.56 334.408c-43.128-11.967-87.498-17.838-132.432-17.838-42.789 0-86.03 5.307-128.705 15.806L695.137 156.265c174.205-57.692 358.005-58.03 531.532-.113Zm-73.95 1176.414c-27.208-18.628-61.078-26.87-94.835-17.725-64.804 18.064-132.996 17.951-197.349.113-33.192-9.37-66.95-1.242-94.27 17.386-77.224-39.966-138.867-101.948-178.834-179.397 18.741-27.435 26.983-61.305 17.612-95.062-17.95-64.917-18.064-133.108 0-197.574 9.258-33.418 1.13-67.062-17.386-94.158C627.51 689.377 688.815 628.072 765.7 588.106c19.193 13.435 42.111 21.112 65.933 21.112 10.048 0 20.322-1.355 30.483-4.177 64.804-18.064 133.109-17.951 197.349-.113 33.192 9.258 66.95 1.242 94.27-17.387 77.111 39.967 138.755 101.949 178.834 179.624-18.741 27.321-27.096 61.078-17.612 94.835 17.95 65.03 17.95 133.335 0 197.349-9.371 33.531-1.242 67.175 17.499 94.384-40.192 77.336-102.174 138.867-179.736 178.833ZM1315.635 251.1c154.22 77.224 277.282 200.51 354.392 354.731L1427.18 705.973c-48.999-90.771-121.706-163.817-212.026-212.929l100.48-241.944Zm555.24 408.358c-10.5-31.16-33.418-56.901-63.223-70.562-7.452-3.387-15.58-3.613-23.483-5.306-90.772-198.478-246.912-355.07-445.164-446.293-1.806-8.241-1.92-16.709-5.645-24.612-13.66-30.031-39.402-53.175-71.127-63.675-196.67-65.482-404.97-65.256-602.545.113-31.273 10.387-57.014 33.305-70.562 63.11-3.5 7.34-3.726 15.468-5.42 23.484-198.703 90.771-355.182 247.024-446.18 445.276-8.467 1.807-16.934 2.145-24.95 5.758-29.918 13.66-53.063 39.402-63.562 71.014-65.37 196.784-65.37 405.197.112 602.433 10.274 31.273 33.306 57.014 62.998 70.675 7.452 3.387 15.694 3.387 23.597 5.193 90.77 198.59 246.911 355.295 445.276 446.518 1.806 8.242 2.145 16.822 5.758 24.725 13.548 29.919 39.515 53.063 71.014 63.563 98.335 32.74 199.606 48.998 300.877 48.998 101.384 0 202.88-16.37 301.555-49.111 31.273-10.274 57.015-33.193 70.675-62.998 3.387-7.451 3.613-15.58 5.42-23.596 198.59-90.771 355.295-247.137 446.405-445.615 8.354-1.806 16.822-1.806 24.838-5.42 29.805-13.66 52.95-39.401 63.45-71.013 65.368-196.784 65.368-405.197-.113-602.659Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LifePreserverPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.LifePreserver,
+ contentDescription = "LifePreserver",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Like.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Like.kt
new file mode 100644
index 0000000000..0e367e62ca
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Like.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Like: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Like",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1863.059 1016.47c0-124.574-101.308-225.882-225.883-225.882H1203.37c-19.651 0-37.044-9.374-47.66-25.863-10.391-16.15-11.86-35.577-3.84-53.196 54.776-121.073 94.87-247.115 119.378-374.513 15.925-83.576-5.873-169.072-60.085-234.578C1157.29 37.384 1078.005 0 993.751 0H846.588v56.47c0 254.457-155.068 473.224-285.063 612.029-72.734 77.477-176.98 122.09-285.967 122.09H56v734.117C56 1742.682 233.318 1920 451.294 1920h960c124.574 0 225.882-101.308 225.882-225.882 0-46.42-14.117-89.676-38.174-125.59 87.869-30.947 151.116-114.862 151.116-213.234 0-46.419-14.118-89.675-38.174-125.59 87.868-30.946 151.115-114.862 151.115-213.233"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LikePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Like,
+ contentDescription = "Like",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/LineReader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/LineReader.kt
new file mode 100644
index 0000000000..5a3e6f46e5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/LineReader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.LineReader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.LineReader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m320.224 1705.45 1066.666 2.43-.24 106.67-1066.669-2.43.243-106.67Zm-.021-213.33 1279.997 2.43-.2 106.67-1279.999-2.44.202-106.66ZM1866.67 320c29.45 0 53.33 23.878 53.33 53.334v959.996c0 29.46-23.88 53.34-53.33 53.34H53.333C23.878 1386.67 0 1362.79 0 1333.33V373.334C0 343.878 23.878 320 53.333 320H1866.67Zm-213.34 266.667H266.667c-29.161 0-52.856 23.403-53.334 52.451v214.216c0 29.16 23.403 52.855 52.452 53.326l.882.007H1653.33c29.165 0 52.862-23.403 53.34-52.451V640c0-29.16-23.405-52.855-52.458-53.326l-.882-.007ZM320.203 105.451l1279.997 2.432-.2 106.666-1279.999-2.431.202-106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LineReaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.LineReader,
+ contentDescription = "LineReader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Link.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Link.kt
new file mode 100644
index 0000000000..ff85b69f56
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Link.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Link: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Link",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1311.326 891.546-61.666-61.666 107.294-107.407-159.698-159.698-107.52 107.633-61.553-60.311 384.338-384.904 282.127 281.45-383.322 384.903ZM891.863 1309.43 508.54 1694.332l-283.143-281.45 384.339-384.903 61.214 61.214-110.005 109.892 159.699 159.699 110.117-110.005 61.102 60.65Zm962.484-961.92-283.03-283.03c-88.546-86.288-231.19-85.95-317.93 1.016L868.484 450.398c-87.53 87.642-87.53 230.061 0 317.704l61.666 61.778-99.502 99.502-60.31-60.198c-42.127-43.144-98.372-67.087-158.57-67.426h-1.355c-60.197 0-116.894 23.605-159.812 66.41L65.698 1253.184c-87.642 87.642-87.642 230.061 0 317.704L348.84 1854.03c43.822 43.821 101.309 65.732 158.909 65.732 57.487 0 115.087-21.91 158.908-65.732l384.903-384.903c43.257-43.257 66.862-100.518 66.523-161.168-.452-60.197-24.396-116.442-66.523-157.665l-61.214-61.102 99.614-99.614 61.666 61.78c43.821 43.707 101.309 65.618 158.909 65.618 57.487 0 115.087-21.91 158.795-65.732l385.016-384.903c86.852-86.852 87.304-229.497 0-318.833Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LinkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Link,
+ contentDescription = "Link",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Linkedin.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Linkedin.kt
new file mode 100644
index 0000000000..60c74b7523
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Linkedin.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Linkedin: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Linkedin",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M478.234 600.75V1920H.036V600.75h478.198Zm720.853-2.438v77.737c69.807-45.056 150.308-71.249 272.38-71.249 397.577 0 448.521 308.666 448.521 577.562v737.602h-480.6v-700.836c0-117.867-42.173-140.215-120.15-140.215-74.134 0-120.151 23.55-120.151 140.215v700.836h-480.6V598.312h480.6ZM239.099 0c131.925 0 239.099 107.294 239.099 239.099s-107.174 239.099-239.1 239.099C107.295 478.198 0 370.904 0 239.098 0 107.295 107.294 0 239.099 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LinkedinPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Linkedin,
+ contentDescription = "Linkedin",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ListView.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ListView.kt
new file mode 100644
index 0000000000..7c4e011204
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ListView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ListView: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ListView",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M53.3333 0C23.8781 0 0 23.8781 0 53.3333V853.333C0 882.788 23.8782 906.667 53.3334 906.667H1866.67C1896.12 906.667 1920 882.788 1920 853.333V53.3333C1920 23.8781 1896.12 0 1866.67 0H53.3333ZM53.3333 1013.33C23.8781 1013.33 0 1037.21 0 1066.67V1866.67C0 1896.12 23.8782 1920 53.3334 1920H1866.67C1896.12 1920 1920 1896.12 1920 1866.67V1066.67C1920 1037.21 1896.12 1013.33 1866.67 1013.33H53.3333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ListViewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ListView,
+ contentDescription = "ListView",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Lock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Lock.kt
new file mode 100644
index 0000000000..1865a4c33e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Lock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Lock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Lock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1016.588 1242.353v338.823h-112.94v-338.823h112.94ZM960.118 112.94c217.976 0 395.294 177.318 395.294 395.294V903.53H564.824V508.235c0-217.976 177.317-395.294 395.294-395.294Zm508.235 790.588V508.235C1468.353 228.028 1240.325 0 960.118 0S451.882 228.028 451.882 508.235V903.53H226v790.589C226 1818.692 327.308 1920 451.882 1920h1016.47c124.575 0 225.883-101.308 225.883-225.882V903.529h-225.882Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Lock,
+ contentDescription = "Lock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Lti.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Lti.kt
new file mode 100644
index 0000000000..11b2ac9b71
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Lti.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Lti: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Lti",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.176 451.765h-225.882V0h-112.941v451.765H790.647V0H677.706v451.765H338.882v112.94h112.942v169.413c0 280.207 228.028 508.235 508.235 508.235h56.47v395.294c0 93.402-76.009 169.412-169.411 169.412-93.403 0-169.412-76.01-169.412-169.412 0-155.633-126.72-282.353-282.353-282.353S113 1482.014 113 1637.647V1920h112.941v-282.353c0-93.402 76.01-169.412 169.412-169.412s169.412 76.01 169.412 169.412c0 155.633 126.72 282.353 282.353 282.353s282.353-126.72 282.353-282.353v-395.294h56.47c280.207 0 508.235-228.028 508.235-508.235V564.706h112.942V451.765h-112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun LtiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Lti,
+ contentDescription = "Lti",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MarkAsRead.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MarkAsRead.kt
new file mode 100644
index 0000000000..b0c384e44c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MarkAsRead.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MarkAsRead: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MarkAsRead",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MarkAsReadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MarkAsRead,
+ contentDescription = "MarkAsRead",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Marker.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Marker.kt
new file mode 100644
index 0000000000..3aa8c74ea5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Marker.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Marker: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Marker",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M956.952 0c-362.4 0-657 294.6-657 656.88 0 180.6 80.28 347.88 245.4 511.56 239.76 237.96 351.6 457.68 351.6 691.56v60h120v-60c0-232.8 110.28-446.16 357.6-691.44 165.12-163.8 245.4-331.08 245.4-511.68 0-362.28-294.6-656.88-663-656.88"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MarkerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Marker,
+ contentDescription = "Marker",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Masquerade.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Masquerade.kt
new file mode 100644
index 0000000000..e95635a155
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Masquerade.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Masquerade: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Masquerade",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 863.966v830.118c0 124.235-101.647 225.882-225.882 225.882-124.236 0-225.883-101.647-225.883-225.882V1125.99c187.483-15.812 350.118-116.33 451.765-262.024ZM508.235 0C706.108 0 876.085 114.861 960 280.207 1043.915 114.861 1213.892 0 1411.765 0H1920v508.235c0 280.207-228.028 508.236-508.235 508.236h-903.53C228.028 1016.47 0 788.442 0 508.235V0Zm1185.883 338.824h-282.353c-155.746 0-282.353 126.72-282.353 282.352v56.471h282.353c155.746 0 282.353-126.72 282.353-282.353v-56.47Zm-1185.883 0H225.882v56.47c0 155.633 126.607 282.353 282.353 282.353h282.353v-56.47c0-155.633-126.607-282.353-282.353-282.353Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasqueradePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Masquerade,
+ contentDescription = "Masquerade",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MasteryLogo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MasteryLogo.kt
new file mode 100644
index 0000000000..876b825a2f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MasteryLogo.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MasteryLogo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MasteryLogo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M232.092 1059.47C103.84 1059.47 -0.126465 1163.44 -0.126465 1291.69C-0.126465 1419.94 103.84 1523.91 232.092 1523.91C360.345 1523.91 464.311 1419.94 464.311 1291.69C464.311 1163.44 360.345 1059.47 232.092 1059.47Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.181 1059.46C932.074 1059.46 905.605 1064.64 880.773 1073.65L737.513 812.505C792.907 769.937 828.654 703.627 828.654 628.313C828.654 500.061 724.687 396.094 596.435 396.094C468.182 396.094 364.216 500.061 364.216 628.313C364.216 756.566 468.182 860.532 596.435 860.532C624.541 860.532 651.01 855.347 675.842 846.342L819.103 1107.49C763.709 1150.05 727.962 1216.36 727.962 1291.68C727.962 1419.93 831.928 1523.9 960.181 1523.9C1088.43 1523.9 1192.4 1419.93 1192.4 1291.68C1192.4 1163.43 1088.43 1059.46 960.181 1059.46Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1688.18 1059.46C1660.07 1059.46 1633.6 1064.64 1608.5 1073.65L1465.24 812.505C1520.63 769.937 1556.38 703.627 1556.38 628.313C1556.38 500.061 1452.41 396.094 1324.16 396.094C1195.91 396.094 1091.94 500.061 1091.94 628.313C1091.94 756.566 1195.91 860.532 1324.16 860.532C1352.27 860.532 1378.74 855.347 1403.57 846.342L1546.83 1107.49C1491.44 1150.05 1455.69 1216.36 1455.69 1291.68C1455.69 1419.93 1559.65 1523.9 1687.91 1523.9C1816.16 1523.9 1920.13 1419.93 1920.13 1291.68C1920.13 1163.43 1816.16 1059.46 1687.91 1059.46H1688.18Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasteryLogoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MasteryLogo,
+ contentDescription = "MasteryLogo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MasteryPaths.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MasteryPaths.kt
new file mode 100644
index 0000000000..fe119b66b6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MasteryPaths.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MasteryPaths: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MasteryPaths",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1496.099 0-397.312 397.312 151.551 151.55L1388.92 410.28v330.754c0 146.835-74.06 198.066-215.965 283.273-71.06 42.55-150.693 90.46-212.75 161.733-62.056-71.274-141.69-119.183-212.75-161.733C605.552 939.1 531.49 887.87 531.49 741.034V410.28l138.582 138.582 151.551-151.55L424.312 0 27 397.312l151.55 151.55L317.134 410.28v330.754c0 275.02 177.38 381.556 319.928 466.978 141.905 85.207 215.966 136.438 215.966 283.273V1920h214.357v-428.715c0-146.835 74.06-198.066 215.965-283.273 142.548-85.422 319.929-191.958 319.929-466.978V410.28l138.582 138.582 151.55-151.55L1496.1 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MasteryPathsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MasteryPaths,
+ contentDescription = "MasteryPaths",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MaterialsRequired.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MaterialsRequired.kt
new file mode 100644
index 0000000000..7bf6cfd6f6
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MaterialsRequired.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MaterialsRequired: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MaterialsRequired",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1920 1886.762-483.32-128.108-364.527-364.528c109.475-100.158 237.584-220.114 363.363-347.058l356.375 356.375L1920 1886.763ZM396.671 188.74l184.01 184.01-173.528 174.694-185.176-185.175 174.694-173.53Zm150.237 688.293c101.322-112.969 224.772-244.571 355.21-372.68L444.421 46.655c-25.622-25.621-68.713-26.786-95.5 0L78.73 314.52c-12.811 11.646-19.799 29.116-19.799 47.75 0 17.47 6.988 34.938 19.799 46.585l468.179 468.179Zm172.015 668.96c-58.58 130.904-329.705 192.28-505.913 214.757 28.533-73.139 58.697-184.01 58.697-326.794 0-78.263 55.436-160.485 129.157-191.115 21.662-9.084 44.023-13.626 66.966-13.626 59.745 0 122.635 30.28 182.846 88.861 72.09 91.54 95.033 168.288 68.247 227.917ZM1913.944 184.896c2.213-55.785-20.381-90.49-45.653-115.88-19.333-19.333-53.34-42.276-110.29-39.713-320.738 13.043-1132.947 931-1266.995 1084.964-45.654-3.61-91.307 2.911-135.097 21.08-118.093 49.38-200.665 172.131-200.665 298.61 0 227.334-87.696 360.567-88.395 361.732L0 1893.168l117.976-6.522c60.444-3.261 593.61-39.714 707.277-292.903 21.196-47.4 25.855-97.945 15.49-151.285 162.348-141.385 1060.74-938.454 1073.2-1257.562h.001Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MaterialsRequiredPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MaterialsRequired,
+ contentDescription = "MaterialsRequired",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MaterialsRequiredLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MaterialsRequiredLight.kt
new file mode 100644
index 0000000000..0ff51a57f2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MaterialsRequiredLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MaterialsRequiredLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MaterialsRequiredLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1920 1886.762-483.32-128.108-364.527-364.528c109.475-100.158 237.584-220.114 363.363-347.058l356.375 356.375L1920 1886.763ZM396.671 188.74l184.01 184.01-173.528 174.694-185.176-185.175 174.694-173.53Zm150.237 688.293c101.322-112.969 224.772-244.571 355.21-372.68L444.421 46.655c-25.622-25.621-68.713-26.786-95.5 0L78.73 314.52c-12.811 11.646-19.799 29.116-19.799 47.75 0 17.47 6.988 34.938 19.799 46.585l468.179 468.179Zm172.015 668.96c-58.58 130.904-329.705 192.28-505.913 214.757 28.533-73.139 58.697-184.01 58.697-326.794 0-78.263 55.436-160.485 129.157-191.115 21.662-9.084 44.023-13.626 66.966-13.626 59.745 0 122.635 30.28 182.846 88.861 72.09 91.54 95.033 168.288 68.247 227.917ZM1913.944 184.896c2.213-55.785-20.381-90.49-45.653-115.88-19.333-19.333-53.34-42.276-110.29-39.713-320.738 13.043-1132.947 931-1266.995 1084.964-45.654-3.61-91.307 2.911-135.097 21.08-118.093 49.38-200.665 172.131-200.665 298.61 0 227.334-87.696 360.567-88.395 361.732L0 1893.168l117.976-6.522c60.444-3.261 593.61-39.714 707.277-292.903 21.196-47.4 25.855-97.945 15.49-151.285 162.348-141.385 1060.74-938.454 1073.2-1257.562h.001Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MaterialsRequiredLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MaterialsRequiredLight,
+ contentDescription = "MaterialsRequiredLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Mature.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Mature.kt
new file mode 100644
index 0000000000..f0e03a9a7f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Mature.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Mature: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Mature",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1117.937 1672.03 168.734-42.466-55.228-933.12 84.367-21.12 223.962 890.654 337.694-84.931L1518.991 55.955l-590.795 148.63 29.703 760.885c.79 19.765-24.62 26.202-33.317 8.358l-333.854-684.31L.045 438.034l358.363 1424.979 337.58-84.932L471.914 887.54l84.367-21.233 392.923 848.188 168.734-42.466Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MaturePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Mature,
+ contentDescription = "Mature",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MatureLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MatureLight.kt
new file mode 100644
index 0000000000..805e1984c3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MatureLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MatureLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MatureLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1117.937 1672.03 168.734-42.466-55.228-933.12 84.367-21.12 223.962 890.654 337.694-84.931L1518.991 55.955l-590.795 148.63 29.703 760.885c.79 19.765-24.62 26.202-33.317 8.358l-333.854-684.31L.045 438.034l358.363 1424.979 337.58-84.932L471.914 887.54l84.367-21.233 392.923 848.188 168.734-42.466Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MatureLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MatureLight,
+ contentDescription = "MatureLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Media.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Media.kt
new file mode 100644
index 0000000000..6bd6005a09
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Media.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Media: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Media",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 1374.31V545.935l690.346 414.187-690.346 414.186ZM1879.04 321.615c-600.107-143.467-1238.4-143.467-1838.08 0L0 331.429v1257.494l40.96 9.813c300.053 71.68 609.28 108.053 919.04 108.053 309.867 0 619.2-36.373 919.04-108.053l40.96-9.813V331.429l-40.96-9.813Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MediaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Media,
+ contentDescription = "Media",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Message.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Message.kt
new file mode 100644
index 0000000000..0c4204086b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Message.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Message: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Message",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 428.266v1189.54l-464.16-580.146-88.203 70.585 468.679 585.904H83.684l468.679-585.904-88.202-70.585L0 1617.805V428.265l959.944 832.441L1920 428.266ZM1919.932 226v52.627l-959.943 832.44L.045 278.628V226h1919.887Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MessagePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Message,
+ contentDescription = "Message",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Mic.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Mic.kt
new file mode 100644
index 0000000000..e0617ae885
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Mic.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Mic: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Mic",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M425.818 709.983V943.41c0 293.551 238.946 532.497 532.497 532.497 293.55 0 532.496-238.946 532.496-532.497V709.983h96.818V943.41c0 330.707-256.438 602.668-580.9 627.471l-.006 252.301h242.044V1920H667.862v-96.818h242.043l-.004-252.3C585.438 1546.077 329 1274.116 329 943.41V709.983h96.818ZM958.315 0c240.204 0 435.679 195.475 435.679 435.68v484.087c0 240.205-195.475 435.68-435.68 435.68-240.204 0-435.679-195.475-435.679-435.68V435.68C522.635 195.475 718.11 0 958.315 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MicPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Mic,
+ contentDescription = "Mic",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MicOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MicOff.kt
new file mode 100644
index 0000000000..ba901452b5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MicOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MicOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MicOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M666.286 1242.8c-88.168-79.79-143.65-195.06-143.65-323.033V435.679C522.636 195.475 718.111 0 958.315 0c176.955 0 329.645 106.09 397.775 257.997L1536.8 0l92.38 64.669L331.381 1917.48 239 1852.81l305.289-435.84C412.414 1301.53 329 1132.02 329 943.408V709.98h96.818v233.428c0 155.812 67.32 296.242 174.393 393.722l66.075-94.33Zm129.034 207.58-57.716 82.4c54.294 20.4 112.129 33.5 172.304 38.1v252.3H667.861V1920h580.909v-96.82h-242.044v-252.3c324.464-24.8 580.904-296.76 580.904-627.472V709.98h-96.82v233.428c0 293.552-238.94 532.492-532.495 532.492-56.824 0-111.601-8.95-162.995-25.52Zm598.67-854.695L868.36 1346.11c29.036 6.12 59.127 9.34 89.955 9.34 240.205 0 435.675-195.48 435.675-435.683V595.685Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MicOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MicOff,
+ contentDescription = "MicOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowDouble.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowDouble.kt
new file mode 100644
index 0000000000..55994f072d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowDouble.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowDouble: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowDouble",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1319.1 790.054 1020.06 355.79C986.895 307.625 932.507 308.517 899.956 355.79L600.92 790.054C567.754 838.219 588.339 877.264 647.036 877.264H1272.98C1331.62 877.264 1351.65 837.326 1319.1 790.054ZM600.634 1129.94 899.669 1564.21C932.836 1612.37 987.223 1611.48 1019.77 1564.21L1318.81 1129.94C1351.98 1081.78 1331.39 1042.73 1272.69 1042.73L646.75 1042.73C588.114 1042.73 568.082 1082.67 600.634 1129.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowDoublePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowDouble,
+ contentDescription = "MiniArrowDouble",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowDown.kt
new file mode 100644
index 0000000000..84e4592626
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowDown.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M994.034 1226.26c-18.796 27.296-49.269 27.3-68.067 0L574.893 716.424C556.096 689.128 567.713 667 600.852 667h718.297c33.133 0 44.757 22.125 25.959 49.424L994.034 1226.26Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowDown,
+ contentDescription = "MiniArrowDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowEnd.kt
new file mode 100644
index 0000000000..5aeed46483
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowEnd.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1225.982 926.244c27.296 18.796 27.3 49.269 0 68.067l-509.836 351.074c-27.296 18.797-49.424 7.18-49.424-25.959V601.13c0-33.133 22.125-44.757 49.424-25.959l509.836 351.074Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowEnd,
+ contentDescription = "MiniArrowEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowLeft.kt
new file mode 100644
index 0000000000..070b8d8c66
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowLeft.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M694.018 926.244c-27.296 18.796-27.3 49.269 0 68.067l509.836 351.074c27.296 18.797 49.424 7.18 49.424-25.959V601.13c0-33.133-22.125-44.757-49.424-25.959L694.018 926.244Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowLeft,
+ contentDescription = "MiniArrowLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowRight.kt
new file mode 100644
index 0000000000..e59d2e7bdd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowRight.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1225.982 926.244c27.296 18.796 27.3 49.269 0 68.067l-509.836 351.074c-27.296 18.797-49.424 7.18-49.424-25.959V601.13c0-33.133 22.125-44.757 49.424-25.959l509.836 351.074Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowRight,
+ contentDescription = "MiniArrowRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowStart.kt
new file mode 100644
index 0000000000..9ccfc17fac
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowStart.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M694.018 926.244c-27.296 18.796-27.3 49.269 0 68.067l509.836 351.074c27.296 18.797 49.424 7.18 49.424-25.959V601.13c0-33.133-22.125-44.757-49.424-25.959L694.018 926.244Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowStart,
+ contentDescription = "MiniArrowStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowUp.kt
new file mode 100644
index 0000000000..9e021b73ed
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MiniArrowUp.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MiniArrowUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MiniArrowUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M994.034 694.296c-18.796-27.296-49.269-27.3-68.067 0l-351.074 509.836c-18.797 27.296-7.18 49.424 25.959 49.424h718.297c33.133 0 44.757-22.125 25.959-49.424L994.034 694.296Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MiniArrowUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MiniArrowUp,
+ contentDescription = "MiniArrowUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Minimize.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Minimize.kt
new file mode 100644
index 0000000000..0a015bc276
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Minimize.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Minimize: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Minimize",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.468 0 960 430.645 960 960s-430.532 960-960 960C430.645 1920 0 1489.355 0 960S430.645 0 960 0Zm508.235 903.53H451.765v112.94h1016.47V903.53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MinimizePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Minimize,
+ contentDescription = "Minimize",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Module.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Module.kt
new file mode 100644
index 0000000000..24c23fb9a0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Module.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Module: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Module",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1581.176 1072.47h-225.882v438.551l-366.833 213.685c-17.506 10.278-39.416 10.278-56.922 0L564.706 1511.02v-438.55H338.824V685.647c0-20.103 10.842-38.739 28.009-48.79l310.814-181.045v164.894h564.706V455.812l310.814 181.044c17.167 10.052 28.01 28.688 28.01 48.791v386.824Zm112.942 0V685.648c0-60.085-32.189-116.216-84.142-146.485L1242.353 325.14V56H677.647v269.139L310.024 539.162c-51.953 30.269-84.142 86.4-84.142 146.485v386.824H0v564.705h557.026l317.703 185.111c26.429 15.36 55.68 23.04 85.271 23.04 29.59 0 58.955-7.68 85.27-23.04l317.704-185.11H1920V1072.47h-225.882Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ModulePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Module,
+ contentDescription = "Module",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/More.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/More.kt
new file mode 100644
index 0000000000..6eae03fdbe
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/More.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.More: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.More",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1468.235c93.448 0 169.412 75.965 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.447 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.448-75.964 169.412-169.412 169.412-93.448 0-169.412-75.964-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Zm0-677.647c93.448 0 169.412 75.964 169.412 169.412 0 93.447-75.964 169.412-169.412 169.412-93.448 0-169.412-75.965-169.412-169.412 0-93.448 75.964-169.412 169.412-169.412Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MorePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.More,
+ contentDescription = "More",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveDown.kt
new file mode 100644
index 0000000000..85db5aed4e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1524.407v225.882H677.647v-225.882H1920Zm0-451.878v225.996H677.647v-225.996H1920ZM225.882 169.068v451.877H348.65v-222.38l441.94 335.209-441.94 335.322V846.715H0V169.068h225.882Zm1016.47 451.81V846.76h-225.881V620.878h225.882Zm338.824 0V846.76h-225.882V620.878h225.882Zm338.824 0V846.76h-225.882V620.878H1920ZM1920 169v225.995H677.647V169H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveDown,
+ contentDescription = "MoveDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveDownBottom.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveDownBottom.kt
new file mode 100644
index 0000000000..b567d6691e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveDownBottom.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveDownBottom: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveDownBottom",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M677.647 283.848H1920V57.966H677.647v225.882ZM0 57.966v1581.29h348.65v222.155l441.938-335.097-441.939-335.322v222.268H225.882V57.966H0Zm677.647 677.76H1920V509.844H677.647v225.882Zm0 451.652H1920V961.496H677.647v225.882Zm1016.47 451.878H1920V1413.26h-225.882v225.996Zm-338.823 0h225.995V1413.26h-225.995v225.996Zm-338.823 0h225.882V1413.26H1016.47v225.996Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveDownBottomPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveDownBottom,
+ contentDescription = "MoveDownBottom",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveEnd.kt
new file mode 100644
index 0000000000..5e0a78dcfd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveEnd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1684.903 255v1410.58H1920V255h-235.097Zm-778.84 34.406L739.732 455.62l387.087 387.087H0v235.096h1126.819L739.732 1464.89l166.33 166.214 670.85-670.849-670.85-670.849Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveEnd,
+ contentDescription = "MoveEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveLeft.kt
new file mode 100644
index 0000000000..1581eced02
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M235.097 255v1410.58H0V255h235.097Zm778.84 34.406 166.331 166.214-387.087 387.087H1920v235.096H793.181l387.087 387.087-166.33 166.214-670.85-670.849 670.85-670.849Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveLeft,
+ contentDescription = "MoveLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveRight.kt
new file mode 100644
index 0000000000..da913d6bc1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1684.903 255v1410.58H1920V255h-235.097Zm-778.84 34.406L739.732 455.62l387.087 387.087H0v235.096h1126.819L739.732 1464.89l166.33 166.214 670.85-670.849-670.85-670.849Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveRight,
+ contentDescription = "MoveRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveStart.kt
new file mode 100644
index 0000000000..437e1860c4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M235.097 255v1410.58H0V255h235.097Zm778.84 34.406 166.331 166.214-387.087 387.087H1920v235.096H793.181l387.087 387.087-166.33 166.214-670.85-670.849 670.85-670.849Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveStart,
+ contentDescription = "MoveStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveUp.kt
new file mode 100644
index 0000000000..a5bad05852
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M338.818 398.617 745.624 733.82l-406.806 335.204V846.759h-112.94v903.514H0V620.88h338.818V398.617ZM1920 1524.383v225.879H677.669v-225.879H1920Zm0-451.87v225.992H677.669v-225.992H1920ZM1242.365 620.87v225.878h-225.878V620.87h225.878Zm338.817 0v225.878h-225.878V620.87h225.878Zm338.818 0v225.878h-225.878V620.87H1920Zm0-451.87v225.991H677.669V169H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveUp,
+ contentDescription = "MoveUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveUpTop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveUpTop.kt
new file mode 100644
index 0000000000..afc48c5ae3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MoveUpTop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MoveUpTop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MoveUpTop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M338.824 57.966v222.155H0v1581.29h225.882V506.117h112.942v222.268l406.814-335.21L338.824 57.967Zm1355.407 448.15h225.882V280.122H1694.23v225.996Zm-338.937 0h225.995V280.122h-225.995v225.996Zm-338.823 0h225.882V280.122H1016.47v225.996ZM677.76 957.882h1242.353V732H677.76v225.882Zm0 451.765h1242.353v-225.995H677.76v225.995Zm0 451.765h1242.353v-225.883H677.76v225.883Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MoveUpTopPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MoveUpTop,
+ contentDescription = "MoveUpTop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsExcel.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsExcel.kt
new file mode 100644
index 0000000000..9ba64211d7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsExcel.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MsExcel: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MsExcel",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.412 620.765v338.823h338.823v451.765H338.824V620.765h790.588Zm338.823-434.892c39.53 13.78 434.937 434.937 434.937 434.937h-434.937V185.873ZM451.765 959.588h225.882V733.706H451.765v225.882Zm0 338.824h225.882v-225.883H451.765v225.883Zm338.823 0h225.883v-225.883H790.588v225.883Zm0-338.824h225.883V733.706H790.588v225.882Zm338.824 338.824h225.882v-225.883h-225.882v225.883Zm225.882-564.706V169H0v1581.176h1920V733.706h-564.706Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MsExcelPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MsExcel,
+ contentDescription = "MsExcel",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsPpt.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsPpt.kt
new file mode 100644
index 0000000000..f7373b4bf5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsPpt.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MsPpt: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MsPpt",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M677.647 733.706v112.941H338.824V733.706h338.823Zm338.824-225.882v112.94H338.824v-112.94h677.647Zm338.823 225.882V169H0v1581.176h1920V733.706h-564.706Zm-169.412 903.53c-217.976 0-395.294-177.318-395.294-395.295 0-217.976 177.318-395.294 395.294-395.294 217.977 0 395.294 177.318 395.294 395.294 0 217.977-177.317 395.294-395.294 395.294Zm-56.47-671.91v308.668l211.2 203.633c-44.5 29.365-97.581 46.645-154.73 46.645-155.746 0-282.353-126.608-282.353-282.353 0-136.32 97.13-250.391 225.883-276.593Zm112.94 0c128.754 26.202 225.883 140.273 225.883 276.593 0 57.713-17.506 111.473-47.435 156.197l-178.447-172.122Zm225.883-779.453s421.158 395.407 434.937 434.937h-434.937Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MsPptPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MsPpt,
+ contentDescription = "MsPpt",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsWord.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsWord.kt
new file mode 100644
index 0000000000..69822186cf
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/MsWord.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.MsWord: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.MsWord",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.47-.011v564.706h564.706v1355.294H169v-1920h1016.47Zm112.942 1355.294H507.824v113.054h790.588v-113.054ZM1185.47 1129.4H507.824v112.942h677.647V1129.4Zm225.882-225.882h-903.53v112.941h903.53V903.52ZM959.7 338.812H507.824V790.69H959.7V338.812Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M620.765 677.647h225.882V451.765H620.765zM1298.4 451.81h434.937L1298.4 16.873z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MsWordPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.MsWord,
+ contentDescription = "MsWord",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Muted.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Muted.kt
new file mode 100644
index 0000000000..be22a11b09
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Muted.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Muted: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Muted",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1555.2 417.882 11.294 15.812c83.577 121.977 127.624 264.282 127.624 413.365v395.294c0 124.235 101.647 225.882 225.882 225.882v112.941h-621.176C1298.824 1767.53 1146.353 1920 960 1920s-338.824-152.47-338.824-338.824v-48.564L1555.2 417.882ZM1016.493-.034v115.765c76.687 5.76 151.68 22.927 223.51 52.292 57.036 24.169 109.102 54.211 155.86 88.884l198.55-236.724 86.513 72.62-1468.235 1750.59-86.513-72.621 159.021-189.628H.023V1468.2c59.745 0 118.136-24.056 159.924-65.957 41.901-41.788 65.958-100.066 65.958-159.925V847.025c0-385.694 299.181-702.155 677.647-731.181V-.034h112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun MutedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Muted,
+ contentDescription = "Muted",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Neutral.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Neutral.kt
new file mode 100644
index 0000000000..a7f2c49fed
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Neutral.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Neutral: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Neutral",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M426.667 1040H1493.33V880H426.667V1040Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NeutralPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Neutral,
+ contentDescription = "Neutral",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NextUnread.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NextUnread.kt
new file mode 100644
index 0000000000..65fced44c5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NextUnread.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.NextUnread: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.NextUnread",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m0 524.664 878.039 812.43 592.454-557.236c48.603 25.014 101.924 40.484 158.207 43.007 5.815.22 11.41.33 17.225.33 38.29 0 74.606-7.132 109.495-17.555v857.633l-424.812-491.847-82.943 71.643 442.804 512.692H64.951l442.804-512.692-82.943-71.643L0 1663.273V524.663ZM1278.977 329.56c-8.777 29.622-15.47 60.232-16.786 92.598-4.608 102.473 30.939 200.557 100.278 276.26 5.376 5.924 11.85 10.312 17.554 15.798l-502.598 472.866L.044 375.091V329.56ZM1645.552 165c4.06 0 8.229.11 12.398.22 151.295 6.802 268.47 134.838 261.777 286.243-6.583 147.126-127.926 262.106-273.736 262.106-4.06 0-8.338-.11-12.507-.33-151.295-6.692-268.47-134.838-261.667-286.243C1378.29 279.87 1499.743 165 1645.552 165Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NextUnreadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.NextUnread,
+ contentDescription = "NextUnread",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/No.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/No.kt
new file mode 100644
index 0000000000..972e10dbb4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/No.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.No: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.No",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M213.333 960c0-167.36 56-321.707 149.44-446.4L1406.4 1557.227c-124.693 93.44-279.04 149.44-446.4 149.44-411.627 0-746.667-335.04-746.667-746.667m1493.334 0c0 167.36-56 321.707-149.44 446.4L513.6 362.773c124.693-93.44 279.04-149.44 446.4-149.44 411.627 0 746.667 335.04 746.667 746.667M960 0C429.76 0 0 429.76 0 960s429.76 960 960 960 960-429.76 960-960S1490.24 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.No,
+ contentDescription = "No",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NotGraded.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NotGraded.kt
new file mode 100644
index 0000000000..b8632f87f7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NotGraded.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.NotGraded: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.NotGraded",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1468.235 1355.294h112.941v-338.823h-112.94v338.823Zm0 225.882h112.941v-112.94h-112.94v112.94Zm56.47-677.647c217.977 0 395.295 177.318 395.295 395.295 0 217.976-177.318 395.294-395.294 395.294-217.977 0-395.294-177.318-395.294-395.294 0-217.977 177.317-395.295 395.294-395.295Zm-847.058 338.824v112.941H338.824v-112.941h338.823ZM903.53 1016.47v112.94H338.824v-112.94h564.705Zm225.883-677.647v451.764H338.824V338.824h790.588Zm-112.941 960c0-260.895 198.324-474.015 451.764-502.476V0H0v1920h1468.235v-118.701c-253.44-28.461-451.764-241.581-451.764-502.475Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NotGradedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.NotGraded,
+ contentDescription = "NotGraded",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Note.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Note.kt
new file mode 100644
index 0000000000..d914fb762d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Note.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Note: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Note",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.412 1242.353v112.941H338.824v-112.941h790.588Zm451.764-338.824v112.942H338.824V903.529h1242.352ZM621.176 0c93.403 0 169.412 76.01 169.412 169.412 0 26.09-6.437 50.484-16.94 72.62L999.98 468.255l-79.962 79.962-226.221-226.334c-22.137 10.504-46.645 16.942-72.622 16.942-93.402 0-169.411-76.01-169.411-169.412C451.765 76.009 527.775 0 621.176 0ZM344.471 225.882c25.976 128.753 140.047 225.883 276.705 225.883 13.553 0 27.106-1.13 39.53-3.389L920.47 708.141l239.435-239.435-242.824-242.824H1920v1129.412h-564.706V1920H0V225.882Zm1568.188 1242.365-444.424 444.31v-444.31h444.424Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NotePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Note,
+ contentDescription = "Note",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NoteDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NoteDark.kt
new file mode 100644
index 0000000000..0fc67612cb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NoteDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.NoteDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.NoteDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.412 1242.353v112.941H338.824v-112.941h790.588Zm451.764-338.824v112.942H338.824V903.529h1242.352ZM621.176 0c93.403 0 169.412 76.01 169.412 169.412 0 26.09-6.437 50.484-16.94 72.62L999.98 468.255l-79.962 79.962-226.221-226.334c-22.137 10.504-46.645 16.942-72.622 16.942-93.402 0-169.411-76.01-169.411-169.412C451.765 76.009 527.775 0 621.176 0ZM344.471 225.882c25.976 128.753 140.047 225.883 276.705 225.883 13.553 0 27.106-1.13 39.53-3.389L920.47 708.141l239.435-239.435-242.824-242.824H1920v1129.412h-564.706V1920H0V225.882Zm1568.188 1242.365-444.424 444.31v-444.31h444.424Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NoteDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.NoteDark,
+ contentDescription = "NoteDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NoteLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NoteLight.kt
new file mode 100644
index 0000000000..c6fe5b9ed5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NoteLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.NoteLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.NoteLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.412 1242.353v112.941H338.824v-112.941h790.588Zm451.764-338.824v112.942H338.824V903.529h1242.352ZM621.176 0c93.403 0 169.412 76.01 169.412 169.412 0 26.09-6.437 50.484-16.94 72.62L999.98 468.255l-79.962 79.962-226.221-226.334c-22.137 10.504-46.645 16.942-72.622 16.942-93.402 0-169.411-76.01-169.411-169.412C451.765 76.009 527.775 0 621.176 0ZM344.471 225.882c25.976 128.753 140.047 225.883 276.705 225.883 13.553 0 27.106-1.13 39.53-3.389L920.47 708.141l239.435-239.435-242.824-242.824H1920v1129.412h-564.706V1920H0V225.882Zm1568.188 1242.365-444.424 444.31v-444.31h444.424Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NoteLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.NoteLight,
+ contentDescription = "NoteLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Notepad.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Notepad.kt
new file mode 100644
index 0000000000..873d8b4368
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Notepad.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Notepad: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Notepad",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1164.23 160.333h304.01v337.82L840.282 1126.11c-31.623 31.62-49.694 74.54-49.694 119.71v395.3h395.292c45.18 0 88.1-18.07 119.72-49.7l162.64-162.63V1867H0V160.333h329.104C351.069 98.19 410.335 53.667 480 53.667h533.33c69.67 0 128.93 44.523 150.9 106.666Zm-737.563 53.334c0-29.456 23.878-53.334 53.333-53.334h533.33c29.46 0 53.34 23.878 53.34 53.334v160H426.667v-160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1677.57 528.308 225.88 225.882c22.02 22.024 22.02 57.713 0 79.85l-677.65 677.65c-10.62 10.5-24.96 16.49-39.98 16.49H903.467v-282.36c0-15.02 5.986-29.36 16.489-39.87L1597.6 528.308c22.14-22.137 57.83-22.137 79.97 0Zm-129.55 209.28 146.03 146.033 89.56-89.562-146.03-146.033-89.56 89.562Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NotepadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Notepad,
+ contentDescription = "Notepad",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NumberedList.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NumberedList.kt
new file mode 100644
index 0000000000..a7b82fdfb4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/NumberedList.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.NumberedList: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.NumberedList",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M169.412 1355.294c93.402 0 169.412 76.01 169.412 169.412 0 43.595-16.942 82.899-44.048 112.941 27.106 30.042 44.048 69.346 44.048 112.941 0 93.403-76.01 169.412-169.412 169.412H0v-112.941h169.412c31.059 0 56.47-25.412 56.47-56.47 0-31.06-25.411-56.471-56.47-56.471H0v-112.942h169.412c31.059 0 56.47-25.411 56.47-56.47 0-31.059-25.411-56.47-56.47-56.47H0v-112.942Zm1750.588 0v225.882H564.706v-225.882H1920ZM188.058 677.67c61.78 0 118.814 38.4 145.356 97.694 28.8 64.037 15.36 136.546-35.916 194.033-16.286 18.262-34.108 37.88-52.187 57.582l-3.101 3.377c-2.07 2.252-4.14 4.505-6.213 6.755l-3.108 3.374-3.107 3.37c-28.478 30.87-56.688 61.043-79.672 85.58h188.725v112.94H56.482c-31.285 0-56.47-25.298-56.47-56.47v-39.53c0-14.456 5.533-28.46 15.585-38.964.113-.113 117.459-123.558 197.647-213.233 21.346-23.944 27.445-49.807 17.167-72.621-8.131-18.297-25.637-30.946-42.353-30.946-40.546 0-82.898 48.452-94.418 65.506L.01 792.983C7.804 781.237 80.425 677.67 188.058 677.67ZM1920 790.588v225.883H564.706V790.588H1920ZM169.412 0c31.172 0 56.47 25.299 56.47 56.47v508.236h-112.94V112.94H0V0ZM1920 225.882v225.883H564.706V225.882H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun NumberedListPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.NumberedList,
+ contentDescription = "NumberedList",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Off.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Off.kt
new file mode 100644
index 0000000000..ec17b5bd32
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Off.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Off: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Off",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M642.077 960.295c0-175.276 142.637-317.913 317.912-317.913 68.458 0 130.45 23.632 182.27 60.721L702.8 1142.564c-37.09-51.82-60.722-113.812-60.722-182.27ZM1717.257 128l75.027 75.027-573.726 573.62-442.216 442.216-573.62 573.726-75.027-75.027 283.79-283.684c-26.811-17.273-54.151-35.924-82.128-57.118C199.225 1275.346 89.651 1139.597 11.87 984.032L0 960.401l11.763-23.738C199.437 559.09 562.81 324.47 959.989 324.47c111.376 0 220.314 18.545 323.847 54.999 42.282 13.246 85.519 32.003 128.649 53.409L1717.257 128Zm-121.422 421.16C1723 648.666 1831.091 783.355 1908.45 937.013l11.55 23.313-11.55 23.208c-187.675 378.422-551.049 612.617-948.44 612.617-111.269 0-220.419-18.015-324.27-55.105l-23.314-8.477 266.199-266.305c26.069 7.1 52.985 11.975 81.386 11.975 175.275 0 317.912-142.637 317.912-317.913 0-28.4-4.875-55.316-11.869-81.385Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Off,
+ contentDescription = "Off",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/OpenFolder.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/OpenFolder.kt
new file mode 100644
index 0000000000..8717dd8395
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/OpenFolder.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.OpenFolder: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.OpenFolder",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m572.501 747-254.933 815.893-101.867-31.786 278.507-890.774h1105.813v-320H783.808L612.181 107H.021v1546.667c0 88.213 71.787 160 160 160h1388.054c75.946 0 141.973-54.08 156.906-128.64L1892.608 747H572.501Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OpenFolderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.OpenFolder,
+ contentDescription = "OpenFolder",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outcomes.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outcomes.kt
new file mode 100644
index 0000000000..1755832a96
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outcomes.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Outcomes: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Outcomes",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M940.253 101.053c158.147 0 314.173 42.644 451.301 123.284l-82.156 139.351C1197.23 297.6 1069.5 262.737 940.253 262.737c-401.179 0-727.579 326.4-727.579 727.579s326.4 727.579 727.58 727.579c401.178 0 727.578-326.4 727.578-727.58 0-129.246-34.964-256.976-101.053-369.246l139.352-82.054c80.741 137.128 123.385 293.254 123.385 451.3 0 490.308-398.956 889.264-889.263 889.264-490.408 0-889.263-398.956-889.263-889.263 0-490.409 398.855-889.263 889.263-889.263Zm.01 303.137v161.685c-234.038 0-424.42 190.383-424.42 424.42 0 234.038 190.382 424.422 424.42 424.422 233.937 0 424.421-190.384 424.421-424.421h161.684c0 323.166-262.939 586.105-586.105 586.105s-586.105-262.94-586.105-586.105c0-323.167 262.939-586.106 586.105-586.106Zm-.02 303.138v161.684c-66.897 0-121.263 54.468-121.263 121.263 0 66.897 54.366 121.264 121.263 121.264s121.263-54.367 121.263-121.264h161.684c0 156.026-126.922 282.948-282.947 282.948S657.296 1146.3 657.296 990.275c0-156.025 126.922-282.947 282.947-282.947Zm736.825-597.05 142.99 142.99-426.341 426.24 186.543 186.543h-515.773V350.28l186.341 186.34 426.24-426.34Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OutcomesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Outcomes,
+ contentDescription = "Outcomes",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outdent.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outdent.kt
new file mode 100644
index 0000000000..4d2cd28132
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outdent.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Outdent: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Outdent",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1518.813v225.882H112.941v-225.882H1920Zm0-451.878v225.995H112.941v-225.995H1920ZM515.656 112.955v276.48h274.898v225.882H515.656v276.367L-.034 502.376l515.69-389.421ZM1920 615.283v225.883H903.53V615.283H1920Zm0-451.877V389.4H903.53V163.406H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OutdentPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Outdent,
+ contentDescription = "Outdent",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outdent2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outdent2.kt
new file mode 100644
index 0000000000..697a87e8fc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Outdent2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Outdent2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Outdent2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1518.813v225.882H112.941v-225.882H1920Zm0-451.878v225.995H112.941v-225.995H1920ZM515.656 112.955v276.48h274.898v225.882H515.656v276.367L-.034 502.376l515.69-389.421ZM1920 615.283v225.883H903.53V615.283H1920Zm0-451.877V389.4H903.53V163.406H1920Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Outdent2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Outdent2,
+ contentDescription = "Outdent2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/OvalHalf.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/OvalHalf.kt
new file mode 100644
index 0000000000..8cd4140472
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/OvalHalf.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.OvalHalf: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.OvalHalf",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c530.193 0 960 429.807 960 960s-429.807 960-960 960S0 1490.193 0 960 429.807 0 960 0Zm0 106.667c-453.37 0-824.16 353.558-851.693 799.994h1703.386C1784.16 460.225 1413.37 106.667 960 106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun OvalHalfPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.OvalHalf,
+ contentDescription = "OvalHalf",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PageDown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PageDown.kt
new file mode 100644
index 0000000000..0b4dfd569d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PageDown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.PageDown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.PageDown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m961.74 1237.15 531.725-531.61-159.811-159.698-258.86 258.972V0H848.8v804.814L589.94 545.842 430.13 705.538l531.61 531.611Zm788.427 344.141v-225.994H169v225.994h1581.167Zm0 338.709v-225.881H169V1920h1581.167Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PageDownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.PageDown,
+ contentDescription = "PageDown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PageUp.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PageUp.kt
new file mode 100644
index 0000000000..5333624387
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PageUp.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.PageUp: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.PageUp",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M169 225.88h1581.167V0H169v225.88Zm0 338.823h1581.167V338.708H169v225.995Zm261.13 649.758 159.811 159.697 258.86-258.972V1920h225.993v-804.814l258.86 258.972 159.811-159.697L961.74 682.85l-531.61 531.611Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PageUpPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.PageUp,
+ contentDescription = "PageUp",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Paint.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Paint.kt
new file mode 100644
index 0000000000..a3d7e37576
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Paint.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Paint: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Paint",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M392.26 1042.5c137.747-57.67 292.85-15.269 425.873 116.217l4.394 4.833c116.656 146.425 149.5 279.119 97.873 394.237-128.85 287.138-740.692 328.77-810.005 332.504L0 1896.442l61.953-91.83c.989-1.539 105.013-158.728 105.013-427.192 0-141.811 92.6-279.558 225.294-334.92ZM1728.701 23.052c54.923-1.099 99.96 15.268 135.111 49.43 40.643 40.644 58.109 87.877 56.021 140.603C1908.85 474.52 1423.33 953.447 1053.15 1280.79c-24.276-64.81-63.711-136.21-125.335-213.102l-8.787-9.886c-80.078-80.187-169.163-135.11-262.423-161.473C955.276 558.002 1460.677 33.927 1728.701 23.052Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PaintPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Paint,
+ contentDescription = "Paint",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Paperclip.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Paperclip.kt
new file mode 100644
index 0000000000..7eaf651d2d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Paperclip.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Paperclip: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Paperclip",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1748.318 252.722c-229.016-229.016-601.528-228.91-830.438 0l-792.748 792.749C44.522 1126.187 0 1233.38 0 1347.409c0 114.135 44.522 221.33 125.132 301.939 161.432 161.432 442.658 161.432 603.983 0l717.371-717.264c103.885-103.992 103.885-273.218-.213-377.53-104.099-103.992-273.646-103.885-377.424.107l-603.983 603.983 151.076 150.97 603.77-603.877c20.926-20.713 54.878-20.927 75.591-.214 20.82 20.927 20.82 54.879.107 75.698L578.146 1498.38c-80.716 80.716-221.329 80.716-302.045 0-40.358-40.358-62.566-93.956-62.566-150.97 0-57.013 22.208-110.61 62.566-150.969l792.748-792.749c145.631-145.417 382.655-145.63 528.5 0 145.63 145.631 145.63 382.869 0 528.5l-754.953 755.06 150.969 150.969 754.953-755.06c228.91-228.91 228.91-601.422 0-830.438"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PaperclipPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Paperclip,
+ contentDescription = "Paperclip",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Partial.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Partial.kt
new file mode 100644
index 0000000000..9caa85ea47
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Partial.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Partial: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Partial",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.468 0 960 430.645 960 960s-430.532 960-960 960C430.645 1920 0 1489.355 0 960S430.645 0 960 0Zm508.235 903.53H451.765v112.94h1016.47V903.53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PartialPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Partial,
+ contentDescription = "Partial",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PasswordReset.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PasswordReset.kt
new file mode 100644
index 0000000000..c77a431ad3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PasswordReset.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.PasswordReset: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.PasswordReset",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1072.56 846.555H846.68V733.614C846.68 671.384 897.39 620.674 959.62 620.674C1021.85 620.674 1072.56 671.384 1072.56 733.614V846.555ZM1185.5 733.615C1185.5 609.042 1084.19 507.734 959.622 507.734C835.048 507.734 733.741 609.042 733.741 733.615V846.555H620.801V1241.85C620.801 1335.25 696.81 1411.26 790.211 1411.26H1129.03C1222.43 1411.26 1298.44 1335.25 1298.44 1241.85V846.555H1185.5V733.615Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0V213.333C1371.63 213.333 1706.67 548.267 1706.67 960C1706.67 1371.73 1371.63 1706.67 960 1706.67C548.373 1706.67 213.333 1371.73 213.333 960C213.333 762.987 291.733 577.493 426.667 439.253V693.333H640V106.667H53.3333V320H244.373C88.64 494.08 0 720.96 0 960C0 1489.28 430.613 1920 960 1920C1489.39 1920 1920 1489.28 1920 960C1920 430.72 1489.39 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PasswordResetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.PasswordReset,
+ contentDescription = "PasswordReset",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pause.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pause.kt
new file mode 100644
index 0000000000..8eaf534f39
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pause.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Pause: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Pause",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M754.571 0v1920H206V0h548.571Zm960 0v1920H1166V0h548.571Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PausePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Pause,
+ contentDescription = "Pause",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pdf.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pdf.kt
new file mode 100644
index 0000000000..0f901ffc88
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pdf.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Pdf: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Pdf",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.46.034V564.74h564.705v1355.294H168.99V.034h1016.47ZM900.508 677.68c-16.829 0-31.963 7.567-42.918 21.007-49.807 59.972-31.398 193.016-18.748 272.075 2.823 17.958.452 36.141-7.228 52.518l-107.86 233.223c-7.905 16.942-20.555 30.608-36.592 39.53-68.104 37.835-182.287 89.675-196.066 182.626-4.97 30.268 5.082 56.357 28.574 79.85 15.925 15.133 35.238 22.7 56.245 22.7 81.43 0 132.819-71.717 188.273-148.517 24.62-34.221 61.666-55.229 102.437-60.876 76.349-10.503 167.83-32.527 223.172-46.983 27.897-7.341 56.358-5.534 83.802 3.162 48.565 15.586 66.975 25.073 122.768 25.073 50.371 0 84.818-11.746 101.534-34.447 13.44-16.828 16.715-39.53 10.164-65.619-11.858-42.804-2.033-89.675-133.044-89.675-29.365 0-57.94 2.824-81.77 6.099-36.819 4.97-73.299-10.955-97.016-40.885-32.301-40.546-65.167-88.433-87.981-123.219-16.151-24.508-21.572-53.986-16.264-83.124 15.473-84.706 18.41-147.615-23.492-206.683-17.619-25.186-41.223-37.835-67.99-37.835Zm397.903-660.808 434.936 434.937h-434.936V16.873Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M791.057 1297.943c92.273-43.37 275.916-65.28 275.916-65.28-92.386-88.998-145.92-215.04-145.92-215.04-43.257 126.607-119.718 264.282-129.996 280.32"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PdfPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Pdf,
+ contentDescription = "Pdf",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PeerGraded.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PeerGraded.kt
new file mode 100644
index 0000000000..c67014219e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PeerGraded.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.PeerGraded: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.PeerGraded",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M716.582 133c212.77 0 385.853 173.082 385.853 385.852v110.244c0 116.747-53.138 220.266-135.49 291.153 59.752 7.165 119.284 16.205 178.264 28.553 166.798 35.167 287.956 194.249 287.956 378.355v211.778l-22.49 16.536c-120.937 88.746-367.22 232.393-694.974 232.393-17.198 0-34.837-.44-52.476-1.212-288.838-13.56-507.892-133.174-640.846-231.291L0 1538.825v-211.778C0 1142.94 121.268 983.859 288.176 948.69c58.65-12.237 117.96-21.718 177.492-28.994-82.02-70.776-134.938-174.074-134.938-290.601V518.852C330.73 306.082 503.813 133 716.582 133ZM625.08 463.73c-97.675 0-116.858 71.99-184.106 99.22v66.146c0 151.915 123.583 275.608 275.608 275.608 152.026 0 275.61-123.693 275.61-275.608V518.852c0-2.536-.662-4.96-.773-7.607-2.956 2.68-5.884 5.384-8.813 8.088l-1.952 1.803c-28.97 26.728-58.555 52.838-116.345 52.838-120.166 0-120.166-110.244-239.229-110.244Zm1216.978-156.115-353.771 353.77-157.428-157.427-77.942 77.942 235.37 235.37L1920 385.557l-77.942-77.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PeerGradedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.PeerGraded,
+ contentDescription = "PeerGraded",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PeerReview.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PeerReview.kt
new file mode 100644
index 0000000000..1c2c6ec745
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PeerReview.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.PeerReview: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.PeerReview",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1507.339 693h-120.64V572.36l225.386-225.493 120.747 120.64L1507.339 693ZM604.8 479.667c56.448 0 85.236 25.61 113.597 51.733l3.473 3.2c28.371 26.123 57.426 51.733 114.397 51.733 54.566 0 83.297-24.14 110.706-49.381l1.889-1.742 1.886-1.744 1.885-1.745 1.887-1.742a887.573 887.573 0 0 1 4.733-4.339c.107 2.56.747 4.907.747 7.36v106.667c0 146.986-119.68 266.666-266.667 266.666-146.986 0-266.666-119.68-266.666-266.666v-64c24.074-9.749 41.782-25.426 59.326-41.31l2.844-2.576c28.925-26.196 58.314-52.114 115.963-52.114ZM1624.885 183.24c28.48-28.373 74.774-28.48 103.147 0l168.32 168.32c28.48 28.48 28.48 74.773 0 103.253l-323.52 323.52c-14.08 13.867-32.213 21.334-51.52 21.334h-241.28v-241.28c0-19.307 7.467-37.547 21.013-51.307ZM1108.053 949c-57.066-11.947-114.666-20.693-172.48-27.627 79.574-68.586 131.094-168.746 131.094-281.706V533c0-205.867-167.467-373.333-373.334-373.333C487.467 159.667 320 327.133 320 533v106.667c0 112.746 51.2 212.693 130.56 281.173-57.6 7.04-114.987 16.213-171.733 28.053C117.333 982.92 0 1136.84 0 1314.973v204.907l21.653 16c128.64 94.933 340.587 210.667 619.947 223.787 17.173.746 34.133 1.173 50.987 1.173 317.013 0 555.413-138.987 672.32-224.853l21.76-16V1315.08c0-178.133-117.227-332.053-278.614-366.08"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PeerReviewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.PeerReview,
+ contentDescription = "PeerReview",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Permissions.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Permissions.kt
new file mode 100644
index 0000000000..ae30469246
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Permissions.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Permissions: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Permissions",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1600 1066.667c117.653 0 213.333 95.68 213.333 213.333v106.667H1920V1760c0 88.213-71.787 160-160 160h-320c-88.213 0-160-71.787-160-160v-373.333h106.667V1280c0-117.653 95.68-213.333 213.333-213.333ZM800 0c90.667 0 179.2 25.6 254.933 73.6 29.867 18.133 58.667 40.533 84.267 66.133 49.067 49.067 84.8 106.88 108.053 169.814 11.307 30.4 20.8 61.44 25.814 94.08l2.24 14.613 3.626 20.16-.533.32v.213l-52.693 32.427c-44.694 28.907-95.467 61.547-193.067 61.867-.427 0-.747.106-1.173.106-24.534 0-46.08-2.133-65.28-5.653-.64-.107-1.067-.32-1.707-.427-56.32-10.773-93.013-34.24-126.293-55.68-9.6-6.293-18.774-12.16-28.16-17.6-27.947-16-57.92-27.306-108.16-27.306h-.32c-57.814.106-88.747 15.893-121.387 36.266-4.48 2.88-8.853 5.44-13.44 8.427-3.093 2.027-6.72 4.16-9.92 6.187-6.293 4.053-12.693 8.106-19.627 12.16-4.48 2.666-9.493 5.013-14.293 7.573-6.933 3.627-13.973 7.147-21.76 10.453-6.613 2.987-13.76 5.547-21.12 8.107-6.933 2.347-14.507 4.267-22.187 6.293-8.96 2.347-17.813 4.587-27.84 6.187-1.173.213-2.133.533-3.306.747v57.6c0 17.066 1.066 34.133 4.266 50.133C454.4 819.2 611.2 960 800 960c195.2 0 356.267-151.467 371.2-342.4 48-14.933 82.133-37.333 108.8-54.4v23.467c0 165.546-84.373 311.786-212.373 398.08h4.906a1641.19 1641.19 0 0 1 294.08 77.76C1313.28 1119.68 1280 1195.733 1280 1280h-106.667v480c0 1.387.427 2.667.427 4.16-142.933 37.547-272.427 49.173-373.76 49.173-345.493 0-612.053-120.32-774.827-221.333L0 1576.32v-196.373c0-140.054 85.867-263.04 218.667-313.28 100.373-38.08 204.586-64.96 310.186-82.347h4.8C419.52 907.413 339.2 783.787 323.2 640c-2.133-17.067-3.2-35.2-3.2-53.333V480c0-56.533 9.6-109.867 27.733-160C413.867 133.333 592 0 800 0Zm800 1173.333c-58.773 0-106.667 47.894-106.667 106.667v106.667h213.334V1280c0-58.773-47.894-106.667-106.667-106.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PermissionsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Permissions,
+ contentDescription = "Permissions",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pin.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pin.kt
new file mode 100644
index 0000000000..6b1997c325
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pin.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Pin: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Pin",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1154.976 0 988.342 166.52c-60.448 60.447-63.436 153.418-15.4 220.646L670.359 689.751c-4.022 4.022-6.55 8.964-9.079 13.79-147.212-61.022-328.671-34.246-444.626 81.709l-98.027 98.141 418.31 418.195-520.129 520.129c-22.41 22.409-22.41 58.724 0 81.248 11.262 11.147 25.972 16.778 40.682 16.778s29.42-5.63 40.567-16.778l520.128-520.129 418.195 418.31 98.142-98.142c75.962-75.847 117.793-176.862 117.793-284.313 0-56.195-12.067-110.208-33.787-160.198 2.758-1.839 5.861-2.988 8.275-5.516l303.963-303.964c29.19 21.145 63.896 33.097 100.67 33.097 46.083 0 89.293-17.928 121.93-50.565L1920 764.909 1154.976 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PinPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Pin,
+ contentDescription = "Pin",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pinterest.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pinterest.kt
new file mode 100644
index 0000000000..6e20e8c4ec
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Pinterest.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Pinterest: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Pinterest",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M796.863 1332.48C745.587 1596.875 679.29 1787.52 494.067 1920c-57.26-399.473 84.029-699.445 149.534-1018.165-111.811-185.11 13.44-557.816 249.036-466.108 289.92 113.054-230.174 661.384 133.044 733.327 379.257 74.993 515.012-572.16 279.982-807.303-339.727-339.502-1016.584-51.615-911.21 429.74 42.466 194.034-101.986 249.262-101.986 249.262C175.46 993.318 164.28 829.1 170.265 668.838 183.705 300.31 506.49 42.24 830.293 6.438c409.525-45.177 793.864 148.066 846.833 527.548 59.859 428.16-176.979 920.019-614.965 886.588-118.588-9.035-265.298-88.094-265.298-88.094"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PinterestPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Pinterest,
+ contentDescription = "Pinterest",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Play.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Play.kt
new file mode 100644
index 0000000000..be7525f673
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Play.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Play: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Play",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M175 .024V1920l1570.845-959.927z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PlayPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Play,
+ contentDescription = "Play",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Plus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Plus.kt
new file mode 100644
index 0000000000..65fc89ac37
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Plus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Plus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Plus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M866.332 213v653.332H213v186.666h653.332v653.332h186.666v-653.332h653.332V866.332h-653.332V213z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PlusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Plus,
+ contentDescription = "Plus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PostToSis.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PostToSis.kt
new file mode 100644
index 0000000000..366a77c5fa
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/PostToSis.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.PostToSis: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.PostToSis",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M922.293 1188.96c20.8-20.8 54.614-20.8 75.414 0l266.666 266.667-75.413 75.413-175.573-175.573v564.586H906.72v-564.586L731.04 1531.04l-75.413-75.413ZM1600-.043c88.213 0 160 71.787 160 160v746.667c0 88.32-71.787 160-160 160H320c-88.213 0-160-71.68-160-160V159.957c0-88.213 71.787-160 160-160Zm-68.587 306.134c-70.826-73.067-186.986-109.12-275.84-85.547-62.826 16.427-106.56 59.733-122.986 121.813-34.667 131.2 99.84 213.654 185.066 241.92 1.174.427 132.907 46.614 113.494 111.68-7.574 25.707-23.68 40.854-50.667 47.36-51.52 13.014-125.76-12.16-169.067-56.533l-76.373 74.347c56.427 58.026 139.093 92.266 215.68 92.266 19.093 0 37.653-2.026 55.36-6.4 63.68-15.786 108.907-58.56 127.36-120.64 39.253-132.053-96.32-215.253-182.507-243.413-1.386-.427-132.693-47.147-115.2-113.28 6.614-24.64 21.44-39.36 46.827-45.973 51.307-13.227 128.853 11.84 172.48 56.746Zm-746.666 0c-70.827-73.067-187.094-109.12-275.84-85.547-62.827 16.427-106.56 59.733-122.987 121.813-34.667 131.2 99.84 213.654 185.067 241.92 1.173.427 132.906 46.614 113.493 111.68-7.573 25.707-23.68 40.854-50.667 47.36-51.306 13.014-125.76-12.16-169.066-56.533l-76.374 74.347c56.427 58.026 139.094 92.266 215.68 92.266 19.094 0 37.654-2.026 55.36-6.4 63.68-15.786 108.907-58.56 127.36-120.64 39.254-132.053-96.32-215.253-182.506-243.413-1.387-.427-132.694-47.147-115.2-113.28 6.613-24.64 21.44-39.36 46.826-45.973 51.52-13.227 128.747 11.84 172.48 56.746Zm228.586-92.8H906.667v640h106.666v-640Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PostToSisPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.PostToSis,
+ contentDescription = "PostToSis",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Predictive.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Predictive.kt
new file mode 100644
index 0000000000..065ecc4d2f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Predictive.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Predictive: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Predictive",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1515.03 881.587C1548.92 894.559 1585.07 901.308 1621.73 901.302C1700.81 901.2 1776.63 869.736 1832.54 813.81C1888.46 757.885 1919.91 682.065 1920 602.982C1920 543.977 1902.5 486.298 1869.72 437.239C1836.94 388.179 1790.34 349.943 1735.83 327.365C1681.32 304.788 1621.33 298.883 1563.46 310.397C1505.59 321.912 1452.44 350.329 1410.72 392.054C1369 433.78 1340.59 486.94 1329.09 544.812C1317.58 602.683 1323.49 662.667 1346.08 717.177C1362.85 757.657 1388.26 793.768 1420.32 823.097L1287.34 1038.33C1234.89 1018.28 1177.78 1013.41 1122.6 1024.39C1105.93 1027.71 1089.65 1032.43 1073.92 1038.46L940.742 822.916C943.974 819.958 947.146 816.922 950.257 813.81C1006.17 757.885 1037.63 682.065 1037.71 602.982C1037.71 543.977 1020.22 486.298 987.435 437.239C954.653 388.179 908.059 349.943 853.545 327.365C799.032 304.788 739.047 298.883 681.177 310.397C623.308 321.912 570.152 350.329 528.433 392.054C486.714 433.78 458.306 486.94 446.801 544.812C435.295 602.683 441.21 662.667 463.796 717.177C480.566 757.648 505.966 793.752 538.018 823.078L404.983 1038.4C352.486 1018.29 295.318 1013.4 240.075 1024.39C182.207 1035.9 129.051 1064.31 87.3304 1106.03C45.6096 1147.76 17.1974 1200.91 5.68661 1258.78C-5.82413 1316.65 0.0836051 1376.63 22.6627 1431.14C45.2419 1485.65 83.4783 1532.24 132.537 1565.02C181.595 1597.8 239.272 1615.3 298.274 1615.3C377.367 1615.21 453.194 1583.75 509.12 1527.82C565.047 1471.9 596.505 1396.07 596.594 1316.98C596.594 1257.98 579.098 1200.3 546.318 1151.24C532.939 1131.22 517.258 1113 499.677 1096.91L632.719 881.577C666.615 894.556 702.773 901.308 739.442 901.302C776.254 901.254 812.357 894.412 846.075 881.47L979.261 1097.03C976.066 1099.96 972.93 1102.96 969.856 1106.03C928.136 1147.76 899.723 1200.91 888.213 1258.78C876.702 1316.65 882.61 1376.63 905.189 1431.14C927.768 1485.65 966.004 1532.24 1015.06 1565.02C1064.12 1597.8 1121.8 1615.3 1180.8 1615.3C1259.89 1615.21 1335.72 1583.75 1391.65 1527.82C1447.57 1471.9 1479.03 1396.07 1479.12 1316.98C1479.12 1257.98 1461.62 1200.3 1428.84 1151.24C1415.43 1131.17 1399.7 1112.9 1382.07 1096.78L1515.03 881.587Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PredictivePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Predictive,
+ contentDescription = "Predictive",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Prerequisite.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Prerequisite.kt
new file mode 100644
index 0000000000..3350c942a9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Prerequisite.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Prerequisite: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Prerequisite",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1652.322 1040.534 258.812 1040c-55.317 0-98.812 42.749-98.812 96.078v528.271c0 53.276 43.049 95.651 98.421 95.651H1661.58c55.372 0 98.421-42.375 98.421-95.65v-528.272c0-53.276-52.305-95.544-107.622-95.544h-.056ZM808.96 1358.48h76.16c0-10.453 1.027-21 3.08-31.64s5.507-20.347 10.36-29.12 11.293-15.867 19.32-21.28c8.027-5.413 17.827-8.12 29.4-8.12 17.173 0 31.267 5.32 42.28 15.96 11.013 10.64 16.52 25.48 16.52 44.52 0 11.947-2.707 22.587-8.12 31.92-5.413 9.333-12.133 17.733-20.16 25.2-8.027 7.467-16.893 14.28-26.6 20.44-9.707 6.16-18.853 12.227-27.44 18.2-16.8 11.573-32.76 22.96-47.88 34.16-15.12 11.2-28.28 23.427-39.48 36.68-11.2 13.253-20.067 28.28-26.6 45.08-6.533 16.8-9.8 36.587-9.8 59.36h287.84v-68.32H902.48c9.707-13.44 20.907-25.2 33.6-35.28a520.677 520.677 0 0 1 39.2-28.28 2976.634 2976.634 0 0 0 40.04-26.6c13.253-8.96 25.107-18.947 35.56-29.96 10.453-11.013 18.853-23.613 25.2-37.8 6.347-14.187 9.52-31.173 9.52-50.96 0-19.04-3.64-36.213-10.92-51.52-7.28-15.307-17.08-28.187-29.4-38.64s-26.6-18.48-42.84-24.08c-16.24-5.6-33.32-8.4-51.24-8.4-23.52 0-44.333 4.013-62.44 12.04s-33.133 19.227-45.08 33.6c-11.947 14.373-20.907 31.173-26.88 50.4-5.973 19.227-8.587 40.04-7.84 62.44ZM1104 160v72h-72v-72h72Zm-576 72h144v-72H528v72Zm288 0h72v-72h-72v72Zm576-72h-144v72h144v-72Zm288 320v80h80v-80h-80Zm-64-248.655s46.073.819 46.073 36.819V304h97.925v-72.655S1761.78 160 1664.665 160h-48.611v71.345H1616ZM672 880v-72H528v72h144Zm720-72h-144v72h144v-72ZM160 559.623h80.284V480H160v79.623ZM304 808h-35.06c-35.713 0-34.772-33.756-34.772-33.756V736H160v73.589S159.427 880 232.205 880H304v-72Zm1358.056-72v38.233s-5.778 35.732-46.056 35.732V880h40.602c105.178 0 103.396-70.392 103.396-70.392V736h-97.942ZM1032 808v72h72v-72h-72Zm-216 0v72h72v-72h-72ZM257.944 304v-35.877c0-33.628 46.056-36.818 46.056-36.818V160h-48.702C201.683 160 160 188.39 160 229.136V304h97.944Zm774.269 416.498V317.109h-70.055c-2.496 20.496-7.536 13.833-15.168 24.68-7.68 10.849-17.04 20.16-28.08 26.88a115.607 115.607 0 0 1-37.632 14.113c-13.92 2.592-27.936 3.984-43.296 3.6l53.147 62.16h71.029v271.956h70.055Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PrerequisitePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Prerequisite,
+ contentDescription = "Prerequisite",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Printer.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Printer.kt
new file mode 100644
index 0000000000..fa9eaac611
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Printer.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Printer: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Printer",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1440 1120c0-44.16-35.84-80-80-80s-80 35.84-80 80c0 44.24 35.84 80 80 80s80-35.76 80-80Zm-880 640h800v-320H560v320Zm1200-880v720h-240v320H400v-320H160V880c0-132.32 107.68-240 240-240h160v160h800V640h160c132.32 0 240 107.68 240 240ZM560 480H400V0h1120v480h-160V160H560v320Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PrinterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Printer,
+ contentDescription = "Printer",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Progress.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Progress.kt
new file mode 100644
index 0000000000..23e2804586
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Progress.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Progress: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Progress",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M320.006 962.032c0 352.866 287.052 639.974 640.026 639.974 173.767 0 334.093-69.757 451.938-188.072l-211.928-211.912h480.019v479.981l-155.046-155.114C1377.649 1674.883 1177.24 1762 960.032 1762 518.814 1762 160 1403.134 160 962.032ZM959.968 162C1401.186 162 1760 520.866 1760 961.968h-160.006c0-352.866-287.052-639.974-640.026-639.974-173.767 0-334.093 69.757-451.938 188.072l211.928 211.912H239.94V241.997L394.985 397.03C542.351 249.117 742.76 162 959.968 162Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ProgressPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Progress,
+ contentDescription = "Progress",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Protractor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Protractor.kt
new file mode 100644
index 0000000000..74bdd755c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Protractor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Protractor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Protractor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 480.667c-530.193 0-960 429.807-960 960.003h1920c0-530.196-429.81-960.003-960-960.003ZM1261.79 1334c-43.93-124.29-162.46-213.33-301.79-213.33-132.548 0-246.274 80.59-294.853 195.44a315.89 315.89 0 0 0-6.938 17.89h603.581ZM1232 886.001c44.18 0 80-35.818 80-80 0-44.183-35.82-80-80-80s-80 35.817-80 80c0 44.182 35.82 80 80 80Zm-464-80c0 44.182-35.818 80-80 80-44.183 0-80-35.818-80-80 0-44.183 35.817-80 80-80 44.182 0 80 35.817 80 80Zm677.33 229.333c44.19 0 80-35.818 80-80 0-44.183-35.81-80-80-80-44.18 0-80 35.817-80 80 0 44.182 35.82 80 80 80Zm208 143.996c0 44.19-35.81 80-80 80-44.18 0-80-35.81-80-80 0-44.18 35.82-80 80-80 44.19 0 80 35.82 80 80ZM474.666 1035.334c44.183 0 80-35.818 80-80 0-44.183-35.817-80-80-80-44.182 0-80 35.817-80 80 0 44.182 35.818 80 80 80Zm-47.999 143.996c0 44.19-35.818 80-80 80-44.183 0-80-35.81-80-80 0-44.18 35.817-80 80-80 44.182 0 80 35.82 80 80ZM960 827.334c44.18 0 80-35.818 80-80 0-44.183-35.82-80-80-80-44.183 0-80 35.817-80 80 0 44.182 35.817 80 80 80Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ProtractorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Protractor,
+ contentDescription = "Protractor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Publish.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Publish.kt
new file mode 100644
index 0000000000..b57e753f1c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Publish.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Publish: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Publish",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M860.16 1373.227 490.773 1003.84 641.6 853.013l218.56 218.56 453.653-453.653 150.827 150.827-604.48 604.48ZM960 0C429.76 0 0 429.76 0 960s429.76 960 960 960c530.133 0 960-429.76 960-960S1490.133 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun PublishPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Publish,
+ contentDescription = "Publish",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Question.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Question.kt
new file mode 100644
index 0000000000..27482ecbdd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Question.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Question: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Question",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 1242.342c62.23 0 112.941 50.71 112.941 112.94 0 62.231-50.71 112.942-112.941 112.942-62.23 0-112.941-50.71-112.941-112.941 0-62.23 50.71-112.941 112.941-112.941Zm89.336-892.01c114.862 29.704 208.264 123.106 237.968 237.967 23.378 90.466 10.729 183.304-35.464 261.46-45.515 77.138-121.186 133.947-207.586 156.084-13.779 3.614-27.783 14.795-27.783 31.962v91.595H903.529v-91.595c0-66.183 46.306-124.235 112.716-141.29 57.6-14.795 107.971-52.743 138.353-104.131 30.833-52.292 39.19-114.635 23.378-175.85-19.651-75.67-81.204-137.223-156.875-156.875-70.927-18.183-143.435-3.953-199.341 39.304-55.68 43.143-87.642 108.31-87.642 178.673H621.176c0-105.6 47.888-203.294 131.464-268.01 83.69-64.828 191.774-86.287 296.696-59.294ZM960-.01c-529.355 0-960 430.644-960 960 0 529.355 430.645 960 960 960 529.468 0 960-430.645 960-960 0-529.356-430.532-960-960-960"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuestionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Question,
+ contentDescription = "Question",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Quiz.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Quiz.kt
new file mode 100644
index 0000000000..e6e74b733e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Quiz.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Quiz: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Quiz",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1647.608 931.313-2.665 707.614-236.558 236.68h-.121l-352.475-352.476 591.819-591.818ZM792.79 1438.707l85.635 85.757-264.295 264.174-85.636-85.635 264.296-264.296Zm-176.165-176.044 85.636 85.636-352.354 352.233-85.636-85.636 352.354-352.233Zm-176.092-176.249 85.514 85.757-440.411 440.29L0 1526.947l440.533-440.533ZM1033.44 317.28 441.744 908.977 89.27 556.745l236.68-236.679 707.492-2.786Zm597.548-41.17 55.96 2.059 2.301 56.08c2.302 54.992-13.323 138.932-100.897 226.384l-42.757 42.878-184.11-184.231 42.756-42.879c86.605-86.483 172.24-102.108 226.747-100.291Zm259.45-202.037c-73.28-27.617-341.21-101.382-615.558 172.967L570.173 951.747l221.417 221.538 221.418 221.417 704.707-704.828c273.016-273.017 199.857-543.005 172.725-615.801"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Quiz,
+ contentDescription = "Quiz",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizInstructions.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizInstructions.kt
new file mode 100644
index 0000000000..007af7b244
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizInstructions.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizInstructions: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizInstructions",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 332v1257H0V332h1920Zm-689 797H409v113h822v-113Zm275-226H409v113h1097V903Zm-275-226H409v113h822V677Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizInstructionsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizInstructions,
+ contentDescription = "QuizInstructions",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsAvg.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsAvg.kt
new file mode 100644
index 0000000000..52caee7d02
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsAvg.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizStatsAvg: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizStatsAvg",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1298.824 1298.824c-76.462 0-140.5-51.276-161.506-120.848-48.565 39.643-109.78 64.377-177.318 64.377-63.812 0-122.09-22.024-169.412-57.939v283.821h-112.94V621.176h112.94V960c0 93.402 76.01 169.412 169.412 169.412s169.412-76.01 169.412-169.412V621.176h112.94v508.236c0 31.172 25.413 56.47 56.472 56.47v112.942ZM960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsAvgPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizStatsAvg,
+ contentDescription = "QuizStatsAvg",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsCronbachsAlpha.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsCronbachsAlpha.kt
new file mode 100644
index 0000000000..9c88cb714e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsCronbachsAlpha.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizStatsCronbachsAlpha: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizStatsCronbachsAlpha",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M951.62 688.015c-8.358-2.146-17.393-3.162-26.88-3.162-63.812 0-148.518 49.355-200.81 146.033-63.924 118.362-67.087 268.122-7.002 327.19 63.247 62.23 189.064 6.212 258.296-32.753 29.365-16.376 55.568-33.43 79.398-50.71-7.793-48.904-11.068-106.39-9.939-172.687 2.26-119.83-31.736-197.647-93.063-213.91m217.502 583.894c-33.882-15.586-60.65-43.257-80.64-83.35-18.184 11.858-37.384 23.717-57.939 35.124-98.372 55.228-176.188 75.558-237.741 75.558-72.621.112-122.202-28.236-155.068-60.65-107.182-105.487-90.918-317.365-13.102-461.365 80.076-148.066 229.61-231.53 355.652-198.437 54.777 14.456 181.836 74.88 177.318 325.044-.452 28.913-.113 54.777 1.016 77.704 114.636-128.64 116.443-247.793 116.443-254.57l112.94-1.355c.114 10.052.34 209.732-207.02 392.47 14.117 38.514 30.042 48.791 35.35 51.276 21.007 9.6 60.65-7.906 101.421-44.16l74.993 84.48c-79.058 70.25-158.343 92.386-223.623 62.23M959.955-.033c-529.355 0-960 430.758-960 960 0 529.355 430.645 960 960 960 529.468 0 960-430.645 960-960 0-529.242-430.532-960-960-960"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsCronbachsAlphaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizStatsCronbachsAlpha,
+ contentDescription = "QuizStatsCronbachsAlpha",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsDeviation.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsDeviation.kt
new file mode 100644
index 0000000000..e6ea062036
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsDeviation.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizStatsDeviation: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizStatsDeviation",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M677.647 872.098v175.85c0 107.18 87.19 194.371 194.485 194.371h62.795c107.294 0 194.485-87.19 194.485-194.372v-175.85c0-107.18-87.19-194.484-194.485-194.484h-62.795c-107.294 0-194.485 87.304-194.485 194.485m734.118-194.45h-240.678c43.821 53.194 71.266 120.281 71.266 194.484v175.736c0 169.525-137.901 307.426-307.426 307.426h-62.795c-169.525 0-307.426-137.901-307.426-307.426V872.132c0-169.525 137.901-307.426 307.426-307.426h539.633v112.941ZM960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsDeviationPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizStatsDeviation,
+ contentDescription = "QuizStatsDeviation",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsHigh.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsHigh.kt
new file mode 100644
index 0000000000..cf25320c00
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsHigh.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizStatsHigh: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizStatsHigh",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1355.294 1129.412h-112.941V757.496l-581.195 581.309-79.963-79.963 581.309-581.195H790.588V564.706h564.706v564.706ZM960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsHighPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizStatsHigh,
+ contentDescription = "QuizStatsHigh",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsLow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsLow.kt
new file mode 100644
index 0000000000..1f11761737
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsLow.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizStatsLow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizStatsLow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1355.294 1355.294H790.588v-112.941h371.916L581.195 661.158l79.963-79.963 581.195 581.309V790.588h112.941v564.706ZM960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsLowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizStatsLow,
+ contentDescription = "QuizStatsLow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsTime.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsTime.kt
new file mode 100644
index 0000000000..ca425346d7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizStatsTime.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizStatsTime: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizStatsTime",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1377.882 1344 903.53 988.235v-592.94h112.942v536.47l429.176 321.77-67.765 90.465ZM960 0C430.645 0 0 430.645 0 960c0 529.242 430.645 960 960 960 529.242 0 960-430.758 960-960 0-529.355-430.758-960-960-960Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizStatsTimePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizStatsTime,
+ contentDescription = "QuizStatsTime",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizTitle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizTitle.kt
new file mode 100644
index 0000000000..a72e02bb21
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/QuizTitle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.QuizTitle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.QuizTitle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1751 0v1920H169V0h1582Zm-349 347H514v320h888V347Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun QuizTitlePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.QuizTitle,
+ contentDescription = "QuizTitle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Record.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Record.kt
new file mode 100644
index 0000000000..e825d177ca
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Record.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Record: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Record",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.36 0 960 430.645 960 960 0 529.36-430.64 960-960 960-529.355 0-960-430.64-960-960C0 430.645 430.645 0 960 0Zm0 112.941c-467.125 0-847.059 379.934-847.059 847.059 0 467.12 379.934 847.06 847.059 847.06 467.12 0 847.06-379.94 847.06-847.06 0-467.125-379.94-847.059-847.06-847.059Zm0 313.726c294.55 0 533.33 238.781 533.33 533.333 0 294.55-238.78 533.33-533.33 533.33-294.552 0-533.333-238.78-533.333-533.33 0-294.552 238.781-533.333 533.333-533.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RecordPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Record,
+ contentDescription = "Record",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Redo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Redo.kt
new file mode 100644
index 0000000000..8d4573c6cc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Redo.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Redo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Redo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1280 98.75L1109.09 269.658L1452 612.563H603.336V854.301H1462.63L1109.09 1207.96L1280 1378.87L1920 738.75L1280 98.75Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M603.336 854.301C402.98 854.752 241.569 1017.35 241.562 1217.81C241.562 1418.28 403.807 1580.8 604.167 1581.25V1821.25C443.936 1821.24 290.28 1757.57 176.979 1644.27C63.6781 1530.97 0.012068 1377.31 0 1217.08C4.45777e-06 1056.84 63.6674 903.103 176.979 789.792C290.28 676.495 443.108 612.575 603.336 612.563V854.301Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RedoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Redo,
+ contentDescription = "Redo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Refresh.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Refresh.kt
new file mode 100644
index 0000000000..9c16215dbc
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Refresh.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Refresh: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Refresh",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0v213.333c411.627 0 746.667 334.934 746.667 746.667S1371.627 1706.667 960 1706.667 213.333 1371.733 213.333 960c0-197.013 78.4-382.507 213.334-520.747v254.08H640V106.667H53.333V320h191.04C88.64 494.08 0 720.96 0 960c0 529.28 430.613 960 960 960s960-430.72 960-960S1489.387 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RefreshPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Refresh,
+ contentDescription = "Refresh",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveBookmark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveBookmark.kt
new file mode 100644
index 0000000000..f91cfa58b5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveBookmark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RemoveBookmark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RemoveBookmark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1261.963 920.14-120.66 120.66L960.48 859.867l-180.934 180.935-120.66-120.662L839.82 739.205 658.886 558.27l120.66-120.547 180.935 180.935 180.821-180.935 120.661 120.547-180.934 180.935 180.934 180.935ZM1415.377 0H505.586C411.422 0 335 76.536 335 170.586V1920l625.481-375.289L1585.963 1920V170.586C1585.963 76.536 1509.426 0 1415.377 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RemoveBookmarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RemoveBookmark,
+ contentDescription = "RemoveBookmark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveFromCollection.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveFromCollection.kt
new file mode 100644
index 0000000000..c986da2910
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveFromCollection.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RemoveFromCollection: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RemoveFromCollection",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1920h1242.353V677.647H0V1920ZM1581.176 338.824v1242.352h-225.882V564.706H338.824V338.824h1242.352ZM903.53 1242.353v112.941H338.824v-112.941h564.705ZM1920.034-.011v1242.353h-225.882V225.872H677.68V-.012h1242.353Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RemoveFromCollectionPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RemoveFromCollection,
+ contentDescription = "RemoveFromCollection",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveLink.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveLink.kt
new file mode 100644
index 0000000000..c1b53f93b1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RemoveLink.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RemoveLink: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RemoveLink",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M614.742 795.026c61.932.36 119.783 24.965 163.11 69.373L605.98 1032.071c1.44 1.32 4.081 3 7.322 3l-369.67 373.392 267.89 267.77 375.312-375.31 168.752-158.79c44.288 43.207 68.893 101.178 69.257 162.99.356 62.412-23.889 121.103-68.297 165.512l-381.793 381.912c-43.568 43.448-101.54 67.453-163.23 67.453-61.813 0-119.784-24.005-163.232-67.453L67.438 1571.694c-89.897-90.017-89.897-236.445-.12-326.462L449.23 863.319c44.049-44.048 102.26-68.293 164.192-68.293Zm764.305 706.118v360.069h-120.023v-360.069h120.023Zm222.402 17.56 240.046 240.045-84.856 84.856-240.046-240.045 84.856-84.856Zm257.69-257.605v120.023h-360.07v-120.023h360.07ZM1245.497 67.184c89.177-89.177 235.725-89.657 326.582-.96l280.733 280.733c89.537 91.938 89.177 238.245 0 327.542L1470.9 1056.172c-43.329 43.448-101.42 67.573-163.231 67.573-61.692 0-119.663-24.125-163.111-67.573L1314.27 886.46c-3.12-3.121-10.082-3.121-13.083 0L1683.1 504.667l-279.893-267.77-369.55 381.552c3.48-3.841 3.36-9.122-.24-12.843L863.704 775.318c-90.017-90.017-90.017-236.324 0-326.342ZM408.543 540.962v120.023H68.998V540.962h339.545ZM658.91 71.072v339.425H538.767V71.073H658.91ZM161.092 78.43l240.165 240.046-84.856 84.856L76.356 163.286l84.736-84.856Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RemoveLinkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RemoveLink,
+ contentDescription = "RemoveLink",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Replied.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Replied.kt
new file mode 100644
index 0000000000..5218a8a696
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Replied.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Replied: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Replied",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M874.738 645.126H462.691L810.92 296.898 640.009 126 0 765.996l640.008 640.008 170.91-170.91-348.227-348.228h412.047c442.99 0 803.425 360.435 803.425 803.425v103.102h241.74v-103.102c0-576.31-468.735-1045.165-1045.165-1045.165"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RepliedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Replied,
+ contentDescription = "Replied",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reply.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reply.kt
new file mode 100644
index 0000000000..8e8c8d7c56
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reply.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Reply: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Reply",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M874.738 645.126H462.691L810.92 296.898 640.009 126 0 765.996l640.008 640.008 170.91-170.91-348.227-348.228h412.047c442.99 0 803.425 360.435 803.425 803.425v103.102h241.74v-103.102c0-576.31-468.735-1045.165-1045.165-1045.165"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ReplyPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Reply,
+ contentDescription = "Reply",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reply2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reply2.kt
new file mode 100644
index 0000000000..c12577ee20
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reply2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Reply2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Reply2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M874.738 645.126H462.691L810.92 296.898 640.009 126 0 765.996l640.008 640.008 170.91-170.91-348.227-348.228h412.047c442.99 0 803.425 360.435 803.425 803.425v103.102h241.74v-103.102c0-576.31-468.735-1045.165-1045.165-1045.165"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Reply2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Reply2,
+ contentDescription = "Reply2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ReplyAll2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ReplyAll2.kt
new file mode 100644
index 0000000000..14dc87f8f2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ReplyAll2.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ReplyAll2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ReplyAll2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1044.768 224 150.827 150.827-306.88 306.88h99.413c508.8 0 922.667 413.866 922.667 922.666v90.667H1697.46v-90.667c0-391.146-318.186-709.333-709.333-709.333h-100.16l307.627 307.733-150.827 150.827-564.8-564.8 564.8-564.8ZM564.8 224l150.827 150.827L301.653 788.8l413.974 413.973L564.8 1353.6 0 788.8 564.8 224Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ReplyAll2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ReplyAll2,
+ contentDescription = "ReplyAll2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reset.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reset.kt
new file mode 100644
index 0000000000..28611207e0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Reset.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Reset: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Reset",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0v213.333c411.627 0 746.667 334.934 746.667 746.667S1371.627 1706.667 960 1706.667 213.333 1371.733 213.333 960c0-197.013 78.4-382.507 213.334-520.747v254.08H640V106.667H53.333V320h191.04C88.64 494.08 0 720.96 0 960c0 529.28 430.613 960 960 960s960-430.72 960-960S1489.387 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ResetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Reset,
+ contentDescription = "Reset",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Restore.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Restore.kt
new file mode 100644
index 0000000000..75b50662fe
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Restore.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Restore: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Restore",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0V213.333C548.373 213.333 213.333 548.267 213.333 960C213.333 1371.73 548.373 1706.67 960 1706.67C1371.63 1706.67 1706.67 1371.73 1706.67 960C1706.67 762.987 1628.27 577.493 1493.33 439.253V693.333H1280V106.667H1866.67V320H1675.63C1831.36 494.08 1920 720.96 1920 960C1920 1489.28 1489.39 1920 960 1920C430.613 1920 4.57764e-05 1489.28 4.57764e-05 960C4.57764e-05 430.72 430.613 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M875.127 944.965L516.508 1213.65L629.957 1365L1064.24 1039.52V497.005H875.127V944.965Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RestorePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Restore,
+ contentDescription = "Restore",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ReviewScreen.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ReviewScreen.kt
new file mode 100644
index 0000000000..af4ddde617
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ReviewScreen.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ReviewScreen: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ReviewScreen",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 53h1386.67v342.083c-50.87-14.385-104.54-22.083-160-22.083C902.66 373 640 635.66 640 959.667c0 324.003 262.66 586.663 586.67 586.663 55.46 0 109.13-7.69 160-22.08v342.08H0V53Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.NonZero,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1226.67 1439.67c113.33 0 217.48-39.28 299.6-104.96l302.37 302.65c20.82 20.84 54.59 20.85 75.42.04 20.84-20.82 20.86-54.59.04-75.43l-302.41-302.68c65.7-82.12 104.98-186.29 104.98-299.623 0-265.097-214.91-480-480-480-265.1 0-480.003 214.903-480.003 480 0 265.093 214.903 480.003 480.003 480.003Zm0-106.67c206.18 0 373.33-167.15 373.33-373.333 0-206.187-167.15-373.334-373.33-373.334-206.19 0-373.337 167.147-373.337 373.334 0 206.183 167.147 373.333 373.337 373.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ReviewScreenPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ReviewScreen,
+ contentDescription = "ReviewScreen",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rewind.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rewind.kt
new file mode 100644
index 0000000000..0035344780
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rewind.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Rewind: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Rewind",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1064.719 308.99 0 959.644 1064.719 1610.3v-522.363l855.174 521.829V309.524L1064.72 831.246z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RewindPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Rewind,
+ contentDescription = "Rewind",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RotateLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RotateLeft.kt
new file mode 100644
index 0000000000..4f11feb457
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RotateLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RotateLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RotateLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1251.45 447.883 1120 316.432h160c176.73 0 320 143.269 320 320h106.67c0-235.641-191.03-426.666-426.67-426.666h-159.97l134.34-134.341L1178.94 0 915.833 263.111l260.197 260.196 75.42-75.424Zm28.55 405.45C1280 735.513 1184.49 640 1066.67 640H213.333C95.513 640 0 735.513 0 853.333v853.337C0 1824.49 95.513 1920 213.333 1920h853.337c117.82 0 213.33-95.51 213.33-213.33V853.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RotateLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RotateLeft,
+ contentDescription = "RotateLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RotateRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RotateRight.kt
new file mode 100644
index 0000000000..7e34a36816
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RotateRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RotateRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RotateRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M639.999 209.777h116.019L621.665 75.425 697.09 0l263.111 263.111-260.196 260.196-75.425-75.424 131.439-131.439h-116.02c-176.731 0-320 143.269-320 320H213.332c0-235.642 191.025-426.667 426.667-426.667Zm0 643.556c0-117.82 95.512-213.333 213.333-213.333h853.338c117.82 0 213.33 95.513 213.33 213.333v853.337c0 117.82-95.51 213.33-213.33 213.33H853.332c-117.821 0-213.333-95.51-213.333-213.33V853.333Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RotateRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RotateRight,
+ contentDescription = "RotateRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rss.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rss.kt
new file mode 100644
index 0000000000..149549002d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rss.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Rss: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Rss",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M53.333 628.96c682.454 0 1237.76 555.2 1237.76 1237.76v53.333H882.24v-53.333c0-457.067-371.84-828.907-828.907-828.907H0V628.96Zm0-628.96C1082.56 0 1920 837.44 1920 1866.667V1920h-408.853v-53.333c0-803.84-653.974-1457.814-1457.814-1457.814H0V0ZM267.19 1386.667c146.774 0 266.134 119.36 266.134 266.133 0 146.773-119.36 266.24-266.134 266.24S.95 1799.573.95 1652.8c0-146.773 119.467-266.133 266.24-266.133Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RssPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Rss,
+ contentDescription = "Rss",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RssAdd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RssAdd.kt
new file mode 100644
index 0000000000..b172eba118
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RssAdd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RssAdd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RssAdd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M840 0v840H0v240h840v840h240v-840h840V840h-840V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RssAddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RssAdd,
+ contentDescription = "RssAdd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rubric.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rubric.kt
new file mode 100644
index 0000000000..51cfb632d5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Rubric.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Rubric: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Rubric",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.941 0c73.525 0 135.643 47.322 159.021 112.941h462.156V1920H113V112.941h462.155C598.535 47.322 660.652 0 734.176 0Zm56.47 1468.235H903.589v112.941h338.824v-112.94Zm-451.764-225.882H451.824v338.823h338.823v-338.823Zm677.647 0H903.588v112.941h564.706v-112.941ZM790.647 677.647H451.824v338.824h338.823V677.647Zm451.765 225.882H903.588v112.942h338.824V903.529Zm225.882-225.882H903.588v112.941h564.706v-112.94Zm-282.353-564.706H734.176c-31.058 0-56.47 25.299-56.47 56.47v169.413h564.706V169.412c0-31.172-25.412-56.47-56.47-56.47Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RubricPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Rubric,
+ contentDescription = "Rubric",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RubricDark.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RubricDark.kt
new file mode 100644
index 0000000000..8e08630b74
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/RubricDark.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.RubricDark: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.RubricDark",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1185.941 0c73.525 0 135.643 47.322 159.021 112.941h462.156V1920H113V112.941h462.155C598.535 47.322 660.652 0 734.176 0Zm56.47 1468.235H903.589v112.941h338.824v-112.94Zm-451.764-225.882H451.824v338.823h338.823v-338.823Zm677.647 0H903.588v112.941h564.706v-112.941ZM790.647 677.647H451.824v338.824h338.823V677.647Zm451.765 225.882H903.588v112.942h338.824V903.529Zm225.882-225.882H903.588v112.941h564.706v-112.94Zm-282.353-564.706H734.176c-31.058 0-56.47 25.299-56.47 56.47v169.413h564.706V169.412c0-31.172-25.412-56.47-56.47-56.47Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RubricDarkPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.RubricDark,
+ contentDescription = "RubricDark",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Ruler.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Ruler.kt
new file mode 100644
index 0000000000..672316d5c1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Ruler.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Ruler: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Ruler",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M.938 1492.583 1493.492.024 1919.94 426.47l-143.195 143.193.12.12-1206.17 1206.163-.117-.12-143.196 143.196L.938 1492.583Zm532.064 170.29 75.386-75.39-100.263-100.258-75.385 75.381 100.262 100.268Zm150.772-150.77 75.385-75.391-100.263-100.258-75.385 75.38 100.263 100.268Zm150.77-150.772 75.386-75.39-175.648-175.65-75.386 75.391 175.648 175.649Zm150.77-150.771 75.384-75.391-100.26-100.258-75.386 75.38 100.263 100.269Zm150.774-150.772 75.381-75.386-100.258-100.262-75.39 75.384 100.267 100.264Zm150.772-150.771 75.38-75.386-175.648-175.648-75.38 75.385 175.648 175.649Zm150.771-150.77 75.381-75.387-100.258-100.262-75.39 75.385 100.267 100.263Zm150.772-150.772 75.38-75.386-100.257-100.263-75.391 75.386 100.268 100.263Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun RulerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Ruler,
+ contentDescription = "Ruler",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Save.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Save.kt
new file mode 100644
index 0000000000..4b70dd0b8a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Save.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Save: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Save",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1524.824 1242.353c93.402 0 169.411 76.01 169.411 169.412v338.823c0 93.403-76.01 169.412-169.411 169.412H395.412C302.009 1920 226 1843.99 226 1750.588v-338.823c0-93.403 76.01-169.412 169.412-169.412ZM1016.588 0v338.824h-112.94V0h112.94ZM564.824 1468.235c62.343 0 112.94 50.71 112.94 112.941s-50.597 112.942-112.94 112.942c-62.344 0-112.942-50.71-112.942-112.942 0-62.23 50.598-112.94 112.942-112.94ZM903.647 338.824v428.385L657.322 520.885l-79.85 79.85 382.646 382.644 382.644-382.645-79.85-79.85-246.324 246.325V338.824h508.236c93.74 0 169.411 75.67 169.411 169.411v677.647c-46.306-35.011-106.164-56.47-169.411-56.47H395.412c-63.247 0-123.106 21.459-169.412 56.47V508.235c0-93.74 75.67-169.411 169.412-169.411h508.235Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SavePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Save,
+ contentDescription = "Save",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ScreenCapture.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ScreenCapture.kt
new file mode 100644
index 0000000000..bafc2f5cf7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ScreenCapture.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ScreenCapture: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ScreenCapture",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M155.676 1349.19v337.3c0 42.99 34.849 77.83 77.838 77.83h337.297V1920H233.514C104.548 1920 0 1815.45 0 1686.49v-337.3h155.676Zm1764.324 0v337.3c0 128.96-104.55 233.51-233.51 233.51h-337.3v-155.68h337.3c42.99 0 77.83-34.84 77.83-77.83v-337.3H1920ZM960 544.865c229.27 0 415.14 185.862 415.14 415.135 0 229.27-185.87 415.14-415.14 415.14-229.273 0-415.135-185.87-415.135-415.14 0-229.273 185.862-415.135 415.135-415.135ZM1686.49 0C1815.45 0 1920 104.548 1920 233.514v337.297h-155.68V233.514c0-42.989-34.84-77.838-77.83-77.838h-337.3V0ZM570.811 0v155.676H233.514c-42.989 0-77.838 34.849-77.838 77.838v337.297H0V233.514C0 104.548 104.548 0 233.514 0h337.297Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ScreenCapturePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ScreenCapture,
+ contentDescription = "ScreenCapture",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Search.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Search.kt
new file mode 100644
index 0000000000..e9aeaaede4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Search.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Search: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Search",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1458.948 1305.626c104.637-136.95 167.527-307.187 167.527-492.388C1626.475 364.764 1261.711 0 813.238 0 364.764 0 0 364.764 0 813.238c0 448.473 364.764 813.237 813.238 813.237 185.201 0 355.547-62.89 492.496-167.527L1766.678 1920 1920 1766.678l-461.052-461.052Zm-645.71 103.986c-328.874 0-596.375-267.61-596.375-596.374 0-328.765 267.501-596.375 596.375-596.375 328.873 0 596.374 267.61 596.374 596.375s-267.501 596.374-596.374 596.374Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Search,
+ contentDescription = "Search",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SearchAddressBook.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SearchAddressBook.kt
new file mode 100644
index 0000000000..b96c643ad5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SearchAddressBook.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SearchAddressBook: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SearchAddressBook",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1458.948 1305.626c104.637-136.95 167.527-307.187 167.527-492.388C1626.475 364.764 1261.711 0 813.238 0 364.764 0 0 364.764 0 813.238c0 448.473 364.764 813.237 813.238 813.237 185.201 0 355.547-62.89 492.496-167.527L1766.678 1920 1920 1766.678l-461.052-461.052Zm-645.71 103.986c-328.874 0-596.375-267.61-596.375-596.374 0-328.765 267.501-596.375 596.375-596.375 328.873 0 596.374 267.61 596.374 596.375s-267.501 596.374-596.374 596.374Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchAddressBookPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SearchAddressBook,
+ contentDescription = "SearchAddressBook",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SearchAi.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SearchAi.kt
new file mode 100644
index 0000000000..cc20ce4edb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SearchAi.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SearchAi: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SearchAi",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1080.23 45.0035C996.57 15.8497 906.723 0 813.238 0C364.764 0 0 364.764 0 813.238C0 1261.71 364.764 1626.48 813.238 1626.48C998.439 1626.48 1168.79 1563.59 1305.73 1458.95L1766.68 1920L1920 1766.68L1458.95 1305.63C1563.59 1168.68 1626.48 998.439 1626.48 813.238C1626.48 763.036 1621.9 713.883 1613.16 666.173L1405.04 739.191C1408.06 763.457 1409.61 788.169 1409.61 813.237C1409.61 1142 1142.11 1409.61 813.239 1409.61C484.365 1409.61 216.864 1142 216.864 813.237C216.864 484.473 484.365 216.863 813.239 216.863C879.065 216.863 942.432 227.584 1001.69 247.371L1080.23 45.0035Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1212.8 0L1350.51 372.156L1722.67 509.867L1350.51 647.577L1212.8 1019.73L1075.09 647.577L702.933 509.867L1075.09 372.156L1212.8 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SearchAiPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SearchAi,
+ contentDescription = "SearchAi",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Settings.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Settings.kt
new file mode 100644
index 0000000000..b4125be3ac
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Settings.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Settings: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Settings",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1703.534 960c0-41.788-3.84-84.48-11.633-127.172l210.184-182.174-199.454-340.856-265.186 88.433c-66.974-55.567-143.323-99.389-223.85-128.415L1158.932 0h-397.78L706.49 269.704c-81.43 29.138-156.423 72.282-223.962 128.414l-265.073-88.32L18 650.654l210.184 182.174C220.39 875.52 216.55 918.212 216.55 960s3.84 84.48 11.633 127.172L18 1269.346l199.454 340.856 265.186-88.433c66.974 55.567 143.322 99.389 223.85 128.415L761.152 1920h397.779l54.663-269.704c81.318-29.138 156.424-72.282 223.963-128.414l265.073 88.433 199.454-340.856-210.184-182.174c7.793-42.805 11.633-85.497 11.633-127.285m-743.492 395.294c-217.976 0-395.294-177.318-395.294-395.294 0-217.976 177.318-395.294 395.294-395.294 217.977 0 395.294 177.318 395.294 395.294 0 217.976-177.317 395.294-395.294 395.294"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SettingsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Settings,
+ contentDescription = "Settings",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Settings2.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Settings2.kt
new file mode 100644
index 0000000000..dbaa729c7a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Settings2.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Settings2: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Settings2",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1703.534 960c0-41.788-3.84-84.48-11.633-127.172l210.184-182.174-199.454-340.856-265.186 88.433c-66.974-55.567-143.323-99.389-223.85-128.415L1158.932 0h-397.78L706.49 269.704c-81.43 29.138-156.423 72.282-223.962 128.414l-265.073-88.32L18 650.654l210.184 182.174C220.39 875.52 216.55 918.212 216.55 960s3.84 84.48 11.633 127.172L18 1269.346l199.454 340.856 265.186-88.433c66.974 55.567 143.322 99.389 223.85 128.415L761.152 1920h397.779l54.663-269.704c81.318-29.138 156.424-72.282 223.963-128.414l265.073 88.433 199.454-340.856-210.184-182.174c7.793-42.805 11.633-85.497 11.633-127.285m-743.492 395.294c-217.976 0-395.294-177.318-395.294-395.294 0-217.976 177.318-395.294 395.294-395.294 217.977 0 395.294 177.318 395.294 395.294 0 217.976-177.317 395.294-395.294 395.294"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun Settings2Preview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Settings2,
+ contentDescription = "Settings2",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapeOval.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapeOval.kt
new file mode 100644
index 0000000000..d9ae907295
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapeOval.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ShapeOval: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ShapeOval",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShapeOvalPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ShapeOval,
+ contentDescription = "ShapeOval",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapePolygon.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapePolygon.kt
new file mode 100644
index 0000000000..dc3c371c10
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapePolygon.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ShapePolygon: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ShapePolygon",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.36.011 109 508.785v902.442L960.36 1920l851.475-508.773V508.785z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShapePolygonPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ShapePolygon,
+ contentDescription = "ShapePolygon",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapeRectangle.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapeRectangle.kt
new file mode 100644
index 0000000000..52f289bc8a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ShapeRectangle.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ShapeRectangle: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ShapeRectangle",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1750.176h1920V169H0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ShapeRectanglePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ShapeRectangle,
+ contentDescription = "ShapeRectangle",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Share.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Share.kt
new file mode 100644
index 0000000000..3322e27b22
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Share.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Share: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Share",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1513.827 1278.28c-96.772 0-182.634 43.765-241.415 111.531l-564.2-325.737c11.807-33.498 19.508-69.049 19.508-106.654 0-34.91-7.06-68.022-17.327-99.595l563.815-325.48c58.782 66.482 143.746 109.35 239.619 109.35 177.243 0 320.86-143.618 320.86-320.86 0-177.244-143.617-320.86-320.86-320.86-177.243 0-320.86 143.616-320.86 320.86 0 35.165 7.059 68.407 17.454 99.98l-563.686 325.48C587.953 679.554 502.86 636.56 406.86 636.56 229.617 636.56 86 780.177 86 957.42c0 177.243 143.617 320.86 320.86 320.86 93.434 0 176.601-40.428 235.254-104.215l567.537 327.662c-9.882 30.803-16.684 63.145-16.684 97.413 0 177.243 143.617 320.86 320.86 320.86 177.243 0 320.86-143.617 320.86-320.86 0-177.243-143.617-320.86-320.86-320.86"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SharePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Share,
+ contentDescription = "Share",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SidebarRightHide.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SidebarRightHide.kt
new file mode 100644
index 0000000000..1211bf4cc9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SidebarRightHide.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SidebarRightHide: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SidebarRightHide",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1261.18 1919.9H156.354C70.1711 1919.9 4.08756e-06 1844.03 0 1750.52V169.375C0.0157818 75.9898 70.1808 3.76677e-06 156.354 0H1261.18V1919.9ZM1763.65 0C1849.82 3.76677e-06 1919.98 75.9898 1920 169.375V1750.52C1920 1844.03 1849.83 1919.9 1763.65 1919.9H1374.12V0H1763.65ZM350.407 491.735L818.677 960.078L350.407 1428.27L455.625 1533.49L1029.19 960.078L455.625 386.518L350.407 491.735Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SidebarRightHidePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SidebarRightHide,
+ contentDescription = "SidebarRightHide",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SidebarRightShow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SidebarRightShow.kt
new file mode 100644
index 0000000000..169f413334
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SidebarRightShow.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SidebarRightShow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SidebarRightShow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1261.18 1919.9H156.354C70.1711 1919.9 4.08756e-06 1844.03 0 1750.52V169.375C0.0157818 75.9898 70.1808 3.76677e-06 156.354 0H1261.18V1919.9ZM1763.65 0C1849.82 3.76677e-06 1919.98 75.9898 1920 169.375V1750.52C1920 1844.03 1849.83 1919.9 1763.65 1919.9H1374.12V0H1763.65ZM243.635 960.078L817.195 1533.49L922.413 1428.27L454.144 960.078L922.413 491.735L817.195 386.518L243.635 960.078Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SidebarRightShowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SidebarRightShow,
+ contentDescription = "SidebarRightShow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SingleMetric.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SingleMetric.kt
new file mode 100644
index 0000000000..e6872b4b5d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SingleMetric.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SingleMetric: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SingleMetric",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M170.667 0C76.4101 0 0 76.4101 0 170.667V1749.33C0 1843.59 76.4101 1920 170.667 1920H1749.33C1843.59 1920 1920 1843.59 1920 1749.33V170.667C1920 76.4101 1843.59 0 1749.33 0H170.667ZM1054.05 1485.23C1010.54 1477.56 981.488 1436.07 989.161 1392.55L1018.41 1226.67H807.548L773.398 1420.34C765.726 1463.85 724.234 1492.9 680.722 1485.23C637.21 1477.56 608.157 1436.07 615.829 1392.55L645.08 1226.67H506.667C462.484 1226.67 426.667 1190.85 426.667 1146.67C426.667 1102.48 462.484 1066.67 506.667 1066.67H673.292L710.908 853.333H506.667C462.484 853.333 426.667 817.516 426.667 773.333C426.667 729.15 462.484 693.333 506.667 693.333H739.121L773.27 499.662C780.942 456.15 822.435 427.097 865.947 434.769C909.458 442.441 938.512 483.934 930.84 527.445L901.589 693.333H1112.45L1146.6 499.662C1154.27 456.15 1195.77 427.097 1239.28 434.769C1282.79 442.441 1311.84 483.934 1304.17 527.445L1274.92 693.333H1413.33C1457.52 693.333 1493.33 729.15 1493.33 773.333C1493.33 817.516 1457.52 853.333 1413.33 853.333H1246.71L1209.09 1066.67H1413.33C1457.52 1066.67 1493.33 1102.48 1493.33 1146.67C1493.33 1190.85 1457.52 1226.67 1413.33 1226.67H1180.88L1146.73 1420.34C1139.06 1463.85 1097.56 1492.9 1054.05 1485.23ZM873.377 853.333L835.76 1066.67H1046.62L1084.24 853.333H873.377Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SingleMetricPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SingleMetric,
+ contentDescription = "SingleMetric",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisImported.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisImported.kt
new file mode 100644
index 0000000000..2c6d43faab
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisImported.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SisImported: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SisImported",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1574.513 138.515c-30.381-30.268-66.748-51.84-106.278-65.619v434.936h434.937c-13.78-39.529-35.238-75.896-65.62-106.164l-263.04-263.153Zm-219.219 482.19V56h-903.53v903.53H0v112.94h451.765v790.589H1920V620.706h-564.706ZM887.04 1425.3l-79.85-79.85 272.866-272.978h-515.35V959.529h515.35L807.191 686.664l79.849-79.85L1296.226 1016 887.04 1425.299Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SisImportedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SisImported,
+ contentDescription = "SisImported",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisNotSynced.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisNotSynced.kt
new file mode 100644
index 0000000000..df4377edf9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisNotSynced.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SisNotSynced: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SisNotSynced",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.28 0 960 430.613 960 960s-430.72 960-960 960S0 1489.387 0 960c0-239.04 88.64-465.92 244.48-640H53.333V106.667H640v586.666H426.667v-254.08C291.733 577.387 213.333 762.987 213.333 960c0 411.627 334.934 746.667 746.667 746.667s746.667-335.04 746.667-746.667S1371.733 213.333 960 213.333Zm191.253 671.253L1302.08 822.08l-191.253 191.253 191.253 191.254-150.827 150.826L960 1164.16l-191.253 191.253-150.827-150.826 191.253-191.254L617.92 822.08l150.827-150.827L960 862.507l191.253-191.254Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SisNotSyncedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SisNotSynced,
+ contentDescription = "SisNotSynced",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisSynced.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisSynced.kt
new file mode 100644
index 0000000000..228aa39c32
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SisSynced.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SisSynced: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SisSynced",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.28 0 960 430.613 960 960s-430.72 960-960 960S0 1489.387 0 960c0-239.04 88.64-465.92 244.48-640H53.333V106.667H640v586.666H426.667v-254.08C291.733 577.387 213.333 762.987 213.333 960c0 411.627 334.934 746.667 746.667 746.667s746.667-335.04 746.667-746.667S1371.733 213.333 960 213.333Zm297.93 690.261 150.827 150.934-486.826 486.826-304-304.106 150.826-150.827 153.174 153.28 336-336.107Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SisSyncedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SisSynced,
+ contentDescription = "SisSynced",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Skype.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Skype.kt
new file mode 100644
index 0000000000..baabcbca11
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Skype.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Skype: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Skype",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1364.668 1315.426c-33.543 47.774-83.124 85.722-147.275 112.715-63.812 26.541-140.16 40.094-227.012 40.094-104.132 0-191.548-18.41-259.652-54.89-48.79-26.427-88.997-62.456-119.604-106.841-30.833-44.725-46.42-89.224-46.42-132.029 0-26.767 10.166-49.92 30.382-69.12 19.765-18.748 45.177-28.348 75.558-28.348 24.96 0 46.531 7.68 64.037 22.475 16.603 14.344 30.946 35.35 42.58 62.683 12.762 29.59 26.766 54.55 41.562 74.428 14.343 18.974 34.898 34.899 60.988 47.435 26.315 12.424 61.666 18.861 105.374 18.861 59.972 0 109.214-12.875 146.146-38.287 36.14-24.96 53.76-54.776 53.76-91.256 0-28.913-9.148-51.501-28.01-69.459-19.877-18.522-45.967-33.092-77.477-42.918-32.98-10.277-77.817-21.458-133.158-33.204-75.332-16.264-139.37-35.577-190.306-57.374-51.953-22.25-93.967-53.083-124.574-91.935-31.172-39.303-46.983-88.545-46.983-146.484 0-55.228 16.602-104.923 49.355-147.84 32.414-42.692 79.736-75.784 140.725-98.598 60.31-22.25 131.915-33.77 213.007-33.77 64.715 0 121.863 7.455 169.411 22.476 47.774 15.021 88.094 35.238 119.83 60.198 31.963 25.073 55.68 51.953 70.59 79.85 14.907 28.234 22.7 56.357 22.7 83.35 0 26.202-10.164 49.92-29.816 70.588-19.878 20.781-44.95 31.398-74.541 31.398-26.767 0-47.887-6.551-62.57-19.652-13.553-12.085-27.67-30.946-43.256-58.052-18.184-34.673-40.094-61.892-65.167-81.205-24.396-18.635-65.054-28.122-121.073-28.122-52.066 0-94.306 10.503-125.704 31.285-30.38 19.99-45.063 42.917-45.063 70.023 0 16.715 4.743 30.607 14.57 42.579 10.277 12.762 24.846 23.83 43.143 32.979 19.087 9.826 38.739 17.393 58.39 22.927 20.217 5.647 54.1 13.892 100.405 24.734 58.73 12.762 112.715 26.88 160.49 42.353 48.338 15.586 90.24 34.786 124.235 57.148 34.56 22.701 62.23 51.953 81.656 86.965 19.652 35.012 29.59 78.381 29.59 128.753 0 60.085-17.053 114.974-50.823 163.087m500.104-151.68c13.779-62.344 21.233-127.059 21.233-193.807 0-498.635-409.977-902.852-915.84-902.852-53.309 0-105.713 4.518-156.537 13.214C731.746 29.365 634.955 0 531.05 0 237.854 0 0 234.353 0 523.595c0 96.678 26.767 187.144 72.96 264.96-12.085 58.617-18.41 119.266-18.41 181.384 0 498.748 409.864 903.077 915.615 903.077 57.374 0 113.28-5.308 167.717-15.134 74.767 39.53 160.264 62.118 251.182 62.118 293.308 0 530.936-234.353 530.936-523.595 0-83.577-19.99-162.523-55.228-232.66"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SkypePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Skype,
+ contentDescription = "Skype",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Sort.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Sort.kt
new file mode 100644
index 0000000000..2ade3979b7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Sort.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Sort: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Sort",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1549.418 299.605V1429.62l203.915-204.032L1920 1392.255l-488.451 488.57-488.57-488.57 166.668-166.667 204.032 204.032V299.605h235.74ZM488.57 160l488.57 488.57-166.67 166.548-204.031-203.914v1129.898h-235.74V611.204L166.668 815.12 0 648.569 488.57 160Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SortPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Sort,
+ contentDescription = "Sort",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SpeedGrader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SpeedGrader.kt
new file mode 100644
index 0000000000..0dfd7c0e4c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/SpeedGrader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.SpeedGrader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.SpeedGrader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M211.733 1260.088c16.32 131.947 68.587 258.027 151.254 364.8l-168.64 130.667C88.213 1618.488 21.013 1456.14 0 1286.22Zm1654.155-391.584c18.88 57.813 32.32 117.76 39.787 178.24 4.8 40 7.146 79.147 7.146 119.787 0 40.533-2.346 79.68-7.146 119.466-21.014 170.134-88.214 332.48-194.347 469.547l-168.64-130.667c82.667-106.773 134.933-232.853 151.253-364.8 3.734-30.72 5.547-61.76 5.547-93.546 0-31.894-1.813-62.934-5.547-93.867-5.866-46.613-16.106-93.013-30.72-137.813Zm-135.125-421.707 150.826 150.827-875.413 875.413-519.893-519.893 150.826-150.827 369.067 369.067 724.587-724.587ZM194.347 577.411l168.64 130.666c-82.667 106.774-134.934 232.854-151.254 364.8L0 1046.744c21.013-169.92 88.213-332.267 194.347-469.333ZM833.14 213.709l26.134 211.734c-132.054 16.213-258.134 68.586-364.8 151.253L363.7 408.056c137.067-106.133 299.307-173.44 469.44-194.347Zm239.456-.01c170.027 21.013 332.374 88.213 469.334 194.346l-130.774 168.64c-106.56-82.666-232.746-135.04-364.693-151.253Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SpeedGraderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.SpeedGrader,
+ contentDescription = "SpeedGrader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Standards.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Standards.kt
new file mode 100644
index 0000000000..e937ecc2b3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Standards.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Standards: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Standards",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.057 0 112 363.42v715.76c0 390.672 512 670.417 730.572 789.824 27.477 15.038 49.753 27.137 65.018 36.296v.113c16.17 9.725 34.262 14.587 52.467 14.587 18.091 0 36.296-4.862 52.466-14.7 15.265-9.159 37.54-21.258 65.018-36.296 218.572-119.407 730.572-399.152 730.572-789.824V363.42L960.057 0ZM846.982 1272.198 524.27 949.484l80.056-79.943 242.657 242.77 525.343-525.456 80.057 79.944-605.4 605.399Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StandardsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Standards,
+ contentDescription = "Standards",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Star.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Star.kt
new file mode 100644
index 0000000000..1b321ee078
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Star.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Star: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Star",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1915.918 737.475c-10.955-33.543-42.014-56.131-77.364-56.131h-612.029l-189.063-582.1v-.112C1026.394 65.588 995.335 43 959.984 43c-35.237 0-66.41 22.588-77.365 56.245L693.443 681.344H81.415c-35.35 0-66.41 22.588-77.365 56.131-10.955 33.544.79 70.137 29.478 91.03l495.247 359.831-189.177 582.212c-10.955 33.657 1.13 70.25 29.817 90.918 14.23 10.278 30.946 15.487 47.66 15.487 16.716 0 33.432-5.21 47.775-15.6l495.134-359.718 495.021 359.718c28.574 20.781 67.087 20.781 95.662.113 28.687-20.668 40.658-57.261 29.703-91.03l-189.176-582.1 495.36-359.83c28.574-20.894 40.433-57.487 29.364-91.03"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StarPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Star,
+ contentDescription = "Star",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/StarLight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/StarLight.kt
new file mode 100644
index 0000000000..7754da0690
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/StarLight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.StarLight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.StarLight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1306.181 1110.407c-28.461 20.781-40.32 57.261-29.477 91.03l166.136 511.398-435.05-316.122c-28.686-20.781-67.086-20.781-95.66 0l-435.05 316.122 166.25-511.623c10.842-33.544-1.017-70.024-29.591-90.805L178.577 794.285h537.825c35.351 0 66.523-22.701 77.365-56.245l166.25-511.51 166.136 511.397a81.155 81.155 0 0 0 77.365 56.358h537.939l-435.276 316.122Zm609.77-372.819c-10.956-33.656-42.014-56.244-77.365-56.244h-612.141l-189.064-582.1C1026.426 65.589 995.367 43 960.017 43c-35.351 0-66.523 22.588-77.365 56.245L693.475 681.344H81.335c-35.351 0-66.41 22.588-77.366 56.244-10.842 33.657 1.017 70.137 29.591 90.918l495.247 359.718-189.29 582.211c-10.842 33.657 1.017 70.137 29.704 90.918 14.23 10.39 31.059 15.586 47.661 15.586 16.829 0 33.657-5.195 47.887-15.699l495.248-359.718 495.02 359.718c28.575 20.894 67.088 20.894 95.775.113 28.574-20.781 40.433-57.261 29.59-91.03l-189.289-582.1 495.247-359.717c28.687-20.781 40.546-57.261 29.59-90.918Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StarLightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.StarLight,
+ contentDescription = "StarLight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Stats.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Stats.kt
new file mode 100644
index 0000000000..01bafda699
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Stats.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Stats: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Stats",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 106.667H1173.33V1493.33H746.667V106.667ZM533.333 533.333H106.667V1493.33H533.333V533.333ZM1920 1706.67H0V1824H1920V1706.67ZM1813.33 746.667H1386.67V1493.33H1813.33V746.667Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StatsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Stats,
+ contentDescription = "Stats",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Stop.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Stop.kt
new file mode 100644
index 0000000000..b00d29f2eb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Stop.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Stop: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Stop",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 1920h1920V0H0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StopPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Stop,
+ contentDescription = "Stop",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Strikethrough.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Strikethrough.kt
new file mode 100644
index 0000000000..407f04197a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Strikethrough.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Strikethrough: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Strikethrough",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1471.2 1261.689c9.24 67.2 4.92 138.84-16.32 215.64-53.16 190.08-176.64 319.56-348 364.8-46.44 12.24-94.56 17.76-143.04 17.76-209.16 0-424.92-104.04-546.84-225.12l-52.44-56.04 175.68-163.68 49.2 52.92c98.76 97.92 303.48 182.16 456.24 142.08 89.28-23.64 147.48-87.96 177.96-196.92 16.56-60 17.16-109.44 3.12-151.44Zm-31.92-991.08-163.8 175.32c-105.12-98.16-319.2-176.16-469.8-134.76-85.8 23.28-141.6 82.08-170.64 179.76-54.48 183.24 66.72 252 377.76 345.48 71.04 21.36 133.56 40.68 183.96 65.28H1920v240H0v-240h561.72c-135.6-96.84-226.68-243.6-156.72-479.16 67.08-225.84 220.68-311.16 337.8-343.08 247.8-66.72 543.6 48.36 696.48 191.16Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StrikethroughPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Strikethrough,
+ contentDescription = "Strikethrough",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/StudentView.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/StudentView.kt
new file mode 100644
index 0000000000..aab4a0e66b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/StudentView.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.StudentView: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.StudentView",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M512 192v128H361.856c-64.64 0-119.168 48.256-127.104 112.256-16.128 109.44-45.952 318.464-70.016 503.552C242.176 871.936 340.096 832 448 832c247.04 0 448 200.96 448 448l-.052-6.306v-57.643h134.529c31.36-216.576 216.448-384 441.472-384 110.592 0 210.56 41.728 288.896 108.288-23.424-185.984-52.608-397.056-68.224-506.496-7.808-65.536-60.928-113.792-123.52-113.792h-161.152v-128H1569.1c125.312 0 231.168 96.64 246.4 224.64 4.096 28.416 103.296 732.16 103.296 863.36 0 246.912-199.808 448-446.848 448-225.024 0-410.112-167.552-441.472-384H895.949l.007-57.743C892.57 1530.452 692.934 1728 448 1728c-247.04 0-448-200.96-448-448 0-131.2 103.552-834.944 107.904-864.768C123.392 288.64 232.704 192 361.856 192H512Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StudentViewPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.StudentView,
+ contentDescription = "StudentView",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Studio.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Studio.kt
new file mode 100644
index 0000000000..6f6c78d32b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Studio.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Studio: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Studio",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1740.135 0c32.46 0 58.775 26.315 58.775 58.776v1125.587c0 32.46-26.314 58.775-58.775 58.775h-245.278v199.818c0 14.201 11.512 25.714 25.714 25.714h61.463c23.377-65.684 86.101-112.707 159.808-112.707 93.658 0 169.582 75.924 169.582 169.581 0 93.657-75.924 169.582-169.582 169.582-74.315 0-137.465-47.803-160.379-114.337l-59.1.048c-77.131 0-139.628-62.497-139.628-139.592l.033-198.107h-123.405v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H782.214v347.178c66.118 23.143 113.538 86.085 113.538 160.103 0 93.657-75.924 169.581-169.581 169.581-93.657 0-169.581-75.924-169.581-169.581 0-74.018 47.42-136.96 113.538-160.103v-347.178H546.656l.033 198.107c0 77.095-62.497 139.592-139.592 139.592l-59.136-.048c-22.914 66.534-86.064 114.337-160.38 114.337C93.924 1695.126 18 1619.2 18 1525.544s75.924-169.581 169.581-169.581c73.707 0 136.431 47.023 159.809 112.707h61.463c14.201 0 25.714-11.513 25.714-25.714v-199.818H188.115c-32.461 0-58.776-26.314-58.776-58.775V58.776C129.339 26.315 155.654 0 188.115 0h1552.02ZM1204.67 1694.79c-30.723 0-55.629 24.906-55.629 55.629s24.906 55.629 55.63 55.629c30.722 0 55.628-24.906 55.628-55.63 0-30.722-24.906-55.628-55.629-55.628Zm-477.149 0c-30.723 0-55.629 24.906-55.629 55.629s24.906 55.629 55.629 55.629 55.629-24.906 55.629-55.63c0-30.722-24.906-55.628-55.629-55.628Zm1015.672-224.875c-30.723 0-55.63 24.906-55.63 55.63 0 30.722 24.907 55.628 55.63 55.628 30.723 0 55.628-24.906 55.628-55.629s-24.905-55.629-55.628-55.629Zm-1556.964 0c-30.723 0-55.629 24.906-55.629 55.63 0 30.722 24.906 55.628 55.63 55.628 30.722 0 55.628-24.906 55.628-55.629s-24.906-55.629-55.629-55.629ZM1692.202 1040H236.047v67.099c0 16.23 13.157 29.387 29.388 29.387h1397.38c16.23 0 29.387-13.157 29.387-29.387V1040Zm-29.388-933.333H265.434c-16.23 0-29.387 13.157-29.387 29.387v797.28h1456.155v-797.28c0-16.23-13.157-29.387-29.388-29.387ZM906.047 348.665l220.035 131.796C1138.59 489.628 1146 504.338 1146 520c0 15.662-7.41 30.372-19.918 39.539L906.047 691.335a47.406 47.406 0 0 1-48.007.014c-14.858-8.697-24.02-24.777-24.04-42.189V390.84c.02-17.412 9.182-33.492 24.04-42.19a47.406 47.406 0 0 1 48.007.015Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun StudioPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Studio,
+ contentDescription = "Studio",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Subaccounts.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Subaccounts.kt
new file mode 100644
index 0000000000..00f41d1320
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Subaccounts.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Subaccounts: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Subaccounts",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M677.647 0v564.706H903.53v301.101H225.77v489.487H0V1920h564.706v-564.706H338.71V978.861h564.818v376.433H677.647V1920h564.593v-564.706h-225.77V978.861h564.706v376.433h-225.995V1920H1920v-564.706h-225.882V865.807H1016.47V564.706h225.769V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SubaccountsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Subaccounts,
+ contentDescription = "Subaccounts",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Subtitles.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Subtitles.kt
new file mode 100644
index 0000000000..6fde3316c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Subtitles.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Subtitles: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Subtitles",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M213.333 0C95.513 0 0 95.513 0 213.333V1706.67C0 1824.49 95.513 1920 213.333 1920H1706.67c117.82 0 213.33-95.51 213.33-213.33V213.333C1920 95.513 1824.49 0 1706.67 0H213.333ZM320 1200c0-44.18 35.817-80 80-80h693.33c44.19 0 80 35.82 80 80s-35.81 80-80 80H400c-44.183 0-80-35.82-80-80Zm1066.67 0c0-44.18 35.81-80 80-80H1520c44.18 0 80 35.82 80 80s-35.82 80-80 80h-53.33c-44.19 0-80-35.82-80-80Zm-640.003 320c0-44.18 35.817-80 80-80H1520c44.18 0 80 35.82 80 80s-35.82 80-80 80H826.667c-44.183 0-80-35.82-80-80ZM320 1520c0-44.18 35.817-80 80-80h53.333c44.183 0 80 35.82 80 80s-35.817 80-80 80H400c-44.183 0-80-35.82-80-80Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SubtitlesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Subtitles,
+ contentDescription = "Subtitles",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Syllabus.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Syllabus.kt
new file mode 100644
index 0000000000..acb8e0dc89
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Syllabus.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Syllabus: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Syllabus",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1801.441 0v1920H219.03v-439.216h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.47 56.515-56.47h56.514V1029.02h-56.514c-31.196 0-56.515-25.3-56.515-56.471 0-31.172 25.319-56.47 56.515-56.47h56.514V577.254h-56.514c-31.196 0-56.515-25.299-56.515-56.47 0-31.172 25.319-56.471 56.515-56.471h56.514V0h1582.412Zm-521.714 1389.706H640.288v112.94h639.439v-112.94Zm109.172-214.83H640.288v112.94h748.611v-112.94Zm-109.172-534.845H640.288v112.94h639.439v-112.94Zm109.172-214.83H640.288v112.94h748.611v-112.94Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun SyllabusPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Syllabus,
+ contentDescription = "Syllabus",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Table.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Table.kt
new file mode 100644
index 0000000000..a02fbfc3b2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Table.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Table: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Table",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.344 1355.294v338.824h-339.05v-338.824h339.05Zm-564.932 0v338.824H790.588v-338.824h338.824Zm-564.706 0v338.824H225.882v-338.824h338.824Zm564.706-564.706v338.824H790.588V790.588h338.824Zm-564.706 0v338.824H225.882V790.588h338.824Zm1129.525 0v338.824h-338.937V790.588h338.937Zm-564.82-564.706v338.824H790.589V225.882h338.824Zm-564.705 0v338.824H225.882V225.882h338.824Zm1129.412 0v338.824h-338.824V225.882h338.824Zm0-225.882H225.882C101.308 0 0 101.308 0 225.882v1468.236C0 1818.692 101.308 1920 225.882 1920h1468.236c124.574 0 225.882-101.308 225.882-225.882V225.882C1920 101.308 1818.692 0 1694.118 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TablePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Table,
+ contentDescription = "Table",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableCellSelectAll.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableCellSelectAll.kt
new file mode 100644
index 0000000000..68f73f0b47
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableCellSelectAll.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableCellSelectAll: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableCellSelectAll",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M225.882 0h1468.236C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.308 0 225.882 0Zm854.462 1694.118h614v-614h-614v614ZM225.882 839.882h614v-614h-614v614Zm0 854.236h614v-614h-614v614Zm854.236-854.236h614v-614h-614v614Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableCellSelectAllPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableCellSelectAll,
+ contentDescription = "TableCellSelectAll",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteColumn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteColumn.kt
new file mode 100644
index 0000000000..3ce6d5a68f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteColumn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableDeleteColumn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableDeleteColumn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.232 1694.064h-338.88v-194.04h-225.96v194.04h-338.76v-194.04h-225.96v194.04h-338.76V225.984h338.76v199.8h225.96v-199.8h338.76v199.8h225.96v-199.8h338.88v1468.08Zm-.12-1694.04h-1468.2C101.352.024.072 101.304.072 225.984v1468.08c0 124.68 101.28 225.96 225.84 225.96h1468.2c124.56 0 225.96-101.28 225.96-225.96V225.984c0-124.68-101.4-225.96-225.96-225.96ZM1201.344 484.92l-241.32 241.32-241.2-241.32-233.88 233.76L726.264 960l-241.32 241.32 233.88 233.76 241.2-241.32 241.32 241.32 233.64-233.76-241.2-241.32 241.2-241.32-233.64-233.76Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableDeleteColumnPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableDeleteColumn,
+ contentDescription = "TableDeleteColumn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteRow.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteRow.kt
new file mode 100644
index 0000000000..f215f1199b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteRow.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableDeleteRow: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableDeleteRow",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M225.936 1694.232v-338.88h194.04v-225.96h-194.04v-338.76h194.04v-225.96h-194.04v-338.76h1468.08v338.76h-199.8v225.96h199.8v338.76h-199.8v225.96h199.8v338.88H225.936Zm1694.04-.12v-1468.2c0-124.56-101.28-225.84-225.96-225.84H225.936c-124.68 0-225.96 101.28-225.96 225.84v1468.2c0 124.56 101.28 225.96 225.96 225.96h1468.08c124.68 0 225.96-101.4 225.96-225.96Zm-1201.46-258.94 241.32-241.32 241.2 241.32 233.88-233.76-241.32-241.32 241.32-241.32-233.88-233.76-241.2 241.32-241.32-241.32-233.64 233.76 241.2 241.32-241.2 241.32 233.64 233.76Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableDeleteRowPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableDeleteRow,
+ contentDescription = "TableDeleteRow",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteTable.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteTable.kt
new file mode 100644
index 0000000000..e89ef2d54e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableDeleteTable.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableDeleteTable: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableDeleteTable",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.244 1694.064H225.924v-1468.2h1468.32v1468.2Zm-.12-1694.04h-1468.2c-124.56 0-225.96 101.28-225.96 225.84v1468.2c0 124.68 101.4 225.96 225.96 225.96h1468.2c124.56 0 225.84-101.28 225.84-225.96v-1468.2c0-124.56-101.28-225.84-225.84-225.84Zm-1058.736 1599 324.6-324.6 324.6 324.6 314.52-314.4-324.6-324.6 324.6-324.6-314.52-314.52-324.6 324.6-324.6-324.6-314.52 314.52 324.6 324.6-324.6 324.6 314.52 314.4Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableDeleteTablePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableDeleteTable,
+ contentDescription = "TableDeleteTable",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertColumnAfter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertColumnAfter.kt
new file mode 100644
index 0000000000..cb31c7e6ba
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertColumnAfter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableInsertColumnAfter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableInsertColumnAfter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 0C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.46-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.579 0 1694.118V225.882C0 101.308 101.308 0 225.882 0h1468.236Zm-903.53 1694.118h903.53V225.882h-903.53v1468.236ZM225.882 564.706h338.824V225.882H225.882v338.824Zm0 564.706h338.824V790.588H225.882v338.824Zm0 564.706h338.824v-338.824H225.882v338.824Zm887.492-338.824V1088.98H847.06V831.02h266.315V564.706h258.07V831.02h266.203v257.958h-266.202v266.315h-258.07Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertColumnAfterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableInsertColumnAfter,
+ contentDescription = "TableInsertColumnAfter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertColumnBefore.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertColumnBefore.kt
new file mode 100644
index 0000000000..c4bbe0647c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertColumnBefore.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableInsertColumnBefore: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableInsertColumnBefore",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1129.412 225.882h-903.53v1468.236h903.53V225.882Zm564.706 1129.412h-338.824v338.824h338.824v-338.824Zm0-564.706h-338.824v338.824h338.824V790.588Zm0-564.706h-338.824v338.824h338.824V225.882ZM225.882 1920C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.422 101.308 0 225.882 0h1468.236C1818.692 0 1920 101.421 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882ZM806.626 564.706V831.02h266.315v257.958H806.626v266.315h-258.07V1088.98H282.352V831.02h266.202V564.706h258.07Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertColumnBeforePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableInsertColumnBefore,
+ contentDescription = "TableInsertColumnBefore",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertRowAbove.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertRowAbove.kt
new file mode 100644
index 0000000000..0e47bdcf06
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertRowAbove.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableInsertRowAbove: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableInsertRowAbove",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 1129.412v-903.53H225.882v903.53h1468.236ZM564.706 1694.118v-338.824H225.882v338.824h338.824Zm564.706 0v-338.824H790.588v338.824h338.824Zm564.706 0v-338.824h-338.824v338.824h338.824ZM0 225.882C0 101.308 101.308 0 225.882 0h1468.236C1818.578 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.421 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882Zm1355.294 580.744H1088.98v266.315H831.02V806.626H564.706v-258.07H831.02V282.352h257.958v266.202h266.315v258.07Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertRowAbovePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableInsertRowAbove,
+ contentDescription = "TableInsertRowAbove",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertRowAfter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertRowAfter.kt
new file mode 100644
index 0000000000..5dd8fd3e49
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableInsertRowAfter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableInsertRowAfter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableInsertRowAfter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 1694.118c0 124.574-101.308 225.882-225.882 225.882H225.882C101.422 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.421 0 225.882 0h1468.236C1818.692 0 1920 101.308 1920 225.882v1468.236ZM225.882 790.588v903.53h1468.236v-903.53H225.882Zm1129.412-564.706v338.824h338.824V225.882h-338.824Zm-564.706 0v338.824h338.824V225.882H790.588Zm-564.706 0v338.824h338.824V225.882H225.882Zm338.824 887.492H831.02V847.06h257.958v266.315h266.315v258.07H1088.98v266.203H831.02v-266.202H564.706v-258.07Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableInsertRowAfterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableInsertRowAfter,
+ contentDescription = "TableInsertRowAfter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableLeftHeader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableLeftHeader.kt
new file mode 100644
index 0000000000..b83c33cb96
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableLeftHeader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableLeftHeader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableLeftHeader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 0C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.308 0 225.882 0h1468.236Zm.226 1355.294h-339.05v338.824h339.05v-338.824Zm-564.932 0H790.588v338.824h338.824v-338.824Zm0-564.706H790.588v338.824h338.824V790.588Zm564.819 0h-338.937v338.824h338.937V790.588Zm-564.82-564.706H790.589v338.824h338.824V225.882Zm564.707 0h-338.824v338.824h338.824V225.882Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableLeftHeaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableLeftHeader,
+ contentDescription = "TableLeftHeader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableMergeCells.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableMergeCells.kt
new file mode 100644
index 0000000000..20fb186865
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableMergeCells.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableMergeCells: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableMergeCells",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 0C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.308 0 225.882 0h1468.236Zm-903.53 564.706h338.824V225.882H790.588v338.824Zm-564.706 0h338.824V225.882H225.882v338.824Zm0 564.706h338.824V790.588H225.882v338.824Zm0 564.706h338.824v-338.824H225.882v338.824Zm564.349.47h904v-904h-904v904Zm565.063-1129.882h338.824V225.882h-338.824v338.824Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableMergeCellsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableMergeCells,
+ contentDescription = "TableMergeCells",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableRowProperties.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableRowProperties.kt
new file mode 100644
index 0000000000..b9a1e66687
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableRowProperties.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableRowProperties: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableRowProperties",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 0C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.308 0 225.882 0Zm.226 1355.294h-339.05v338.824h339.05v-338.824Zm-564.932 0H790.588v338.824h338.824v-338.824Zm-564.706 0H225.882v338.824h338.824v-338.824Zm564.706-1129.412H790.588v338.824h338.824V225.882Zm-564.706 0H225.882v338.824h338.824V225.882Zm1129.412 0h-338.824v338.824h338.824V225.882Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableRowPropertiesPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableRowProperties,
+ contentDescription = "TableRowProperties",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableSplitCells.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableSplitCells.kt
new file mode 100644
index 0000000000..42b7e58967
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableSplitCells.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableSplitCells: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableSplitCells",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 0C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.308 0 225.882 0Zm.113 790.588h-904v904h904v-904ZM564.706 1355.294H225.882v338.824h338.824v-338.824Zm0-564.706H225.882v338.824h338.824V790.588Zm564.706-564.706H790.588v338.824h338.824V225.882Zm-564.706 0H225.882v338.824h338.824V225.882Zm1129.412 0h-338.824v338.824h338.824V225.882ZM1442.178 849l-203.224 203.225L1035.914 849 839 1045.822l203.225 203.224L839 1452.178 1035.915 1649l203.039-203.225L1442.178 1649 1639 1452.178l-203.132-203.132L1639 1045.822 1442.178 849Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableSplitCellsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableSplitCells,
+ contentDescription = "TableSplitCells",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableTopHeader.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableTopHeader.kt
new file mode 100644
index 0000000000..fa41609fb4
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TableTopHeader.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TableTopHeader: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TableTopHeader",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.118 0C1818.692 0 1920 101.308 1920 225.882v1468.236c0 124.574-101.308 225.882-225.882 225.882H225.882C101.308 1920 0 1818.692 0 1694.118V225.882C0 101.308 101.308 0 225.882 0h1468.236Zm-338.824 1694.118h339.05v-338.824h-339.05v338.824Zm-564.706-564.706h338.824V790.588H790.588v338.824Zm0 564.706h338.824v-338.824H790.588v338.824Zm-564.706-564.706h338.824V790.588H225.882v338.824Zm0 564.706h338.824v-338.824H225.882v338.824Zm1129.412-564.706h338.937V790.588h-338.937v338.824Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TableTopHeaderPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TableTopHeader,
+ contentDescription = "TableTopHeader",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Tag.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Tag.kt
new file mode 100644
index 0000000000..f76f83ac39
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Tag.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Tag: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Tag",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1521.461 53c-103.466 0-199.466 42.667-266.666 113.067-37.334 37.333-66.134 83.2-84.267 134.4-14.933 38.4-22.4 81.066-22.4 125.866 0 19.307 2.027 38.4 5.333 57.387 2.774 17.92 7.254 35.307 12.374 52.587v.106c1.813 5.974 2.666 12.16 4.693 17.92 3.2 8.534 7.467 18.134 9.6 21.334 1.067 3.2 3.2 7.466 5.333 10.666 19.2 43.734 46.934 82.134 85.334 115.2 1.493 1.28 13.44 10.134 31.36 21.76-5.76 30.187-17.6 59.52-40.854 82.88-62.506 62.4-163.84 62.4-226.346 0-62.4-62.506-62.4-163.84 0-226.346 8.426-8.32 18.773-12.694 28.373-18.774-13.013-42.24-21.867-88.32-21.867-134.72 0-56 9.494-109.973 28.694-160H745.14L-.032 1011.4l829.76 829.76 745.067-745.173V426.333c0-88.213-71.787-160-160-160h-106.56c48.96-65.6 127.68-106.666 213.226-106.666 147.2 0 266.667 119.466 266.667 266.666h106.667C1894.795 220.467 1727.328 53 1521.46 53"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TagPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Tag,
+ contentDescription = "Tag",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Target.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Target.kt
new file mode 100644
index 0000000000..15fe419fc5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Target.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Target: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Target",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1691.249 1016.47c-27.558 359.718-315.106 647.154-674.824 674.824v-223.059h-112.94v223.06c-359.718-27.671-647.154-315.107-674.711-674.824H451.72V903.529H228.774c27.557-359.717 314.993-647.153 674.71-674.823v223.059h112.941v-223.06c359.718 27.671 647.266 315.107 674.824 674.824H1468.19v112.942h223.059Zm112.941-112.94c-28.01-421.949-365.703-759.756-787.765-787.765V0h-112.94v115.765c-421.949 28.01-759.643 365.816-787.653 787.764H-.045v112.942h115.877c28.01 421.948 365.704 759.755 787.652 787.764V1920h112.941v-115.765c422.062-28.01 759.756-365.816 787.765-787.764h115.765V903.529H1804.19ZM960 564.705c-217.976 0-395.294 177.318-395.294 395.294 0 217.976 177.318 395.294 395.294 395.294 217.976 0 395.294-177.318 395.294-395.294 0-217.976-177.318-395.294-395.294-395.294"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TargetPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Target,
+ contentDescription = "Target",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Text.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Text.kt
new file mode 100644
index 0000000000..9ce2be18d3
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Text.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Text: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Text",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M460.343 1618.286h312.686V301.714H509.714V633.6H208V0h1503.086v633.6H1409.37V301.714H1148.8v1316.572h309.943V1920h-998.4z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Text,
+ contentDescription = "Text",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextBackgroundColor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextBackgroundColor.kt
new file mode 100644
index 0000000000..cff3af6287
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextBackgroundColor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextBackgroundColor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextBackgroundColor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m928.806 512-185.984 512h434.304L991.142 512h-62.336Zm419.072 981.875-124.16-341.888h-527.36L572.07 1493.875 451.878 1450.1 839.206 383.987h241.664l387.2 1066.112-120.192 43.776ZM1728.038-.013h-1536c-105.856 0-192 86.144-192 192v1536c0 105.856 86.144 192 192 192h1536c105.856 0 192-86.144 192-192v-1536c0-105.856-86.144-192-192-192Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextBackgroundColorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextBackgroundColor,
+ contentDescription = "TextBackgroundColor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextCentered.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextCentered.kt
new file mode 100644
index 0000000000..231a281645
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextCentered.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextCentered: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextCentered",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1664 1600.128v256H256v-256h1408ZM1920 1216v256.128H0V1216h1920Zm-128-383.872v256H128v-256h1664Zm128-384v256H0v-256h1920ZM1664 64v256.128H256V64h1408Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextCenteredPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextCentered,
+ contentDescription = "TextCentered",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextColor.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextColor.kt
new file mode 100644
index 0000000000..35bf5ffe85
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextColor.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextColor: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextColor",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M74 1920h1772.308v-443.077H74zM1109.751.06l509.391 1227.027-136.468 56.566-164.972-397.588H602.576l-164.972 397.588-136.468-56.566L810.526.059h299.225zm-98.658 147.691h-101.76L663.868 738.373h592.542L1011.093 147.75z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextColorPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextColor,
+ contentDescription = "TextColor",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextDirectionLtr.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextDirectionLtr.kt
new file mode 100644
index 0000000000..b240f990f2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextDirectionLtr.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextDirectionLtr: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextDirectionLtr",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M306.205 1607.01h1290.597l-193.598 193.603L1522.588 1920 1920 1522.577l-397.412-397.423-119.384 119.387 193.598 193.604H306.205v168.864Zm389.661-819.34h33.35v447.153h168.86V168.865h196.722v1065.958h168.86V168.865h171.393V0H695.866C478.712 0 302 176.632 302 393.792c0 217.245 176.712 393.877 393.866 393.877"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextDirectionLtrPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextDirectionLtr,
+ contentDescription = "TextDirectionLtr",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextDirectionRtl.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextDirectionRtl.kt
new file mode 100644
index 0000000000..5ec5ad9511
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextDirectionRtl.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextDirectionRtl: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextDirectionRtl",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M822.456 787.786h33.337v447.22h168.8V168.89h196.652v1066.115h168.8V168.89h171.331V0h-738.92C605.379 0 428.73 176.659 428.73 393.85c0 217.277 176.65 393.936 393.726 393.936m949.528 650.39H523.268l193.65-193.592-119.416-119.38-397.518 397.398L597.502 1920l119.416-119.38-193.65-193.59h1248.716v-168.855Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextDirectionRtlPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextDirectionRtl,
+ contentDescription = "TextDirectionRtl",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextEnd.kt
new file mode 100644
index 0000000000..8f97acdd91
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextEnd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920.128 1600v256H256v-256h1664.128Zm-.128-384.128V1472H0v-256.128h1920Zm.128-383.872v256H256V832h1664.128ZM1920 448v256H0V448h1920Zm.128-384.128V320H256V63.872h1664.128Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextEnd,
+ contentDescription = "TextEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextLeft.kt
new file mode 100644
index 0000000000..67786a683c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1664 1600v256H0v-256h1664Zm256-384.128V1472H0v-256.128h1920ZM1664 832v256H0V832h1664Zm256-384v256H0V448h1920ZM1664 63.872V320H0V63.872h1664Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextLeft,
+ contentDescription = "TextLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextRight.kt
new file mode 100644
index 0000000000..ad51ee4ef1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920.128 1600v256H256v-256h1664.128Zm-.128-384.128V1472H0v-256.128h1920Zm.128-383.872v256H256V832h1664.128ZM1920 448v256H0V448h1920Zm.128-384.128V320H256V63.872h1664.128Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextRight,
+ contentDescription = "TextRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextStart.kt
new file mode 100644
index 0000000000..760ffd05ad
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1664 1600v256H0v-256h1664Zm256-384.128V1472H0v-256.128h1920ZM1664 832v256H0V832h1664Zm256-384v256H0V448h1920ZM1664 63.872V320H0V63.872h1664Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextStart,
+ contentDescription = "TextStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextSubscript.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextSubscript.kt
new file mode 100644
index 0000000000..54ebf82d6d
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextSubscript.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextSubscript: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextSubscript",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1469.7 963c125.826 0 242.225 77.38 289.905 192.357 47.817 115.25 18.034 242.531-79.512 340.145-32.46 32.483-68.927 67.41-105.884 102.023l-5.042 4.718a8160.14 8160.14 0 0 1-47.824 44.328h255.75V1920h-546.475c-75.55 0-136.618-61.111-136.618-136.714v-59.744c0-39.648 17.214-77.244 46.997-103.22 2.049-1.914 214.354-186.478 345.918-318.134 9.973-9.98 25.82-28.71 20.22-42.245-4.646-11.347-20.22-23.514-37.434-23.514-50.003 0-109.568 55.916-130.334 82.985l-218.043-164.877C1136.078 1134.85 1270.51 963 1469.7 963ZM1094 142v273.455H683.75V1646h-273.5V415.455H0V142h1094Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextSubscriptPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextSubscript,
+ contentDescription = "TextSubscript",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextSuperscript.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextSuperscript.kt
new file mode 100644
index 0000000000..f05fb454ce
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TextSuperscript.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TextSuperscript: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TextSuperscript",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1094.335 415.471v273.584H683.959v1231.127H410.376V689.055H0V415.471h1094.335ZM1607.305 5c125.985 0 242.531 77.424 290.272 192.466 47.877 115.316 18.056 242.669-79.613 340.338-48.014 48.014-104.783 101.363-158.952 151.155h256.074v273.584H1367.92c-75.646 0-136.792-61.146-136.792-136.792v-59.778c0-39.67 17.236-77.287 47.056-103.278.144-.134 1.32-1.163 3.426-3.007l2.032-1.779c34.203-29.94 221.024-193.654 340.9-313.528 9.985-9.986 25.853-28.727 20.244-42.27-4.65-11.353-20.245-23.527-37.48-23.527-50.066 0-109.708 55.948-130.5 83.032l-218.32-164.97C1273.26 176.946 1407.862 5 1607.305 5Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextSuperscriptPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TextSuperscript,
+ contentDescription = "TextSuperscript",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Textarea.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Textarea.kt
new file mode 100644
index 0000000000..43f1866956
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Textarea.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Textarea: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Textarea",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 60v1440H600c-165.36 0-300 134.64-300 300v60H0V60h1920Zm-720 840H480v120h720V900Zm240-360H480v120h960V540Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TextareaPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Textarea,
+ contentDescription = "Textarea",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Timer.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Timer.kt
new file mode 100644
index 0000000000..b0a09be9bb
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Timer.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Timer: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Timer",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c529.694 0 960 430.306 960 960s-430.306 960-960 960S0 1489.694 0 960c0-172.8 46.306-342.212 134.4-489.035l35.012-58.73 29.364 25.977L633.6 873.035A311.165 311.165 0 0 0 621.176 960c0 186.353 152.471 338.824 338.824 338.824S1298.824 1146.353 1298.824 960 1146.353 621.176 960 621.176c-19.2 0-38.4 2.26-56.47 5.648V0ZM322.334 242.372 845.93 766.08c33.657-19.765 72.283-31.962 114.071-31.962 124.574 0 225.882 101.308 225.882 225.882S1084.574 1185.882 960 1185.882 734.118 1084.574 734.118 960c0-41.788 12.197-80.414 31.962-114.07L242.372 322.333l79.962-79.962Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TimerPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Timer,
+ contentDescription = "Timer",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleEnd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleEnd.kt
new file mode 100644
index 0000000000..6eb1ee743a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleEnd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ToggleEnd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ToggleEnd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1016.47 56C1514.655 56 1920 461.346 1920 959.53c0 498.183-405.346 903.529-903.53 903.529-273.204 0-528.338-121.412-699.896-333.29l175.51-142.08c128.528 158.57 319.737 249.487 524.387 249.487 373.722 0 677.647-303.924 677.647-677.647 0-373.722-303.925-677.647-677.647-677.647-204.65 0-395.86 90.918-524.386 249.487l-175.51-142.08C488.131 177.412 743.264 56 1016.47 56Zm-89.54 428.408 475.031 475.144-475.03 475.144-159.699-159.812 202.504-202.39H.023V846.61h969.713L767.232 644.107l159.699-159.699Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleEndPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ToggleEnd,
+ contentDescription = "ToggleEnd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleLeft.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleLeft.kt
new file mode 100644
index 0000000000..e8dafaf9c8
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleLeft.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ToggleLeft: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ToggleLeft",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M903.53 56c273.204 0 528.338 121.412 699.896 333.29l-175.51 142.08c-128.528-158.57-319.737-249.488-524.387-249.488-373.722 0-677.647 303.925-677.647 677.647 0 373.723 303.925 677.647 677.647 677.647 204.65 0 395.86-90.917 524.386-249.487l175.51 142.08c-171.557 211.878-426.69 333.29-699.896 333.29C405.346 1863.059 0 1457.713 0 959.529 0 461.346 405.346 56 903.53 56Zm89.562 428.386 159.699 159.699-202.504 202.503H1920v225.883H950.287l202.504 202.503-159.7 159.699-475.143-475.144 475.144-475.143Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleLeftPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ToggleLeft,
+ contentDescription = "ToggleLeft",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleRight.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleRight.kt
new file mode 100644
index 0000000000..588501fc77
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleRight.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ToggleRight: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ToggleRight",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1016.47 56C1514.655 56 1920 461.346 1920 959.53c0 498.183-405.346 903.529-903.53 903.529-273.204 0-528.338-121.412-699.896-333.29l175.51-142.08c128.528 158.57 319.737 249.487 524.387 249.487 373.722 0 677.647-303.924 677.647-677.647 0-373.722-303.925-677.647-677.647-677.647-204.65 0-395.86 90.918-524.386 249.487l-175.51-142.08C488.131 177.412 743.264 56 1016.47 56Zm-89.54 428.408 475.031 475.144-475.03 475.144-159.699-159.812 202.504-202.39H.023V846.61h969.713L767.232 644.107l159.699-159.699Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleRightPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ToggleRight,
+ contentDescription = "ToggleRight",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleStart.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleStart.kt
new file mode 100644
index 0000000000..458805976f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ToggleStart.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ToggleStart: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ToggleStart",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M903.53 56c273.204 0 528.338 121.412 699.896 333.29l-175.51 142.08c-128.528-158.57-319.737-249.488-524.387-249.488-373.722 0-677.647 303.925-677.647 677.647 0 373.723 303.925 677.647 677.647 677.647 204.65 0 395.86-90.917 524.386-249.487l175.51 142.08c-171.557 211.878-426.69 333.29-699.896 333.29C405.346 1863.059 0 1457.713 0 959.529 0 461.346 405.346 56 903.53 56Zm89.562 428.386 159.699 159.699-202.504 202.503H1920v225.883H950.287l202.504 202.503-159.7 159.699-475.143-475.144 475.144-475.143Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ToggleStartPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ToggleStart,
+ contentDescription = "ToggleStart",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Trash.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Trash.kt
new file mode 100644
index 0000000000..0d517db9ff
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Trash.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Trash: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Trash",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1694.063 564.684v1185.813c0 93.396-76.005 169.401-169.402 169.401H395.316c-93.397 0-169.402-76.005-169.402-169.401V564.684h1468.15ZM1217.095 0l123.438 338.804H1920V451.85H0V338.804h571.223L694.66 0h522.435ZM677.652 1581.095h112.935V903.488H677.652v677.607Zm451.739 0h112.934V903.488h-112.934v677.607Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TrashPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Trash,
+ contentDescription = "Trash",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Trouble.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Trouble.kt
new file mode 100644
index 0000000000..e0c252a932
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Trouble.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Trouble: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Trouble",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1359.36 1279.51-79.85 79.85L960 1039.85l-319.398 319.51-79.85-79.85L880.152 960 560.753 640.602l79.85-79.85L960 880.152l319.51-319.398 79.85 79.85L1039.85 960l319.51 319.51ZM960 0C430.645 0 0 430.645 0 960s430.645 960 960 960 960-430.645 960-960S1489.355 0 960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TroublePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Trouble,
+ contentDescription = "Trouble",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Twitter.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Twitter.kt
new file mode 100644
index 0000000000..2eafd6861b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Twitter.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Twitter: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Twitter",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 311.856c-70.701 33.769-146.598 56.47-226.221 66.86 81.317-52.517 143.774-135.529 173.252-234.691-76.236 48.678-160.716 84.028-250.391 103.002-71.718-82.56-174.268-134.06-287.435-134.06-217.75 0-394.165 189.966-394.165 424.206 0 33.318 3.614 65.619 10.165 96.678C617.9 616.119 327.304 447.385 133.045 190.67c-33.77 62.57-53.309 135.53-53.309 213.233 0 147.162 91.031 276.818 196.744 353.054-64.602-2.26-157.101-21.46-157.101-53.309v5.648c0 205.327 114.41 376.658 294.55 415.849-32.978 9.487-78.38 14.795-114.409 14.795-25.412 0-55.454-2.71-79.624-7.793 50.26 168.509 193.13 291.163 365.478 294.777-134.852 113.506-306.07 181.383-490.616 181.383-31.85 0-64.038-2.033-94.758-5.873 174.494 120.17 381.176 190.532 603.67 190.532 724.97 0 1121.055-646.136 1121.055-1206.55 0-18.41-.452-36.932-1.356-55.116 77.026-59.746 143.887-134.4 196.631-219.444"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TwitterPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Twitter,
+ contentDescription = "Twitter",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TwitterBoxed.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TwitterBoxed.kt
new file mode 100644
index 0000000000..49c9d8cda0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/TwitterBoxed.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.TwitterBoxed: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.TwitterBoxed",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1920 311.856c-70.701 33.769-146.598 56.47-226.221 66.86 81.317-52.517 143.774-135.529 173.252-234.691-76.236 48.678-160.716 84.028-250.391 103.002-71.718-82.56-174.268-134.06-287.435-134.06-217.75 0-394.165 189.966-394.165 424.206 0 33.318 3.614 65.619 10.165 96.678C617.9 616.119 327.304 447.385 133.045 190.67c-33.77 62.57-53.309 135.53-53.309 213.233 0 147.162 91.031 276.818 196.744 353.054-64.602-2.26-157.101-21.46-157.101-53.309v5.648c0 205.327 114.41 376.658 294.55 415.849-32.978 9.487-78.38 14.795-114.409 14.795-25.412 0-55.454-2.71-79.624-7.793 50.26 168.509 193.13 291.163 365.478 294.777-134.852 113.506-306.07 181.383-490.616 181.383-31.85 0-64.038-2.033-94.758-5.873 174.494 120.17 381.176 190.532 603.67 190.532 724.97 0 1121.055-646.136 1121.055-1206.55 0-18.41-.452-36.932-1.356-55.116 77.026-59.746 143.887-134.4 196.631-219.444"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun TwitterBoxedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.TwitterBoxed,
+ contentDescription = "TwitterBoxed",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unarchive.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unarchive.kt
new file mode 100644
index 0000000000..54fdb4233b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unarchive.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Unarchive: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Unarchive",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M533.333 560v160H240l.008 453.33 209.066 213.34H1470.93l209.06-213.34L1680 720h-293.33V560h352c55.96 0 101.33 45.368 101.33 101.333v511.997h16c35.35 0 64 28.66 64 64V1856c0 35.35-28.65 64-64 64H64c-35.346 0-64-28.65-64-64v-618.67c0-35.34 28.654-64 64-64h16V661.333C80 605.368 125.369 560 181.333 560h352ZM960 0l376.57 376.569-113.14 113.137L1040 306.275v867.055H879.999l-.001-867.055-183.43 183.431-113.137-113.138L960 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnarchivePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Unarchive,
+ contentDescription = "Unarchive",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Underline.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Underline.kt
new file mode 100644
index 0000000000..c24fc3bd85
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Underline.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Underline: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Underline",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1714.571 1645.714V1920H206v-274.286h1508.571ZM480.286 0v822.857c0 227.246 184.183 411.429 411.428 411.429h137.143c227.246 0 411.429-184.183 411.429-411.429V0h274.285v822.857c0 378.789-307.062 685.714-685.714 685.714H891.714C513.063 1508.571 206 1201.646 206 822.857V0h274.286Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnderlinePreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Underline,
+ contentDescription = "Underline",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Undo.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Undo.kt
new file mode 100644
index 0000000000..2d456cfda1
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Undo.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Undo: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Undo",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ autoMirror = true,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M640.001 98.75L810.909 269.658L468.005 612.563H1316.66V854.301H457.368L810.909 1207.96L640.001 1378.87L0.000127157 738.75L640.001 98.75Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1316.66 854.301C1517.02 854.752 1678.43 1017.35 1678.44 1217.81C1678.44 1418.28 1516.19 1580.8 1315.83 1581.25V1821.25C1476.06 1821.24 1629.72 1757.57 1743.02 1644.27C1856.32 1530.97 1919.99 1377.31 1920 1217.08C1920 1056.84 1856.33 903.103 1743.02 789.792C1629.72 676.495 1476.89 612.575 1316.66 612.563V854.301Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UndoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Undo,
+ contentDescription = "Undo",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unlock.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unlock.kt
new file mode 100644
index 0000000000..178e8279d2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unlock.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Unlock: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Unlock",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M564.824 903.53V508.234c0-217.976 177.317-395.294 395.294-395.294 217.976 0 395.294 177.318 395.294 395.294h112.94C1468.353 228.028 1240.326 0 960.119 0S451.882 228.028 451.882 508.235V903.53H226v790.589C226 1818.692 327.308 1920 451.882 1920h1016.47c124.575 0 225.883-101.308 225.883-225.882V903.529H564.824Zm338.823 677.646h112.941v-338.823h-112.94v338.823Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnlockPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Unlock,
+ contentDescription = "Unlock",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unmuted.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unmuted.kt
new file mode 100644
index 0000000000..a765e78953
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unmuted.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Unmuted: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Unmuted",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1298.824 1581.176c0 186.805-152.02 338.824-338.824 338.824-186.805 0-338.824-152.019-338.824-338.824h677.648ZM1016.47 0v115.765c378.465 29.026 677.647 345.6 677.647 731.294v282.353c0 124.574 101.308 225.882 225.882 225.882v112.941H0v-112.94c124.574 0 225.882-101.31 225.882-225.883V847.059c0-385.694 299.182-702.268 677.647-731.294V0h112.942Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnmutedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Unmuted,
+ contentDescription = "Unmuted",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unpublish.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unpublish.kt
new file mode 100644
index 0000000000..f58ab947b2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unpublish.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Unpublish: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Unpublish",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M213.333 960c0-167.36 56-321.707 149.44-446.4L1406.4 1557.227c-124.693 93.44-279.04 149.44-446.4 149.44-411.627 0-746.667-335.04-746.667-746.667m1493.334 0c0 167.36-56 321.707-149.44 446.4L513.6 362.773c124.693-93.44 279.04-149.44 446.4-149.44 411.627 0 746.667 335.04 746.667 746.667M960 0C429.76 0 0 429.76 0 960s429.76 960 960 960 960-429.76 960-960S1490.24 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnpublishPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Unpublish,
+ contentDescription = "Unpublish",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unpublished.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unpublished.kt
new file mode 100644
index 0000000000..14a5829300
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Unpublished.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Unpublished: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Unpublished",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M213.333 960c0-167.36 56-321.707 149.44-446.4L1406.4 1557.227c-124.693 93.44-279.04 149.44-446.4 149.44-411.627 0-746.667-335.04-746.667-746.667m1493.334 0c0 167.36-56 321.707-149.44 446.4L513.6 362.773c124.693-93.44 279.04-149.44 446.4-149.44 411.627 0 746.667 335.04 746.667 746.667M960 0C429.76 0 0 429.76 0 960s429.76 960 960 960 960-429.76 960-960S1490.24 0 960 0"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UnpublishedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Unpublished,
+ contentDescription = "Unpublished",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Updown.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Updown.kt
new file mode 100644
index 0000000000..2d8fa73461
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Updown.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Updown: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Updown",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M959.921.01 453 506.933l152.28 152.28 246.946-246.944v1095.475L605.28 1260.798 453 1413.078 959.921 1920l506.921-506.921-152.28-152.281-246.946 246.945V412.268l246.945 246.945 152.281-152.281z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UpdownPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Updown,
+ contentDescription = "Updown",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Upload.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Upload.kt
new file mode 100644
index 0000000000..a3d995ad35
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Upload.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Upload: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Upload",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1764.98 1402.824 155.362 155.362L1558.527 1920H368.814L7 1558.186l155.361-155.362 297.429 297.428h1007.762l297.428-297.428ZM965.901 0l517.176 517.176-155.361 155.361-251.941-251.94v1002.708H856.028V420.597l-251.941 251.94-155.362-155.361L965.901 0Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UploadPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Upload,
+ contentDescription = "Upload",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/User.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/User.kt
new file mode 100644
index 0000000000..3d24c0f4dd
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/User.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.User: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.User",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1587.854 1133.986c-109.666-42.353-223.51-72.057-339.276-91.257h-5.195c135.53-91.369 224.866-246.324 224.866-421.609v-24.847c-28.235 18.07-64.377 41.788-115.087 57.713-15.925 202.165-186.466 362.428-393.148 362.428-199.793 0-365.93-148.97-390.777-342.212-3.388-16.94-4.517-34.898-4.517-53.082v-60.988c1.355-.113 2.258-.452 3.614-.678 10.503-1.807 19.877-4.179 29.364-6.663 8.132-2.033 16.15-4.18 23.38-6.664 7.905-2.71 15.472-5.421 22.587-8.583 8.132-3.502 15.586-7.116 23.04-10.956 5.083-2.823 10.391-5.308 15.135-8.132a662.834 662.834 0 0 0 20.668-12.762c3.388-2.259 7.34-4.518 10.503-6.55 4.857-3.163 9.6-5.986 14.344-8.923 34.447-21.572 67.313-38.4 128.527-38.513h.226c53.195 0 84.932 12.085 114.635 29.026 9.826 5.647 19.539 11.972 29.817 18.522 35.124 22.815 73.976 47.549 133.722 58.956.678.113 1.13.452 1.807.564 20.33 3.728 43.143 5.873 69.007 5.873.452 0 .79-.113 1.242-.113 103.342-.225 157.214-34.785 204.537-65.392l55.793-34.448v-.112l.564-.452-3.952-21.346-2.372-15.473c-5.308-34.447-15.247-67.426-27.22-99.501-24.733-66.748-62.568-127.963-114.521-179.803-26.993-27.218-57.6-50.936-89.224-70.136-80.188-50.71-173.93-77.93-269.93-77.93-220.235 0-408.846 141.177-478.87 338.824-19.2 53.082-29.365 109.553-29.365 169.412V621.12c0 19.2 1.13 38.4 3.502 56.47C472.108 829.949 557.152 960.735 678 1042.166h-5.083c-111.812 18.41-222.042 46.983-328.433 87.19-140.612 53.309-231.53 183.417-231.53 331.709V1669.1l26.768 16.49c172.235 106.955 454.475 234.353 820.292 234.353 201.938 0 508.235-40.546 820.404-234.353l26.654-16.49v-208.037c0-144.904-88.094-276.255-219.218-327.078"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.User,
+ contentDescription = "User",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/UserAdd.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/UserAdd.kt
new file mode 100644
index 0000000000..706a0f0c05
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/UserAdd.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.UserAdd: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.UserAdd",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M840 0v840H0v240h840v840h240v-840h840V840h-840V0z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserAddPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.UserAdd,
+ contentDescription = "UserAdd",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/UserAssign.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/UserAssign.kt
new file mode 100644
index 0000000000..0b7bb80b5f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/UserAssign.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.UserAssign: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.UserAssign",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960.052 0.165527C1166.73 0.216439 1334.84 168.378 1334.84 375.061V482.145C1334.84 595.553 1283.16 696.191 1203.28 765.061C1261.29 772.02 1319.14 780.784 1376.41 792.77C1538.43 826.957 1656.19 981.53 1656.2 1160.37V1366.1L1634.32 1382.25C1582.66 1420.19 1507.27 1468.33 1412.03 1510.48L997.448 1096L560.261 1533.08C446.672 1489.23 354.266 1432.83 285.573 1382.14L263.802 1366V1160.27C263.811 981.406 381.645 826.832 543.802 792.666C600.75 780.786 658.395 771.606 716.198 764.541C636.514 695.777 585.156 595.355 585.156 482.145V375.061C585.163 168.346 753.336 0.165527 960.052 0.165527ZM871.094 321.52C776.239 321.528 757.523 391.401 692.24 417.874V482.145C692.24 629.741 812.456 749.957 960.052 749.957C1107.61 749.906 1227.76 629.709 1227.76 482.145V375.061C1227.76 372.603 1227.14 370.231 1227.03 367.666C1195.23 396.577 1166.43 428.585 1103.49 428.603C986.805 428.574 986.704 321.552 871.094 321.52Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1367.91 1572.86L1390.62 1595.46L1367.91 1618.06L1265.31 1720.56L1242.7 1697.86L1086.04 1541.08V1919.83H909.264V1541.08L735.931 1714.52L610.827 1589.42L997.598 1202.65L1367.91 1572.86Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun UserAssignPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.UserAssign,
+ contentDescription = "UserAssign",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Video.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Video.kt
new file mode 100644
index 0000000000..fcdf89461c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Video.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Video: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Video",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M746.667 1374.31V545.935l690.346 414.187-690.346 414.186ZM1879.04 321.615c-600.107-143.467-1238.4-143.467-1838.08 0L0 331.429v1257.494l40.96 9.813c300.053 71.68 609.28 108.053 919.04 108.053 309.867 0 619.2-36.373 919.04-108.053l40.96-9.813V331.429l-40.96-9.813Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun VideoPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Video,
+ contentDescription = "Video",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/VideoCamera.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/VideoCamera.kt
new file mode 100644
index 0000000000..c6576f4a18
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/VideoCamera.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.VideoCamera: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.VideoCamera",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M0 240v1440h1500.536v-551.83L1920 1574.06V346.051l-419.464 445.78V240z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun VideoCameraPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.VideoCamera,
+ contentDescription = "VideoCamera",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/VideoCameraOff.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/VideoCameraOff.kt
new file mode 100644
index 0000000000..29518f547c
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/VideoCameraOff.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.VideoCameraOff: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.VideoCameraOff",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1421.141 3.007 91.775 64.262L215.481 1919.55l.595.417-.378.54-92.37-64.679L246.487 1680H0V240h1255.139L1421.141 3.007Zm79.395 278.487V791.83L1920 346.05v1228.01l-419.464-445.892V1680H520.95l979.586-1398.506Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun VideoCameraOffPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.VideoCameraOff,
+ contentDescription = "VideoCameraOff",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Warning.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Warning.kt
new file mode 100644
index 0000000000..4ebc342ff7
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Warning.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Warning: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Warning",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M960 0c530.193 0 960 429.807 960 960s-429.807 960-960 960S0 1490.193 0 960 429.807 0 960 0Zm-9.838 1342.685c-84.47 0-153.19 68.721-153.19 153.19 0 84.47 68.72 153.192 153.19 153.192s153.19-68.721 153.19-153.191-68.72-153.19-153.19-153.19ZM1153.658 320H746.667l99.118 898.623h208.755L1153.658 320Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WarningPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Warning,
+ contentDescription = "Warning",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/WarningBorderless.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/WarningBorderless.kt
new file mode 100644
index 0000000000..51dee5fd17
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/WarningBorderless.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.WarningBorderless: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.WarningBorderless",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M994.578 1436.356c-133.365 0-241.822 108.457-241.822 241.822S861.213 1920 994.578 1920s241.822-108.457 241.822-241.822-108.457-241.822-241.822-241.822zm170.485-120.912L1310.156 0H679l145.093 1315.444z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WarningBorderlessPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.WarningBorderless,
+ contentDescription = "WarningBorderless",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Windows.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Windows.kt
new file mode 100644
index 0000000000..4b4c9071d5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Windows.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Windows: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Windows",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M1863.53 1016.437c31.171 0 56.47 25.299 56.47 56.47v790.589c0 16.376-7.115 31.849-19.313 42.465-10.39 9.149-23.605 14.005-37.158 14.005-2.484 0-5.082-.113-7.567-.452l-903.53-123.331c-28.008-3.84-48.903-27.784-48.903-56.02v-667.256c0-31.171 25.3-56.47 56.471-56.47Zm-1129.412 0c31.171 0 56.47 25.299 56.47 56.47v634.504c0 16.376-7.115 31.85-19.426 42.579-10.39 9.035-23.491 13.891-37.044 13.891-2.485 0-5.196-.113-7.68-.564L48.79 1669.35C20.78 1665.51 0 1641.68 0 1613.444v-540.537c0-31.171 25.299-56.47 56.47-56.47Zm-7.726-859.855c16.151-2.372 32.415 2.597 44.725 13.327 12.424 10.73 19.426 26.315 19.426 42.579V846.99c0 31.285-25.186 56.47-56.47 56.47H56.424c-31.171 0-56.47-25.185-56.47-56.47V306.455c0-28.123 20.781-52.066 48.79-55.906ZM1855.974.474c16.15-2.033 32.414 2.71 44.724 13.44 12.198 10.73 19.313 26.203 19.313 42.466v790.588c0 31.285-25.299 56.471-56.47 56.471H960.01c-31.171 0-56.47-25.186-56.47-56.47V179.711c0-28.235 20.78-52.066 48.903-55.906Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WindowsPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Windows,
+ contentDescription = "Windows",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Wordpress.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Wordpress.kt
new file mode 100644
index 0000000000..d904b7c536
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Wordpress.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Wordpress: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Wordpress",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1243.561 1811.41-238.305-636.197-272.866 638.118c-103.229-2.598-163.087-64.828-163.087-64.828L162.6 471.59s-16.037-63.36-106.842-63.36H-.034l37.045-96.226h519.755v96.226s-51.614 41.562-39.53 99.162c12.198 57.6 220.236 887.266 220.236 887.266l200.584-443.972-93.064-293.647c-35.69-90.24-65.054-177.205-88.433-200.245-32.979-35.802-93.063-48.564-93.063-48.564v-96.226h640.376v96.226h-105.939s-55.793 11.18-60.65 93.176c-1.016 16.49 8.584 73.864 8.584 73.864l248.47 816.903s255.248-468.706 258.862-570.805c3.727-101.872-35.802-268.687-147.275-335.322-178.334-107.407-133.27-321.092 4.179-396.65 58.729-32.188 111.02-33.43 170.54-33.43 209.845 0 233.45 237.854 233.45 237.854 13.892 81.996 4.066 221.478-35.463 344.47-103.229 319.85-358.702 895.286-457.638 1114.391-79.51 78.946-177.43 58.73-177.43 58.73"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun WordpressPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Wordpress,
+ contentDescription = "Wordpress",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/X.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/X.kt
new file mode 100644
index 0000000000..be7abc9875
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/X.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.X: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.X",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M797.32 985.882 344.772 1438.43l188.561 188.562 452.549-452.549 452.548 452.549 188.562-188.562-452.549-452.548 452.549-452.549-188.562-188.561L985.882 797.32 533.333 344.772 344.772 533.333z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun XPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.X,
+ contentDescription = "X",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Zipped.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Zipped.kt
new file mode 100644
index 0000000000..caeaafa53f
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/Zipped.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.Zipped: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.Zipped",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M620.765 0v282.353c0 73.638 47.435 135.755 113.167 159.134v123.219H620.765v112.941h113.167v112.941H620.765V903.53h113.167v112.942H620.765v112.94h113.167v112.942H620.765v112.941h113.167v112.941H620.765v112.941h113.167V1920H169V0h451.765Zm564.706 0v564.706h564.705V1920H846.873v-451.765h112.715v-112.94H846.873v-112.942h112.715v-112.941H846.873V1016.47h112.715V903.529H846.873V790.59h112.715V677.646H846.873V441.261c65.506-23.379 112.715-85.496 112.715-158.908V0h225.883Zm112.94 7.454 444.537 444.31h-444.536V7.455ZM846.648 0v282.353c0 31.172-25.412 56.47-56.47 56.47-31.06 0-56.471-25.298-56.471-56.47V0h112.941Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ZippedPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.Zipped,
+ contentDescription = "Zipped",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ZoomIn.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ZoomIn.kt
new file mode 100644
index 0000000000..7c0b0d8541
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ZoomIn.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ZoomIn: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ZoomIn",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "m1920 1766.678-368.126-368.234c114.287-146.817 183.033-330.826 183.033-530.99C1734.907 389.16 1345.746 0 867.454 0 389.16 0 0 389.161 0 867.454c0 478.292 389.161 867.453 867.454 867.453 200.164 0 384.065-68.854 530.99-183.033L1766.678 1920 1920 1766.678ZM867.454 1518.044c-358.8 0-650.59-291.79-650.59-650.59s291.79-650.59 650.59-650.59 650.59 291.79 650.59 650.59-291.79 650.59-650.59 650.59ZM975.885 487.943H759.022v271.079h-271.08v216.863h271.08v271.08h216.863v-271.08h271.08V759.022h-271.08v-271.08Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ZoomInPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ZoomIn,
+ contentDescription = "ZoomIn",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ZoomOut.kt b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ZoomOut.kt
new file mode 100644
index 0000000000..3d68e176f2
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/icon/solid/ZoomOut.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by the InstUI icon generator
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.icon.solid
+
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Icon
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.PathFillType
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.PathParser
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.icon.InstUIIcons
+
+val InstUIIcons.Solid.ZoomOut: ImageVector by lazy {
+ ImageVector.Builder(
+ name = "Solid.ZoomOut",
+ defaultWidth = 24.dp,
+ defaultHeight = 24.dp,
+ viewportWidth = 1920f,
+ viewportHeight = 1920f,
+ )
+ .addPath(
+ pathData = PathParser().parsePathString(
+ "M867.454 1518.044c-358.8 0-650.59-291.79-650.59-650.59s291.79-650.59 650.59-650.59 650.59 291.79 650.59 650.59-291.79 650.59-650.59 650.59ZM1920 1766.678l-368.126-368.234c114.287-146.817 183.033-330.826 183.033-530.99C1734.907 389.16 1345.746 0 867.454 0 389.16 0 0 389.161 0 867.454c0 478.292 389.161 867.453 867.454 867.453 200.164 0 384.065-68.854 530.99-183.033L1766.678 1920 1920 1766.678ZM487.943 975.885h759.021V759.022H487.943v216.863Z"
+ ).toNodes(),
+ fill = SolidColor(Color.Black),
+ pathFillType = PathFillType.EvenOdd,
+ )
+ .build()
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun ZoomOutPreview() {
+ Icon(
+ imageVector = InstUIIcons.Solid.ZoomOut,
+ contentDescription = "ZoomOut",
+ modifier = Modifier.size(48.dp),
+ )
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIColors.kt b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIColors.kt
new file mode 100644
index 0000000000..ecbbade8e5
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIColors.kt
@@ -0,0 +1,316 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.primitives
+
+import androidx.compose.ui.graphics.Color
+
+/**
+ * InstUI Color Primitives.
+ *
+ * These are the raw color values from the InstUI design system.
+ * Colors are organized by family (Aurora, Blue, Grey, etc.).
+ *
+ * Usage: InstUIColors.Blue.blue50
+ */
+object InstUIColors {
+ // Standalone colors
+ val greyOpacity10 = Color(0x1A1C222B)
+ val greyOpacity75 = Color(0xBF1C222B)
+ val navyOpacity10 = Color(0x1A234465)
+ val transparent = Color(0x00000000)
+ val white = Color(0xFFFFFFFF)
+ val whiteOpacity10 = Color(0x1AFFFFFF)
+ val whiteOpacity20 = Color(0x33FFFFFF)
+ val whiteOpacity75 = Color(0xBFFFFFFF)
+
+ // Color families
+ object Aurora {
+ val aurora10 = Color(0xFFD8FCEB)
+ val aurora20 = Color(0xFFC8F3DF)
+ val aurora30 = Color(0xFFB2EED3)
+ val aurora40 = Color(0xFF58E1AD)
+ val aurora50 = Color(0xFF2BC692)
+ val aurora60 = Color(0xFF0ABC88)
+ val aurora70 = Color(0xFF03A879)
+ val aurora80 = Color(0xFF06986E)
+ val aurora90 = Color(0xFF019067)
+ val aurora100 = Color(0xFF048660)
+ val aurora110 = Color(0xFF057C58)
+ val aurora120 = Color(0xFF007352)
+ val aurora130 = Color(0xFF026648)
+ val aurora140 = Color(0xFF035A40)
+ val aurora150 = Color(0xFF014B34)
+ val aurora160 = Color(0xFF01442F)
+ val aurora170 = Color(0xFF033B29)
+ val aurora180 = Color(0xFF051F15)
+ }
+
+ object Blue {
+ val blue10 = Color(0xFFEDF4FF)
+ val blue20 = Color(0xFFDEEBFF)
+ val blue30 = Color(0xFFD0E3FF)
+ val blue40 = Color(0xFFACCDF7)
+ val blue50 = Color(0xFF7FB4F1)
+ val blue60 = Color(0xFF6CAAEE)
+ val blue70 = Color(0xFF4798E3)
+ val blue80 = Color(0xFF338CD7)
+ val blue90 = Color(0xFF2D83CB)
+ val blue100 = Color(0xFF2B7ABC)
+ val blue110 = Color(0xFF2871AF)
+ val blue120 = Color(0xFF2369A4)
+ val blue130 = Color(0xFF1E5C90)
+ val blue140 = Color(0xFF1A5281)
+ val blue150 = Color(0xFF14446D)
+ val blue160 = Color(0xFF123E62)
+ val blue170 = Color(0xFF103656)
+ val blue180 = Color(0xFF0A1C2D)
+ }
+
+ object Green {
+ val green10 = Color(0xFFDBFCDF)
+ val green20 = Color(0xFFCAF4D0)
+ val green30 = Color(0xFFB4EFBD)
+ val green40 = Color(0xFF7EDD92)
+ val green50 = Color(0xFF61C378)
+ val green60 = Color(0xFF54B86D)
+ val green70 = Color(0xFF3EA75B)
+ val green80 = Color(0xFF2D984E)
+ val green90 = Color(0xFF1E9045)
+ val green100 = Color(0xFF03893D)
+ val green110 = Color(0xFF037D37)
+ val green120 = Color(0xFF017533)
+ val green130 = Color(0xFF02672C)
+ val green140 = Color(0xFF015B26)
+ val green150 = Color(0xFF004D1F)
+ val green160 = Color(0xFF01451B)
+ val green170 = Color(0xFF033C18)
+ val green180 = Color(0xFF051F09)
+ }
+
+ object Grey {
+ val grey10 = Color(0xFFF2F4F5)
+ val grey20 = Color(0xFFE8EAEC)
+ val grey30 = Color(0xFFDFE1E3)
+ val grey40 = Color(0xFFC7CACD)
+ val grey50 = Color(0xFFAAB0B5)
+ val grey60 = Color(0xFF9EA6AD)
+ val grey70 = Color(0xFF8D959F)
+ val grey80 = Color(0xFF7E8792)
+ val grey90 = Color(0xFF737F8A)
+ val grey100 = Color(0xFF6A7883)
+ val grey110 = Color(0xFF5F6E7A)
+ val grey120 = Color(0xFF576773)
+ val grey130 = Color(0xFF4A5B68)
+ val grey140 = Color(0xFF3F515E)
+ val grey150 = Color(0xFF334450)
+ val grey160 = Color(0xFF2D3D49)
+ val grey170 = Color(0xFF273540)
+ val grey180 = Color(0xFF1C222B)
+ }
+
+ object Honey {
+ val honey10 = Color(0xFFFCF2E4)
+ val honey20 = Color(0xFFF7E7CF)
+ val honey30 = Color(0xFFF8DDB2)
+ val honey40 = Color(0xFFF0C16C)
+ val honey50 = Color(0xFFE0A300)
+ val honey60 = Color(0xFFD39901)
+ val honey70 = Color(0xFFBE8A01)
+ val honey80 = Color(0xFFAC7C00)
+ val honey90 = Color(0xFFA37600)
+ val honey100 = Color(0xFF996E00)
+ val honey110 = Color(0xFF8C6400)
+ val honey120 = Color(0xFF855F02)
+ val honey130 = Color(0xFF735200)
+ val honey140 = Color(0xFF664800)
+ val honey150 = Color(0xFF563D00)
+ val honey160 = Color(0xFF4D3600)
+ val honey170 = Color(0xFF432F01)
+ val honey180 = Color(0xFF221905)
+ }
+
+ object Navy {
+ val navy10 = Color(0xFFEEF4FD)
+ val navy20 = Color(0xFFE2EAF7)
+ val navy30 = Color(0xFFD5E2F6)
+ val navy40 = Color(0xFFB6CCEA)
+ val navy50 = Color(0xFF96B2D8)
+ val navy60 = Color(0xFF86A8D5)
+ val navy70 = Color(0xFF7097C7)
+ val navy80 = Color(0xFF5F89BB)
+ val navy90 = Color(0xFF5581B3)
+ val navy100 = Color(0xFF4C79AA)
+ val navy110 = Color(0xFF44709F)
+ val navy120 = Color(0xFF3E6895)
+ val navy130 = Color(0xFF345B84)
+ val navy140 = Color(0xFF2E5177)
+ val navy150 = Color(0xFF234465)
+ val navy160 = Color(0xFF213D5B)
+ val navy170 = Color(0xFF1D354F)
+ val navy180 = Color(0xFF061C30)
+ }
+
+ object Orange {
+ val orange10 = Color(0xFFFCF1ED)
+ val orange20 = Color(0xFFFFE4D7)
+ val orange30 = Color(0xFFFBDACA)
+ val orange40 = Color(0xFFFDB998)
+ val orange50 = Color(0xFFFF905A)
+ val orange60 = Color(0xFFFF7E40)
+ val orange70 = Color(0xFFF16824)
+ val orange80 = Color(0xFFE55300)
+ val orange90 = Color(0xFFDA4E00)
+ val orange100 = Color(0xFFCF4A00)
+ val orange110 = Color(0xFFBB4200)
+ val orange120 = Color(0xFFB23F01)
+ val orange130 = Color(0xFF9C3601)
+ val orange140 = Color(0xFF8A2F00)
+ val orange150 = Color(0xFF742700)
+ val orange160 = Color(0xFF682400)
+ val orange170 = Color(0xFF5A2002)
+ val orange180 = Color(0xFF2B1405)
+ }
+
+ object Plum {
+ val plum10 = Color(0xFFFAF1F6)
+ val plum20 = Color(0xFFFAE3EF)
+ val plum30 = Color(0xFFF6D9E9)
+ val plum40 = Color(0xFFF0B9D7)
+ val plum50 = Color(0xFFEC93C6)
+ val plum60 = Color(0xFFE982BF)
+ val plum70 = Color(0xFFE665B4)
+ val plum80 = Color(0xFFDD4CA8)
+ val plum90 = Color(0xFFD0469F)
+ val plum100 = Color(0xFFC54396)
+ val plum110 = Color(0xFFB43D89)
+ val plum120 = Color(0xFFA83780)
+ val plum130 = Color(0xFF953171)
+ val plum140 = Color(0xFF852A64)
+ val plum150 = Color(0xFF702254)
+ val plum160 = Color(0xFF651E4C)
+ val plum170 = Color(0xFF591B42)
+ val plum180 = Color(0xFF2F0E23)
+ }
+
+ object Red {
+ val red10 = Color(0xFFFBF1EF)
+ val red20 = Color(0xFFFFE3DE)
+ val red30 = Color(0xFFFFD8D0)
+ val red40 = Color(0xFFFFB7A9)
+ val red50 = Color(0xFFFA917F)
+ val red60 = Color(0xFFFE7D6A)
+ val red70 = Color(0xFFF56050)
+ val red80 = Color(0xFFF14139)
+ val red90 = Color(0xFFEC3532)
+ val red100 = Color(0xFFE62429)
+ val red110 = Color(0xFFCF1F24)
+ val red120 = Color(0xFFC51F22)
+ val red130 = Color(0xFFAE161B)
+ val red140 = Color(0xFF991418)
+ val red150 = Color(0xFF810F12)
+ val red160 = Color(0xFF750D0F)
+ val red170 = Color(0xFF670C0C)
+ val red180 = Color(0xFF311007)
+ }
+
+ object Sea {
+ val sea10 = Color(0xFFE0F9FD)
+ val sea20 = Color(0xFFCFF0F6)
+ val sea30 = Color(0xFFBDE9F1)
+ val sea40 = Color(0xFF77D8E9)
+ val sea50 = Color(0xFF3CC0D4)
+ val sea60 = Color(0xFF07B7CB)
+ val sea70 = Color(0xFF04A4B7)
+ val sea80 = Color(0xFF0394A5)
+ val sea90 = Color(0xFF008C9C)
+ val sea100 = Color(0xFF00828E)
+ val sea110 = Color(0xFF027887)
+ val sea120 = Color(0xFF02717E)
+ val sea130 = Color(0xFF01626E)
+ val sea140 = Color(0xFF015862)
+ val sea150 = Color(0xFF014A53)
+ val sea160 = Color(0xFF00424A)
+ val sea170 = Color(0xFF023941)
+ val sea180 = Color(0xFF051E22)
+ }
+
+ object Sky {
+ val sky10 = Color(0xFFE9F6FF)
+ val sky20 = Color(0xFFD6EDFE)
+ val sky30 = Color(0xFFC7E6FC)
+ val sky40 = Color(0xFF97D1F8)
+ val sky50 = Color(0xFF63B9EB)
+ val sky60 = Color(0xFF50B0E3)
+ val sky70 = Color(0xFF349ED2)
+ val sky80 = Color(0xFF1E90C3)
+ val sky90 = Color(0xFF1A87B8)
+ val sky100 = Color(0xFF197EAB)
+ val sky110 = Color(0xFF17759F)
+ val sky120 = Color(0xFF116D94)
+ val sky130 = Color(0xFF0F5F82)
+ val sky140 = Color(0xFF0E5575)
+ val sky150 = Color(0xFF094762)
+ val sky160 = Color(0xFF084059)
+ val sky170 = Color(0xFF08384E)
+ val sky180 = Color(0xFF071D29)
+ }
+
+ object Stone {
+ val stone10 = Color(0xFFF4F4F4)
+ val stone20 = Color(0xFFE9E9E9)
+ val stone30 = Color(0xFFE1E1E1)
+ val stone40 = Color(0xFFC9C9C9)
+ val stone50 = Color(0xFFAFAFAF)
+ val stone60 = Color(0xFFA5A5A5)
+ val stone70 = Color(0xFF949494)
+ val stone80 = Color(0xFF858585)
+ val stone90 = Color(0xFF7D7D7D)
+ val stone100 = Color(0xFF767676)
+ val stone110 = Color(0xFF6C6C6C)
+ val stone120 = Color(0xFF646464)
+ val stone130 = Color(0xFF585858)
+ val stone140 = Color(0xFF4E4E4E)
+ val stone150 = Color(0xFF414141)
+ val stone160 = Color(0xFF3A3A3A)
+ val stone170 = Color(0xFF333333)
+ val stone180 = Color(0xFF1A1A1A)
+ }
+
+ object Violet {
+ val violet10 = Color(0xFFF7F2F8)
+ val violet20 = Color(0xFFF3E5F7)
+ val violet30 = Color(0xFFEEDBF4)
+ val violet40 = Color(0xFFDBC0E5)
+ val violet50 = Color(0xFFCAA1D9)
+ val violet60 = Color(0xFFC295D4)
+ val violet70 = Color(0xFFB680CC)
+ val violet80 = Color(0xFFAB6EC5)
+ val violet90 = Color(0xFFA464C0)
+ val violet100 = Color(0xFF9E58BD)
+ val violet110 = Color(0xFF944FB3)
+ val violet120 = Color(0xFF8A49A7)
+ val violet130 = Color(0xFF793F93)
+ val violet140 = Color(0xFF6D3984)
+ val violet150 = Color(0xFF5B2E6F)
+ val violet160 = Color(0xFF522965)
+ val violet170 = Color(0xFF482458)
+ val violet180 = Color(0xFF26132E)
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIFontFamilies.kt b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIFontFamilies.kt
new file mode 100644
index 0000000000..6f30673220
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIFontFamilies.kt
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.primitives
+
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import com.instructure.instui.R
+
+/**
+ * InstUI Font Family Primitives.
+ *
+ * Font families from the InstUI design system.
+ *
+ * IMPORTANT: Font files must be manually added to res/font/ directory.
+ * The generator creates references to font resources that must exist.
+ *
+ * If a requested font weight is not available, Android will use the
+ * closest available weight (e.g., requesting 200 with only 400 available
+ * will use 400).
+ */
+object InstUIFontFamilies {
+ /**
+ * Atkinson Hyperlegible Next typeface.
+ * CSS: Atkinson Hyperlegible Next, "Helvetica Neue", Helvetica, Arial, sans-serif
+ *
+ * Note: Font files must be added to res/font/ directory.
+ * Expected: atkinson_hyperlegible_next_extralight.ttf, atkinson_hyperlegible_next_light.ttf, atkinson_hyperlegible_next_regular.ttf, atkinson_hyperlegible_next_medium.ttf, atkinson_hyperlegible_next_semibold.ttf, atkinson_hyperlegible_next_bold.ttf, atkinson_hyperlegible_next_extrabold.ttf
+ */
+ val atkinson = FontFamily(
+ Font(R.font.atkinson_hyperlegible_next_extralight, weight = FontWeight.ExtraLight),
+ Font(R.font.atkinson_hyperlegible_next_light, weight = FontWeight.Light),
+ Font(R.font.atkinson_hyperlegible_next_regular, weight = FontWeight.Normal),
+ Font(R.font.atkinson_hyperlegible_next_medium, weight = FontWeight.Medium),
+ Font(R.font.atkinson_hyperlegible_next_semibold, weight = FontWeight.SemiBold),
+ Font(R.font.atkinson_hyperlegible_next_bold, weight = FontWeight.Bold),
+ Font(R.font.atkinson_hyperlegible_next_extrabold, weight = FontWeight.ExtraBold),
+ )
+
+ /**
+ * Inclusive Sans typeface.
+ * CSS: Inclusive Sans, "Helvetica Neue", Helvetica, Arial, sans-serif
+ *
+ * Note: Font files must be added to res/font/ directory.
+ * Expected: inclusive_sans_light.ttf, inclusive_sans_regular.ttf, inclusive_sans_medium.ttf, inclusive_sans_semibold.ttf, inclusive_sans_bold.ttf
+ */
+ val inclusiveSans = FontFamily(
+ Font(R.font.inclusive_sans_light, weight = FontWeight.Light),
+ Font(R.font.inclusive_sans_regular, weight = FontWeight.Normal),
+ Font(R.font.inclusive_sans_medium, weight = FontWeight.Medium),
+ Font(R.font.inclusive_sans_semibold, weight = FontWeight.SemiBold),
+ Font(R.font.inclusive_sans_bold, weight = FontWeight.Bold),
+ )
+
+ /**
+ * Lato typeface.
+ * CSS: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif
+ *
+ * Note: Font files must be added to res/font/ directory.
+ * Expected: lato_thin.ttf, lato_light.ttf, lato_regular.ttf, lato_bold.ttf, lato_black.ttf
+ */
+ val lato = FontFamily(
+ Font(R.font.lato_thin, weight = FontWeight.Thin),
+ Font(R.font.lato_light, weight = FontWeight.Light),
+ Font(R.font.lato_regular, weight = FontWeight.Normal),
+ Font(R.font.lato_bold, weight = FontWeight.Bold),
+ Font(R.font.lato_black, weight = FontWeight.Black),
+ )
+
+ /**
+ * Monospace font.
+ * CSS: Menlo, Consolas, Monaco, "Andale Mono", monospace
+ * Uses system monospace font on Android.
+ */
+ val menlo = FontFamily.Monospace
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIFontWeights.kt b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIFontWeights.kt
new file mode 100644
index 0000000000..2da5936c5b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIFontWeights.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.primitives
+
+import androidx.compose.ui.text.font.FontWeight
+
+/**
+ * InstUI Font Weight Primitives.
+ *
+ * Standard font weight values (100-900).
+ * Use these for consistent typography across the app.
+ */
+object InstUIFontWeights {
+ val thin = FontWeight(100)
+ val extraLight = FontWeight(200)
+ val light = FontWeight(300)
+ val regular = FontWeight(400)
+ val medium = FontWeight(500)
+ val semiBold = FontWeight(600)
+ val bold = FontWeight(700)
+ val extraBold = FontWeight(800)
+ val black = FontWeight(900)
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIOpacities.kt b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIOpacities.kt
new file mode 100644
index 0000000000..6de5e9fb4b
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUIOpacities.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.primitives
+
+/**
+ * InstUI Opacity Primitives.
+ *
+ * Standard opacity values for consistent transparency effects.
+ */
+object InstUIOpacities {
+ val opacity50 = 0.5f
+ val opacity100 = 1f
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUISizes.kt b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUISizes.kt
new file mode 100644
index 0000000000..0e95fb878a
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/primitives/InstUISizes.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.primitives
+
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+/**
+ * InstUI Size Primitives.
+ *
+ * Spacing and sizing values converted from rem to dp (1rem = 16dp).
+ * Fractional values are preserved (e.g., size2_5 = 2.5.dp).
+ */
+object InstUISizes {
+ val size1 = 1.dp
+ val size1_25 = 1.25.dp
+ val size1_5 = 1.5.dp
+ val size2 = 2.dp
+ val size2_5 = 2.5.dp
+ val size3 = 3.dp
+ val size4 = 4.dp
+ val size8 = 8.dp
+ val size12 = 12.dp
+ val size14 = 14.dp
+ val size16 = 16.dp
+ val size20 = 20.dp
+ val size24 = 24.dp
+ val size28 = 28.dp
+ val size32 = 32.dp
+ val size36 = 36.dp
+ val size40 = 40.dp
+ val size48 = 48.dp
+ val size64 = 64.dp
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUIElevation.kt b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUIElevation.kt
new file mode 100644
index 0000000000..c74d417fe0
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUIElevation.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.semantic
+
+import androidx.compose.ui.unit.dp
+
+/**
+ * InstUI Elevation/Shadow Primitives.
+ *
+ * Shadow values organized by elevation level (1-4).
+ * Each level has two shadows (shadow1, shadow2) with x, y, blur, spread dimensions.
+ */
+object InstUIElevation {
+ object Level1 {
+ val shadow1Blur = 2.dp
+ val shadow1Spread = 0.dp
+ val shadow1X = 0.dp
+ val shadow1Y = 1.dp
+ val shadow2Blur = 4.dp
+ val shadow2Spread = 1.dp
+ val shadow2X = 0.dp
+ val shadow2Y = 2.dp
+ }
+
+ object Level2 {
+ val shadow1Blur = 8.dp
+ val shadow1Spread = 3.dp
+ val shadow1X = 0.dp
+ val shadow1Y = 4.dp
+ val shadow2Blur = 3.dp
+ val shadow2Spread = 0.dp
+ val shadow2X = 0.dp
+ val shadow2Y = 1.dp
+ }
+
+ object Level3 {
+ val shadow1Blur = 10.dp
+ val shadow1Spread = 4.dp
+ val shadow1X = 0.dp
+ val shadow1Y = 6.dp
+ val shadow2Blur = 3.dp
+ val shadow2Spread = 0.dp
+ val shadow2X = 0.dp
+ val shadow2Y = 2.dp
+ }
+
+ object Level4 {
+ val shadow1Blur = 12.dp
+ val shadow1Spread = 6.dp
+ val shadow1X = 0.dp
+ val shadow1Y = 8.dp
+ val shadow2Blur = 4.dp
+ val shadow2Spread = 0.dp
+ val shadow2X = 0.dp
+ val shadow2Y = 4.dp
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutConfig.kt b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutConfig.kt
new file mode 100644
index 0000000000..692ff250e9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutConfig.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.semantic
+
+import com.instructure.instui.token.primitives.InstUIOpacities
+
+/**
+ * InstUI Layout Config.
+ *
+ * Boolean flags and miscellaneous configuration values.
+ */
+object InstUILayoutConfig {
+ object Opacity {
+ val base = InstUIOpacities.opacity100
+ val disabled = InstUIOpacities.opacity50
+ }
+
+ object VisibleInCanvas {
+ val visibleInCanvas = false
+ }
+
+ object VisibleInRebrand {
+ val visibleInRebrand = true
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutSizes.kt b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutSizes.kt
new file mode 100644
index 0000000000..2b28ecbf50
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutSizes.kt
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.semantic
+
+import androidx.compose.ui.unit.dp
+import com.instructure.instui.token.primitives.InstUISizes
+
+/**
+ * InstUI Layout Sizes.
+ *
+ * Semantic sizing values for interactive elements, spacing, borders, etc.
+ */
+object InstUILayoutSizes {
+ object BorderRadius {
+ object Container {
+ val sm = InstUISizes.size8
+ val md = InstUISizes.size16
+ val lg = InstUISizes.size24
+ val xl = InstUISizes.size32
+ }
+ object Full {
+ val full = 15984.dp
+ }
+ object Interactive {
+ val base = InstUISizes.size12
+ }
+ object Lg {
+ val lg = InstUISizes.size12
+ }
+ object Md {
+ val md = InstUISizes.size8
+ }
+ object Sm {
+ val sm = InstUISizes.size4
+ }
+ object Xl {
+ val xl = InstUISizes.size16
+ }
+ object Xs {
+ val xs = InstUISizes.size2
+ }
+ object Xxl {
+ val xxl = InstUISizes.size24
+ }
+ }
+
+ object BorderWidth {
+ object Interactive {
+ val base = InstUISizes.size1
+ val focus = InstUISizes.size2
+ }
+ object Lg {
+ val lg = InstUISizes.size4
+ }
+ object Md {
+ val md = InstUISizes.size2
+ }
+ object Sm {
+ val sm = InstUISizes.size1
+ }
+ }
+
+ object Size {
+ object Breakpoints {
+ val xxs = 128.dp
+ val xs = 256.dp
+ val sm = 480.dp
+ val md = 768.dp
+ val lg = 992.dp
+ val desktop = 1024.dp
+ val xl = 1200.dp
+ }
+ object ChoiceControl {
+ val height_sm = InstUISizes.size24
+ val height_md = InstUISizes.size24
+ val height_lg = InstUISizes.size24
+ }
+ object Interactive {
+ val height_xxs = InstUISizes.size20
+ val height_xs = InstUISizes.size24
+ val height_sm = InstUISizes.size32
+ val height_md = InstUISizes.size40
+ val height_lg = InstUISizes.size48
+ }
+ object Media {
+ val mediumMin = 768.dp
+ val largeMin = 992.dp
+ val xLargeMin = 1200.dp
+ }
+ }
+
+ object Spacing {
+ object Gap {
+ val sections = InstUISizes.size48
+ val cards_sm = InstUISizes.size16
+ val cards_md = InstUISizes.size24
+ val cards_lg = InstUISizes.size32
+ val inputs_horizontal = InstUISizes.size12
+ val inputs_vertical = InstUISizes.size16
+ val inputElements = InstUISizes.size8
+ }
+ object Padding {
+ val container_xxs = InstUISizes.size8
+ val container_xs = InstUISizes.size12
+ val container_sm = InstUISizes.size16
+ val container_md = InstUISizes.size24
+ val container_lg = InstUISizes.size32
+ val interactive_horizontal_sm = InstUISizes.size8
+ val interactive_horizontal_md = InstUISizes.size12
+ val interactive_horizontal_lg = InstUISizes.size16
+ val interactive_horizontal_xl = InstUISizes.size20
+ }
+ object Space2xl {
+ val space2xl = InstUISizes.size32
+ }
+ object Space2xs {
+ val space2xs = InstUISizes.size2
+ }
+ object SpaceLg {
+ val spaceLg = InstUISizes.size16
+ }
+ object SpaceMd {
+ val spaceMd = InstUISizes.size12
+ }
+ object SpaceSm {
+ val spaceSm = InstUISizes.size8
+ }
+ object SpaceXl {
+ val spaceXl = InstUISizes.size24
+ }
+ object SpaceXs {
+ val spaceXs = InstUISizes.size4
+ }
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutTypography.kt b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutTypography.kt
new file mode 100644
index 0000000000..e6970b0da9
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUILayoutTypography.kt
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.semantic
+
+import androidx.compose.ui.unit.sp
+import com.instructure.instui.token.primitives.InstUIFontFamilies
+import com.instructure.instui.token.primitives.InstUIFontWeights
+import com.instructure.instui.token.primitives.InstUISizes
+
+/**
+ * InstUI Layout Typography.
+ *
+ * Font configuration including families, weights, sizes, and line heights.
+ */
+object InstUILayoutTypography {
+ object FontFamily {
+ object Base {
+ val base = InstUIFontFamilies.atkinson
+ }
+ object Code {
+ val code = InstUIFontFamilies.menlo
+ }
+ object Heading {
+ val heading = InstUIFontFamilies.inclusiveSans
+ }
+ }
+
+ object FontSize {
+ object Text2xl {
+ val text2xl = 40.sp
+ }
+ object TextBase {
+ val textBase = 16.sp
+ }
+ object TextLg {
+ val textLg = 20.sp
+ }
+ object TextSm {
+ val textSm = 14.sp
+ }
+ object TextXl {
+ val textXl = 28.sp
+ }
+ object TextXs {
+ val textXs = 12.sp
+ }
+ }
+
+ object FontWeight {
+ object Body {
+ val base = InstUIFontWeights.regular
+ val strong = InstUIFontWeights.semiBold
+ }
+ object Heading {
+ val base = InstUIFontWeights.semiBold
+ val strong = InstUIFontWeights.bold
+ }
+ object Interactive {
+ val interactive = InstUIFontWeights.medium
+ }
+ }
+
+ object LineHeight {
+ object Heading {
+ val textLg = InstUISizes.size28
+ val textXl = InstUISizes.size32
+ val text2xl = InstUISizes.size36
+ val text3xl = InstUISizes.size40
+ val base = 1.25f
+ val loose = 1.5f
+ }
+ object Label {
+ val base = 1.125f
+ }
+ object Paragraph {
+ val textXs = InstUISizes.size20
+ val textSm = InstUISizes.size20
+ val textBase = InstUISizes.size24
+ val base = 1.5f
+ }
+ object Standalone {
+ val textXs = InstUISizes.size12
+ val textSm = InstUISizes.size14
+ val textBase = InstUISizes.size16
+ val textLg = InstUISizes.size20
+ val textXl = InstUISizes.size24
+ val text2xl = InstUISizes.size28
+ val text3xl = InstUISizes.size32
+ val text4xl = InstUISizes.size36
+ val base = 1.25f
+ }
+ }
+}
diff --git a/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUISemanticColors.kt b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUISemanticColors.kt
new file mode 100644
index 0000000000..b9159ff52e
--- /dev/null
+++ b/libs/instui/src/main/java/com/instructure/instui/token/semantic/InstUISemanticColors.kt
@@ -0,0 +1,2012 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// DO NOT EDIT - This file is generated by Style Dictionary
+// Run: ./gradlew :libs:instui:generateInstUITokens
+
+package com.instructure.instui.token.semantic
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import com.instructure.instui.token.primitives.InstUIColors
+
+/**
+ * InstUI Semantic Colors.
+ *
+ * Theme-aware color tokens that reference primitive colors.
+ * Use the @Composable functions for automatic light/dark theme switching.
+ *
+ * Usage:
+ * Box(modifier = Modifier.background(InstUISemanticColors.Background.base()))
+ *
+ * For explicit theme access:
+ * val lightBg = InstUISemanticColors.Light.Background.base
+ */
+object InstUISemanticColors {
+
+ // Light theme values
+ object Light {
+ object Background {
+ val base = InstUIColors.white
+ val muted = InstUIColors.Grey.grey10
+ val mutedHover = InstUIColors.Grey.grey20
+ val page = InstUIColors.Grey.grey10
+ val container = InstUIColors.white
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.Grey.grey150
+ val dark = InstUIColors.Grey.grey170
+ val success = InstUIColors.Green.green100
+ val error = InstUIColors.Red.red100
+ val warning = InstUIColors.Orange.orange100
+ val info = InstUIColors.Blue.blue100
+ val brand = InstUIColors.Navy.navy170
+ val aiTopGradient = InstUIColors.Violet.violet100
+ val aiBottomGradient = InstUIColors.Sea.sea100
+ val aiText = InstUIColors.Violet.violet20
+ val opacity = InstUIColors.navyOpacity10
+ val opacityOnColor = InstUIColors.whiteOpacity10
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue100
+ val green = InstUIColors.Green.green100
+ val red = InstUIColors.Red.red100
+ val orange = InstUIColors.Orange.orange100
+ val grey = InstUIColors.Grey.grey130
+ val ash = InstUIColors.Grey.grey170
+ val plum = InstUIColors.Plum.plum100
+ val violet = InstUIColors.Violet.violet100
+ val stone = InstUIColors.Stone.stone100
+ val sky = InstUIColors.Sky.sky100
+ val honey = InstUIColors.Honey.honey100
+ val sea = InstUIColors.Sea.sea100
+ val aurora = InstUIColors.Aurora.aurora100
+ }
+
+ object Divider {
+ val base = InstUIColors.Grey.grey40
+ val onColor = InstUIColors.white
+ }
+
+ object ElevatedSurface {
+ val base = InstUIColors.white
+ val inverse = InstUIColors.Grey.grey150
+ }
+
+ object Interactive {
+ object Action {
+ val disabled = InstUIColors.Grey.grey30
+
+ object Ai {
+ val disabled = InstUIColors.Grey.grey30
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea110
+ val hover = InstUIColors.Sea.sea100
+ val active = InstUIColors.Sea.sea130
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet110
+ val hover = InstUIColors.Violet.violet100
+ val active = InstUIColors.Violet.violet130
+ }
+ }
+
+ object AiSecondary {
+ val base = InstUIColors.white
+ val disabled = InstUIColors.white
+
+ object Active {
+ val topGradient = InstUIColors.Violet.violet20
+ val bottomGradient = InstUIColors.Sea.sea20
+ }
+
+ object Hover {
+ val topGradient = InstUIColors.Violet.violet20
+ val bottomGradient = InstUIColors.Sea.sea20
+ }
+ }
+
+ object Destructive {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red100
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey30
+
+ object Secondary {
+ val hover = InstUIColors.Red.red10
+ val active = InstUIColors.Red.red20
+ }
+ }
+
+ object Ghost {
+ object OnColor {
+ val hover = InstUIColors.whiteOpacity10
+ }
+ }
+
+ object Primary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy150
+ val active = InstUIColors.Navy.navy180
+ val disabled = InstUIColors.Grey.grey30
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Navy.navy30
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Secondary {
+ val base = InstUIColors.Navy.navy30
+ val hover = InstUIColors.Navy.navy20
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey30
+ }
+
+ object Success {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green100
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey30
+
+ object Secondary {
+ val hover = InstUIColors.Aurora.aurora10
+ val active = InstUIColors.Aurora.aurora20
+ }
+ }
+
+ object Tertiary {
+ val hover = InstUIColors.Navy.navy10
+ val active = InstUIColors.Navy.navy20
+ }
+ }
+
+ object Input {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Grey.grey10
+ val readonly = InstUIColors.Grey.grey40
+ val disabled = InstUIColors.Grey.grey20
+ val selected = InstUIColors.Grey.grey180
+ }
+ }
+
+ object Overlay {
+ val base = InstUIColors.whiteOpacity75
+ val dark = InstUIColors.greyOpacity75
+ }
+ }
+
+ object Text {
+ val base = InstUIColors.Grey.grey170
+ val muted = InstUIColors.Grey.grey120
+ val success = InstUIColors.Green.green110
+ val error = InstUIColors.Red.red110
+ val warning = InstUIColors.Orange.orange110
+ val info = InstUIColors.Blue.blue110
+ val aiColor = InstUIColors.Violet.violet120
+ val dark = InstUIColors.Grey.grey170
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.white
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue110
+ val green = InstUIColors.Green.green110
+ val red = InstUIColors.Red.red110
+ val orange = InstUIColors.Orange.orange110
+ val grey = InstUIColors.Grey.grey130
+ val ash = InstUIColors.Grey.grey170
+ val plum = InstUIColors.Plum.plum110
+ val violet = InstUIColors.Violet.violet110
+ val stone = InstUIColors.Stone.stone110
+ val sky = InstUIColors.Sky.sky110
+ val honey = InstUIColors.Honey.honey110
+ val sea = InstUIColors.Sea.sea110
+ val aurora = InstUIColors.Aurora.aurora110
+ }
+
+ object Interactive {
+ object Action {
+ object Ai {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object AiSecondary {
+ val disabled = InstUIColors.Grey.grey50
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea110
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet110
+ }
+ }
+
+ object DestructiveSecondary {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red110
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Primary {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.Navy.navy160
+ val hover = InstUIColors.Navy.navy160
+ val active = InstUIColors.Navy.navy160
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Secondary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object SecondaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Status {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object SuccessSecondary {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green110
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey50
+ }
+
+ object Tertiary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey50
+ }
+ }
+
+ object Disabled {
+ val base = InstUIColors.Grey.grey70
+ val onColor = InstUIColors.Grey.grey40
+ }
+
+ object Input {
+ val base = InstUIColors.Grey.grey150
+ val hover = InstUIColors.Grey.grey120
+ val readonly = InstUIColors.Grey.grey150
+ val placeholder = InstUIColors.Grey.grey120
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Navigation {
+ object Primary {
+ val base = InstUIColors.Blue.blue120
+ val hover = InstUIColors.Blue.blue140
+ val active = InstUIColors.Blue.blue130
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Blue.blue20
+ val active = InstUIColors.Blue.blue20
+ }
+ }
+ }
+ }
+
+ object Stroke {
+ val base = InstUIColors.Grey.grey70
+ val muted = InstUIColors.Grey.grey20
+ val strong = InstUIColors.Grey.grey110
+ val success = InstUIColors.Green.green100
+ val error = InstUIColors.Red.red100
+ val warning = InstUIColors.Orange.orange100
+ val info = InstUIColors.Blue.blue100
+ val brand = InstUIColors.Navy.navy170
+ val aiTopGradient = InstUIColors.Violet.violet100
+ val aiBottomGradient = InstUIColors.Sea.sea100
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.white
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue110
+ val green = InstUIColors.Green.green110
+ val red = InstUIColors.Red.red110
+ val orange = InstUIColors.Orange.orange110
+ val grey = InstUIColors.Grey.grey130
+ val ash = InstUIColors.Grey.grey170
+ val plum = InstUIColors.Plum.plum110
+ val violet = InstUIColors.Violet.violet110
+ val stone = InstUIColors.Stone.stone110
+ val sky = InstUIColors.Sky.sky110
+ val honey = InstUIColors.Honey.honey110
+ val sea = InstUIColors.Sea.sea110
+ val aurora = InstUIColors.Aurora.aurora110
+ }
+
+ object Container {
+ val base = InstUIColors.Grey.grey20
+ val dark = InstUIColors.Grey.grey150
+ }
+
+ object Interactive {
+ object Action {
+ val disabled = InstUIColors.Grey.grey30
+
+ object Ai {
+ val disabled = InstUIColors.Grey.grey30
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea110
+ val hover = InstUIColors.Sea.sea100
+ val active = InstUIColors.Sea.sea130
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet110
+ val hover = InstUIColors.Violet.violet100
+ val active = InstUIColors.Violet.violet130
+ }
+ }
+
+ object AiSecondary {
+ val disabled = InstUIColors.Grey.grey50
+ }
+
+ object Destructive {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red100
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey30
+
+ object Secondary {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red110
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey40
+ }
+ }
+
+ object Primary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy150
+ val active = InstUIColors.Navy.navy180
+ val disabled = InstUIColors.Grey.grey30
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Navy.navy30
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Secondary {
+ val base = InstUIColors.Navy.navy30
+ val hover = InstUIColors.Navy.navy20
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey30
+ }
+
+ object SecondaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Navy.navy30
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Success {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green100
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey30
+
+ object Secondary {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green110
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey40
+ }
+ }
+
+ object Tertiary {
+ val base = InstUIColors.Navy.navy60
+ val hover = InstUIColors.Navy.navy60
+ val active = InstUIColors.Navy.navy70
+ val disabled = InstUIColors.Grey.grey40
+ }
+ }
+
+ object FocusRing {
+ val base = InstUIColors.Blue.blue100
+ val onColor = InstUIColors.white
+ }
+
+ object Input {
+ val base = InstUIColors.Grey.grey100
+ val hover = InstUIColors.Grey.grey120
+ val readonly = InstUIColors.Grey.grey70
+ val disabled = InstUIColors.Grey.grey40
+ val selected = InstUIColors.Grey.grey180
+ }
+ }
+ }
+
+ object Icon {
+ val base = InstUIColors.Grey.grey170
+ val muted = InstUIColors.Grey.grey120
+ val success = InstUIColors.Green.green110
+ val error = InstUIColors.Red.red110
+ val warning = InstUIColors.Orange.orange110
+ val info = InstUIColors.Blue.blue110
+ val dark = InstUIColors.Grey.grey170
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.white
+ val brand = InstUIColors.Navy.navy170
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue110
+ val green = InstUIColors.Green.green110
+ val red = InstUIColors.Red.red110
+ val orange = InstUIColors.Orange.orange110
+ val grey = InstUIColors.Grey.grey130
+ val ash = InstUIColors.Grey.grey170
+ val plum = InstUIColors.Plum.plum110
+ val violet = InstUIColors.Violet.violet110
+ val stone = InstUIColors.Stone.stone110
+ val sky = InstUIColors.Sky.sky110
+ val honey = InstUIColors.Honey.honey110
+ val sea = InstUIColors.Sea.sea110
+ val aurora = InstUIColors.Aurora.aurora110
+ }
+
+ object Interactive {
+ object Action {
+ object Ai {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object AiSecondary {
+ val disabled = InstUIColors.Grey.grey50
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea110
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet110
+ }
+ }
+
+ object DestructiveSecondary {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red110
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Primary {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Secondary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object SecondaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Status {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object SuccessSecondary {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green110
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Tertiary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey60
+ }
+ }
+
+ object Disabled {
+ val base = InstUIColors.Grey.grey70
+ val onColor = InstUIColors.Grey.grey40
+ }
+
+ object Navigation {
+ object Primary {
+ val base = InstUIColors.Blue.blue110
+ val hover = InstUIColors.Blue.blue140
+ val active = InstUIColors.Blue.blue110
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Blue.blue20
+ val active = InstUIColors.Blue.blue20
+ }
+ }
+ }
+ }
+ }
+
+ // Dark theme values
+ object Dark {
+ object Background {
+ val base = InstUIColors.Grey.grey180
+ val muted = InstUIColors.Grey.grey170
+ val mutedHover = InstUIColors.Grey.grey180
+ val page = InstUIColors.Grey.grey180
+ val container = InstUIColors.Grey.grey170
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.Grey.grey10
+ val dark = InstUIColors.Grey.grey170
+ val success = InstUIColors.Green.green100
+ val error = InstUIColors.Red.red100
+ val warning = InstUIColors.Orange.orange100
+ val info = InstUIColors.Blue.blue100
+ val brand = InstUIColors.Navy.navy10
+ val aiTopGradient = InstUIColors.Violet.violet100
+ val aiBottomGradient = InstUIColors.Sea.sea100
+ val aiText = InstUIColors.Violet.violet140
+ val opacity = InstUIColors.whiteOpacity10
+ val opacityOnColor = InstUIColors.whiteOpacity10
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue100
+ val green = InstUIColors.Green.green100
+ val red = InstUIColors.Red.red100
+ val orange = InstUIColors.Orange.orange100
+ val grey = InstUIColors.Grey.grey120
+ val ash = InstUIColors.Grey.grey180
+ val plum = InstUIColors.Plum.plum100
+ val violet = InstUIColors.Violet.violet100
+ val stone = InstUIColors.Stone.stone100
+ val sky = InstUIColors.Sky.sky100
+ val honey = InstUIColors.Honey.honey100
+ val sea = InstUIColors.Sea.sea100
+ val aurora = InstUIColors.Aurora.aurora100
+ }
+
+ object Divider {
+ val base = InstUIColors.Grey.grey140
+ val onColor = InstUIColors.Grey.grey180
+ }
+
+ object ElevatedSurface {
+ val base = InstUIColors.Grey.grey170
+ val inverse = InstUIColors.Grey.grey10
+ }
+
+ object Interactive {
+ object Action {
+ val disabled = InstUIColors.Grey.grey160
+
+ object Ai {
+ val disabled = InstUIColors.Grey.grey150
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea110
+ val hover = InstUIColors.Sea.sea100
+ val active = InstUIColors.Sea.sea130
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet110
+ val hover = InstUIColors.Violet.violet100
+ val active = InstUIColors.Violet.violet130
+ }
+ }
+
+ object AiSecondary {
+ val base = InstUIColors.Grey.grey180
+ val disabled = InstUIColors.Grey.grey180
+
+ object Active {
+ val topGradient = InstUIColors.Violet.violet160
+ val bottomGradient = InstUIColors.Sea.sea160
+ }
+
+ object Hover {
+ val topGradient = InstUIColors.Violet.violet160
+ val bottomGradient = InstUIColors.Sea.sea160
+ }
+ }
+
+ object Destructive {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red100
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey150
+
+ object Secondary {
+ val hover = InstUIColors.Red.red140
+ val active = InstUIColors.Red.red150
+ }
+ }
+
+ object Ghost {
+ object OnColor {
+ val hover = InstUIColors.whiteOpacity10
+ }
+ }
+
+ object Primary {
+ val base = InstUIColors.Navy.navy10
+ val hover = InstUIColors.white
+ val active = InstUIColors.Navy.navy30
+ val disabled = InstUIColors.Grey.grey150
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Navy.navy30
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Secondary {
+ val base = InstUIColors.Navy.navy130
+ val hover = InstUIColors.Navy.navy120
+ val active = InstUIColors.Navy.navy140
+ val disabled = InstUIColors.Grey.grey150
+ }
+
+ object Success {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green100
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey150
+
+ object Secondary {
+ val hover = InstUIColors.Green.green140
+ val active = InstUIColors.Green.green150
+ }
+ }
+
+ object Tertiary {
+ val hover = InstUIColors.Navy.navy140
+ val active = InstUIColors.Navy.navy150
+ }
+ }
+
+ object Input {
+ val base = InstUIColors.Grey.grey180
+ val hover = InstUIColors.Grey.grey170
+ val readonly = InstUIColors.Grey.grey100
+ val disabled = InstUIColors.Grey.grey150
+ val selected = InstUIColors.white
+ }
+ }
+
+ object Overlay {
+ val base = InstUIColors.greyOpacity75
+ val dark = InstUIColors.greyOpacity75
+ }
+ }
+
+ object Text {
+ val base = InstUIColors.white
+ val muted = InstUIColors.Grey.grey60
+ val success = InstUIColors.Green.green50
+ val error = InstUIColors.Red.red50
+ val warning = InstUIColors.Orange.orange50
+ val info = InstUIColors.Blue.blue50
+ val aiColor = InstUIColors.Violet.violet20
+ val dark = InstUIColors.Grey.grey170
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.Grey.grey180
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue50
+ val green = InstUIColors.Green.green50
+ val red = InstUIColors.Red.red50
+ val orange = InstUIColors.Orange.orange50
+ val grey = InstUIColors.Grey.grey10
+ val ash = InstUIColors.Grey.grey40
+ val plum = InstUIColors.Plum.plum50
+ val violet = InstUIColors.Violet.violet50
+ val stone = InstUIColors.Stone.stone50
+ val sky = InstUIColors.Sky.sky50
+ val honey = InstUIColors.Honey.honey50
+ val sea = InstUIColors.Sea.sea50
+ val aurora = InstUIColors.Aurora.aurora50
+ }
+
+ object Interactive {
+ object Action {
+ object Ai {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object AiSecondary {
+ val disabled = InstUIColors.Grey.grey100
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea50
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet50
+ }
+ }
+
+ object DestructiveSecondary {
+ val base = InstUIColors.Red.red40
+ val hover = InstUIColors.Red.red30
+ val active = InstUIColors.Red.red40
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Primary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.Navy.navy160
+ val hover = InstUIColors.Navy.navy160
+ val active = InstUIColors.Navy.navy160
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Secondary {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object SecondaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Status {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object SuccessSecondary {
+ val base = InstUIColors.Green.green40
+ val hover = InstUIColors.Green.green30
+ val active = InstUIColors.Green.green40
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Tertiary {
+ val base = InstUIColors.Navy.navy10
+ val hover = InstUIColors.Navy.navy10
+ val active = InstUIColors.Navy.navy30
+ val disabled = InstUIColors.Grey.grey130
+ }
+ }
+
+ object Disabled {
+ val base = InstUIColors.Grey.grey120
+ val onColor = InstUIColors.Grey.grey60
+ }
+
+ object Input {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Grey.grey40
+ val readonly = InstUIColors.white
+ val placeholder = InstUIColors.Grey.grey60
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Navigation {
+ object Primary {
+ val base = InstUIColors.Blue.blue50
+ val hover = InstUIColors.Blue.blue40
+ val active = InstUIColors.Blue.blue70
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ }
+ }
+ }
+ }
+
+ object Stroke {
+ val base = InstUIColors.Grey.grey100
+ val muted = InstUIColors.Grey.grey140
+ val strong = InstUIColors.Grey.grey60
+ val success = InstUIColors.Green.green100
+ val error = InstUIColors.Red.red100
+ val warning = InstUIColors.Orange.orange100
+ val info = InstUIColors.Blue.blue100
+ val brand = InstUIColors.Navy.navy10
+ val aiTopGradient = InstUIColors.Violet.violet70
+ val aiBottomGradient = InstUIColors.Sea.sea70
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.Grey.grey100
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue50
+ val green = InstUIColors.Green.green50
+ val red = InstUIColors.Red.red50
+ val orange = InstUIColors.Orange.orange50
+ val grey = InstUIColors.Grey.grey10
+ val ash = InstUIColors.Grey.grey40
+ val plum = InstUIColors.Plum.plum50
+ val violet = InstUIColors.Violet.violet50
+ val stone = InstUIColors.Stone.stone50
+ val sky = InstUIColors.Sky.sky50
+ val honey = InstUIColors.Honey.honey50
+ val sea = InstUIColors.Sea.sea50
+ val aurora = InstUIColors.Aurora.aurora50
+ }
+
+ object Container {
+ val base = InstUIColors.Grey.grey150
+ val dark = InstUIColors.Grey.grey150
+ }
+
+ object Interactive {
+ object Action {
+ val disabled = InstUIColors.Grey.grey160
+
+ object Ai {
+ val disabled = InstUIColors.Grey.grey150
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea110
+ val hover = InstUIColors.Sea.sea100
+ val active = InstUIColors.Sea.sea120
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet110
+ val hover = InstUIColors.Violet.violet100
+ val active = InstUIColors.Violet.violet120
+ }
+ }
+
+ object AiSecondary {
+ val disabled = InstUIColors.Grey.grey120
+ }
+
+ object Destructive {
+ val base = InstUIColors.Red.red110
+ val hover = InstUIColors.Red.red100
+ val active = InstUIColors.Red.red130
+ val disabled = InstUIColors.Grey.grey150
+
+ object Secondary {
+ val base = InstUIColors.Red.red70
+ val hover = InstUIColors.Red.red60
+ val active = InstUIColors.Red.red80
+ val disabled = InstUIColors.Grey.grey130
+ }
+ }
+
+ object Primary {
+ val base = InstUIColors.Navy.navy10
+ val hover = InstUIColors.white
+ val active = InstUIColors.Navy.navy30
+ val disabled = InstUIColors.Grey.grey150
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Navy.navy30
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Secondary {
+ val base = InstUIColors.Navy.navy130
+ val hover = InstUIColors.Navy.navy120
+ val active = InstUIColors.Navy.navy140
+ val disabled = InstUIColors.Grey.grey150
+ }
+
+ object SecondaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.Navy.navy30
+ val active = InstUIColors.Navy.navy40
+ val disabled = InstUIColors.Grey.grey70
+ }
+
+ object Success {
+ val base = InstUIColors.Green.green110
+ val hover = InstUIColors.Green.green100
+ val active = InstUIColors.Green.green130
+ val disabled = InstUIColors.Grey.grey150
+
+ object Secondary {
+ val base = InstUIColors.Green.green70
+ val hover = InstUIColors.Green.green60
+ val active = InstUIColors.Green.green80
+ val disabled = InstUIColors.Grey.grey130
+ }
+ }
+
+ object Tertiary {
+ val base = InstUIColors.Navy.navy70
+ val hover = InstUIColors.Navy.navy60
+ val active = InstUIColors.Navy.navy70
+ val disabled = InstUIColors.Grey.grey130
+ }
+ }
+
+ object FocusRing {
+ val base = InstUIColors.Blue.blue70
+ val onColor = InstUIColors.white
+ }
+
+ object Input {
+ val base = InstUIColors.Grey.grey70
+ val hover = InstUIColors.Grey.grey60
+ val readonly = InstUIColors.Grey.grey70
+ val disabled = InstUIColors.Grey.grey130
+ val selected = InstUIColors.white
+ }
+ }
+ }
+
+ object Icon {
+ val base = InstUIColors.white
+ val muted = InstUIColors.Grey.grey60
+ val success = InstUIColors.Green.green50
+ val error = InstUIColors.Red.red50
+ val warning = InstUIColors.Orange.orange50
+ val info = InstUIColors.Blue.blue50
+ val dark = InstUIColors.Grey.grey170
+ val onColor = InstUIColors.white
+ val inverse = InstUIColors.Grey.grey180
+ val brand = InstUIColors.Navy.navy10
+
+ object Accent {
+ val blue = InstUIColors.Blue.blue50
+ val green = InstUIColors.Green.green50
+ val red = InstUIColors.Red.red50
+ val orange = InstUIColors.Orange.orange50
+ val grey = InstUIColors.Grey.grey10
+ val ash = InstUIColors.Grey.grey40
+ val plum = InstUIColors.Plum.plum50
+ val violet = InstUIColors.Violet.violet50
+ val stone = InstUIColors.Stone.stone50
+ val sky = InstUIColors.Sky.sky50
+ val honey = InstUIColors.Honey.honey50
+ val sea = InstUIColors.Sea.sea50
+ val aurora = InstUIColors.Aurora.aurora50
+ }
+
+ object Interactive {
+ object Action {
+ object Ai {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object AiSecondary {
+ val disabled = InstUIColors.Grey.grey100
+
+ object BottomGradient {
+ val base = InstUIColors.Sea.sea50
+ }
+
+ object TopGradient {
+ val base = InstUIColors.Violet.violet50
+ }
+ }
+
+ object DestructiveSecondary {
+ val base = InstUIColors.Red.red40
+ val hover = InstUIColors.Red.red30
+ val active = InstUIColors.Red.red40
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Primary {
+ val base = InstUIColors.Navy.navy170
+ val hover = InstUIColors.Navy.navy170
+ val active = InstUIColors.Navy.navy170
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.Navy.navy160
+ val hover = InstUIColors.Navy.navy160
+ val active = InstUIColors.Navy.navy160
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Secondary {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object SecondaryOnColor {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey60
+ }
+
+ object Status {
+ val base = InstUIColors.white
+ val hover = InstUIColors.white
+ val active = InstUIColors.white
+ val disabled = InstUIColors.Grey.grey100
+ }
+
+ object SuccessSecondary {
+ val base = InstUIColors.Green.green40
+ val hover = InstUIColors.Green.green30
+ val active = InstUIColors.Green.green40
+ val disabled = InstUIColors.Grey.grey130
+ }
+
+ object Tertiary {
+ val base = InstUIColors.Navy.navy10
+ val hover = InstUIColors.Navy.navy10
+ val active = InstUIColors.Navy.navy30
+ val disabled = InstUIColors.Grey.grey130
+ }
+ }
+
+ object Disabled {
+ val base = InstUIColors.Grey.grey120
+ val onColor = InstUIColors.Grey.grey60
+ }
+
+ object Navigation {
+ object Primary {
+ val base = InstUIColors.Blue.blue50
+ val hover = InstUIColors.Blue.blue40
+ val active = InstUIColors.Blue.blue70
+ }
+
+ object PrimaryOnColor {
+ val base = InstUIColors.Blue.blue20
+ val hover = InstUIColors.white
+ val active = InstUIColors.Blue.blue20
+ }
+ }
+ }
+ }
+ }
+
+ // Theme-aware accessors (@Composable)
+ object Background {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.base else Light.Background.base
+ @Composable
+ fun muted() = if (isSystemInDarkTheme()) Dark.Background.muted else Light.Background.muted
+ @Composable
+ fun mutedHover() = if (isSystemInDarkTheme()) Dark.Background.mutedHover else Light.Background.mutedHover
+ @Composable
+ fun page() = if (isSystemInDarkTheme()) Dark.Background.page else Light.Background.page
+ @Composable
+ fun container() = if (isSystemInDarkTheme()) Dark.Background.container else Light.Background.container
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Background.onColor else Light.Background.onColor
+ @Composable
+ fun inverse() = if (isSystemInDarkTheme()) Dark.Background.inverse else Light.Background.inverse
+ @Composable
+ fun dark() = if (isSystemInDarkTheme()) Dark.Background.dark else Light.Background.dark
+ @Composable
+ fun success() = if (isSystemInDarkTheme()) Dark.Background.success else Light.Background.success
+ @Composable
+ fun error() = if (isSystemInDarkTheme()) Dark.Background.error else Light.Background.error
+ @Composable
+ fun warning() = if (isSystemInDarkTheme()) Dark.Background.warning else Light.Background.warning
+ @Composable
+ fun info() = if (isSystemInDarkTheme()) Dark.Background.info else Light.Background.info
+ @Composable
+ fun brand() = if (isSystemInDarkTheme()) Dark.Background.brand else Light.Background.brand
+ @Composable
+ fun aiTopGradient() = if (isSystemInDarkTheme()) Dark.Background.aiTopGradient else Light.Background.aiTopGradient
+ @Composable
+ fun aiBottomGradient() = if (isSystemInDarkTheme()) Dark.Background.aiBottomGradient else Light.Background.aiBottomGradient
+ @Composable
+ fun aiText() = if (isSystemInDarkTheme()) Dark.Background.aiText else Light.Background.aiText
+ @Composable
+ fun opacity() = if (isSystemInDarkTheme()) Dark.Background.opacity else Light.Background.opacity
+ @Composable
+ fun opacityOnColor() = if (isSystemInDarkTheme()) Dark.Background.opacityOnColor else Light.Background.opacityOnColor
+
+ object Accent {
+ @Composable
+ fun blue() = if (isSystemInDarkTheme()) Dark.Background.Accent.blue else Light.Background.Accent.blue
+ @Composable
+ fun green() = if (isSystemInDarkTheme()) Dark.Background.Accent.green else Light.Background.Accent.green
+ @Composable
+ fun red() = if (isSystemInDarkTheme()) Dark.Background.Accent.red else Light.Background.Accent.red
+ @Composable
+ fun orange() = if (isSystemInDarkTheme()) Dark.Background.Accent.orange else Light.Background.Accent.orange
+ @Composable
+ fun grey() = if (isSystemInDarkTheme()) Dark.Background.Accent.grey else Light.Background.Accent.grey
+ @Composable
+ fun ash() = if (isSystemInDarkTheme()) Dark.Background.Accent.ash else Light.Background.Accent.ash
+ @Composable
+ fun plum() = if (isSystemInDarkTheme()) Dark.Background.Accent.plum else Light.Background.Accent.plum
+ @Composable
+ fun violet() = if (isSystemInDarkTheme()) Dark.Background.Accent.violet else Light.Background.Accent.violet
+ @Composable
+ fun stone() = if (isSystemInDarkTheme()) Dark.Background.Accent.stone else Light.Background.Accent.stone
+ @Composable
+ fun sky() = if (isSystemInDarkTheme()) Dark.Background.Accent.sky else Light.Background.Accent.sky
+ @Composable
+ fun honey() = if (isSystemInDarkTheme()) Dark.Background.Accent.honey else Light.Background.Accent.honey
+ @Composable
+ fun sea() = if (isSystemInDarkTheme()) Dark.Background.Accent.sea else Light.Background.Accent.sea
+ @Composable
+ fun aurora() = if (isSystemInDarkTheme()) Dark.Background.Accent.aurora else Light.Background.Accent.aurora
+ }
+
+ object Divider {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Divider.base else Light.Background.Divider.base
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Background.Divider.onColor else Light.Background.Divider.onColor
+ }
+
+ object ElevatedSurface {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.ElevatedSurface.base else Light.Background.ElevatedSurface.base
+ @Composable
+ fun inverse() = if (isSystemInDarkTheme()) Dark.Background.ElevatedSurface.inverse else Light.Background.ElevatedSurface.inverse
+ }
+
+ object Interactive {
+ object Action {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.disabled else Light.Background.Interactive.Action.disabled
+
+ object Ai {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.disabled else Light.Background.Interactive.Action.Ai.disabled
+
+ object BottomGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.BottomGradient.base else Light.Background.Interactive.Action.Ai.BottomGradient.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.BottomGradient.hover else Light.Background.Interactive.Action.Ai.BottomGradient.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.BottomGradient.active else Light.Background.Interactive.Action.Ai.BottomGradient.active
+ }
+
+ object TopGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.TopGradient.base else Light.Background.Interactive.Action.Ai.TopGradient.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.TopGradient.hover else Light.Background.Interactive.Action.Ai.TopGradient.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ai.TopGradient.active else Light.Background.Interactive.Action.Ai.TopGradient.active
+ }
+ }
+
+ object AiSecondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.AiSecondary.base else Light.Background.Interactive.Action.AiSecondary.base
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.AiSecondary.disabled else Light.Background.Interactive.Action.AiSecondary.disabled
+
+ object Active {
+ @Composable
+ fun topGradient() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.AiSecondary.Active.topGradient else Light.Background.Interactive.Action.AiSecondary.Active.topGradient
+ @Composable
+ fun bottomGradient() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.AiSecondary.Active.bottomGradient else Light.Background.Interactive.Action.AiSecondary.Active.bottomGradient
+ }
+
+ object Hover {
+ @Composable
+ fun topGradient() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.AiSecondary.Hover.topGradient else Light.Background.Interactive.Action.AiSecondary.Hover.topGradient
+ @Composable
+ fun bottomGradient() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.AiSecondary.Hover.bottomGradient else Light.Background.Interactive.Action.AiSecondary.Hover.bottomGradient
+ }
+ }
+
+ object Destructive {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Destructive.base else Light.Background.Interactive.Action.Destructive.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Destructive.hover else Light.Background.Interactive.Action.Destructive.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Destructive.active else Light.Background.Interactive.Action.Destructive.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Destructive.disabled else Light.Background.Interactive.Action.Destructive.disabled
+
+ object Secondary {
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Destructive.Secondary.hover else Light.Background.Interactive.Action.Destructive.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Destructive.Secondary.active else Light.Background.Interactive.Action.Destructive.Secondary.active
+ }
+ }
+
+ object Ghost {
+ object OnColor {
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Ghost.OnColor.hover else Light.Background.Interactive.Action.Ghost.OnColor.hover
+ }
+ }
+
+ object Primary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Primary.base else Light.Background.Interactive.Action.Primary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Primary.hover else Light.Background.Interactive.Action.Primary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Primary.active else Light.Background.Interactive.Action.Primary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Primary.disabled else Light.Background.Interactive.Action.Primary.disabled
+ }
+
+ object PrimaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.PrimaryOnColor.base else Light.Background.Interactive.Action.PrimaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.PrimaryOnColor.hover else Light.Background.Interactive.Action.PrimaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.PrimaryOnColor.active else Light.Background.Interactive.Action.PrimaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.PrimaryOnColor.disabled else Light.Background.Interactive.Action.PrimaryOnColor.disabled
+ }
+
+ object Secondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Secondary.base else Light.Background.Interactive.Action.Secondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Secondary.hover else Light.Background.Interactive.Action.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Secondary.active else Light.Background.Interactive.Action.Secondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Secondary.disabled else Light.Background.Interactive.Action.Secondary.disabled
+ }
+
+ object Success {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Success.base else Light.Background.Interactive.Action.Success.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Success.hover else Light.Background.Interactive.Action.Success.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Success.active else Light.Background.Interactive.Action.Success.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Success.disabled else Light.Background.Interactive.Action.Success.disabled
+
+ object Secondary {
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Success.Secondary.hover else Light.Background.Interactive.Action.Success.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Success.Secondary.active else Light.Background.Interactive.Action.Success.Secondary.active
+ }
+ }
+
+ object Tertiary {
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Tertiary.hover else Light.Background.Interactive.Action.Tertiary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Action.Tertiary.active else Light.Background.Interactive.Action.Tertiary.active
+ }
+ }
+
+ object Input {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Input.base else Light.Background.Interactive.Input.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Input.hover else Light.Background.Interactive.Input.hover
+ @Composable
+ fun readonly() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Input.readonly else Light.Background.Interactive.Input.readonly
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Input.disabled else Light.Background.Interactive.Input.disabled
+ @Composable
+ fun selected() = if (isSystemInDarkTheme()) Dark.Background.Interactive.Input.selected else Light.Background.Interactive.Input.selected
+ }
+ }
+
+ object Overlay {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Background.Overlay.base else Light.Background.Overlay.base
+ @Composable
+ fun dark() = if (isSystemInDarkTheme()) Dark.Background.Overlay.dark else Light.Background.Overlay.dark
+ }
+ }
+
+ object Text {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.base else Light.Text.base
+ @Composable
+ fun muted() = if (isSystemInDarkTheme()) Dark.Text.muted else Light.Text.muted
+ @Composable
+ fun success() = if (isSystemInDarkTheme()) Dark.Text.success else Light.Text.success
+ @Composable
+ fun error() = if (isSystemInDarkTheme()) Dark.Text.error else Light.Text.error
+ @Composable
+ fun warning() = if (isSystemInDarkTheme()) Dark.Text.warning else Light.Text.warning
+ @Composable
+ fun info() = if (isSystemInDarkTheme()) Dark.Text.info else Light.Text.info
+ @Composable
+ fun aiColor() = if (isSystemInDarkTheme()) Dark.Text.aiColor else Light.Text.aiColor
+ @Composable
+ fun dark() = if (isSystemInDarkTheme()) Dark.Text.dark else Light.Text.dark
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Text.onColor else Light.Text.onColor
+ @Composable
+ fun inverse() = if (isSystemInDarkTheme()) Dark.Text.inverse else Light.Text.inverse
+
+ object Accent {
+ @Composable
+ fun blue() = if (isSystemInDarkTheme()) Dark.Text.Accent.blue else Light.Text.Accent.blue
+ @Composable
+ fun green() = if (isSystemInDarkTheme()) Dark.Text.Accent.green else Light.Text.Accent.green
+ @Composable
+ fun red() = if (isSystemInDarkTheme()) Dark.Text.Accent.red else Light.Text.Accent.red
+ @Composable
+ fun orange() = if (isSystemInDarkTheme()) Dark.Text.Accent.orange else Light.Text.Accent.orange
+ @Composable
+ fun grey() = if (isSystemInDarkTheme()) Dark.Text.Accent.grey else Light.Text.Accent.grey
+ @Composable
+ fun ash() = if (isSystemInDarkTheme()) Dark.Text.Accent.ash else Light.Text.Accent.ash
+ @Composable
+ fun plum() = if (isSystemInDarkTheme()) Dark.Text.Accent.plum else Light.Text.Accent.plum
+ @Composable
+ fun violet() = if (isSystemInDarkTheme()) Dark.Text.Accent.violet else Light.Text.Accent.violet
+ @Composable
+ fun stone() = if (isSystemInDarkTheme()) Dark.Text.Accent.stone else Light.Text.Accent.stone
+ @Composable
+ fun sky() = if (isSystemInDarkTheme()) Dark.Text.Accent.sky else Light.Text.Accent.sky
+ @Composable
+ fun honey() = if (isSystemInDarkTheme()) Dark.Text.Accent.honey else Light.Text.Accent.honey
+ @Composable
+ fun sea() = if (isSystemInDarkTheme()) Dark.Text.Accent.sea else Light.Text.Accent.sea
+ @Composable
+ fun aurora() = if (isSystemInDarkTheme()) Dark.Text.Accent.aurora else Light.Text.Accent.aurora
+ }
+
+ object Interactive {
+ object Action {
+ object Ai {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Ai.base else Light.Text.Interactive.Action.Ai.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Ai.hover else Light.Text.Interactive.Action.Ai.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Ai.active else Light.Text.Interactive.Action.Ai.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Ai.disabled else Light.Text.Interactive.Action.Ai.disabled
+ }
+
+ object AiSecondary {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.AiSecondary.disabled else Light.Text.Interactive.Action.AiSecondary.disabled
+
+ object BottomGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.AiSecondary.BottomGradient.base else Light.Text.Interactive.Action.AiSecondary.BottomGradient.base
+ }
+
+ object TopGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.AiSecondary.TopGradient.base else Light.Text.Interactive.Action.AiSecondary.TopGradient.base
+ }
+ }
+
+ object DestructiveSecondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.DestructiveSecondary.base else Light.Text.Interactive.Action.DestructiveSecondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.DestructiveSecondary.hover else Light.Text.Interactive.Action.DestructiveSecondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.DestructiveSecondary.active else Light.Text.Interactive.Action.DestructiveSecondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.DestructiveSecondary.disabled else Light.Text.Interactive.Action.DestructiveSecondary.disabled
+ }
+
+ object Primary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Primary.base else Light.Text.Interactive.Action.Primary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Primary.hover else Light.Text.Interactive.Action.Primary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Primary.active else Light.Text.Interactive.Action.Primary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Primary.disabled else Light.Text.Interactive.Action.Primary.disabled
+ }
+
+ object PrimaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.PrimaryOnColor.base else Light.Text.Interactive.Action.PrimaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.PrimaryOnColor.hover else Light.Text.Interactive.Action.PrimaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.PrimaryOnColor.active else Light.Text.Interactive.Action.PrimaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.PrimaryOnColor.disabled else Light.Text.Interactive.Action.PrimaryOnColor.disabled
+ }
+
+ object Secondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Secondary.base else Light.Text.Interactive.Action.Secondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Secondary.hover else Light.Text.Interactive.Action.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Secondary.active else Light.Text.Interactive.Action.Secondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Secondary.disabled else Light.Text.Interactive.Action.Secondary.disabled
+ }
+
+ object SecondaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SecondaryOnColor.base else Light.Text.Interactive.Action.SecondaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SecondaryOnColor.hover else Light.Text.Interactive.Action.SecondaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SecondaryOnColor.active else Light.Text.Interactive.Action.SecondaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SecondaryOnColor.disabled else Light.Text.Interactive.Action.SecondaryOnColor.disabled
+ }
+
+ object Status {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Status.base else Light.Text.Interactive.Action.Status.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Status.hover else Light.Text.Interactive.Action.Status.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Status.active else Light.Text.Interactive.Action.Status.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Status.disabled else Light.Text.Interactive.Action.Status.disabled
+ }
+
+ object SuccessSecondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SuccessSecondary.base else Light.Text.Interactive.Action.SuccessSecondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SuccessSecondary.hover else Light.Text.Interactive.Action.SuccessSecondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SuccessSecondary.active else Light.Text.Interactive.Action.SuccessSecondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.SuccessSecondary.disabled else Light.Text.Interactive.Action.SuccessSecondary.disabled
+ }
+
+ object Tertiary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Tertiary.base else Light.Text.Interactive.Action.Tertiary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Tertiary.hover else Light.Text.Interactive.Action.Tertiary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Tertiary.active else Light.Text.Interactive.Action.Tertiary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Action.Tertiary.disabled else Light.Text.Interactive.Action.Tertiary.disabled
+ }
+ }
+
+ object Disabled {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Disabled.base else Light.Text.Interactive.Disabled.base
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Disabled.onColor else Light.Text.Interactive.Disabled.onColor
+ }
+
+ object Input {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Input.base else Light.Text.Interactive.Input.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Input.hover else Light.Text.Interactive.Input.hover
+ @Composable
+ fun readonly() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Input.readonly else Light.Text.Interactive.Input.readonly
+ @Composable
+ fun placeholder() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Input.placeholder else Light.Text.Interactive.Input.placeholder
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Input.disabled else Light.Text.Interactive.Input.disabled
+ }
+
+ object Navigation {
+ object Primary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Navigation.Primary.base else Light.Text.Interactive.Navigation.Primary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Navigation.Primary.hover else Light.Text.Interactive.Navigation.Primary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Navigation.Primary.active else Light.Text.Interactive.Navigation.Primary.active
+ }
+
+ object PrimaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Navigation.PrimaryOnColor.base else Light.Text.Interactive.Navigation.PrimaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Navigation.PrimaryOnColor.hover else Light.Text.Interactive.Navigation.PrimaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Text.Interactive.Navigation.PrimaryOnColor.active else Light.Text.Interactive.Navigation.PrimaryOnColor.active
+ }
+ }
+ }
+ }
+
+ object Stroke {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.base else Light.Stroke.base
+ @Composable
+ fun muted() = if (isSystemInDarkTheme()) Dark.Stroke.muted else Light.Stroke.muted
+ @Composable
+ fun strong() = if (isSystemInDarkTheme()) Dark.Stroke.strong else Light.Stroke.strong
+ @Composable
+ fun success() = if (isSystemInDarkTheme()) Dark.Stroke.success else Light.Stroke.success
+ @Composable
+ fun error() = if (isSystemInDarkTheme()) Dark.Stroke.error else Light.Stroke.error
+ @Composable
+ fun warning() = if (isSystemInDarkTheme()) Dark.Stroke.warning else Light.Stroke.warning
+ @Composable
+ fun info() = if (isSystemInDarkTheme()) Dark.Stroke.info else Light.Stroke.info
+ @Composable
+ fun brand() = if (isSystemInDarkTheme()) Dark.Stroke.brand else Light.Stroke.brand
+ @Composable
+ fun aiTopGradient() = if (isSystemInDarkTheme()) Dark.Stroke.aiTopGradient else Light.Stroke.aiTopGradient
+ @Composable
+ fun aiBottomGradient() = if (isSystemInDarkTheme()) Dark.Stroke.aiBottomGradient else Light.Stroke.aiBottomGradient
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Stroke.onColor else Light.Stroke.onColor
+ @Composable
+ fun inverse() = if (isSystemInDarkTheme()) Dark.Stroke.inverse else Light.Stroke.inverse
+
+ object Accent {
+ @Composable
+ fun blue() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.blue else Light.Stroke.Accent.blue
+ @Composable
+ fun green() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.green else Light.Stroke.Accent.green
+ @Composable
+ fun red() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.red else Light.Stroke.Accent.red
+ @Composable
+ fun orange() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.orange else Light.Stroke.Accent.orange
+ @Composable
+ fun grey() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.grey else Light.Stroke.Accent.grey
+ @Composable
+ fun ash() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.ash else Light.Stroke.Accent.ash
+ @Composable
+ fun plum() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.plum else Light.Stroke.Accent.plum
+ @Composable
+ fun violet() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.violet else Light.Stroke.Accent.violet
+ @Composable
+ fun stone() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.stone else Light.Stroke.Accent.stone
+ @Composable
+ fun sky() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.sky else Light.Stroke.Accent.sky
+ @Composable
+ fun honey() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.honey else Light.Stroke.Accent.honey
+ @Composable
+ fun sea() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.sea else Light.Stroke.Accent.sea
+ @Composable
+ fun aurora() = if (isSystemInDarkTheme()) Dark.Stroke.Accent.aurora else Light.Stroke.Accent.aurora
+ }
+
+ object Container {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Container.base else Light.Stroke.Container.base
+ @Composable
+ fun dark() = if (isSystemInDarkTheme()) Dark.Stroke.Container.dark else Light.Stroke.Container.dark
+ }
+
+ object Interactive {
+ object Action {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.disabled else Light.Stroke.Interactive.Action.disabled
+
+ object Ai {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.disabled else Light.Stroke.Interactive.Action.Ai.disabled
+
+ object BottomGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.BottomGradient.base else Light.Stroke.Interactive.Action.Ai.BottomGradient.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.BottomGradient.hover else Light.Stroke.Interactive.Action.Ai.BottomGradient.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.BottomGradient.active else Light.Stroke.Interactive.Action.Ai.BottomGradient.active
+ }
+
+ object TopGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.TopGradient.base else Light.Stroke.Interactive.Action.Ai.TopGradient.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.TopGradient.hover else Light.Stroke.Interactive.Action.Ai.TopGradient.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Ai.TopGradient.active else Light.Stroke.Interactive.Action.Ai.TopGradient.active
+ }
+ }
+
+ object AiSecondary {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.AiSecondary.disabled else Light.Stroke.Interactive.Action.AiSecondary.disabled
+ }
+
+ object Destructive {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.base else Light.Stroke.Interactive.Action.Destructive.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.hover else Light.Stroke.Interactive.Action.Destructive.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.active else Light.Stroke.Interactive.Action.Destructive.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.disabled else Light.Stroke.Interactive.Action.Destructive.disabled
+
+ object Secondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.Secondary.base else Light.Stroke.Interactive.Action.Destructive.Secondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.Secondary.hover else Light.Stroke.Interactive.Action.Destructive.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.Secondary.active else Light.Stroke.Interactive.Action.Destructive.Secondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Destructive.Secondary.disabled else Light.Stroke.Interactive.Action.Destructive.Secondary.disabled
+ }
+ }
+
+ object Primary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Primary.base else Light.Stroke.Interactive.Action.Primary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Primary.hover else Light.Stroke.Interactive.Action.Primary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Primary.active else Light.Stroke.Interactive.Action.Primary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Primary.disabled else Light.Stroke.Interactive.Action.Primary.disabled
+ }
+
+ object PrimaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.PrimaryOnColor.base else Light.Stroke.Interactive.Action.PrimaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.PrimaryOnColor.hover else Light.Stroke.Interactive.Action.PrimaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.PrimaryOnColor.active else Light.Stroke.Interactive.Action.PrimaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.PrimaryOnColor.disabled else Light.Stroke.Interactive.Action.PrimaryOnColor.disabled
+ }
+
+ object Secondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Secondary.base else Light.Stroke.Interactive.Action.Secondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Secondary.hover else Light.Stroke.Interactive.Action.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Secondary.active else Light.Stroke.Interactive.Action.Secondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Secondary.disabled else Light.Stroke.Interactive.Action.Secondary.disabled
+ }
+
+ object SecondaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.SecondaryOnColor.base else Light.Stroke.Interactive.Action.SecondaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.SecondaryOnColor.hover else Light.Stroke.Interactive.Action.SecondaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.SecondaryOnColor.active else Light.Stroke.Interactive.Action.SecondaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.SecondaryOnColor.disabled else Light.Stroke.Interactive.Action.SecondaryOnColor.disabled
+ }
+
+ object Success {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.base else Light.Stroke.Interactive.Action.Success.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.hover else Light.Stroke.Interactive.Action.Success.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.active else Light.Stroke.Interactive.Action.Success.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.disabled else Light.Stroke.Interactive.Action.Success.disabled
+
+ object Secondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.Secondary.base else Light.Stroke.Interactive.Action.Success.Secondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.Secondary.hover else Light.Stroke.Interactive.Action.Success.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.Secondary.active else Light.Stroke.Interactive.Action.Success.Secondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Success.Secondary.disabled else Light.Stroke.Interactive.Action.Success.Secondary.disabled
+ }
+ }
+
+ object Tertiary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Tertiary.base else Light.Stroke.Interactive.Action.Tertiary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Tertiary.hover else Light.Stroke.Interactive.Action.Tertiary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Tertiary.active else Light.Stroke.Interactive.Action.Tertiary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Action.Tertiary.disabled else Light.Stroke.Interactive.Action.Tertiary.disabled
+ }
+ }
+
+ object FocusRing {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.FocusRing.base else Light.Stroke.Interactive.FocusRing.base
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.FocusRing.onColor else Light.Stroke.Interactive.FocusRing.onColor
+ }
+
+ object Input {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Input.base else Light.Stroke.Interactive.Input.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Input.hover else Light.Stroke.Interactive.Input.hover
+ @Composable
+ fun readonly() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Input.readonly else Light.Stroke.Interactive.Input.readonly
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Input.disabled else Light.Stroke.Interactive.Input.disabled
+ @Composable
+ fun selected() = if (isSystemInDarkTheme()) Dark.Stroke.Interactive.Input.selected else Light.Stroke.Interactive.Input.selected
+ }
+ }
+ }
+
+ object Icon {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.base else Light.Icon.base
+ @Composable
+ fun muted() = if (isSystemInDarkTheme()) Dark.Icon.muted else Light.Icon.muted
+ @Composable
+ fun success() = if (isSystemInDarkTheme()) Dark.Icon.success else Light.Icon.success
+ @Composable
+ fun error() = if (isSystemInDarkTheme()) Dark.Icon.error else Light.Icon.error
+ @Composable
+ fun warning() = if (isSystemInDarkTheme()) Dark.Icon.warning else Light.Icon.warning
+ @Composable
+ fun info() = if (isSystemInDarkTheme()) Dark.Icon.info else Light.Icon.info
+ @Composable
+ fun dark() = if (isSystemInDarkTheme()) Dark.Icon.dark else Light.Icon.dark
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Icon.onColor else Light.Icon.onColor
+ @Composable
+ fun inverse() = if (isSystemInDarkTheme()) Dark.Icon.inverse else Light.Icon.inverse
+ @Composable
+ fun brand() = if (isSystemInDarkTheme()) Dark.Icon.brand else Light.Icon.brand
+
+ object Accent {
+ @Composable
+ fun blue() = if (isSystemInDarkTheme()) Dark.Icon.Accent.blue else Light.Icon.Accent.blue
+ @Composable
+ fun green() = if (isSystemInDarkTheme()) Dark.Icon.Accent.green else Light.Icon.Accent.green
+ @Composable
+ fun red() = if (isSystemInDarkTheme()) Dark.Icon.Accent.red else Light.Icon.Accent.red
+ @Composable
+ fun orange() = if (isSystemInDarkTheme()) Dark.Icon.Accent.orange else Light.Icon.Accent.orange
+ @Composable
+ fun grey() = if (isSystemInDarkTheme()) Dark.Icon.Accent.grey else Light.Icon.Accent.grey
+ @Composable
+ fun ash() = if (isSystemInDarkTheme()) Dark.Icon.Accent.ash else Light.Icon.Accent.ash
+ @Composable
+ fun plum() = if (isSystemInDarkTheme()) Dark.Icon.Accent.plum else Light.Icon.Accent.plum
+ @Composable
+ fun violet() = if (isSystemInDarkTheme()) Dark.Icon.Accent.violet else Light.Icon.Accent.violet
+ @Composable
+ fun stone() = if (isSystemInDarkTheme()) Dark.Icon.Accent.stone else Light.Icon.Accent.stone
+ @Composable
+ fun sky() = if (isSystemInDarkTheme()) Dark.Icon.Accent.sky else Light.Icon.Accent.sky
+ @Composable
+ fun honey() = if (isSystemInDarkTheme()) Dark.Icon.Accent.honey else Light.Icon.Accent.honey
+ @Composable
+ fun sea() = if (isSystemInDarkTheme()) Dark.Icon.Accent.sea else Light.Icon.Accent.sea
+ @Composable
+ fun aurora() = if (isSystemInDarkTheme()) Dark.Icon.Accent.aurora else Light.Icon.Accent.aurora
+ }
+
+ object Interactive {
+ object Action {
+ object Ai {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Ai.base else Light.Icon.Interactive.Action.Ai.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Ai.hover else Light.Icon.Interactive.Action.Ai.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Ai.active else Light.Icon.Interactive.Action.Ai.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Ai.disabled else Light.Icon.Interactive.Action.Ai.disabled
+ }
+
+ object AiSecondary {
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.AiSecondary.disabled else Light.Icon.Interactive.Action.AiSecondary.disabled
+
+ object BottomGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.AiSecondary.BottomGradient.base else Light.Icon.Interactive.Action.AiSecondary.BottomGradient.base
+ }
+
+ object TopGradient {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.AiSecondary.TopGradient.base else Light.Icon.Interactive.Action.AiSecondary.TopGradient.base
+ }
+ }
+
+ object DestructiveSecondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.DestructiveSecondary.base else Light.Icon.Interactive.Action.DestructiveSecondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.DestructiveSecondary.hover else Light.Icon.Interactive.Action.DestructiveSecondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.DestructiveSecondary.active else Light.Icon.Interactive.Action.DestructiveSecondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.DestructiveSecondary.disabled else Light.Icon.Interactive.Action.DestructiveSecondary.disabled
+ }
+
+ object Primary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Primary.base else Light.Icon.Interactive.Action.Primary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Primary.hover else Light.Icon.Interactive.Action.Primary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Primary.active else Light.Icon.Interactive.Action.Primary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Primary.disabled else Light.Icon.Interactive.Action.Primary.disabled
+ }
+
+ object PrimaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.PrimaryOnColor.base else Light.Icon.Interactive.Action.PrimaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.PrimaryOnColor.hover else Light.Icon.Interactive.Action.PrimaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.PrimaryOnColor.active else Light.Icon.Interactive.Action.PrimaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.PrimaryOnColor.disabled else Light.Icon.Interactive.Action.PrimaryOnColor.disabled
+ }
+
+ object Secondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Secondary.base else Light.Icon.Interactive.Action.Secondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Secondary.hover else Light.Icon.Interactive.Action.Secondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Secondary.active else Light.Icon.Interactive.Action.Secondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Secondary.disabled else Light.Icon.Interactive.Action.Secondary.disabled
+ }
+
+ object SecondaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SecondaryOnColor.base else Light.Icon.Interactive.Action.SecondaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SecondaryOnColor.hover else Light.Icon.Interactive.Action.SecondaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SecondaryOnColor.active else Light.Icon.Interactive.Action.SecondaryOnColor.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SecondaryOnColor.disabled else Light.Icon.Interactive.Action.SecondaryOnColor.disabled
+ }
+
+ object Status {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Status.base else Light.Icon.Interactive.Action.Status.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Status.hover else Light.Icon.Interactive.Action.Status.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Status.active else Light.Icon.Interactive.Action.Status.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Status.disabled else Light.Icon.Interactive.Action.Status.disabled
+ }
+
+ object SuccessSecondary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SuccessSecondary.base else Light.Icon.Interactive.Action.SuccessSecondary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SuccessSecondary.hover else Light.Icon.Interactive.Action.SuccessSecondary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SuccessSecondary.active else Light.Icon.Interactive.Action.SuccessSecondary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.SuccessSecondary.disabled else Light.Icon.Interactive.Action.SuccessSecondary.disabled
+ }
+
+ object Tertiary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Tertiary.base else Light.Icon.Interactive.Action.Tertiary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Tertiary.hover else Light.Icon.Interactive.Action.Tertiary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Tertiary.active else Light.Icon.Interactive.Action.Tertiary.active
+ @Composable
+ fun disabled() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Action.Tertiary.disabled else Light.Icon.Interactive.Action.Tertiary.disabled
+ }
+ }
+
+ object Disabled {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Disabled.base else Light.Icon.Interactive.Disabled.base
+ @Composable
+ fun onColor() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Disabled.onColor else Light.Icon.Interactive.Disabled.onColor
+ }
+
+ object Navigation {
+ object Primary {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Navigation.Primary.base else Light.Icon.Interactive.Navigation.Primary.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Navigation.Primary.hover else Light.Icon.Interactive.Navigation.Primary.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Navigation.Primary.active else Light.Icon.Interactive.Navigation.Primary.active
+ }
+
+ object PrimaryOnColor {
+ @Composable
+ fun base() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Navigation.PrimaryOnColor.base else Light.Icon.Interactive.Navigation.PrimaryOnColor.base
+ @Composable
+ fun hover() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Navigation.PrimaryOnColor.hover else Light.Icon.Interactive.Navigation.PrimaryOnColor.hover
+ @Composable
+ fun active() = if (isSystemInDarkTheme()) Dark.Icon.Interactive.Navigation.PrimaryOnColor.active else Light.Icon.Interactive.Navigation.PrimaryOnColor.active
+ }
+ }
+ }
+ }
+}
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_bold.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_bold.ttf
new file mode 100644
index 0000000000..a23aed3e77
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_bold.ttf differ
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_extrabold.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_extrabold.ttf
new file mode 100644
index 0000000000..5f9382ea52
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_extrabold.ttf differ
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_extralight.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_extralight.ttf
new file mode 100644
index 0000000000..4e98123f8e
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_extralight.ttf differ
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_light.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_light.ttf
new file mode 100644
index 0000000000..d40671d76a
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_light.ttf differ
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_medium.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_medium.ttf
new file mode 100644
index 0000000000..613b60013a
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_medium.ttf differ
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_regular.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_regular.ttf
new file mode 100644
index 0000000000..3fa771fee8
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_regular.ttf differ
diff --git a/libs/instui/src/main/res/font/atkinson_hyperlegible_next_semibold.ttf b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_semibold.ttf
new file mode 100644
index 0000000000..1764f33ac6
Binary files /dev/null and b/libs/instui/src/main/res/font/atkinson_hyperlegible_next_semibold.ttf differ
diff --git a/libs/instui/src/main/res/font/inclusive_sans_bold.ttf b/libs/instui/src/main/res/font/inclusive_sans_bold.ttf
new file mode 100644
index 0000000000..a7008108b9
Binary files /dev/null and b/libs/instui/src/main/res/font/inclusive_sans_bold.ttf differ
diff --git a/libs/instui/src/main/res/font/inclusive_sans_light.ttf b/libs/instui/src/main/res/font/inclusive_sans_light.ttf
new file mode 100644
index 0000000000..983b5133be
Binary files /dev/null and b/libs/instui/src/main/res/font/inclusive_sans_light.ttf differ
diff --git a/libs/instui/src/main/res/font/inclusive_sans_medium.ttf b/libs/instui/src/main/res/font/inclusive_sans_medium.ttf
new file mode 100644
index 0000000000..73ff2a789b
Binary files /dev/null and b/libs/instui/src/main/res/font/inclusive_sans_medium.ttf differ
diff --git a/libs/instui/src/main/res/font/inclusive_sans_regular.ttf b/libs/instui/src/main/res/font/inclusive_sans_regular.ttf
new file mode 100644
index 0000000000..2887ad01fe
Binary files /dev/null and b/libs/instui/src/main/res/font/inclusive_sans_regular.ttf differ
diff --git a/libs/instui/src/main/res/font/inclusive_sans_semibold.ttf b/libs/instui/src/main/res/font/inclusive_sans_semibold.ttf
new file mode 100644
index 0000000000..4969d0770d
Binary files /dev/null and b/libs/instui/src/main/res/font/inclusive_sans_semibold.ttf differ
diff --git a/libs/instui/src/main/res/font/lato_black.ttf b/libs/instui/src/main/res/font/lato_black.ttf
new file mode 100644
index 0000000000..4340502d93
Binary files /dev/null and b/libs/instui/src/main/res/font/lato_black.ttf differ
diff --git a/libs/instui/src/main/res/font/lato_bold.ttf b/libs/instui/src/main/res/font/lato_bold.ttf
new file mode 100644
index 0000000000..016068b486
Binary files /dev/null and b/libs/instui/src/main/res/font/lato_bold.ttf differ
diff --git a/libs/instui/src/main/res/font/lato_light.ttf b/libs/instui/src/main/res/font/lato_light.ttf
new file mode 100644
index 0000000000..dfa72ce808
Binary files /dev/null and b/libs/instui/src/main/res/font/lato_light.ttf differ
diff --git a/libs/instui/src/main/res/font/lato_regular.ttf b/libs/instui/src/main/res/font/lato_regular.ttf
new file mode 100644
index 0000000000..bb2e8875a9
Binary files /dev/null and b/libs/instui/src/main/res/font/lato_regular.ttf differ
diff --git a/libs/instui/src/main/res/font/lato_thin.ttf b/libs/instui/src/main/res/font/lato_thin.ttf
new file mode 100644
index 0000000000..ba58da1a13
Binary files /dev/null and b/libs/instui/src/main/res/font/lato_thin.ttf differ
diff --git a/libs/login-api-2/build.gradle b/libs/login-api-2/build.gradle
index 38a16be117..e20db5adf3 100644
--- a/libs/login-api-2/build.gradle
+++ b/libs/login-api-2/build.gradle
@@ -22,6 +22,7 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'
apply plugin: 'com.google.devtools.ksp'
apply plugin: 'dagger.hilt.android.plugin'
+apply plugin: 'org.jetbrains.kotlin.plugin.compose'
static String isTesting() {
if ( System.getenv("IS_TESTING") == "true" ) {
@@ -92,12 +93,13 @@ android {
buildFeatures {
dataBinding true
viewBinding true
+ compose true
}
}
-configurations {
- all*.exclude group: 'commons-logging', module: 'commons-logging'
- all*.exclude group: 'org.apache.httpcomponents', module: 'httpclient'
+configurations.configureEach {
+ exclude group: 'commons-logging', module: 'commons-logging'
+ exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
dependencies {
diff --git a/libs/login-api-2/src/main/AndroidManifest.xml b/libs/login-api-2/src/main/AndroidManifest.xml
index 24ad09da00..2d1c4ce00f 100644
--- a/libs/login-api-2/src/main/AndroidManifest.xml
+++ b/libs/login-api-2/src/main/AndroidManifest.xml
@@ -28,5 +28,9 @@
+
+
diff --git a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/LoginNavigation.kt b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/LoginNavigation.kt
index d33cd951a4..48093b93c8 100644
--- a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/LoginNavigation.kt
+++ b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/LoginNavigation.kt
@@ -19,12 +19,14 @@ package com.instructure.loginapi.login
import android.content.Intent
import androidx.fragment.app.FragmentActivity
import com.instructure.loginapi.login.features.acceptableusepolicy.AcceptableUsePolicyActivity
+import com.instructure.loginapi.login.features.cookieconsent.CookieConsentActivity
import com.instructure.loginapi.login.viewmodel.Experience
import com.instructure.loginapi.login.viewmodel.LoginResultAction
import com.instructure.loginapi.login.viewmodel.LoginViewModel
const val CANVAS_FOR_ELEMENTARY = "canvas_for_elementary"
const val CANVAS_CAREER = "canvas_career"
+const val NEXT_GEN_CANVAS = "next_gen_canvas"
abstract class LoginNavigation(
private val activity: FragmentActivity
@@ -37,7 +39,7 @@ abstract class LoginNavigation(
event?.getContentIfNotHandled()?.let {
when (it) {
LoginResultAction.TokenNotValid -> logout()
- is LoginResultAction.Login -> startApp(it.experience)
+ is LoginResultAction.Login -> showCookieConsent(it.experience)
is LoginResultAction.ShouldAcceptPolicy -> showPolicy(it.experience)
}
}
@@ -46,8 +48,13 @@ abstract class LoginNavigation(
protected abstract fun logout()
- private fun startApp(experience: Experience) {
- val intent = initMainActivityIntent(experience)
+ private fun showCookieConsent(experience: Experience) {
+ val intent = Intent(activity, CookieConsentActivity::class.java)
+ when (experience) {
+ is Experience.Academic -> intent.putExtra(CANVAS_FOR_ELEMENTARY, experience.elementary)
+ is Experience.Career -> intent.putExtra(CANVAS_CAREER, true)
+ is Experience.NextGenCanvas -> intent.putExtra(NEXT_GEN_CANVAS, true)
+ }
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
activity.startActivity(intent)
activity.finish()
@@ -57,10 +64,10 @@ abstract class LoginNavigation(
private fun showPolicy(experience: Experience) {
val intent = Intent(activity, AcceptableUsePolicyActivity::class.java)
- if (experience is Experience.Academic) {
- intent.putExtra(CANVAS_FOR_ELEMENTARY, experience.elementary)
- } else if (experience is Experience.Career) {
- intent.putExtra(CANVAS_CAREER, true)
+ when (experience) {
+ is Experience.Academic -> intent.putExtra(CANVAS_FOR_ELEMENTARY, experience.elementary)
+ is Experience.Career -> intent.putExtra(CANVAS_CAREER, true)
+ is Experience.NextGenCanvas -> intent.putExtra(NEXT_GEN_CANVAS, true)
}
activity.startActivity(intent)
}
diff --git a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/activities/BaseLoginSignInActivity.kt b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/activities/BaseLoginSignInActivity.kt
index 4a5fb694f7..968a48b14d 100644
--- a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/activities/BaseLoginSignInActivity.kt
+++ b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/activities/BaseLoginSignInActivity.kt
@@ -106,8 +106,14 @@ abstract class BaseLoginSignInActivity : BaseCanvasActivity(), OnAuthenticationS
companion object {
const val ACCOUNT_DOMAIN = "accountDomain"
- const val SUCCESS_URL = "/canvas/login?code="
- const val ERROR_URL = "/canvas/login?error=access_denied"
+ val SUCCESS_URL_COLLECTION = listOf(
+ "/canvas/login?code=", //success url
+ "login/oauth2/auth?code=" //legacy success url (needed for the fallback redirect_uri)
+ )
+ val ERROR_URL_COLLECTION = listOf(
+ "/canvas/login?error=access_denied", //error url
+ "/login/oauth2/auth?error=access_denied" //legacy error url (needed for the fallback redirect_uri)
+ )
init {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
@@ -240,13 +246,14 @@ abstract class BaseLoginSignInActivity : BaseCanvasActivity(), OnAuthenticationS
private fun handleShouldOverrideUrlLoading(view: WebView, url: String): Boolean {
if (overrideUrlLoading(view, url)) return true
return when {
- url.contains(SUCCESS_URL) -> {
+ SUCCESS_URL_COLLECTION.any { url.contains(it) } -> {
+ val responseUrl = SUCCESS_URL_COLLECTION.first { url.contains(it) }
domain = accountDomain.domain!!
- val oAuthRequest = url.substring(url.indexOf(SUCCESS_URL) + SUCCESS_URL.length)
+ val oAuthRequest = url.substring(url.indexOf(responseUrl) + responseUrl.length)
getToken(clientId, clientSecret, oAuthRequest, mGetTokenCallback)
true
}
- url.contains(ERROR_URL) -> {
+ ERROR_URL_COLLECTION.any { url.contains(it) } -> {
clearCookies()
loadUrl(view, authenticationURL, headers)
true
diff --git a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/features/cookieconsent/CookieConsentActivity.kt b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/features/cookieconsent/CookieConsentActivity.kt
new file mode 100644
index 0000000000..e3adeb0e6f
--- /dev/null
+++ b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/features/cookieconsent/CookieConsentActivity.kt
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.loginapi.login.features.cookieconsent
+
+import android.os.Bundle
+import androidx.activity.compose.setContent
+import androidx.activity.viewModels
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import com.instructure.pandautils.base.BaseCanvasActivity
+import com.instructure.pandautils.compose.CanvasTheme
+import com.instructure.pandautils.features.cookieconsent.CookieConsentContent
+import com.instructure.pandautils.features.cookieconsent.CookieConsentViewModel
+import com.instructure.pandautils.utils.EdgeToEdgeHelper
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class CookieConsentActivity : BaseCanvasActivity() {
+
+ private val viewModel: CookieConsentViewModel by viewModels()
+
+ @Inject
+ lateinit var router: CookieConsentRouter
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ EdgeToEdgeHelper.enableEdgeToEdge(this)
+
+ viewModel.checkAndShowIfNeeded()
+
+ setContent {
+ CanvasTheme {
+ val uiState by viewModel.uiState.collectAsState()
+ CookieConsentContent(uiState = uiState)
+ }
+ }
+
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ viewModel.uiState.collect { state ->
+ state.consentResult?.let {
+ state.onConsentResultHandled()
+ proceedToApp()
+ }
+ }
+ }
+ }
+ }
+
+ private fun proceedToApp() {
+ router.startApp()
+ finish()
+ }
+
+ @Suppress("DEPRECATION")
+ @Deprecated("Deprecated in Java")
+ override fun onBackPressed() {
+ // Do nothing - consent is required before proceeding
+ }
+}
\ No newline at end of file
diff --git a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/features/cookieconsent/CookieConsentRouter.kt b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/features/cookieconsent/CookieConsentRouter.kt
new file mode 100644
index 0000000000..58a789d02e
--- /dev/null
+++ b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/features/cookieconsent/CookieConsentRouter.kt
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.instructure.loginapi.login.features.cookieconsent
+
+interface CookieConsentRouter {
+ fun startApp()
+}
\ No newline at end of file
diff --git a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/tasks/LogoutTask.kt b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/tasks/LogoutTask.kt
index 4a6bfd5c93..c527dfb2d2 100644
--- a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/tasks/LogoutTask.kt
+++ b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/tasks/LogoutTask.kt
@@ -26,6 +26,7 @@ import com.instructure.canvasapi2.builders.RestBuilder
import com.instructure.canvasapi2.managers.CommunicationChannelsManager
import com.instructure.canvasapi2.managers.OAuthManager
import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.canvasapi2.utils.ContextKeeper
import com.instructure.canvasapi2.utils.JourneyApiPref
import com.instructure.canvasapi2.utils.MasqueradeHelper
@@ -100,6 +101,9 @@ abstract class LogoutTask(
when (type) {
Type.LOGOUT, Type.LOGOUT_NO_LOGIN_FLOW -> {
removeOfflineData(ApiPrefs.user?.id)
+ val userId = ApiPrefs.user?.id
+ val domain = ApiPrefs.domain
+ if (userId != null) ConsentPrefs.removeConsent(userId, domain)
removeUser()
}
diff --git a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/viewmodel/LoginViewModel.kt b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/viewmodel/LoginViewModel.kt
index 537ac843e6..78c0c99767 100644
--- a/libs/login-api-2/src/main/java/com/instructure/loginapi/login/viewmodel/LoginViewModel.kt
+++ b/libs/login-api-2/src/main/java/com/instructure/loginapi/login/viewmodel/LoginViewModel.kt
@@ -27,6 +27,8 @@ import com.instructure.canvasapi2.managers.OAuthManager
import com.instructure.canvasapi2.managers.UserManager
import com.instructure.canvasapi2.models.ExperienceSummary
import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.RemoteConfigParam
+import com.instructure.canvasapi2.utils.RemoteConfigUtils
import com.instructure.pandautils.mvvm.Event
import com.instructure.pandautils.utils.FeatureFlagProvider
import com.instructure.pandautils.utils.NetworkStateProvider
@@ -38,6 +40,7 @@ const val CRASHLYTICS_EXPERIENCE_KEY = "experience"
const val ACADEMIC_EXPERIENCE = "academic"
const val CAREER_EXPERIENCE = "career"
const val ELEMENTARY_EXPERIENCE = "elementary"
+const val NEXT_GEN_CANVAS_EXPERIENCE = "next_gen_canvas"
/**
@@ -83,6 +86,12 @@ class LoginViewModel @Inject constructor(
}
private suspend fun getExperience(checkElementary: Boolean): Experience {
+ val isNextGenCanvas = RemoteConfigUtils.getBoolean(RemoteConfigParam.NEXT_GEN_CANVAS)
+ if (isNextGenCanvas) {
+ crashlytics.setCustomKey(CRASHLYTICS_EXPERIENCE_KEY, NEXT_GEN_CANVAS_EXPERIENCE)
+ return Experience.NextGenCanvas
+ }
+
val canvasCareerView = apiPrefs.canvasCareerView
if (canvasCareerView != null) {
@@ -148,4 +157,5 @@ sealed class LoginResultAction {
sealed class Experience {
data class Academic(val elementary: Boolean) : Experience()
data object Career : Experience()
+ data object NextGenCanvas : Experience()
}
\ No newline at end of file
diff --git a/libs/login-api-2/src/test/java/com/instructure/loginapi/login/viewmodel/LoginViewModelTest.kt b/libs/login-api-2/src/test/java/com/instructure/loginapi/login/viewmodel/LoginViewModelTest.kt
index 3457c2421f..7e68eb9740 100644
--- a/libs/login-api-2/src/test/java/com/instructure/loginapi/login/viewmodel/LoginViewModelTest.kt
+++ b/libs/login-api-2/src/test/java/com/instructure/loginapi/login/viewmodel/LoginViewModelTest.kt
@@ -29,12 +29,16 @@ import com.instructure.canvasapi2.models.ExperienceSummary
import com.instructure.canvasapi2.models.User
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.canvasapi2.utils.DataResult
+import com.instructure.canvasapi2.utils.RemoteConfigParam
+import com.instructure.canvasapi2.utils.RemoteConfigUtils
import com.instructure.pandautils.utils.FeatureFlagProvider
import com.instructure.pandautils.utils.NetworkStateProvider
import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.mockk
+import io.mockk.mockkObject
+import io.mockk.unmockkAll
import io.mockk.verify
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -73,13 +77,16 @@ class LoginViewModelTest {
coEvery { experienceApi.getExperienceSummary(any()) } returns DataResult.Fail()
Dispatchers.setMain(testDispatcher)
+ mockkObject(RemoteConfigUtils)
+ every { RemoteConfigUtils.getBoolean(RemoteConfigParam.NEXT_GEN_CANVAS) } returns false
+
every { apiPrefs.user } returns mockk()
}
@After
fun tearDown() {
+ unmockkAll()
Dispatchers.resetMain()
-
}
@Test
diff --git a/libs/ngc/.gitignore b/libs/ngc/.gitignore
new file mode 100644
index 0000000000..ab37f9dbbb
--- /dev/null
+++ b/libs/ngc/.gitignore
@@ -0,0 +1,34 @@
+#built application files
+*.apk
+*.ap_
+
+# files for the dex VM
+*.dex
+
+# Java class files
+*.class
+
+# generated files
+bin/
+gen/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Windows thumbnail db
+Thumbs.db
+
+# OSX files
+.DS_Store
+
+# Eclipse project files
+.classpath
+.project
+
+# Android Studio
+.idea
+*.iml
+*.iws
+.gradle
+build/
+/build
diff --git a/libs/ngc/build.gradle.kts b/libs/ngc/build.gradle.kts
new file mode 100644
index 0000000000..198f4470ce
--- /dev/null
+++ b/libs/ngc/build.gradle.kts
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+plugins {
+ id("com.android.library")
+ id("org.jetbrains.kotlin.android")
+ id("org.jetbrains.kotlin.plugin.compose")
+ id("kotlin-android")
+ id("com.google.devtools.ksp")
+ id("dagger.hilt.android.plugin")
+ kotlin("plugin.serialization") version "2.1.20"
+}
+
+android {
+ namespace = "com.instructure.ngc"
+ compileSdk = Versions.COMPILE_SDK
+ buildToolsVersion = Versions.BUILD_TOOLS
+
+ defaultConfig {
+ minSdk = Versions.MIN_SDK
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ debug {
+ isMinifyEnabled = false
+ isShrinkResources = false
+ }
+ release {
+ isMinifyEnabled = false
+ isShrinkResources = false
+ proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
+ }
+ }
+
+ buildTypes.getByName("debug") {
+ isDebuggable = true
+ }
+
+ buildFeatures {
+ compose = true
+ }
+
+ packaging {
+ resources.excludes.add("META-INF/DEPENDENCIES")
+ resources.excludes.add("META-INF/LICENSE")
+ resources.excludes.add("META-INF/LICENSE.txt")
+ resources.excludes.add("META-INF/NOTICE")
+ resources.excludes.add("LICENSE.txt")
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_17.toString()
+ }
+
+ hilt {
+ enableAggregatingTask = false
+ }
+}
+
+dependencies {
+ implementation(project(":pandautils"))
+
+ implementation(Libs.NAVIGATION_COMPOSE)
+ implementation(Libs.HILT)
+ ksp(Libs.HILT_COMPILER)
+ implementation(Libs.HILT_ANDROIDX_WORK)
+ ksp(Libs.HILT_ANDROIDX_COMPILER)
+
+ implementation(Libs.ANDROIDX_ANNOTATION)
+ implementation(Libs.ANDROIDX_APPCOMPAT)
+
+ implementation(Libs.VIEW_MODEL)
+ implementation(Libs.HILT_COMPOSE_NAVIGATION)
+ implementation(Libs.KOTLIN_SERIALIZABLE)
+
+ implementation(Libs.FIREBASE_CRASHLYTICS) {
+ isTransitive = true
+ }
+
+ /* Unit Test Dependencies */
+ testImplementation(Libs.JUNIT)
+ testImplementation(Libs.MOCKK)
+ testImplementation(Libs.KOTLIN_COROUTINES_TEST)
+ testImplementation(Libs.THREETEN_BP)
+ testImplementation(Libs.ANDROIDX_CORE_TESTING)
+}
diff --git a/libs/ngc/consumer-rules.pro b/libs/ngc/consumer-rules.pro
new file mode 100644
index 0000000000..0157eec70c
--- /dev/null
+++ b/libs/ngc/consumer-rules.pro
@@ -0,0 +1 @@
+# NGC module consumer ProGuard rules
diff --git a/libs/ngc/proguard-rules.pro b/libs/ngc/proguard-rules.pro
new file mode 100644
index 0000000000..c68bbb23e9
--- /dev/null
+++ b/libs/ngc/proguard-rules.pro
@@ -0,0 +1,164 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/{user}/AndroidSDK/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+-dontoptimize
+-verbose
+
+-dontpreverify
+-repackageclasses ''
+-allowaccessmodification
+-optimizations !code/simplification/arithmetic
+-dontskipnonpubliclibraryclasses
+
+-keepattributes *Annotation*,Signature,EnclosingMethod,ElementList,Root,Annotation,InnerClasses
+
+#Android
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class * implements java.io.Serializable
+-keep public class * extends androidx.fragment.app.Fragment
+-keep public class * extends androidx.fragment.app.ListFragment
+-keep public class * extends android.os.AsyncTask
+
+-keep public class * extends android.view.View {
+ public (android.content.Context);
+ public (android.content.Context, android.util.AttributeSet);
+ public (android.content.Context, android.util.AttributeSet, int);
+ public void set*(...);
+}
+
+-keepclasseswithmembers class * {
+ public (android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+ public (android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * extends android.content.Context {
+ public void *(android.view.View);
+ public void *(android.view.MenuItem);
+}
+
+-keepclassmembers class * implements android.os.Parcelable {
+ static ** CREATOR;
+}
+
+-keepclassmembers class **.R$* {
+ public static ;
+}
+
+-keepclassmembers class * {
+ @android.webkit.JavascriptInterface ;
+}
+
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keepclassmembers class * implements java.io.Serializable {
+ static final long serialVersionUID;
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
+ private void writeObject(java.io.ObjectOutputStream);
+ private void readObject(java.io.ObjectInputStream);
+ java.lang.Object writeReplace();
+ java.lang.Object readResolve();
+}
+
+#Apache
+
+-dontwarn org.apache.lang.**
+-keep class org.apache.http.** { *; }
+-keep class org.apache.james.mime4j.** { *; }
+
+-dontwarn com.amazonaws.auth.policy.conditions.S3ConditionFactory
+-dontwarn org.joda.time.**
+-dontwarn com.fasterxml.jackson.databind.**
+-dontwarn javax.xml.stream.events.**
+-dontwarn org.codehaus.jackson.**
+-dontwarn org.apache.commons.logging.impl.**
+-dontwarn org.apache.http.conn.scheme.**
+-dontwarn org.apache.http.annotation.**
+-dontwarn org.ietf.jgss.**
+-dontwarn org.w3c.dom.bootstrap.**
+
+-keep class android.** { *; }
+-keep interface android.** { *; }
+-keep class org.ietf.** { *; }
+-keep interface org.ietf.** { *; }
+
+-dontwarn javax.xml.stream.events.**
+-dontwarn org.codehaus.jackson.**
+-dontwarn org.apache.commons.logging.impl.**
+-dontwarn org.apache.http.conn.scheme.**
+
+-keep class android.webkit.** { *; }
+
+#Retrofit
+
+-dontwarn retrofit.**
+-dontwarn rx.**
+-dontwarn okio.**
+-dontwarn com.squareup.okhttp.*
+-dontwarn retrofit.appengine.UrlFetchClient
+-keep class retrofit.** { *; }
+-keep class com.google.gson.** { *; }
+-keep class com.google.inject.** { *; }
+-keep class javax.inject.** { *; }
+-keep class retrofit.** { *; }
+-keepclasseswithmembers class * {
+ @retrofit.http.* ;
+}
+
+# Retrofit, OkHttp, Gson
+
+-keep class com.squareup.okhttp.** { *; }
+-keep interface com.squareup.okhttp.** { *; }
+-dontwarn com.squareup.okhttp.**
+-keep class sun.misc.Unsafe { *; }
+-dontwarn java.nio.file.*
+-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
+
+
+
+#RxJava
+
+-keep class com.google.appengine.** { *; }
+
+#SimpleFramework.xml
+-dontwarn org.simpleframework.xml.stream.**
+-keep public class org.simpleframework.** { *; }
+-keep class org.simpleframework.xml.** { *; }
+-keep class org.simpleframework.xml.core.** { *; }
+-keep class org.simpleframework.xml.util.** { *; }
+-keep class javax.xml.stream.** { *; }
+
+-keepclassmembers class * {
+ @org.simpleframework.xml.* *;
+}
+
+#Instructure
+
+-keep public class com.instructure.** { *; }
diff --git a/libs/ngc/src/main/AndroidManifest.xml b/libs/ngc/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..733e24c552
--- /dev/null
+++ b/libs/ngc/src/main/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/NGCActivity.kt b/libs/ngc/src/main/java/com/instructure/ngc/NGCActivity.kt
new file mode 100644
index 0000000000..851057870d
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/NGCActivity.kt
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.ngc
+
+import android.content.Intent
+import android.content.res.Configuration
+import android.os.Bundle
+import androidx.activity.compose.setContent
+import androidx.core.net.toUri
+import androidx.lifecycle.lifecycleScope
+import androidx.navigation.NavDeepLinkRequest
+import androidx.navigation.NavHostController
+import androidx.navigation.NavOptions
+import androidx.navigation.compose.rememberNavController
+import com.instructure.canvasapi2.models.User
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.pandautils.base.BaseCanvasActivity
+import com.instructure.pandautils.models.PushNotification
+import com.instructure.pandautils.receivers.PushExternalReceiver
+import com.instructure.pandautils.utils.ColorKeeper
+import com.instructure.pandautils.utils.Const
+import com.instructure.pandautils.utils.EdgeToEdgeHelper
+import com.instructure.pandautils.utils.ThemePrefs
+import com.instructure.pandautils.utils.Utils
+import com.instructure.pandautils.utils.WebViewAuthenticator
+import com.instructure.ngc.navigation.NGCNavigation
+import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class NGCActivity : BaseCanvasActivity() {
+
+ @Inject
+ lateinit var webViewAuthenticator: WebViewAuthenticator
+
+ private lateinit var navController: NavHostController
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ EdgeToEdgeHelper.enableEdgeToEdge(this)
+ setupTheme()
+
+ setContent {
+ navController = rememberNavController()
+
+ NGCTheme {
+ NGCNavigation(navController)
+ }
+ }
+ }
+
+ private fun setupTheme() {
+ ThemePrefs.reapplyCanvasTheme(this)
+ val nightModeFlags = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
+ ColorKeeper.darkTheme = nightModeFlags == Configuration.UI_MODE_NIGHT_YES
+ }
+
+ override fun onResume() {
+ super.onResume()
+ webViewAuthenticator.authenticateWebViews(lifecycleScope, this)
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ if (!::navController.isInitialized) return
+
+ if (hasLocalNotificationLink(intent.extras) ||
+ hasUnreadPushNotification(intent.extras)
+ ) {
+ handlePushNotification(hasUnreadPushNotification(intent.extras))
+ } else {
+ intent.data?.let { uri ->
+ val request = NavDeepLinkRequest.Builder
+ .fromUri(uri)
+ .build()
+
+ navController.navigate(
+ request,
+ navOptions = NavOptions.Builder().setLaunchSingleTop(true).build()
+ )
+ }
+ }
+ }
+
+ private fun handlePushNotification(hasUnreadNotifications: Boolean) {
+ val intent = intent
+ if (intent != null) {
+ val extras = intent.extras
+ if (extras != null) {
+ if (hasUnreadNotifications) {
+ setPushNotificationAsRead()
+ }
+
+ val htmlUrl = extras.getString(PushNotification.HTML_URL, "").toUri()
+ val request = NavDeepLinkRequest.Builder
+ .fromUri(htmlUrl)
+ .build()
+
+ navController.navigate(
+ request,
+ navOptions = NavOptions.Builder().setLaunchSingleTop(true).build()
+ )
+ }
+ }
+ }
+
+ private fun hasUnreadPushNotification(extras: Bundle?): Boolean {
+ return (extras != null && extras.containsKey(PushExternalReceiver.NEW_PUSH_NOTIFICATION)
+ && extras.getBoolean(PushExternalReceiver.NEW_PUSH_NOTIFICATION, false))
+ }
+
+ private fun setPushNotificationAsRead() {
+ intent.putExtra(PushExternalReceiver.NEW_PUSH_NOTIFICATION, false)
+ PushNotification.remove(intent)
+ }
+
+ private fun hasLocalNotificationLink(extras: Bundle?): Boolean {
+ val flag = extras != null && extras.containsKey(Const.LOCAL_NOTIFICATION)
+ && extras.getBoolean(Const.LOCAL_NOTIFICATION, false)
+ if (flag) {
+ // Clear the flag if we are handling this, so subsequent app opens don't deep link again
+ extras.putBoolean(Const.LOCAL_NOTIFICATION, false)
+ }
+ return flag
+ }
+
+ /**
+ * ONLY USE FOR UI TESTING
+ * Skips the traditional login process by directly setting the domain, token, and user info.
+ */
+ fun loginWithToken(token: String, domain: String, user: User, userAgent: String) {
+ ApiPrefs.accessToken = token
+ ApiPrefs.domain = domain
+ ApiPrefs.user = user
+ ApiPrefs.userAgent = userAgent
+ finish()
+ val intent = Intent(this, NGCActivity::class.java).apply {
+ intent?.extras?.let { putExtras(it) }
+ }
+ startActivity(intent)
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/NGCTheme.kt b/libs/ngc/src/main/java/com/instructure/ngc/NGCTheme.kt
new file mode 100644
index 0000000000..cada1364e2
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/NGCTheme.kt
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc
+
+import android.content.Context
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.foundation.text.selection.LocalTextSelectionColors
+import androidx.compose.foundation.text.selection.TextSelectionColors
+import androidx.compose.material.ripple.RippleAlpha
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.LocalRippleConfiguration
+import androidx.compose.material3.LocalTextStyle
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.RippleConfiguration
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.colorResource
+import com.instructure.ngc.designsystem.DesignSystem
+import com.instructure.ngc.designsystem.LocalDesignSystem
+import com.instructure.ngc.designsystem.NGCTypography
+import com.instructure.pandautils.compose.LocalCourseColor
+import com.instructure.pandautils.R as PandaR
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun NGCTheme(courseColor: Color = LocalCourseColor.current, content: @Composable () -> Unit) {
+ MaterialTheme(
+ colorScheme = MaterialTheme.colorScheme.copy(
+ surfaceContainerLow = colorResource(PandaR.color.backgroundLight),
+ )
+ ) {
+ CompositionLocalProvider(
+ LocalRippleConfiguration provides RippleConfiguration(
+ color = colorResource(id = PandaR.color.backgroundDark),
+ getRippleAlpha(isSystemInDarkTheme())
+ ),
+ LocalTextSelectionColors provides getCustomTextSelectionColors(context = LocalContext.current),
+ LocalTextStyle provides NGCTypography.p1,
+ LocalCourseColor provides courseColor,
+ LocalDesignSystem provides DesignSystem.NextGenCanvas,
+ content = content
+ )
+ }
+}
+
+private fun getRippleAlpha(isSystemInDarkTheme: Boolean): RippleAlpha {
+ return if (isSystemInDarkTheme) {
+ RippleAlpha(
+ pressedAlpha = 0.10f,
+ focusedAlpha = 0.12f,
+ draggedAlpha = 0.08f,
+ hoveredAlpha = 0.04f
+ )
+ } else {
+ RippleAlpha(
+ pressedAlpha = 0.24f,
+ focusedAlpha = 0.24f,
+ draggedAlpha = 0.16f,
+ hoveredAlpha = 0.08f
+ )
+ }
+}
+
+private fun getCustomTextSelectionColors(context: Context): TextSelectionColors {
+ val color = Color(context.getColor(PandaR.color.textDarkest))
+ return TextSelectionColors(
+ handleColor = color,
+ backgroundColor = color.copy(alpha = 0.4f)
+ )
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/dashboard/NGCDashboardScreen.kt b/libs/ngc/src/main/java/com/instructure/ngc/dashboard/NGCDashboardScreen.kt
new file mode 100644
index 0000000000..3c45225cdf
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/dashboard/NGCDashboardScreen.kt
@@ -0,0 +1,184 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.instructure.ngc.dashboard
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.statusBars
+import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.material.ExperimentalMaterialApi
+import androidx.compose.material.pullrefresh.rememberPullRefreshState
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Snackbar
+import androidx.compose.material3.SnackbarDuration
+import androidx.compose.material3.SnackbarHost
+import androidx.compose.material3.SnackbarHostState
+import androidx.compose.material3.SnackbarResult
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.hilt.navigation.compose.hiltViewModel
+import androidx.navigation.NavHostController
+import com.instructure.ngc.R
+import com.instructure.ngc.designsystem.DSIconButton
+import com.instructure.ngc.designsystem.DSIconButtonColor
+import com.instructure.ngc.designsystem.currentTypography
+import com.instructure.ngc.navigation.NGCComposeNavigationHandler
+import com.instructure.pandautils.compose.SnackbarMessage
+import com.instructure.pandautils.compose.composables.rememberWithRequireNetwork
+import com.instructure.pandautils.features.dashboard.DashboardNavigationEvent
+import com.instructure.pandautils.features.dashboard.DashboardNavigationHandler
+import com.instructure.pandautils.features.dashboard.compose.DashboardBody
+import com.instructure.pandautils.features.dashboard.compose.DashboardUiState
+import com.instructure.pandautils.features.dashboard.compose.DashboardViewModel
+import com.instructure.pandautils.utils.ThemePrefs
+import kotlinx.coroutines.flow.SharedFlow
+import com.instructure.pandautils.R as PandaR
+
+@Composable
+fun NGCDashboardScreen(navController: NavHostController) {
+ val viewModel: DashboardViewModel = hiltViewModel()
+ val uiState by viewModel.uiState.collectAsState()
+
+ val navigationHandler = remember { NGCComposeNavigationHandler(navController) }
+
+ NGCDashboardScreenContent(
+ uiState = uiState,
+ refreshSignal = viewModel.refreshSignal,
+ snackbarMessageFlow = viewModel.snackbarMessage,
+ onShowSnackbar = viewModel::showSnackbar,
+ navigationHandler = navigationHandler
+ )
+}
+
+@OptIn(ExperimentalMaterialApi::class)
+@Composable
+fun NGCDashboardScreenContent(
+ uiState: DashboardUiState,
+ refreshSignal: SharedFlow,
+ snackbarMessageFlow: SharedFlow,
+ onShowSnackbar: (String, String?, (() -> Unit)?) -> Unit,
+ navigationHandler: DashboardNavigationHandler
+) {
+ val pullRefreshState = rememberPullRefreshState(
+ refreshing = uiState.refreshing,
+ onRefresh = uiState.onRefresh
+ )
+ val snackbarHostState = remember { SnackbarHostState() }
+
+ LaunchedEffect(Unit) {
+ snackbarMessageFlow.collect { snackbarMessage ->
+ val actionLabel =
+ if (snackbarMessage.action != null) snackbarMessage.actionLabel else null
+ val result = snackbarHostState.showSnackbar(
+ message = snackbarMessage.message,
+ actionLabel = actionLabel,
+ duration = SnackbarDuration.Short
+ )
+ if (result == SnackbarResult.ActionPerformed) {
+ snackbarMessage.action?.invoke()
+ }
+ }
+ }
+
+ val backgroundColor = colorResource(PandaR.color.backgroundLight)
+
+ Scaffold(
+ modifier = Modifier.background(backgroundColor),
+ containerColor = backgroundColor,
+ contentWindowInsets = WindowInsets(0),
+ snackbarHost = {
+ SnackbarHost(hostState = snackbarHostState) { data ->
+ Snackbar(
+ snackbarData = data,
+ actionColor = Color(ThemePrefs.textButtonColor)
+ )
+ }
+ }
+ ) { paddingValues ->
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(backgroundColor)
+ .padding(paddingValues)
+ .windowInsetsPadding(WindowInsets.statusBars)
+ ) {
+ DashboardBody(
+ paddingValues = PaddingValues(),
+ pullRefreshState = pullRefreshState,
+ uiState = uiState,
+ refreshSignal = refreshSignal,
+ onShowSnackbar = onShowSnackbar,
+ navigationHandler = navigationHandler,
+ headerContent = {
+ NGCDashboardTopBar(
+ navigationHandler = navigationHandler,
+ modifier = Modifier
+ .background(backgroundColor)
+ .height(56.dp)
+ )
+ }
+ )
+ }
+ }
+}
+
+@Composable
+private fun NGCDashboardTopBar(navigationHandler: DashboardNavigationHandler, modifier: Modifier = Modifier) {
+ val manageOfflineContentClick = rememberWithRequireNetwork {
+ navigationHandler.handleDashboardNavigation(DashboardNavigationEvent.Dashboard.NavigateToManageOfflineContent)
+ }
+
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = modifier
+ .padding(horizontal = 16.dp)
+ ) {
+ Text(text = stringResource(R.string.ngc_dashboardTitle), style = currentTypography.h2)
+ Spacer(modifier = Modifier.weight(1f))
+ DSIconButton(
+ iconRes = R.drawable.cloud_download,
+ contentDescription = stringResource(R.string.a11y_dashboardManageOfflineContentDescription),
+ onClick = manageOfflineContentClick,
+ color = DSIconButtonColor.Inverse,
+ elevation = 4.dp,
+ modifier = Modifier.padding(end = 8.dp)
+ )
+ DSIconButton(
+ iconRes = R.drawable.edit,
+ contentDescription = stringResource(R.string.a11y_dashboardCustomizeDashboardContentDescription),
+ onClick = { navigationHandler.handleDashboardNavigation(DashboardNavigationEvent.Dashboard.NavigateToCustomizeDashboard) },
+ elevation = 4.dp,
+ color = DSIconButtonColor.Inverse,
+ )
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DSIconButton.kt b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DSIconButton.kt
new file mode 100644
index 0000000000..95877bcbac
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DSIconButton.kt
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.designsystem
+
+import androidx.annotation.DrawableRes
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.Dp
+
+/**
+ * Design system agnostic IconButton size.
+ * Currently only supports NGC, with placeholder for future Legacy Canvas support.
+ */
+sealed class DSIconButtonSize {
+ abstract val ngc: NGCIconButtonSize
+
+ data object Small : DSIconButtonSize() {
+ override val ngc = NGCIconButtonSize.SMALL
+ }
+
+ data object Normal : DSIconButtonSize() {
+ override val ngc = NGCIconButtonSize.NORMAL
+ }
+}
+
+/**
+ * Design system agnostic IconButton color.
+ * Currently only supports NGC, with placeholder for future Legacy Canvas support.
+ */
+sealed class DSIconButtonColor {
+ abstract val ngc: NGCIconButtonColor
+
+ data object Black : DSIconButtonColor() {
+ override val ngc = NGCIconButtonColor.Black
+ }
+
+ data object Inverse : DSIconButtonColor() {
+ override val ngc = NGCIconButtonColor.Inverse
+ }
+}
+
+/**
+ * Design System agnostic IconButton.
+ * Currently only supports NGC, with placeholder for future Legacy Canvas support.
+ */
+@Composable
+fun DSIconButton(
+ @DrawableRes iconRes: Int,
+ modifier: Modifier = Modifier,
+ size: DSIconButtonSize = DSIconButtonSize.Normal,
+ color: DSIconButtonColor = DSIconButtonColor.Black,
+ elevation: Dp? = null,
+ enabled: Boolean = true,
+ contentDescription: String? = null,
+ onClick: () -> Unit = {},
+ badge: @Composable (() -> Unit)? = null
+) {
+ when (LocalDesignSystem.current) {
+ DesignSystem.NextGenCanvas -> {
+ NGCIconButton(
+ iconRes = iconRes,
+ modifier = modifier,
+ size = size.ngc,
+ color = color.ngc,
+ elevation = elevation,
+ enabled = enabled,
+ contentDescription = contentDescription,
+ onClick = onClick,
+ badge = badge
+ )
+ }
+ DesignSystem.LegacyCanvas -> {
+ // TODO: Implement LegacyCanvas IconButton when needed
+ NGCIconButton(
+ iconRes = iconRes,
+ modifier = modifier,
+ size = size.ngc,
+ color = color.ngc,
+ elevation = elevation,
+ enabled = enabled,
+ contentDescription = contentDescription,
+ onClick = onClick,
+ badge = badge
+ )
+ }
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DSTypography.kt b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DSTypography.kt
new file mode 100644
index 0000000000..7f25de9a6d
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DSTypography.kt
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.designsystem
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.ui.text.TextStyle
+
+/**
+ * Design system agnostic typography interface.
+ * Implementations provide concrete TextStyles for each typography token.
+ */
+@Stable
+interface DSTypography {
+ // Headings
+ val h1: TextStyle
+ val h2: TextStyle
+ val h3: TextStyle
+ val h4: TextStyle
+
+ // Subheadings
+ val sh1: TextStyle
+ val sh2: TextStyle
+ val sh3: TextStyle
+ val sh4: TextStyle
+
+ // Paragraphs
+ val p1: TextStyle
+ val p2: TextStyle
+ val p3: TextStyle
+
+ // Labels
+ val tag: TextStyle
+ val labelLargeBold: TextStyle
+ val labelMediumBold: TextStyle
+ val labelSmallBold: TextStyle
+ val labelSmall: TextStyle
+
+ // Button text
+ val buttonTextLarge: TextStyle
+ val buttonTextMedium: TextStyle
+}
+
+/**
+ * Next Gen Canvas design system typography implementation.
+ * Uses standalone [NGCTypography] values.
+ */
+@Stable
+object NGCDSTypography : DSTypography {
+ override val h1: TextStyle get() = NGCTypography.h1
+ override val h2: TextStyle get() = NGCTypography.h2
+ override val h3: TextStyle get() = NGCTypography.h3
+ override val h4: TextStyle get() = NGCTypography.h4
+
+ override val sh1: TextStyle get() = NGCTypography.sh1
+ override val sh2: TextStyle get() = NGCTypography.sh2
+ override val sh3: TextStyle get() = NGCTypography.sh3
+ override val sh4: TextStyle get() = NGCTypography.sh4
+
+ override val p1: TextStyle get() = NGCTypography.p1
+ override val p2: TextStyle get() = NGCTypography.p2
+ override val p3: TextStyle get() = NGCTypography.p3
+
+ override val tag: TextStyle get() = NGCTypography.tag
+ override val labelLargeBold: TextStyle get() = NGCTypography.labelLargeBold
+ override val labelMediumBold: TextStyle get() = NGCTypography.labelMediumBold
+ override val labelSmallBold: TextStyle get() = NGCTypography.labelSmallBold
+ override val labelSmall: TextStyle get() = NGCTypography.labelSmall
+
+ override val buttonTextLarge: TextStyle get() = NGCTypography.buttonTextLarge
+ override val buttonTextMedium: TextStyle get() = NGCTypography.buttonTextMedium
+}
+
+/**
+ * Returns the appropriate [DSTypography] based on the current [LocalDesignSystem].
+ * Currently only supports NGC, with placeholder for future Legacy Canvas support.
+ */
+val currentTypography: DSTypography
+ @Composable
+ get() = when (LocalDesignSystem.current) {
+ DesignSystem.NextGenCanvas -> NGCDSTypography
+ DesignSystem.LegacyCanvas -> NGCDSTypography // TODO: Implement LegacyCanvas typography when needed
+ }
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DesignSystem.kt b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DesignSystem.kt
new file mode 100644
index 0000000000..9f7239559e
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/DesignSystem.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.designsystem
+
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.staticCompositionLocalOf
+
+/**
+ * Represents the design system to use for rendering UI components.
+ * This abstraction allows switching between NGC and Legacy Canvas design systems.
+ */
+@Stable
+enum class DesignSystem {
+ NextGenCanvas,
+ LegacyCanvas // Placeholder for future Legacy Canvas support
+}
+
+/**
+ * CompositionLocal for providing the current design system throughout the composition tree.
+ */
+val LocalDesignSystem = staticCompositionLocalOf { DesignSystem.NextGenCanvas }
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCColors.kt b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCColors.kt
new file mode 100644
index 0000000000..9cd41f655c
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCColors.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.designsystem
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+
+/**
+ * Next Gen Canvas design system colors.
+ * Standalone implementation - does not delegate to Horizon.
+ */
+object NGCColors {
+
+ object Surface {
+ @Composable
+ fun pageSecondary(): Color = if (isSystemInDarkTheme()) Color(0xFF191C1F) else Color(0xFFFFFFFF)
+
+ @Composable
+ fun inversePrimary(): Color = if (isSystemInDarkTheme()) Color(0xFFFFFFFF) else Color(0xFF273540)
+ }
+
+ object Icon {
+ @Composable
+ fun default(): Color = if (isSystemInDarkTheme()) Color(0xFFFFFFFF) else Color(0xFF273540)
+
+ @Composable
+ fun surfaceColored(): Color = if (isSystemInDarkTheme()) Color(0xFF273540) else Color(0xFFFFFFFF)
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCIconButton.kt b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCIconButton.kt
new file mode 100644
index 0000000000..35f65f8d60
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCIconButton.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.designsystem
+
+import androidx.annotation.DrawableRes
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Icon
+import androidx.compose.material3.ripple
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.alpha
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.draw.shadow
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+private val NGCButtonShape = RoundedCornerShape(12.dp)
+
+enum class NGCIconButtonSize(val size: Dp, val badgeOffset: Dp) {
+ SMALL(32.dp, 8.dp),
+ NORMAL(44.dp, 5.dp)
+}
+
+sealed class NGCIconButtonColor(
+ open val backgroundColor: @Composable () -> Color,
+ open val iconColor: @Composable () -> Color,
+ open val borderColor: @Composable () -> Color = { Color.Transparent }
+) {
+ data object Black : NGCIconButtonColor(
+ backgroundColor = { NGCColors.Surface.inversePrimary() },
+ iconColor = { NGCColors.Icon.surfaceColored() }
+ )
+
+ data object Inverse : NGCIconButtonColor(
+ backgroundColor = { NGCColors.Surface.pageSecondary() },
+ iconColor = { NGCColors.Icon.default() }
+ )
+}
+
+@Composable
+fun NGCIconButton(
+ @DrawableRes iconRes: Int,
+ modifier: Modifier = Modifier,
+ size: NGCIconButtonSize = NGCIconButtonSize.NORMAL,
+ color: NGCIconButtonColor = NGCIconButtonColor.Black,
+ elevation: Dp? = null,
+ enabled: Boolean = true,
+ contentDescription: String? = null,
+ onClick: () -> Unit = {},
+ badge: @Composable (() -> Unit)? = null
+) {
+ val backgroundColor = color.backgroundColor()
+ val iconColor = color.iconColor()
+ val borderColor = color.borderColor()
+ val interactionSource = remember { MutableInteractionSource() }
+
+ Box(contentAlignment = Alignment.TopEnd, modifier = modifier) {
+ Box(
+ contentAlignment = Alignment.Center,
+ modifier = Modifier
+ .then(if (!enabled) Modifier.alpha(0.5f) else Modifier)
+ .then(
+ if (elevation != null) {
+ Modifier.shadow(elevation = elevation, shape = NGCButtonShape)
+ } else Modifier
+ )
+ .size(size.size)
+ .clip(NGCButtonShape)
+ .background(color = backgroundColor, shape = NGCButtonShape)
+ .border(1.dp, borderColor, shape = NGCButtonShape)
+ .clickable(
+ interactionSource = interactionSource,
+ indication = ripple(bounded = true),
+ enabled = enabled,
+ role = Role.Button,
+ onClick = onClick
+ )
+ ) {
+ Icon(
+ painter = painterResource(id = iconRes),
+ contentDescription = contentDescription,
+ modifier = Modifier.size(24.dp),
+ tint = iconColor
+ )
+ }
+ badge?.let {
+ Box(modifier = Modifier.offset(x = size.badgeOffset, y = (-size.badgeOffset))) {
+ it()
+ }
+ }
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCTypography.kt b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCTypography.kt
new file mode 100644
index 0000000000..b1cada3d13
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/designsystem/NGCTypography.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.designsystem
+
+import androidx.compose.runtime.Stable
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+
+/**
+ * Next Gen Canvas design system typography.
+ * Standalone implementation - does not delegate to Horizon.
+ */
+@Stable
+object NGCTypography {
+ // Headings
+ val h1 = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 34.sp,
+ lineHeight = 40.sp
+ )
+ val h2 = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 24.sp,
+ lineHeight = 32.sp
+ )
+ val h3 = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 20.sp,
+ lineHeight = 28.sp
+ )
+ val h4 = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 18.sp,
+ lineHeight = 24.sp
+ )
+
+ // Subheadings
+ val sh1 = TextStyle(
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 24.sp,
+ lineHeight = 32.sp
+ )
+ val sh2 = TextStyle(
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 20.sp,
+ lineHeight = 28.sp
+ )
+ val sh3 = TextStyle(
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 18.sp,
+ lineHeight = 24.sp
+ )
+ val sh4 = TextStyle(
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 16.sp,
+ lineHeight = 22.sp
+ )
+
+ // Paragraphs
+ val p1 = TextStyle(
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp,
+ lineHeight = 24.sp
+ )
+ val p2 = TextStyle(
+ fontWeight = FontWeight.Normal,
+ fontSize = 14.sp,
+ lineHeight = 20.sp
+ )
+ val p3 = TextStyle(
+ fontWeight = FontWeight.Normal,
+ fontSize = 12.sp,
+ lineHeight = 16.sp
+ )
+
+ // Labels
+ val tag = TextStyle(
+ fontWeight = FontWeight.Medium,
+ fontSize = 10.sp,
+ lineHeight = 14.sp
+ )
+ val labelLargeBold = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 14.sp,
+ lineHeight = 20.sp
+ )
+ val labelMediumBold = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 12.sp,
+ lineHeight = 16.sp
+ )
+ val labelSmallBold = TextStyle(
+ fontWeight = FontWeight.Bold,
+ fontSize = 10.sp,
+ lineHeight = 14.sp
+ )
+ val labelSmall = TextStyle(
+ fontWeight = FontWeight.Normal,
+ fontSize = 10.sp,
+ lineHeight = 14.sp
+ )
+
+ // Button text
+ val buttonTextLarge = TextStyle(
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 16.sp,
+ lineHeight = 24.sp
+ )
+ val buttonTextMedium = TextStyle(
+ fontWeight = FontWeight.SemiBold,
+ fontSize = 14.sp,
+ lineHeight = 20.sp
+ )
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/navigation/NGCComposeNavigationHandler.kt b/libs/ngc/src/main/java/com/instructure/ngc/navigation/NGCComposeNavigationHandler.kt
new file mode 100644
index 0000000000..50d52fbfad
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/navigation/NGCComposeNavigationHandler.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.navigation
+
+import android.util.Log
+import androidx.navigation.NavController
+import com.instructure.pandautils.features.dashboard.DashboardNavigationEvent
+import com.instructure.pandautils.features.dashboard.DashboardNavigationHandler
+
+/**
+ * Navigation handler for the NGC (New Generation Canvas) Compose-based dashboard.
+ *
+ * This handler uses Jetpack Compose Navigation for navigating between NGC screens.
+ *
+ * As NGC screens are implemented, this handler should be updated to use NavController
+ * navigation to navigate to the actual screens.
+ */
+class NGCComposeNavigationHandler(
+ private val navController: NavController
+) : DashboardNavigationHandler {
+
+ override fun handleCoursesNavigation(event: DashboardNavigationEvent.Courses) {
+ when (event) {
+ is DashboardNavigationEvent.Courses.NavigateToCourse -> {
+ Log.d(TAG, "NavigateToCourse: courseId=${event.course.id}, courseName=${event.course.name}")
+ }
+ is DashboardNavigationEvent.Courses.NavigateToGroup -> {
+ Log.d(TAG, "NavigateToGroup: groupId=${event.group.id}, groupName=${event.group.name}")
+ }
+ is DashboardNavigationEvent.Courses.ManageOfflineContent -> {
+ Log.d(TAG, "ManageOfflineContent: courseId=${event.course.id}")
+ }
+ is DashboardNavigationEvent.Courses.CustomizeCourse -> {
+ Log.d(TAG, "CustomizeCourse: courseId=${event.course.id}")
+ }
+ DashboardNavigationEvent.Courses.NavigateToAllCourses -> {
+ Log.d(TAG, "NavigateToAllCourses")
+ }
+ is DashboardNavigationEvent.Courses.NavigateToAnnouncement -> {
+ Log.d(TAG, "NavigateToAnnouncement: courseId=${event.course.id}, announcementId=${event.announcement.id}")
+ }
+ is DashboardNavigationEvent.Courses.NavigateToAnnouncementList -> {
+ Log.d(TAG, "NavigateToAnnouncementList: courseId=${event.course.id}")
+ }
+ is DashboardNavigationEvent.Courses.NavigateToGroupMessage -> {
+ Log.d(TAG, "NavigateToGroupMessage: groupId=${event.group.id}, groupName=${event.group.name}")
+ }
+ }
+ }
+
+ override fun handleTodoNavigation(event: DashboardNavigationEvent.Todo) {
+ when (event) {
+ is DashboardNavigationEvent.Todo.NavigateToTodo -> {
+ Log.d(TAG, "NavigateToTodo: htmlUrl=${event.htmlUrl}")
+ }
+ is DashboardNavigationEvent.Todo.CreateTodo -> {
+ Log.d(TAG, "CreateTodo: initialDateString=${event.initialDateString}")
+ }
+ }
+ }
+
+ override fun handleForecastNavigation(event: DashboardNavigationEvent.Forecast) {
+ when (event) {
+ is DashboardNavigationEvent.Forecast.NavigateToAssignment -> {
+ Log.d(TAG, "NavigateToAssignment: courseId=${event.courseId}, assignmentId=${event.assignmentId}")
+ }
+ is DashboardNavigationEvent.Forecast.NavigateToPlannerItem -> {
+ Log.d(TAG, "NavigateToPlannerItem: htmlUrl=${event.htmlUrl}")
+ }
+ }
+ }
+
+ override fun handleProgressNavigation(event: DashboardNavigationEvent.Progress) {
+ when (event) {
+ is DashboardNavigationEvent.Progress.OpenProgressDialog -> {
+ Log.d(TAG, "OpenProgressDialog: workerId=${event.workerId}")
+ }
+ is DashboardNavigationEvent.Progress.NavigateToSubmissionDetails -> {
+ Log.d(TAG, "NavigateToSubmissionDetails: courseId=${event.course.id}, assignmentId=${event.assignmentId}, attemptId=${event.attemptId}")
+ }
+ is DashboardNavigationEvent.Progress.NavigateToMyFiles -> {
+ Log.d(TAG, "NavigateToMyFiles: userId=${event.user.id}, folderId=${event.folderId}")
+ }
+ DashboardNavigationEvent.Progress.OpenSyncProgress -> {
+ Log.d(TAG, "OpenSyncProgress")
+ }
+ }
+ }
+
+ override fun handleConferencesNavigation(event: DashboardNavigationEvent.Conferences) {
+ when (event) {
+ is DashboardNavigationEvent.Conferences.LaunchConference -> {
+ Log.d(TAG, "LaunchConference: url=${event.url}, contextId=${event.canvasContext.id}")
+ }
+ }
+ }
+
+ override fun handleDashboardNavigation(event: DashboardNavigationEvent.Dashboard) {
+ when (event) {
+ is DashboardNavigationEvent.Dashboard.NavigateToGlobalAnnouncement -> {
+ Log.d(TAG, "NavigateToGlobalAnnouncement: subject=${event.subject}")
+ }
+ DashboardNavigationEvent.Dashboard.NavigateToManageOfflineContent -> {
+ Log.d(TAG, "NavigateToManageOfflineContent")
+ }
+ DashboardNavigationEvent.Dashboard.NavigateToCustomizeDashboard -> {
+ Log.d(TAG, "NavigateToCustomizeDashboard")
+ }
+ }
+ }
+
+ companion object {
+ private const val TAG = "NgcComposeNavHandler"
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/navigation/NGCNavigation.kt b/libs/ngc/src/main/java/com/instructure/ngc/navigation/NGCNavigation.kt
new file mode 100644
index 0000000000..914ca8705d
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/navigation/NGCNavigation.kt
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.navigation
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Modifier
+import androidx.hilt.navigation.compose.hiltViewModel
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import com.instructure.ngc.dashboard.NGCDashboardScreen
+import com.instructure.ngc.splash.SplashScreen
+import com.instructure.ngc.splash.SplashViewModel
+import kotlinx.serialization.Serializable
+
+@Serializable
+sealed class NGCNavigationRoute(val route: String) {
+ data object Splash : NGCNavigationRoute("splash")
+ data object Dashboard : NGCNavigationRoute("dashboard")
+}
+
+@Composable
+fun NGCNavigation(navController: NavHostController, modifier: Modifier = Modifier) {
+ NavHost(
+ modifier = modifier,
+ navController = navController,
+ startDestination = NGCNavigationRoute.Splash.route
+ ) {
+ composable(NGCNavigationRoute.Splash.route) {
+ val viewModel: SplashViewModel = hiltViewModel()
+ val uiState by viewModel.uiState.collectAsState()
+
+ SplashScreen(
+ uiState = uiState,
+ onThemeApplied = viewModel::onThemeApplied,
+ onInitialDataLoaded = {
+ navController.navigate(NGCNavigationRoute.Dashboard.route) {
+ popUpTo(NGCNavigationRoute.Splash.route) {
+ inclusive = true
+ }
+ }
+ }
+ )
+ }
+
+ composable(NGCNavigationRoute.Dashboard.route) {
+ NGCDashboardScreen(navController)
+ }
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashScreen.kt b/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashScreen.kt
new file mode 100644
index 0000000000..7d4bb34675
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashScreen.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.splash
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import com.instructure.pandautils.utils.ThemePrefs
+import com.instructure.pandautils.views.CanvasLoadingView
+import com.instructure.pandautils.R as PandaR
+
+@Composable
+fun SplashScreen(
+ uiState: SplashUiState,
+ onThemeApplied: () -> Unit,
+ onInitialDataLoaded: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ val context = LocalContext.current
+
+ LaunchedEffect(uiState.themeToApply) {
+ uiState.themeToApply?.let { theme ->
+ ThemePrefs.applyCanvasTheme(theme, context)
+ onThemeApplied()
+ }
+ }
+
+ LaunchedEffect(uiState.initialDataLoaded) {
+ if (uiState.initialDataLoaded) {
+ onInitialDataLoaded()
+ }
+ }
+
+ Box(
+ contentAlignment = Alignment.Center,
+ modifier = modifier
+ .fillMaxSize()
+ .background(color = colorResource(id = PandaR.color.backgroundLightest))
+ ) {
+ AndroidView(
+ factory = {
+ CanvasLoadingView(it).apply {
+ setOverrideColor(it.getColor(PandaR.color.login_studentAppTheme))
+ }
+ },
+ modifier = Modifier.size(120.dp)
+ )
+ }
+}
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashUiState.kt b/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashUiState.kt
new file mode 100644
index 0000000000..96fc3b5bc2
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashUiState.kt
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.splash
+
+import com.instructure.canvasapi2.models.CanvasTheme
+
+data class SplashUiState(
+ val loading: Boolean = true,
+ val error: Boolean = false,
+ val initialDataLoaded: Boolean = false,
+ val themeToApply: CanvasTheme? = null
+)
diff --git a/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashViewModel.kt b/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashViewModel.kt
new file mode 100644
index 0000000000..43c32f8cf6
--- /dev/null
+++ b/libs/ngc/src/main/java/com/instructure/ngc/splash/SplashViewModel.kt
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.splash
+
+import android.content.Context
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.instructure.canvasapi2.models.User
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.weave.catch
+import com.instructure.canvasapi2.utils.weave.tryLaunch
+import com.instructure.pandautils.domain.usecase.splash.LoadSplashDataUseCase
+import com.instructure.pandautils.domain.usecase.splash.SetupPendoTrackingUseCase
+import com.instructure.pandautils.utils.ColorKeeper
+import com.instructure.pandautils.utils.LocaleUtils
+import dagger.hilt.android.lifecycle.HiltViewModel
+import dagger.hilt.android.qualifiers.ApplicationContext
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+import javax.inject.Inject
+
+@HiltViewModel
+class SplashViewModel @Inject constructor(
+ @ApplicationContext private val context: Context,
+ private val loadSplashDataUseCase: LoadSplashDataUseCase,
+ private val setupPendoTrackingUseCase: SetupPendoTrackingUseCase,
+ private val apiPrefs: ApiPrefs,
+ private val colorKeeper: ColorKeeper
+) : ViewModel() {
+
+ private val _uiState = MutableStateFlow(SplashUiState())
+ val uiState: StateFlow = _uiState.asStateFlow()
+
+ init {
+ loadInitialData()
+ }
+
+ private fun loadInitialData() {
+ viewModelScope.tryLaunch {
+ val splashData = loadSplashDataUseCase(LoadSplashDataUseCase.Params())
+
+ splashData.user?.let { saveUserInfo(it) }
+ splashData.colors?.let { colorKeeper.addToCache(it) }
+
+ if (splashData.theme != null) {
+ _uiState.update { it.copy(themeToApply = splashData.theme) }
+ }
+
+ if (apiPrefs.canBecomeUser == null) {
+ if (apiPrefs.domain.startsWith("siteadmin", true)) {
+ apiPrefs.canBecomeUser = true
+ } else {
+ apiPrefs.canBecomeUser = splashData.canBecomeUser ?: false
+ }
+ }
+
+ setupPendoTrackingUseCase(Unit)
+
+ // TODO: Fetch terms of service for pairing code capability
+ // TODO: Fetch user settings (e.g., hideCourseColorOverlay)
+ // TODO: Fetch launch definitions
+ // TODO: Fetch unread message count
+ // TODO: Fetch unread notification count
+ // TODO: Fetch to-do count
+
+ _uiState.update { it.copy(loading = false, initialDataLoaded = true) }
+ } catch {
+ _uiState.update { it.copy(loading = false, error = true, initialDataLoaded = true) }
+ }
+ }
+
+ fun onThemeApplied() {
+ _uiState.update { it.copy(themeToApply = null) }
+ }
+
+ private fun saveUserInfo(user: User) {
+ val oldLocale = apiPrefs.effectiveLocale
+ apiPrefs.user = user
+ if (apiPrefs.effectiveLocale != oldLocale) {
+ LocaleUtils.restartApp(context)
+ }
+ }
+}
diff --git a/libs/ngc/src/main/res/drawable/cloud_download.xml b/libs/ngc/src/main/res/drawable/cloud_download.xml
new file mode 100644
index 0000000000..1e4f4922cb
--- /dev/null
+++ b/libs/ngc/src/main/res/drawable/cloud_download.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/libs/ngc/src/main/res/drawable/edit.xml b/libs/ngc/src/main/res/drawable/edit.xml
new file mode 100644
index 0000000000..2367e0bfb4
--- /dev/null
+++ b/libs/ngc/src/main/res/drawable/edit.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/libs/ngc/src/main/res/values/strings.xml b/libs/ngc/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..11f92cd0c6
--- /dev/null
+++ b/libs/ngc/src/main/res/values/strings.xml
@@ -0,0 +1,25 @@
+
+
+
+ NGC
+ Dashboard
+
+
+ Manage offline content
+ Customize dashboard
+
diff --git a/libs/ngc/src/main/res/values/themes.xml b/libs/ngc/src/main/res/values/themes.xml
new file mode 100644
index 0000000000..a2a40b4c63
--- /dev/null
+++ b/libs/ngc/src/main/res/values/themes.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/libs/ngc/src/test/java/com/instructure/ngc/splash/SplashViewModelTest.kt b/libs/ngc/src/test/java/com/instructure/ngc/splash/SplashViewModelTest.kt
new file mode 100644
index 0000000000..fc1fc29d7e
--- /dev/null
+++ b/libs/ngc/src/test/java/com/instructure/ngc/splash/SplashViewModelTest.kt
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.instructure.ngc.splash
+
+import android.content.Context
+import android.content.SharedPreferences
+import com.instructure.canvasapi2.models.CanvasColor
+import com.instructure.canvasapi2.models.CanvasTheme
+import com.instructure.canvasapi2.models.User
+import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ContextKeeper
+import com.instructure.pandautils.domain.usecase.splash.LoadSplashDataUseCase
+import com.instructure.pandautils.domain.usecase.splash.SetupPendoTrackingUseCase
+import com.instructure.pandautils.domain.usecase.splash.SplashData
+import com.instructure.pandautils.utils.ColorKeeper
+import io.mockk.coEvery
+import io.mockk.coVerify
+import io.mockk.every
+import io.mockk.mockk
+import io.mockk.verify
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.resetMain
+import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.test.setMain
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+
+@OptIn(ExperimentalCoroutinesApi::class)
+class SplashViewModelTest {
+
+ private val context: Context = mockk(relaxed = true)
+ private val loadSplashDataUseCase: LoadSplashDataUseCase = mockk(relaxed = true)
+ private val setupPendoTrackingUseCase: SetupPendoTrackingUseCase = mockk(relaxed = true)
+ private val apiPrefs: ApiPrefs = mockk(relaxed = true)
+ private val colorKeeper: ColorKeeper = mockk(relaxed = true)
+ private val testDispatcher = UnconfinedTestDispatcher()
+
+ @Before
+ fun setup() {
+ Dispatchers.setMain(testDispatcher)
+
+ val sharedPrefs: SharedPreferences = mockk(relaxed = true)
+ every { context.getSharedPreferences(any(), any()) } returns sharedPrefs
+ ContextKeeper.appContext = context
+ }
+
+ @After
+ fun tearDown() {
+ Dispatchers.resetMain()
+ }
+
+ @Test
+ fun `Initial state shows loading`() = runTest {
+ coEvery { loadSplashDataUseCase(any()) } coAnswers {
+ // Simulate delay to capture initial state
+ kotlinx.coroutines.delay(100)
+ SplashData(null, null, null, null)
+ }
+
+ val viewModel = getViewModel()
+
+ // Initial state before data loads
+ assertTrue(viewModel.uiState.value.loading)
+ assertFalse(viewModel.uiState.value.error)
+ assertFalse(viewModel.uiState.value.initialDataLoaded)
+ }
+
+ @Test
+ fun `Successful data load updates UI state`() = runTest {
+ val user = User(id = 123L, name = "Test User")
+ val colors = CanvasColor(mapOf("course_1" to "#FF0000"))
+ val theme = createCanvasTheme()
+ val splashData = SplashData(user, colors, theme, true)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.effectiveLocale } returns "en"
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ val viewModel = getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ assertFalse(viewModel.uiState.value.loading)
+ assertFalse(viewModel.uiState.value.error)
+ assertTrue(viewModel.uiState.value.initialDataLoaded)
+ assertEquals(theme, viewModel.uiState.value.themeToApply)
+ }
+
+ @Test
+ fun `User info is saved when user is present in splash data`() = runTest {
+ val user = User(id = 123L, name = "Test User")
+ val splashData = SplashData(user, null, null, null)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.effectiveLocale } returns "en"
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ verify { apiPrefs.user = user }
+ }
+
+ @Test
+ fun `Colors are added to cache when present in splash data`() = runTest {
+ val colors = CanvasColor(mapOf("course_1" to "#FF0000"))
+ val splashData = SplashData(null, colors, null, null)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ verify { colorKeeper.addToCache(colors) }
+ }
+
+ @Test
+ fun `canBecomeUser is set from splash data when null in apiPrefs`() = runTest {
+ val splashData = SplashData(null, null, null, true)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ verify { apiPrefs.canBecomeUser = true }
+ }
+
+ @Test
+ fun `canBecomeUser is true for siteadmin domain`() = runTest {
+ val splashData = SplashData(null, null, null, false)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "siteadmin.instructure.com"
+
+ getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ verify { apiPrefs.canBecomeUser = true }
+ }
+
+ @Test
+ fun `canBecomeUser is not updated when already set in apiPrefs`() = runTest {
+ val splashData = SplashData(null, null, null, true)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns false
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ verify(exactly = 0) { apiPrefs.canBecomeUser = any() }
+ }
+
+ @Test
+ fun `Pendo tracking is set up after data load`() = runTest {
+ val splashData = SplashData(null, null, null, null)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ coVerify { setupPendoTrackingUseCase(Unit) }
+ }
+
+ @Test
+ fun `Error state is set when data load fails`() = runTest {
+ coEvery { loadSplashDataUseCase(any()) } throws RuntimeException("Network error")
+
+ val viewModel = getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ assertFalse(viewModel.uiState.value.loading)
+ assertTrue(viewModel.uiState.value.error)
+ assertTrue(viewModel.uiState.value.initialDataLoaded)
+ }
+
+ @Test
+ fun `onThemeApplied clears themeToApply`() = runTest {
+ val theme = createCanvasTheme()
+ val splashData = SplashData(null, null, theme, null)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ val viewModel = getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+ assertEquals(theme, viewModel.uiState.value.themeToApply)
+
+ viewModel.onThemeApplied()
+
+ assertNull(viewModel.uiState.value.themeToApply)
+ }
+
+ @Test
+ fun `Theme is not set in UI state when null in splash data`() = runTest {
+ val splashData = SplashData(null, null, null, null)
+
+ coEvery { loadSplashDataUseCase(any()) } returns splashData
+ every { apiPrefs.canBecomeUser } returns null
+ every { apiPrefs.domain } returns "test.instructure.com"
+
+ val viewModel = getViewModel()
+ testDispatcher.scheduler.advanceUntilIdle()
+
+ assertNull(viewModel.uiState.value.themeToApply)
+ }
+
+ private fun getViewModel() = SplashViewModel(
+ context,
+ loadSplashDataUseCase,
+ setupPendoTrackingUseCase,
+ apiPrefs,
+ colorKeeper
+ )
+
+ private fun createCanvasTheme(
+ brand: String = "test_brand",
+ fontColorDark: String = "#000000",
+ button: String = "#FF0000",
+ buttonText: String = "#FFFFFF",
+ primary: String = "#0000FF",
+ primaryText: String = "#FFFFFF",
+ accent: String = "#00FF00",
+ logoUrl: String = "https://example.com/logo.png",
+ mobileLogoBackground: String = "#FFFFFF"
+ ) = CanvasTheme(
+ brand = brand,
+ fontColorDark = fontColorDark,
+ button = button,
+ buttonText = buttonText,
+ primary = primary,
+ primaryText = primaryText,
+ accent = accent,
+ logoUrl = logoUrl,
+ mobileLogoBackground = mobileLogoBackground
+ )
+}
diff --git a/libs/pandares/src/main/res/values-ar/strings.xml b/libs/pandares/src/main/res/values-ar/strings.xml
index 93489d2f94..069da27eae 100644
--- a/libs/pandares/src/main/res/values-ar/strings.xml
+++ b/libs/pandares/src/main/res/values-ar/strings.xml
@@ -443,6 +443,8 @@
يتعذر تنفيذ هذا الإجراء. يرجى التحقق من الاتصال وإعادة المحاولة.
تمت أرشفة المحادثة
تم إلغاء أرشفة المحادثة
+ تم تمييز المحادثة كمقروءة
+ تم تمييز المحادثة كغير مقروءة
تم حذف الرسالة
تعذر حذف الرسالة
تم حذف المحادثة
diff --git a/libs/pandares/src/main/res/values-b+da+DK+instk12/strings.xml b/libs/pandares/src/main/res/values-b+da+DK+instk12/strings.xml
index ce8f831c8e..78a5c411b4 100644
--- a/libs/pandares/src/main/res/values-b+da+DK+instk12/strings.xml
+++ b/libs/pandares/src/main/res/values-b+da+DK+instk12/strings.xml
@@ -412,6 +412,8 @@
Det er ikke muligt at udføre denne handling. Kontrollér forbindelsen, og prøv igen.
Diskussion arkiveret
Diskussion fjernet fra arkiv
+ Samtale markeret som læst
+ Samtale markeret som ulæst
Besked slettet
Beskeden kunne ikke slettes
Samtalen blev slettet
diff --git a/libs/pandares/src/main/res/values-b+en+AU+unimelb/strings.xml b/libs/pandares/src/main/res/values-b+en+AU+unimelb/strings.xml
index 3b8a38c2ba..ae08b28cde 100644
--- a/libs/pandares/src/main/res/values-b+en+AU+unimelb/strings.xml
+++ b/libs/pandares/src/main/res/values-b+en+AU+unimelb/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandares/src/main/res/values-b+en+GB+instukhe/strings.xml b/libs/pandares/src/main/res/values-b+en+GB+instukhe/strings.xml
index 2c2f706310..05f50d53f0 100644
--- a/libs/pandares/src/main/res/values-b+en+GB+instukhe/strings.xml
+++ b/libs/pandares/src/main/res/values-b+en+GB+instukhe/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandares/src/main/res/values-b+nb+NO+instk12/strings.xml b/libs/pandares/src/main/res/values-b+nb+NO+instk12/strings.xml
index 792058151b..f0cc2f83e4 100644
--- a/libs/pandares/src/main/res/values-b+nb+NO+instk12/strings.xml
+++ b/libs/pandares/src/main/res/values-b+nb+NO+instk12/strings.xml
@@ -412,6 +412,8 @@
Kan ikke utføre denne handlingen. Kontroller tilkoblingen og prøv på nytt.
Samtalen ble arkivert
Samtalen ble fjernet fra arkivet
+ Samtale merket som lest
+ Samtale merket som ulest
Meldingen slettet
Kunne ikke slette melding
Samtale slettet
diff --git a/libs/pandares/src/main/res/values-b+sv+SE+instk12/strings.xml b/libs/pandares/src/main/res/values-b+sv+SE+instk12/strings.xml
index b7f58ca7bd..7a811c7886 100644
--- a/libs/pandares/src/main/res/values-b+sv+SE+instk12/strings.xml
+++ b/libs/pandares/src/main/res/values-b+sv+SE+instk12/strings.xml
@@ -412,6 +412,8 @@
Det går inte att utföra den här åtgärden. Kontrollera din anslutning och försök igen.
Konversationen har arkiverats
Konversationen ej arkiverad
+ Konversation markerad som läst
+ Konversation markerad som oläst
Meddelandet har tagits bort
Det gick inte att radera meddelandet
Konversationen raderades
diff --git a/libs/pandares/src/main/res/values-b+zh+HK/strings.xml b/libs/pandares/src/main/res/values-b+zh+HK/strings.xml
index ec3cb8922d..dc7454a927 100644
--- a/libs/pandares/src/main/res/values-b+zh+HK/strings.xml
+++ b/libs/pandares/src/main/res/values-b+zh+HK/strings.xml
@@ -404,6 +404,8 @@
無法執行此操作。請檢查您的連接然後重試。
交談存檔
交談取消存檔
+ 已將交談標記為已讀
+ 已將交談標記為未讀
已刪除訊息
無法刪除郵件
交談已刪除
diff --git a/libs/pandares/src/main/res/values-b+zh+Hans/strings.xml b/libs/pandares/src/main/res/values-b+zh+Hans/strings.xml
index 457cdabd03..968f299604 100644
--- a/libs/pandares/src/main/res/values-b+zh+Hans/strings.xml
+++ b/libs/pandares/src/main/res/values-b+zh+Hans/strings.xml
@@ -404,6 +404,8 @@
无法执行此操作。请检查您的连接,然后再试一次。
对话已存档
对话已取消存档
+ 对话已标记为“已读”
+ 对话已标记为“未读”
消息已删除
删除消息失败
对话已删除
diff --git a/libs/pandares/src/main/res/values-b+zh+Hant/strings.xml b/libs/pandares/src/main/res/values-b+zh+Hant/strings.xml
index ec3cb8922d..dc7454a927 100644
--- a/libs/pandares/src/main/res/values-b+zh+Hant/strings.xml
+++ b/libs/pandares/src/main/res/values-b+zh+Hant/strings.xml
@@ -404,6 +404,8 @@
無法執行此操作。請檢查您的連接然後重試。
交談存檔
交談取消存檔
+ 已將交談標記為已讀
+ 已將交談標記為未讀
已刪除訊息
無法刪除郵件
交談已刪除
diff --git a/libs/pandares/src/main/res/values-ca/strings.xml b/libs/pandares/src/main/res/values-ca/strings.xml
index b2ec8105e1..1abd858a42 100644
--- a/libs/pandares/src/main/res/values-ca/strings.xml
+++ b/libs/pandares/src/main/res/values-ca/strings.xml
@@ -412,6 +412,8 @@
No es pot realitzar aquesta acció. Reviseu la connexió i torneu-ho a provar.
Conversa arxivada
Conversa no arxivada
+ S’ha marcat la conversa com a llegida
+ S’ha marcat la conversa com a no llegida
Missatge suprimit
No s\'ha pogut suprimir el missatge
S’ha suprimit la conversa
diff --git a/libs/pandares/src/main/res/values-cy/strings.xml b/libs/pandares/src/main/res/values-cy/strings.xml
index 5d4706c2b3..dc378148bf 100644
--- a/libs/pandares/src/main/res/values-cy/strings.xml
+++ b/libs/pandares/src/main/res/values-cy/strings.xml
@@ -412,6 +412,8 @@
Does dim modd gwneud hyn. Gwiriwch eich cysylltiad a rhoi cynnig arall arni.
Sgwrs wedi’i harchifo
Sgwrs heb ei harchifo
+ Sgwrs wedi marcio ei bod wedi’i darllen
+ Sgwrs wedi marcio ei bod heb ei darllen
Neges wedi’i dileu
Wedi methu dileu’r neges
Sgwrs wedi’i dileu
diff --git a/libs/pandares/src/main/res/values-da/strings.xml b/libs/pandares/src/main/res/values-da/strings.xml
index e32a8cecdd..9db4023d96 100644
--- a/libs/pandares/src/main/res/values-da/strings.xml
+++ b/libs/pandares/src/main/res/values-da/strings.xml
@@ -412,6 +412,8 @@
Det er ikke muligt at udføre denne handling. Kontrollér forbindelsen, og prøv igen.
Diskussion arkiveret
Diskussion fjernet fra arkiv
+ Samtale markeret som læst
+ Samtale markeret som ulæst
Besked slettet
Beskeden kunne ikke slettes
Samtalen blev slettet
diff --git a/libs/pandares/src/main/res/values-de/strings.xml b/libs/pandares/src/main/res/values-de/strings.xml
index a3c6ad2f79..9ef84b4143 100644
--- a/libs/pandares/src/main/res/values-de/strings.xml
+++ b/libs/pandares/src/main/res/values-de/strings.xml
@@ -412,6 +412,8 @@
Diese Aktion konnte nicht durchgeführt werden. Bitte überprüfen Sie Ihre Verbindung, und versuchen Sie es erneut.
Konversation archiviert
Konversation aus dem Archiv entfernt
+ Als gelesen markierte Konversationen
+ Als ungelesen markierte Konversationen
Nachricht gelöscht
Löschen der Nachricht fehlgeschlagen.
Konversation gelöscht
diff --git a/libs/pandares/src/main/res/values-en-rAU/strings.xml b/libs/pandares/src/main/res/values-en-rAU/strings.xml
index f98e910845..0dfd3a3a9a 100644
--- a/libs/pandares/src/main/res/values-en-rAU/strings.xml
+++ b/libs/pandares/src/main/res/values-en-rAU/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandares/src/main/res/values-en-rCY/strings.xml b/libs/pandares/src/main/res/values-en-rCY/strings.xml
index 2c2f706310..05f50d53f0 100644
--- a/libs/pandares/src/main/res/values-en-rCY/strings.xml
+++ b/libs/pandares/src/main/res/values-en-rCY/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandares/src/main/res/values-en-rGB/strings.xml b/libs/pandares/src/main/res/values-en-rGB/strings.xml
index 29f97fad6f..05b82687d6 100644
--- a/libs/pandares/src/main/res/values-en-rGB/strings.xml
+++ b/libs/pandares/src/main/res/values-en-rGB/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandares/src/main/res/values-en/strings.xml b/libs/pandares/src/main/res/values-en/strings.xml
index 030560e018..7262ba7b36 100644
--- a/libs/pandares/src/main/res/values-en/strings.xml
+++ b/libs/pandares/src/main/res/values-en/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandares/src/main/res/values-es-rES/strings.xml b/libs/pandares/src/main/res/values-es-rES/strings.xml
index 27a663f871..2d2e2aa76e 100644
--- a/libs/pandares/src/main/res/values-es-rES/strings.xml
+++ b/libs/pandares/src/main/res/values-es-rES/strings.xml
@@ -412,6 +412,8 @@
No se puede realizar esta acción. Comprueba tu conexión y vuelve a intentarlo.
Conversación archivada
Conversación desarchivada
+ Conversación marcada como leída
+ Conversación marcada como no leída
Mensaje eliminado
No se ha podido eliminar el mensaje
Conversación eliminada
diff --git a/libs/pandares/src/main/res/values-es/strings.xml b/libs/pandares/src/main/res/values-es/strings.xml
index ce2750363b..f69fd70ab2 100644
--- a/libs/pandares/src/main/res/values-es/strings.xml
+++ b/libs/pandares/src/main/res/values-es/strings.xml
@@ -412,6 +412,8 @@
No se puede realizar esta acción. Compruebe su conexión y vuelva a intentarlo.
Conversación archivada
Conversación desarchivada
+ Conversación marcada como leída
+ Conversación marcada como no leída
Mensaje eliminado
Error al eliminar el mensaje
Conversación eliminada
diff --git a/libs/pandares/src/main/res/values-fi/strings.xml b/libs/pandares/src/main/res/values-fi/strings.xml
index ffa2889783..07dd98089a 100644
--- a/libs/pandares/src/main/res/values-fi/strings.xml
+++ b/libs/pandares/src/main/res/values-fi/strings.xml
@@ -412,6 +412,8 @@
Tämän toiminnon suorittaminen ei onnistunut. Tarkasta yhteytesi ja yritä uudelleen.
Keskustelu arkistoitu
Keskustelun arkistointi peruutettu
+ Keskustelut: merkitse luetuksi
+ Keskustelut: merkitse lukemattomiksi
Viesti on poistettu
Viestin poistaminen epäonnistui
Keskustelu poistettu
diff --git a/libs/pandares/src/main/res/values-fr-rCA/strings.xml b/libs/pandares/src/main/res/values-fr-rCA/strings.xml
index 97e125514a..77cffd5080 100644
--- a/libs/pandares/src/main/res/values-fr-rCA/strings.xml
+++ b/libs/pandares/src/main/res/values-fr-rCA/strings.xml
@@ -293,6 +293,7 @@
Monologue
Pas d\'éléments à afficher
À faire
+ À faire
Filtrer les cours
Filtrer par...
Cours favoris
@@ -411,6 +412,8 @@
Impossible d\'effectuer cette action. Veuillez vérifier votre connexion et réessayer.
Conversation archivée
Conversation désarchivée
+ Conversation marquée comme lue
+ Conversation marquée comme non lue
Message supprimé
Échec de la suppression du message
Conversation supprimée
@@ -693,9 +696,11 @@
À faire
+ À faire
Notes
Notifications
Canvas - À faire
+ Canvas - À faire
Canvas - Notes
Canvas - Notes
Canvas - Notifications
@@ -731,6 +736,8 @@
Cours
Liste de choses à faire
+ Liste des tâches à faire
+
Notifications
Notifications Push
Les notifications « Push » n\'ont pas été enregistrées pour ce dispositif.
@@ -745,7 +752,6 @@
Lancer Speedgrader
- travail à faire travaux à faire liste des travaux à faire
cours cours classe classes
note notes
@@ -1389,6 +1395,10 @@
- %s point à faire
- %s points à faire
+
+ - %s tâche à faire
+ - %s tâches à faire
+
Aucune annotation sélectionnée
Notifications par courriel
Immédiatement
@@ -1675,7 +1685,9 @@
Aucun événement d’aujourd’hui!
C’est une belle journée pour se reposer, se détendre et recharger nos batteries.
À faire
+ À faire
%s À faire
+ %s À faire
Exempté
Manquant
Noté
@@ -1700,21 +1712,30 @@
L\'événement %s a été créé avec succès.
L\'événement %s a été mis à jour avec succès.
À faire, %s a été créé avec succès.
+ Élément à faire %s créé avec succès.
À faire, %s a été mis à jour avec succès.
+ Élément à faire %s actualisé avec succès.
À faire
+ À faire
Date
Description
Effacer l’élément À faire?
+ Supprimer les tâches à faire?
Cette opération supprime définitivement l’élément À faire.
+ Cette opération supprime définitivement la tâche à faire.
Une erreur est survenue lors de la suppression de ce travail À faire. Veuillez vérifier votre connexion et réessayer.
+ Une erreur est survenue lors de la suppression de cette tâche à faire. Vérifiez votre connexion et réessayez.
Nouvelle action
+ Nouvelle tâche à faire
Modification à faire
+ Modifier les tâches à faire
Ajouter un titre
Date
Heure
Calendrier
Détails
Une erreur est survenue lors de l’enregistrement de ce travail À faire. Veuillez vérifier votre connexion et réessayer.
+ Une erreur est survenue lors de l’enregistrement de cette tâche à faire. Vérifiez votre connexion et réessayez.
Sélectionner le calendrier
Réessayer
Emplacement
@@ -1722,6 +1743,7 @@
Détails
Il y a eu un problème de chargement de cet événement. Veuillez vérifier votre connexion et réessayer.
Il y a eu un problème de chargement de ce travail à faire. Veuillez vérifier votre connexion et réessayer.
+ Une erreur est survenue lors du chargement de cette tâche à faire. Vérifiez votre connexion et réessayez.
Supprimer l’événement?
Cela supprimera définitivement votre événement.
Une erreur s\'est produite lors de la suppression de cet événement. Veuillez vérifier votre connexion et réessayer.
@@ -1738,6 +1760,7 @@
Tous les événements
Cet événement et tous les suivants
Ajouter un élément À faire
+ Ajouter une tâche à faire
Ajouter un événement
Nouvel événement
Modifier l’événement
@@ -2116,7 +2139,9 @@
Connectez-vous!
Pour voir vos travaux à accomplir, connectez-vous à votre compte dans l\'application. Cela ne prendra qu’une seconde!
Ouvrir l’écran Liste des travaux à accomplir
+ Ouvrir l’écran de la liste de tâches à faire
Créer un nouveau travail à accomplir
+ Créer nouvelle tâche à faire
Nous avons du mal à afficher vos notes en ce moment. Veuillez réessayer dans un instant ou rendez-vous à l’application.
Pour voir vos notes, veuillez vous connecter à votre compte dans l’application. Cela ne prendra qu’une seconde!
Nous avons du mal à afficher vos notes en ce moment.
@@ -2215,6 +2240,7 @@
Une erreur s’est produite lors du chargement de vos points à faire. Veuillez vérifier votre connexion et réessayer.
Une erreur s’est produite lors de la mise à jour de points à faire. Veuillez vérifier votre connexion et réessayer.
Pas de points à faire pour l’instant!
+ Aucune tâche à faire pour l’instant!
Il semble que ce soit un moment idéal pour se reposer, se détendre et se ressourcer.
Terminé
Annuler
@@ -2225,8 +2251,10 @@
Préférences de la liste de points à faire
+ Préférences de la liste de tâches à faire
Points visibles
Afficher les points à faire personnels
+ Afficher les tâches personnelles à faire
Afficher les événements de calendrier
Afficher les points terminés
Cours préférés uniquement
diff --git a/libs/pandares/src/main/res/values-fr/strings.xml b/libs/pandares/src/main/res/values-fr/strings.xml
index 5ca8d8c151..f32ceb7a9a 100644
--- a/libs/pandares/src/main/res/values-fr/strings.xml
+++ b/libs/pandares/src/main/res/values-fr/strings.xml
@@ -412,6 +412,8 @@
Impossible d’effectuer cette action. Veuillez vérifier votre et réessayer.
Conversion archivée
Conversion retirée des archives
+ Conversation marquée comme lue
+ Conversation marquée comme non lue
Message supprimé
Impossible de supprimer le message
Conversation supprimée
diff --git a/libs/pandares/src/main/res/values-ga/strings.xml b/libs/pandares/src/main/res/values-ga/strings.xml
index 2fda5f6ed5..f9b5ad1de6 100644
--- a/libs/pandares/src/main/res/values-ga/strings.xml
+++ b/libs/pandares/src/main/res/values-ga/strings.xml
@@ -412,6 +412,8 @@
Ní féidir an gníomh seo a dhéanamh. Seiceáil do cheangal agus bain triail eile as.
Comhrá curtha i gcartlann
Comhrá bainte ón gcartlann
+ Marcáladh an comhrá mar léite
+ Marcáladh an comhrá mar neamhléite
Scriosadh an teachtaireacht
Theip ar scriosadh na teachtaireachta
Scriosadh an comhrá
diff --git a/libs/pandares/src/main/res/values-hi/strings.xml b/libs/pandares/src/main/res/values-hi/strings.xml
index b7916e55c3..5e965e3951 100644
--- a/libs/pandares/src/main/res/values-hi/strings.xml
+++ b/libs/pandares/src/main/res/values-hi/strings.xml
@@ -412,6 +412,8 @@
यह कार्यवाही करने में असमर्थ। कृपया अपने कनेक्शन की जांच करें और फिर से कोशिश करें।
बातचीत संग्रहीत की गई
बातचीत असंग्रहीत की गई
+ बातचीत को पढ़ा हुआ चिह्नित किया गया
+ बातचीत को नहीं पढ़ा हुआ चिह्नित किया गया
संदेश मिटाया गया
संदेश मिटाने में विफल
बातचीत मिटाई गई
diff --git a/libs/pandares/src/main/res/values-ht/strings.xml b/libs/pandares/src/main/res/values-ht/strings.xml
index 6f10568838..94681b046a 100644
--- a/libs/pandares/src/main/res/values-ht/strings.xml
+++ b/libs/pandares/src/main/res/values-ht/strings.xml
@@ -412,6 +412,8 @@
Ou paka fè aksyon sa a. Tanpri verifye koneksyon ou a epi eseye ankò.
Konvèsasyon an achive
Konvèsasyon an dezachive
+ Konvèsasyon make kòm li
+ Konvèsasyon make kòm poko li
Mesaj Efase
Enposib pou efase mesaj
Konvèsasyon elimine
diff --git a/libs/pandares/src/main/res/values-id/strings.xml b/libs/pandares/src/main/res/values-id/strings.xml
index d7f21457d1..32c2557f4e 100644
--- a/libs/pandares/src/main/res/values-id/strings.xml
+++ b/libs/pandares/src/main/res/values-id/strings.xml
@@ -412,6 +412,8 @@
Tidak dapat melakukan tindakan ini. Silakan periksa sambungan internet Anda dan coba lagi.
Percakapan diarsipkan
Percakapan dikeluarkan dari arsip
+ Percakapan ditandai sudah dibaca
+ Percakapan ditandai belum dibaca
Pesan dihapus
Gagal menghapus pesan
Percakapan dihapus
diff --git a/libs/pandares/src/main/res/values-is/strings.xml b/libs/pandares/src/main/res/values-is/strings.xml
index 57bebb5f9a..207ad2bd6c 100644
--- a/libs/pandares/src/main/res/values-is/strings.xml
+++ b/libs/pandares/src/main/res/values-is/strings.xml
@@ -412,6 +412,8 @@
Ekki er hægt að framkvæma þessa aðgerð. Athugaðu tengingu þína og reyndu aftur.
Samtal safnvistað
Samtal tekið úr safni
+ Samtal merkt sem lesið
+ Samtal merkt sem ólesið
Skilaboðum eytt
Ekki tókst að eyða skilaboðum
Samræðum eytt
diff --git a/libs/pandares/src/main/res/values-it/strings.xml b/libs/pandares/src/main/res/values-it/strings.xml
index 7974383f9f..9c013454dd 100644
--- a/libs/pandares/src/main/res/values-it/strings.xml
+++ b/libs/pandares/src/main/res/values-it/strings.xml
@@ -412,6 +412,8 @@
Impossibile eseguire questa azione. Verificare la connessione e riprovare.
Conversazione archiviata
Conversazione non archiviata
+ Conversazione contrassegnata come letta
+ Conversazione contrassegnata come non letta
Messaggio eliminato
Impossibile eliminare messaggio
Conversazione eliminata
diff --git a/libs/pandares/src/main/res/values-ja/strings.xml b/libs/pandares/src/main/res/values-ja/strings.xml
index f4a406ac59..60a9d40880 100644
--- a/libs/pandares/src/main/res/values-ja/strings.xml
+++ b/libs/pandares/src/main/res/values-ja/strings.xml
@@ -404,6 +404,8 @@
この操作を実行できません。接続を確認して、もう一度お試しください。
会話がアーカイブされました
会話がアーカイブ解除されました
+ 転換は赤でマークされる
+ 転換は未読としてマークされる
メッセージが削除されました
メッセージを削除できませんでした
会話が削除されました
diff --git a/libs/pandares/src/main/res/values-ko/strings.xml b/libs/pandares/src/main/res/values-ko/strings.xml
index 71c5f3f6e4..8ab3e26747 100644
--- a/libs/pandares/src/main/res/values-ko/strings.xml
+++ b/libs/pandares/src/main/res/values-ko/strings.xml
@@ -404,6 +404,8 @@
이 작업을 수행할 수 없습니다. 연결을 확인하고 다시 시도하세요.
대화가 보관됨
대화가 보관 해제됨
+ 대화가 읽음으로 표시됨
+ 대화가 읽지 않음으로 표시됨
메시지 삭제됨
메시지를 삭제하지 못함
대화 삭제됨
diff --git a/libs/pandares/src/main/res/values-mi/strings.xml b/libs/pandares/src/main/res/values-mi/strings.xml
index b2f85aa021..1ea22cd589 100644
--- a/libs/pandares/src/main/res/values-mi/strings.xml
+++ b/libs/pandares/src/main/res/values-mi/strings.xml
@@ -412,6 +412,8 @@
Kaore e taea te whakamahi i tēnei mahi. Tēnā koa tirohia tō hononga ana ka tarai anō
Kōrero kua pūrangatia
Kōrero kua tangohia mai i te pūranga
+ Kua tohua te kōrero hei mea kua pānuihia
+ Kua tohua te kōrerorero hei kōrero kāore anō kia pānuihia
Kua mukua te karere
I rahua te muku i te karere
Kua mukua te korerorero
diff --git a/libs/pandares/src/main/res/values-ms/strings.xml b/libs/pandares/src/main/res/values-ms/strings.xml
index aebd6ae37c..a7e31d3554 100644
--- a/libs/pandares/src/main/res/values-ms/strings.xml
+++ b/libs/pandares/src/main/res/values-ms/strings.xml
@@ -412,6 +412,8 @@
Tidak dapat melaksanakan tindakan ini. Sila semak sambungan anda dan cuba semula.
Perbualan diarkibkan
Perbualan dinyaharkibkan
+ Perbualan ditandakan sebagai dibaca
+ Perbualan ditandakan sebagai belum dibaca
Mesej dipadamkan
Gagal untuk memadamkan mesej
Perbualan dipadamkan
diff --git a/libs/pandares/src/main/res/values-nb/strings.xml b/libs/pandares/src/main/res/values-nb/strings.xml
index 3396127371..f21ec44937 100644
--- a/libs/pandares/src/main/res/values-nb/strings.xml
+++ b/libs/pandares/src/main/res/values-nb/strings.xml
@@ -412,6 +412,8 @@
Kan ikke utføre denne handlingen. Kontroller tilkoblingen og prøv på nytt.
Samtalen ble arkivert
Samtalen ble fjernet fra arkivet
+ Samtale merket som lest
+ Samtale merket som ulest
Meldingen slettet
Kunne ikke slette melding
Samtale slettet
diff --git a/libs/pandares/src/main/res/values-nl/strings.xml b/libs/pandares/src/main/res/values-nl/strings.xml
index 3bb0af8d0d..b5a059be5c 100644
--- a/libs/pandares/src/main/res/values-nl/strings.xml
+++ b/libs/pandares/src/main/res/values-nl/strings.xml
@@ -412,6 +412,8 @@
Deze actie kan niet worden uitgevoerd. Controleer je verbinding en probeer het opnieuw.
Gesprek gearchiveerd
Archiveren van gesprek ongedaan gemaakt
+ Gesprek gemarkeerd als gelezen
+ Gesprek gemarkeerd als ongelezen
Bericht verwijderd
Verwijderen van bericht mislukt
Gesprek verwijderd
diff --git a/libs/pandares/src/main/res/values-pl/strings.xml b/libs/pandares/src/main/res/values-pl/strings.xml
index d38185a50a..8c3e8030d7 100644
--- a/libs/pandares/src/main/res/values-pl/strings.xml
+++ b/libs/pandares/src/main/res/values-pl/strings.xml
@@ -428,6 +428,8 @@
Nie można wykonać czynności. Sprawdź połączenie i spróbuj ponownie.
Zarchiwizowana rozmowa
Niezarchiwizowana rozmowa
+ Rozmowa oznaczona jako przeczytana.
+ Rozmowa oznaczona jako nieprzeczytana.
Usunięto wiadomość
Nie udało się usunąć wiadomości
Usunięto rozmowę
diff --git a/libs/pandares/src/main/res/values-pt-rBR/strings.xml b/libs/pandares/src/main/res/values-pt-rBR/strings.xml
index 25992bda01..a7d73b7c14 100644
--- a/libs/pandares/src/main/res/values-pt-rBR/strings.xml
+++ b/libs/pandares/src/main/res/values-pt-rBR/strings.xml
@@ -412,6 +412,8 @@
Incapaz de realizar esta ação. Verifique a sua conexão e tente novamente.
Conversa arquivada
Conversa desarquivada
+ Conversa marcada como lida
+ Conversa marcada como não lida
Mensagem excluída
Falha ao excluir a mensagem
Conversa excluída
diff --git a/libs/pandares/src/main/res/values-pt-rPT/strings.xml b/libs/pandares/src/main/res/values-pt-rPT/strings.xml
index 036e322d7b..0445b909ed 100644
--- a/libs/pandares/src/main/res/values-pt-rPT/strings.xml
+++ b/libs/pandares/src/main/res/values-pt-rPT/strings.xml
@@ -412,6 +412,8 @@
Não é possível executar esta ação. É favor verificar sua conexão e tente novamente.
Conversa arquivada
Conversa desarquivada
+ Conversa marcada como lida
+ Conversa marcada como não lida
Mensagem eliminada!
Falha ao apagar a mensagem
Conversa eliminada
diff --git a/libs/pandares/src/main/res/values-ru/strings.xml b/libs/pandares/src/main/res/values-ru/strings.xml
index 7786ba9635..bedb19e62b 100644
--- a/libs/pandares/src/main/res/values-ru/strings.xml
+++ b/libs/pandares/src/main/res/values-ru/strings.xml
@@ -428,6 +428,8 @@
Невозможно выполнить это действие. Проверьте подключение и попробуйте еще раз.
Дискуссия архивирована
Дискуссия разархивирована
+ Обсуждение отмечено как прочитанное
+ Обсуждение отмечено как непрочитанное
Сообщение удалено
Не удалось удалить сообщение
Обсуждение удалено
diff --git a/libs/pandares/src/main/res/values-sl/strings.xml b/libs/pandares/src/main/res/values-sl/strings.xml
index ddfc0c6e85..f4bf30643a 100644
--- a/libs/pandares/src/main/res/values-sl/strings.xml
+++ b/libs/pandares/src/main/res/values-sl/strings.xml
@@ -412,6 +412,8 @@
Tega dejanja ni mogoče izvesti. Preverite svojo povezavo in poskusite znova.
Pogovor je arhiviran.
Arhiviranje pogovora je razveljavljeno.
+ Pogovor označen kot prebran
+ Pogovori označen kot neprebran
Sporočilo je izbrisano.
Brisanje sporočila ni uspelo
Pogovor izbrisan
diff --git a/libs/pandares/src/main/res/values-sv/strings.xml b/libs/pandares/src/main/res/values-sv/strings.xml
index b6b0a2d33e..0b447b6b31 100644
--- a/libs/pandares/src/main/res/values-sv/strings.xml
+++ b/libs/pandares/src/main/res/values-sv/strings.xml
@@ -412,6 +412,8 @@
Det går inte att utföra den här åtgärden. Kontrollera din anslutning och försök igen.
Konversationen har arkiverats
Konversationen ej arkiverad
+ Konversation markerad som läst
+ Konversation markerad som oläst
Meddelandet har tagits bort
Det gick inte att radera meddelandet
Konversationen raderades
diff --git a/libs/pandares/src/main/res/values-th/strings.xml b/libs/pandares/src/main/res/values-th/strings.xml
index e3968dc9d3..175133426b 100644
--- a/libs/pandares/src/main/res/values-th/strings.xml
+++ b/libs/pandares/src/main/res/values-th/strings.xml
@@ -412,6 +412,8 @@
ไม่สามารถดำเนินการในส่วนนี้ กรุณาตรวจสอบการเชื่อมต่อของคุณและลองใหม่อีกครั้ง
จัดเก็บแยกการพูดคุยแล้ว
เลิกจัดเก็บแยกการพูดคุยแล้ว
+ กำกับการสนทนาว่าอ่านแล้ว
+ กำกับการสนทนาว่าไม่ได้อ่าน
ลบข้อความแล้ว
ไม่สามารถลบข้อความได้
ลบการสนทนาแล้ว
diff --git a/libs/pandares/src/main/res/values-vi/strings.xml b/libs/pandares/src/main/res/values-vi/strings.xml
index 9da9c06b1a..4ba29d9ca3 100644
--- a/libs/pandares/src/main/res/values-vi/strings.xml
+++ b/libs/pandares/src/main/res/values-vi/strings.xml
@@ -412,6 +412,8 @@
Không thể thực hiện thao tác này. Vui lòng kiểm tra kết nối của bạn rồi thử lại.
Đã lưu trữ cuộc trò chuyện
Đã bỏ lưu trữ cuộc trò chuyện
+ Cuộc trò chuyện được đánh dấu là đã đọc
+ Cuộc trò chuyện được đánh dấu là chưa đọc
Đã xóa tin nhắn
Không xóa được tin nhắn
Đã xóa cuộc trò chuyện
diff --git a/libs/pandares/src/main/res/values-zh/strings.xml b/libs/pandares/src/main/res/values-zh/strings.xml
index 457cdabd03..968f299604 100644
--- a/libs/pandares/src/main/res/values-zh/strings.xml
+++ b/libs/pandares/src/main/res/values-zh/strings.xml
@@ -404,6 +404,8 @@
无法执行此操作。请检查您的连接,然后再试一次。
对话已存档
对话已取消存档
+ 对话已标记为“已读”
+ 对话已标记为“未读”
消息已删除
删除消息失败
对话已删除
diff --git a/libs/pandares/src/main/res/values/strings.xml b/libs/pandares/src/main/res/values/strings.xml
index 030560e018..7262ba7b36 100644
--- a/libs/pandares/src/main/res/values/strings.xml
+++ b/libs/pandares/src/main/res/values/strings.xml
@@ -412,6 +412,8 @@
Unable to perform this action. Please check your connection and try again.
Conversation archived
Conversation unarchived
+ Conversation marked as read
+ Conversation marked as unread
Message deleted
Failed to delete message
Conversation deleted
diff --git a/libs/pandautils/build.gradle b/libs/pandautils/build.gradle
index 93c3c1b49c..5a7daea77b 100644
--- a/libs/pandautils/build.gradle
+++ b/libs/pandautils/build.gradle
@@ -107,15 +107,16 @@ tasks.withType(Test) {
android.sourceSets.main.res.srcDirs += 'src/test/res'
}
-configurations {
- all*.exclude group: 'commons-logging', module: 'commons-logging'
- all*.exclude group: 'org.apache.httpcomponents', module: 'httpclient'
- androidTestImplementation.exclude module:'protobuf-lite'
-
- all*.resolutionStrategy {
- force Libs.KOTLIN_STD_LIB
+configurations.configureEach {
+ exclude group: 'commons-logging', module: 'commons-logging'
+ exclude group: 'org.apache.httpcomponents', module: 'httpclient'
+ if (canBeResolved) {
+ resolutionStrategy {
+ force Libs.KOTLIN_STD_LIB
+ }
}
}
+configurations.androidTestImplementation.exclude module:'protobuf-lite'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
diff --git a/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CourseCardTest.kt b/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CourseCardTest.kt
index 3bf07f6847..b8ba446582 100644
--- a/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CourseCardTest.kt
+++ b/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CourseCardTest.kt
@@ -52,7 +52,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -68,7 +68,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = true,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -84,7 +84,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = true,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -100,7 +100,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -117,7 +117,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = true,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -135,7 +135,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = true,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -153,7 +153,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -171,7 +171,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -192,8 +192,8 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> },
- onAnnouncementClick = { _, _ -> }
+ onCourseClick = { },
+ onAnnouncementClick = { }
)
}
@@ -216,8 +216,8 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> },
- onAnnouncementClick = { _, _ -> }
+ onCourseClick = { },
+ onAnnouncementClick = { }
)
}
@@ -234,7 +234,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
@@ -251,7 +251,7 @@ class CourseCardTest {
courseCard = courseCard,
showGrade = false,
showColorOverlay = false,
- onCourseClick = { _, _ -> }
+ onCourseClick = { }
)
}
diff --git a/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CoursesWidgetTest.kt b/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CoursesWidgetTest.kt
index 7854049daf..cf7f97f439 100644
--- a/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CoursesWidgetTest.kt
+++ b/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/CoursesWidgetTest.kt
@@ -80,6 +80,126 @@ class CoursesWidgetTest {
composeTestRule.onNodeWithText("Groups").assertDoesNotExist()
}
+ @Test
+ fun testEmptyStateShowsTitle() {
+ composeTestRule.setContent {
+ CoursesWidgetContent(
+ uiState = CoursesWidgetUiState(isLoading = false),
+ columns = 1
+ )
+ }
+
+ composeTestRule.waitForIdle()
+ composeTestRule.onNodeWithText("Welcome to Canvas!").assertIsDisplayed()
+ }
+
+ @Test
+ fun testEmptyStateShowsMessage() {
+ composeTestRule.setContent {
+ CoursesWidgetContent(
+ uiState = CoursesWidgetUiState(isLoading = false),
+ columns = 1
+ )
+ }
+
+ composeTestRule.waitForIdle()
+ composeTestRule.onNodeWithText(
+ "You don't have any active courses yet — so things are a bit quiet here. Once you enroll in a class, your dashboard will start filling up with new activity."
+ ).assertIsDisplayed()
+ }
+
+ @Test
+ fun testEmptyStateHidesAllCoursesButton() {
+ composeTestRule.setContent {
+ CoursesWidgetContent(
+ uiState = CoursesWidgetUiState(isLoading = false),
+ columns = 1
+ )
+ }
+
+ composeTestRule.waitForIdle()
+ composeTestRule.onNodeWithText("All Courses").assertDoesNotExist()
+ }
+
+ @Test
+ fun testAllCoursesButtonShownWithCourses() {
+ val uiState = CoursesWidgetUiState(
+ isLoading = false,
+ courses = listOf(
+ CourseCardItem(
+ id = 1,
+ name = "Introduction to Computer Science",
+ courseCode = "CS 101",
+ imageUrl = null,
+ grade = GradeDisplay.Hidden,
+ announcements = emptyList(),
+ isSynced = false,
+ isClickable = true,
+ color = android.graphics.Color.RED
+ )
+ ),
+ isCoursesExpanded = true
+ )
+
+ composeTestRule.setContent {
+ CoursesWidgetContent(uiState = uiState, columns = 1)
+ }
+
+ composeTestRule.waitForIdle()
+ composeTestRule.onNodeWithText("All Courses").assertIsDisplayed()
+ }
+
+ @Test
+ fun testAllCoursesButtonShownWithGroupsOnly() {
+ val uiState = CoursesWidgetUiState(
+ isLoading = false,
+ groups = listOf(
+ GroupCardItem(
+ id = 1,
+ name = "Project Team Alpha",
+ parentCourseName = "Introduction to Computer Science",
+ memberCount = 5
+ )
+ ),
+ isGroupsExpanded = true
+ )
+
+ composeTestRule.setContent {
+ CoursesWidgetContent(uiState = uiState, columns = 1)
+ }
+
+ composeTestRule.waitForIdle()
+ composeTestRule.onNodeWithText("All Courses").assertIsDisplayed()
+ }
+
+ @Test
+ fun testEmptyStateTitleNotShownWhenCoursesPresent() {
+ val uiState = CoursesWidgetUiState(
+ isLoading = false,
+ courses = listOf(
+ CourseCardItem(
+ id = 1,
+ name = "Introduction to Computer Science",
+ courseCode = "CS 101",
+ imageUrl = null,
+ grade = GradeDisplay.Hidden,
+ announcements = emptyList(),
+ isSynced = false,
+ isClickable = true,
+ color = android.graphics.Color.RED
+ )
+ ),
+ isCoursesExpanded = true
+ )
+
+ composeTestRule.setContent {
+ CoursesWidgetContent(uiState = uiState, columns = 1)
+ }
+
+ composeTestRule.waitForIdle()
+ composeTestRule.onNodeWithText("Welcome to Canvas!").assertDoesNotExist()
+ }
+
@Test
fun testWidgetShowsSingleCourse() {
val courses = listOf(
diff --git a/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/GroupCardTest.kt b/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/GroupCardTest.kt
index 18abfa47fb..1e506d2c6b 100644
--- a/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/GroupCardTest.kt
+++ b/libs/pandautils/src/androidTest/java/com/instructure/pandautils/features/dashboard/widget/courses/GroupCardTest.kt
@@ -48,8 +48,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -63,8 +63,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -78,8 +78,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -93,8 +93,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -108,8 +108,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -124,8 +124,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -140,8 +140,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -155,8 +155,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
@@ -170,8 +170,8 @@ class GroupCardTest {
composeTestRule.setContent {
GroupCard(
groupCard = groupCard,
- onGroupClick = { _, _ -> },
- onMessageClick = { _, _ -> }
+ onGroupClick = { },
+ onMessageClick = { }
)
}
diff --git a/libs/pandautils/src/main/java/com/instructure/pandautils/analytics/pageview/PageViewUploadWorker.kt b/libs/pandautils/src/main/java/com/instructure/pandautils/analytics/pageview/PageViewUploadWorker.kt
index 203ef635cd..8ae6eb9582 100644
--- a/libs/pandautils/src/main/java/com/instructure/pandautils/analytics/pageview/PageViewUploadWorker.kt
+++ b/libs/pandautils/src/main/java/com/instructure/pandautils/analytics/pageview/PageViewUploadWorker.kt
@@ -21,6 +21,7 @@ import androidx.work.CoroutineWorker
import androidx.work.WorkerParameters
import com.instructure.canvasapi2.builders.RestParams
import com.instructure.canvasapi2.utils.ApiPrefs
+import com.instructure.canvasapi2.utils.ConsentPrefs
import com.instructure.canvasapi2.utils.Logger
import com.instructure.canvasapi2.utils.isValid
import com.instructure.canvasapi2.utils.pageview.PageViewUpload
@@ -43,11 +44,14 @@ class PageViewUploadWorker @AssistedInject constructor(
private val appKey: PandataInfo.AppKey,
private val pageViewDao: PageViewDao,
private val apiPrefs: ApiPrefs,
+ private val consentPrefs: ConsentPrefs,
private val pandataApi: PandataApi.PandataInterface
) : CoroutineWorker(context, workerParameters) {
override suspend fun doWork(): Result {
return try {
+ if (consentPrefs.currentUserConsent != true) return Result.success()
+
if (!ApiPrefs.getValidToken()
.isValid() && ApiPrefs.pandataInfo?.isValid != true
) return Result.failure()
diff --git a/libs/pandautils/src/main/java/com/instructure/pandautils/compose/CanvasTheme.kt b/libs/pandautils/src/main/java/com/instructure/pandautils/compose/CanvasTheme.kt
index 10df9f19e9..41c40fe0a2 100644
--- a/libs/pandautils/src/main/java/com/instructure/pandautils/compose/CanvasTheme.kt
+++ b/libs/pandautils/src/main/java/com/instructure/pandautils/compose/CanvasTheme.kt
@@ -30,6 +30,7 @@ import androidx.compose.material.MaterialTheme
import androidx.compose.material.RippleConfiguration
import androidx.compose.material.Typography
import androidx.compose.material.ripple.RippleAlpha
+import androidx.compose.material3.LocalTextStyle as Material3LocalTextStyle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.staticCompositionLocalOf
@@ -60,13 +61,15 @@ fun CanvasTheme(
body1 = typography.body1.copy(letterSpacing = TextUnit(0.0f, TextUnitType.Sp))
)
) {
+ val textStyle = TextStyle(
+ fontFamily = currentFontFamily,
+ letterSpacing = TextUnit(0f, TextUnitType.Sp)
+ )
CompositionLocalProvider(
LocalRippleConfiguration provides RippleConfiguration(color = colorResource(id = R.color.backgroundDark), getRippleAlpha(isSystemInDarkTheme())),
LocalTextSelectionColors provides getCustomTextSelectionColors(context = LocalContext.current),
- LocalTextStyle provides TextStyle(
- fontFamily = lato,
- letterSpacing = TextUnit(0f, TextUnitType.Sp)
- ),
+ LocalTextStyle provides textStyle,
+ Material3LocalTextStyle provides textStyle,
LocalCourseColor provides courseColor,
content = content
)
@@ -79,17 +82,17 @@ private val lato = FontFamily(
Font(R.font.lato_italic, style = FontStyle.Italic),
)
+private var currentFontFamily: FontFamily = lato
+
private var typography = Typography(
- defaultFontFamily = lato,
+ defaultFontFamily = currentFontFamily,
)
fun overrideComposeFonts(@FontRes fontResource: Int) {
- val newFont = FontFamily(
- Font(fontResource)
- )
+ currentFontFamily = FontFamily(Font(fontResource))
typography = Typography(
- defaultFontFamily = newFont,
+ defaultFontFamily = currentFontFamily,
)
}
diff --git a/libs/pandautils/src/main/java/com/instructure/pandautils/data/repository/features/FeaturesRepository.kt b/libs/pandautils/src/main/java/com/instructure/pandautils/data/repository/features/FeaturesRepository.kt
new file mode 100644
index 0000000000..acc16be320
--- /dev/null
+++ b/libs/pandautils/src/main/java/com/instructure/pandautils/data/repository/features/FeaturesRepository.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package com.instructure.pandautils.data.repository.features
+
+import com.instructure.canvasapi2.utils.DataResult
+
+interface FeaturesRepository {
+ suspend fun getEnvironmentFeatureFlags(forceRefresh: Boolean): DataResult