Skip to content

F 1579 assigment builder - #1617

Open
morozov-av wants to merge 8 commits into
RunestoneInteractive:mainfrom
morozov-av:f-1579-assigmentBuilder
Open

morozov-av wants to merge 8 commits into
RunestoneInteractive:mainfrom
morozov-av:f-1579-assigmentBuilder

Conversation

@morozov-av

Copy link
Copy Markdown
Contributor
  1. Improve keyboard navigation and focus behavior for dialogs, dropdowns, date pickers, and tables
  2. Add missing form labels, accessible button names, table semantics, and consistent heading level
  3. Fix WAVE-reported contrast issues and redundant title attributes
  4. Add blocking axe WCAG A/AA checks to the Assignment Builder CI workflow
  5. Extend accessibility-related component and E2E coverage
  6. Final automated test, lint, and build verification is still pending

Additionally I manually reviewed affected Assignment Builder and Grader pages with WAVE

@morozov-av
morozov-av requested a review from bnmnetp as a code owner October 18, 2026 13:53

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Keyboard navigation, truncated-text disclosure, and existing insertion-test selectors have unresolved regressions.

6 open issues
What changed in this PR

Improves accessibility across Runestone’s Assignment Builder and Grader, with keyboard navigation updates, clearer semantics, and blocking accessibility checks.

Changes:

  • Improves focus handling, form labels, headings, table semantics, and contrast.
  • Expands component coverage and makes axe WCAG A/AA violations fail tests.
  • Adds CI backend setup and configurable development proxies.

Paths are relative to bases/rsptx/assignment_server_api/assignment_builder/, except the workflow.

File Description
vite.config.ts Adds configurable backend proxies.
src/​utils/​courseTimezone.ts Uses explicit US date formatting.
src/​utils/​courseTimezone.spec.ts Checks AM/PM formatting.
src/​styles/​tokens.css Reformats shared tokens.
src/​components/​ui/​TreeTable.tsx Adds checkbox labels.
src/​components/​ui/​TreeTable.spec.tsx Queries checkboxes by accessible name.
src/​components/​ui/​TabToolbar/​TabToolbar.tsx Supports configurable heading levels.
src/​components/​ui/​TabToolbar/​TabToolbar.module.css Improves count contrast.
src/​components/​ui/​FilterMultiSelect/​FilterMultiSelect.tsx Uses native component labels.
src/​components/​ui/​EditableTable/​EditableDataTable.tsx Adds labels and table captions.
src/​components/​ui/​DateTimePicker/​DateTimePicker.tsx Adds calendar focus management.
src/​components/​ui/​DateTimePicker/​DateTimePicker.spec.tsx Tests calendar focus transitions.
src/​components/​ui/​DateTimePicker/​DateTimePicker.module.css Reformats calendar styles.
src/​components/​ui/​DataGrid.tsx Corrects filter-cell semantics.
src/​components/​ui/​DataGrid.spec.tsx Checks column-header semantics.
src/​components/​shell/​AppNavBar.tsx Removes redundant titles.
src/​components/​shell/​AppNavBar.spec.tsx Checks title removal.
src/​components/​routes/​Grader/​state/​graderSelectors.ts Uses higher-contrast status colors.
src/​components/​routes/​Grader/​state/​graderSelectors.spec.ts Updates color assertions.
src/​components/​routes/​Grader/​pages/​GraderQuestionsPage/​spec/​GraderQuestionsPage.test.tsx Checks selection-column naming.
src/​components/​routes/​Grader/​pages/​GraderQuestionsPage/​GraderQuestionsPage.tsx Names selection column; removes titles.
src/​components/​routes/​Grader/​pages/​GraderAssignmentsPage/​spec/​GraderAssignmentsPage.test.tsx Tests labels and title removal.
src/​components/​routes/​Grader/​pages/​GraderAssignmentsPage/​GraderAssignmentsPage.tsx Labels date filter; removes titles.
src/​components/​routes/​Grader/​Grader.module.css Improves contrast and shortcut layout.
src/​components/​routes/​Grader/​components/​StudentMultiSelect.tsx Associates search with its label.
src/​components/​routes/​Grader/​components/​StudentListSidebar.module.css Improves metadata contrast.
src/​components/​routes/​Grader/​components/​ShortcutsHelpDialog.tsx Improves shortcut and dialog semantics.
src/​components/​routes/​Grader/​components/​ReleaseGradesControl.tsx Names dialog close buttons.
src/​components/​routes/​Grader/​components/​RegradeWizard.tsx Names dialog close button.
src/​components/​routes/​Grader/​components/​questionTypes/​ShortAnswerView/​ShortAnswerView.tsx Adjusts response heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​RunestonePreview/​RunestonePreview.tsx Adjusts question heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​ParsonsAnswerView/​ParsonsAnswerView.tsx Adjusts source heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​McqAnswerView/​McqAnswerView.tsx Adjusts options heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​FitbAnswerView/​FitbAnswerView.tsx Adjusts blanks heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​DefaultAnswerView/​DefaultAnswerView.tsx Adjusts answer heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​AssociationAnswerView/​AssociationAnswerView.tsx Adjusts association heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​AnswerRenderer/​AnswerRenderer.tsx Adjusts interactive heading level.
src/​components/​routes/​Grader/​components/​questionTypes/​ActiveCodeAnswerView/​ActiveCodeAnswerView.tsx Adjusts source heading level.
src/​components/​routes/​Grader/​components/​MultiGradeDialog.tsx Labels controls and fixes textarea height.
src/​components/​routes/​Grader/​components/​GradePanel.tsx Revises labels and textarea sizing.
src/​components/​routes/​Grader/​components/​DeadlineExceptionDialog.tsx Labels dialog and accommodation scope.
src/​components/​routes/​AssignmentBuilder/​components/​wizard/​AssignmentWizard.tsx Revises headings, labels, and textarea sizing.
src/​components/​routes/​AssignmentBuilder/​components/​wizard/​AssignmentWizard.module.css Styles revised control labels.
src/​components/​routes/​AssignmentBuilder/​components/​reading/​ReadingsToolbar.tsx Sets toolbar heading level.
src/​components/​routes/​AssignmentBuilder/​components/​reading/​components/​EditAllReadings/​withEditAllReadings.tsx Improves helper-text contrast.
src/​components/​routes/​AssignmentBuilder/​components/​reading/​AssignmentReadingsTable.tsx Removes chapter and section titles.
src/​components/​routes/​AssignmentBuilder/​components/​list/​VisibilityStatusBadge.tsx Uses named tooltip buttons.
src/​components/​routes/​AssignmentBuilder/​components/​list/​VisibilityStatusBadge.spec.tsx Tests tooltip-button accessibility.
src/​components/​routes/​AssignmentBuilder/​components/​list/​VisibilityStatusBadge.module.css Styles tooltip buttons.
src/​components/​routes/​AssignmentBuilder/​components/​list/​VisibilityDropdown.tsx Revises keyboard and calendar behavior.
src/​components/​routes/​AssignmentBuilder/​components/​list/​VisibilityDropdown.spec.tsx Tests keyboard and portal interactions.
src/​components/​routes/​AssignmentBuilder/​components/​list/​AssignmentList.tsx Improves selection and switch labels.
src/​components/​routes/​AssignmentBuilder/​components/​importAssignment/​ImportPreviewPanel.tsx Names preview close button.
src/​components/​routes/​AssignmentBuilder/​components/​importAssignment/​ImportAssignmentModal.tsx Improves labels and contrast.
src/​components/​routes/​AssignmentBuilder/​components/​importAssignment/​ImportAssignmentModal.module.css Adds visually hidden header styling.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​TipTap/​Editor.tsx Adds configurable editor names.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​TipTap/​components/​InsertFormPopover.tsx Adds dialog semantics and focus handling.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​SearchExercises/​SmartSearchExercises.tsx Improves search labels and contrast.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​EditAllExercises/​withEditAllExercises.tsx Improves helper-text contrast.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​shared/​connections/​ConnectTargetButton.spec.tsx Revises click-propagation test.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​shared/​connections/​ConnectionList.tsx Removes redundant row tab stops.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​shared/​connections/​ConnectionList.spec.tsx Updates list semantics test.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​shared/​BaseExerciseSettingsContent.tsx Improves required-marker contrast.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​SelectQuestionExercise/​components/​ToggleOptionsSettings.module.css Reformats styles only.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​SelectQuestionExercise/​components/​QuestionListEditor.module.css Reformats styles only.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​PollExercise/​ScaleSettings.tsx Associates scale input label.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​ParsonsExercise/​ParsonsStyles.css Reformats styles only.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​ParsonsExercise/​components/​ParsonsExercise.module.css Reformats styles only.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​ParsonsExercise/​components/​BlockItem.tsx Associates labels and marks presentation wrappers.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​MultiChoiceExercise/​MultiChoiceOptions.tsx Names option and feedback editors.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​MultiChoiceExercise/​MultiChoiceExerciseSettings.tsx Improves description contrast.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​MultiChoiceExercise/​components/​MultiChoiceOptionsWrapper.module.css Reformats styles only.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​MatchingExercise/​MatchingExercise.module.css Normalizes CSS quotes.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​MatchingExercise/​components/​SortableBlock.tsx Documents keyboard equivalent; suppresses lint warnings.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​ImportQuestionJsonModal.tsx Labels JSON input and close button.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​IframeExercise/​components/​IframeUrlInput.tsx Removes inappropriate preview label semantics.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​FillInTheBlankExercise/​components/​BlankManager.tsx Removes unassociated regex label.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​DragAndDropExercise/​DragAndDropExercise.module.css Normalizes CSS quotes.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​DragAndDropExercise/​components/​SortableBlock.tsx Documents keyboard equivalent; suppresses lint warnings.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​components/​CreateExercise/​components/​ClickableAreaExercise/​ClickableAreaEditor.module.css Reformats styles only.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​AssignmentExercisesList/​ExercisesToolbar.tsx Sets toolbar heading level.
src/​components/​routes/​AssignmentBuilder/​components/​exercises/​AssignmentExercisesList/​AssignmentExercisesTable.tsx Improves contrast and simplifies title value.
src/​components/​routes/​AssignmentBuilder/​components/​edit/​VisibilityControl.tsx Adds hidden radio-group label.
src/​components/​routes/​AssignmentBuilder/​components/​edit/​CourseTimezoneNotice.spec.tsx Checks AM/PM display.
src/​components/​routes/​AssignmentBuilder/​components/​edit/​AssignmentEdit.tsx Revises headings, labels, and textarea sizing.
src/​components/​routes/​AssignmentBuilder/​components/​edit/​AssignmentEdit.module.css Styles revised control labels.
src/​App.css Reformats root selectors.
README.md Documents blocking accessibility scans.
package.json Adds CI accessibility command.
e2e/​playwright.config.ts Configures CI server startup.
e2e/​global.setup.ts Sets CI login redirect.
e2e/​fixtures/​scratch.ts Supplies CI course context.
e2e/​consolidation/​a11y-scan.spec.ts Enforces axe checks and tags seeded tests.
.eslintrc.cjs Registers accessibility plugin.
.eslintrc.a11y.cjs Disables deprecated duplicate rule.
.github/​workflows/​test-assignment-builder.yml Adds blocking accessibility job.

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants