├── .prettierignore ├── .gitignore ├── public ├── logo.png └── logo.svg ├── src ├── schedule-visualizer │ ├── icons │ │ ├── OverlapIcon.css │ │ ├── style.css │ │ ├── ExpandIcon.tsx │ │ ├── CollapseIcon.tsx │ │ ├── FilterIcon.tsx │ │ ├── UWFlowIcon.tsx │ │ ├── CartIcon.tsx │ │ ├── MaximizeIcon.tsx │ │ ├── MinimizeIcon.tsx │ │ ├── GitHubIcon.tsx │ │ └── OverlapIcon.tsx │ ├── components │ │ ├── App.css │ │ ├── IconLink.css │ │ ├── BorderlessButton.css │ │ ├── Main.css │ │ ├── App.tsx │ │ ├── ClassSubCell.css │ │ ├── ScheduleActions.css │ │ ├── ClassToggleList.css │ │ ├── ClassToggle.css │ │ ├── Title.tsx │ │ ├── Title.css │ │ ├── IconLink.tsx │ │ ├── BorderlessButton.tsx │ │ ├── AsyncContent.tsx │ │ ├── UWFlowLink.tsx │ │ ├── ClassToggleList.tsx │ │ ├── ClassToggle.tsx │ │ ├── ScheduleGrid.css │ │ ├── ScheduleGrid.tsx │ │ ├── ScheduleActions.tsx │ │ ├── ColumnCell.tsx │ │ ├── Main.tsx │ │ ├── ColumnCell.css │ │ └── ClassSubCell.tsx │ ├── data │ │ ├── SupplementaryInfo.ts │ │ ├── getQuestParser.ts │ │ ├── ScheduleSlot.ts │ │ ├── QuestParser.ts │ │ ├── ClassTime.ts │ │ ├── ClassDate.ts │ │ ├── ClassesParser.ts │ │ ├── ScheduleParser.ts │ │ ├── Class.ts │ │ ├── Session.ts │ │ ├── ClassSlot.ts │ │ ├── CartParser.ts │ │ ├── SupplementaryParser.ts │ │ └── Schedule.tsx │ ├── helpers │ │ └── UseConfigBoolean.ts │ └── initScheduleVisualizer.tsx ├── inject.ts ├── helpers │ └── getInstructorUWFlow.ts ├── main.tsx ├── index.css └── flow-links │ └── initFlowLinks.ts ├── tsconfig.node.json ├── vite.config.ts ├── tsconfig.json ├── .eslintrc.cjs ├── manifest.json ├── README.md ├── package.json └── LICENSE /.prettierignore: -------------------------------------------------------------------------------- 1 | dist -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | assets -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrandonXLF/quest-plus/main/public/logo.png -------------------------------------------------------------------------------- /src/schedule-visualizer/icons/OverlapIcon.css: -------------------------------------------------------------------------------- 1 | .alert { 2 | color: var(--alert); 3 | } 4 | -------------------------------------------------------------------------------- /src/schedule-visualizer/components/App.css: -------------------------------------------------------------------------------- 1 | #container { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /src/schedule-visualizer/components/IconLink.css: -------------------------------------------------------------------------------- 1 | .icon-link { 2 | white-space: nowrap; 3 | } 4 | 5 | .icon-link svg { 6 | padding-right: 0.2em; 7 | } 8 | -------------------------------------------------------------------------------- /src/schedule-visualizer/components/BorderlessButton.css: -------------------------------------------------------------------------------- 1 | .borderless-btn { 2 | border: none; 3 | background: none; 4 | padding: 0; 5 | font-size: inherit; 6 | cursor: pointer; 7 | } 8 | -------------------------------------------------------------------------------- /src/schedule-visualizer/components/Main.css: -------------------------------------------------------------------------------- 1 | .schedule-planner { 2 | display: flex; 3 | flex-direction: column; 4 | flex: 1; 5 | height: 0; 6 | padding-bottom: 1em; 7 | gap: 0.5em; 8 | } 9 | -------------------------------------------------------------------------------- /src/schedule-visualizer/components/App.tsx: -------------------------------------------------------------------------------- 1 | import './App.css'; 2 | import Main from './Main'; 3 | 4 | export default function App() { 5 | return ( 6 |