diff --git a/.github/pr-screenshots/week4-default-config-full-page.png b/.github/pr-screenshots/week4-default-config-full-page.png new file mode 100644 index 000000000..346c9b7b2 Binary files /dev/null and b/.github/pr-screenshots/week4-default-config-full-page.png differ diff --git a/config/2026/config.json b/config/2026/config.json index e58d7bce8..c7214d332 100644 --- a/config/2026/config.json +++ b/config/2026/config.json @@ -1,453 +1,453 @@ { - "title": "QRScout", - "page_title": "Rebuilt", - "delimiter": "\t", - "teamNumber": 2713, - "floatingField": { - "show": false, - "codeValue": "teamNumber" + "title": "QRScout", + "page_title": "Rebuilt", + "delimiter": "\t", + "teamNumber": 2713, + "floatingField": { + "show": false, + "codeValue": "teamNumber" + }, + "theme": { + "light": { + "background": "0 0% 100%", + "foreground": "0 0% 3.9%", + "card": "0 0% 100%", + "card_foreground": "0 0% 3.9%", + "popover": "0 0% 100%", + "popover_foreground": "0 0% 3.9%", + "primary": "354.44 71.3% 47.9%", + "primary_foreground": "0 85.7% 97.3%", + "secondary": "0 0% 96.1%", + "secondary_foreground": "0 0% 9%", + "muted": "0 0% 96.1%", + "muted_foreground": "0 0% 45.1%", + "accent": "0 0% 96.1%", + "accent_foreground": "0 0% 9%", + "destructive": "0 84.2% 60.2%", + "destructive_foreground": "0 0% 98%", + "border": "0 0% 89.8%", + "input": "0 0% 89.8%", + "ring": "354.44 71.3% 47.9%", + "chart_1": "12 76% 61%", + "chart_2": "173 58% 39%", + "chart_3": "197 37% 24%", + "chart_4": "43 74% 66%", + "chart_5": "27 87% 67%" }, - "theme": { - "light": { - "background": "0 0% 100%", - "foreground": "0 0% 3.9%", - "card": "0 0% 100%", - "card_foreground": "0 0% 3.9%", - "popover": "0 0% 100%", - "popover_foreground": "0 0% 3.9%", - "primary": "354.44 71.3% 47.9%", - "primary_foreground": "0 85.7% 97.3%", - "secondary": "0 0% 96.1%", - "secondary_foreground": "0 0% 9%", - "muted": "0 0% 96.1%", - "muted_foreground": "0 0% 45.1%", - "accent": "0 0% 96.1%", - "accent_foreground": "0 0% 9%", - "destructive": "0 84.2% 60.2%", - "destructive_foreground": "0 0% 98%", - "border": "0 0% 89.8%", - "input": "0 0% 89.8%", - "ring": "354.44 71.3% 47.9%", - "chart_1": "12 76% 61%", - "chart_2": "173 58% 39%", - "chart_3": "197 37% 24%", - "chart_4": "43 74% 66%", - "chart_5": "27 87% 67%" + "dark": { + "background": "0 0% 3.9%", + "foreground": "0 0% 98%", + "card": "0 0% 3.9%", + "card_foreground": "0 0% 98%", + "popover": "0 0% 3.9%", + "popover_foreground": "0 0% 98%", + "primary": "354.44 71.3% 47.9%", + "primary_foreground": "0 85.7% 97.3%", + "secondary": "0 0% 14.9%", + "secondary_foreground": "0 0% 98%", + "muted": "0 0% 14.9%", + "muted_foreground": "0 0% 63.9%", + "accent": "0 0% 14.9%", + "accent_foreground": "0 0% 98%", + "destructive": "0 62.8% 30.6%", + "destructive_foreground": "0 0% 98%", + "border": "0 0% 14.9%", + "input": "0 0% 14.9%", + "ring": "354.44 71.3% 47.9%", + "chart_1": "220 70% 50%", + "chart_2": "160 60% 45%", + "chart_3": "30 80% 55%", + "chart_4": "280 65% 60%", + "chart_5": "340 75% 55%" + } + }, + "sections": [ + { + "name": "Prematch", + "fields": [ + { + "title": "Scouter Initials", + "description": "Enter the initials of the scouter.", + "type": "text", + "required": true, + "code": "scouter", + "formResetBehavior": "preserve", + "defaultValue": "" + }, + { + "title": "Match Number", + "description": "Select the match number.", + "type": "TBA-match-number", + "required": true, + "code": "matchNumber", + "formResetBehavior": "increment", + "defaultValue": 1 + }, + { + "title": "Team and Robot", + "description": "Select the team and robot position you are scouting.", + "type": "TBA-team-and-robot", + "required": true, + "code": "robot", + "formResetBehavior": "preserve", + "defaultValue": null + }, + { + "title": "Starting Position", + "description": "The starting position of the robot.", + "type": "select", + "required": true, + "code": "startPos", + "formResetBehavior": "reset", + "defaultValue": "", + "choices": { + "OT": "Outpost Trench", + "OBFT": "Outpost Bump Favoring Trench", + "OBFH": "Outpost Bump Favoring Hub", + "H": "Hub", + "DBFH": "Depot Bump Favoring Hub", + "DBFT": "Depot Bump Favoring Trench", + "DT": "Depot Trench" + } + }, + { + "title": "No Show", + "description": "Check if the robot did not show up for the match.", + "type": "boolean", + "required": false, + "code": "noShow", + "formResetBehavior": "reset", + "defaultValue": false + } + ] + }, + { + "name": "Autonomous", + "fields": [ + { + "title": "Fuel Scored", + "description": "Approximate fuel scored during autonomous.", + "type": "multi-counter", + "required": false, + "code": "autoFuelScored", + "formResetBehavior": "reset", + "defaultValue": 0 + }, + { + "title": "Where Collected Fuel", + "description": "Areas where fuel was collect from during autonomous", + "type": "multi-select", + "required": false, + "code": "autoCollectLoc", + "formResetBehavior": "reset", + "choices": { + "1": "Outpost", + "2": "Depot", + "3": "Neutral Zone", + "4": "Neutral Zone 2nd Pass" + } + }, + { + "title": "Other Auto Actions", + "description": "Additional actions completed during autonomous", + "type": "multi-select", + "required": false, + "code": "autoAdditionAct", + "formResetBehavior": "reset", + "choices": { + "1": "Passed", + "2": "Bump", + "3": "Trench" + } }, - "dark": { - "background": "0 0% 3.9%", - "foreground": "0 0% 98%", - "card": "0 0% 3.9%", - "card_foreground": "0 0% 98%", - "popover": "0 0% 3.9%", - "popover_foreground": "0 0% 98%", - "primary": "354.44 71.3% 47.9%", - "primary_foreground": "0 85.7% 97.3%", - "secondary": "0 0% 14.9%", - "secondary_foreground": "0 0% 98%", - "muted": "0 0% 14.9%", - "muted_foreground": "0 0% 63.9%", - "accent": "0 0% 14.9%", - "accent_foreground": "0 0% 98%", - "destructive": "0 62.8% 30.6%", - "destructive_foreground": "0 0% 98%", - "border": "0 0% 14.9%", - "input": "0 0% 14.9%", - "ring": "354.44 71.3% 47.9%", - "chart_1": "220 70% 50%", - "chart_2": "160 60% 45%", - "chart_3": "30 80% 55%", - "chart_4": "280 65% 60%", - "chart_5": "340 75% 55%" + { + "title": "Robot Stuck or Astop in Auto?", + "description": "Did robot get stuck in Auto or have to be Astopped?", + "type": "boolean", + "required": false, + "code": "autoStuck", + "formResetBehavior": "reset", + "defaultValue": false + }, + { + "title": "Climbed", + "description": "Did the robot climb during autonomous?", + "type": "select", + "required": false, + "code": "autoClimbed", + "formResetBehavior": "reset", + "defaultValue": "No", + "choices": { + "No": "No Climb", + "Out": "Output Side", + "Mid": "Middle", + "Dep": "Depot Side", + "F": "Failed Climb" + } } + ] }, - "sections": [ + { + "name": "Teleop", + "fields": [ + { + "title": "Alliance won auto?", + "description": "Did your alliance win the autonomous period?", + "type": "boolean", + "required": false, + "code": "allianceWonAuto", + "formResetBehavior": "reset", + "defaultValue": false + }, + { + "title": "Actions", + "description": "Track actions performed during teleop.", + "type": "action-tracker", + "required": false, + "code": "teleopActions", + "formResetBehavior": "reset", + "defaultValue": null, + "mode": "hold", + "actions": [ + { + "label": "Faffing & Stuck", + "code": "faffing" + }, + { + "label": "Defense", + "code": "defense" + } + ], + "timerDuration": 135, + "autoStopSeconds": 150 + }, + { + "title": "Fuel Scored", + "description": "Approximate fuel scored during teleop.", + "type": "multi-counter", + "required": false, + "code": "teleopFuelScored", + "formResetBehavior": "reset", + "defaultValue": 0 + }, + { + "title": "Bump / Trench", + "description": "Did the robot go under the bump or over the trench at least once during the match?", + "type": "multi-select", + "required": false, + "code": "teleBumpTrench", + "formResetBehavior": "reset", + "choices": { + "1": "Bump", + "2": "Trench" + } + }, + { + "title": "Defended by opponent?", + "description": "Was the robot defended by an opponent during the match?", + "type": "boolean", + "required": false, + "code": "robotDefended", + "formResetBehavior": "reset", + "defaultValue": false + }, + { + "title": "Fuel Fed (Herded & Passed)", + "description": "Approximate fuel fed either by shooter or bumper herding during teleop.", + "type": "multi-counter", + "required": false, + "code": "teleopFuelFed", + "formResetBehavior": "reset", + "defaultValue": 0 + }, + { + "title": "Opposing Zone Actions", + "description": "If the robot went into the opposing zone, what actions were completed?", + "type": "multi-select", + "required": false, + "code": "teleOpposingActs", + "formResetBehavior": "reset", + "choices": { + "1": "Collecting", + "2": "Defense" + } + } + ] + }, + { + "name": "Endgame", + "fields": [ + { + "title": "Climbed", + "description": "The level the robot climbed during endgame.", + "type": "select", + "required": true, + "code": "climbed", + "formResetBehavior": "reset", + "defaultValue": "No", + "choices": { + "No": "No Climb", + "L1": "Level 1", + "L2": "Level 2", + "L3": "Level 3", + "F": "Failed Climb" + } + }, + { + "title": "Where Climbed", + "description": "Where on the tower did the robot climb?", + "type": "select", + "required": false, + "code": "climbPos", + "formResetBehavior": "reset", + "defaultValue": "No", + "choices": { + "No": "No Climb", + "Out": "Output Side", + "Mid": "Middle", + "Dep": "Depot Side" + } + }, + { + "title": "Mechanical Issue?", + "description": "Did the robot have a mechanical issue during the match?", + "type": "boolean", + "required": false, + "code": "mechIssue", + "formResetBehavior": "reset", + "defaultValue": false + }, + { + "title": "Died?", + "description": "Did the robot die during the match?", + "type": "boolean", + "required": false, + "code": "died", + "formResetBehavior": "reset", + "defaultValue": false + }, + { + "title": "Tipped/Fell Over", + "description": "Did the robot tip or fall over during the match?", + "type": "boolean", + "required": false, + "code": "tipped", + "formResetBehavior": "reset", + "defaultValue": false + } + ] + }, + { + "name": "Postmatch", + "fields": [ + { + "title": "Scoring Effectiveness", + "description": "Rate the robot's scoring effectiveness.", + "type": "range", + "required": false, + "code": "scoringEff", + "formResetBehavior": "reset", + "defaultValue": 3, + "min": 0, + "max": 5, + "step": 1 + }, + { + "title": "Scored How?", + "description": "How did the robot score?", + "type": "select", + "required": false, + "code": "scoredHow", + "formResetBehavior": "reset", + "defaultValue": "blank", + "choices": { + "blank": "(blank)", + "driving": "While driving", + "stationary": "While stationary", + "both": "Both", + "none": "No scoring" + } + }, + { + "title": "Scoring Location", + "description": "What locations in alliance zone did the robot score from?", + "type": "multi-select", + "required": false, + "code": "teleScoreLoc", + "formResetBehavior": "reset", + "choices": { + "1": "Outpost Trench", + "2": "Outpost", + "3": "Hub", + "4": "Ladder", + "5": "Depot", + "6": "Depot Trench" + } + }, { - "name": "Prematch", - "fields": [ - { - "title": "Scouter Initials", - "description": "Enter the initials of the scouter.", - "type": "text", - "required": true, - "code": "scouter", - "formResetBehavior": "preserve", - "defaultValue": "" - }, - { - "title": "Match Number", - "description": "Select the match number.", - "type": "TBA-match-number", - "required": true, - "code": "matchNumber", - "formResetBehavior": "increment", - "defaultValue": 1 - }, - { - "title": "Team and Robot", - "description": "Select the team and robot position you are scouting.", - "type": "TBA-team-and-robot", - "required": true, - "code": "robot", - "formResetBehavior": "preserve", - "defaultValue": null - }, - { - "title": "Starting Position", - "description": "The starting position of the robot.", - "type": "select", - "required": true, - "code": "startPos", - "formResetBehavior": "reset", - "defaultValue": "", - "choices": { - "OT": "Outpost Trench", - "OBFT": "Outpost Bump Favoring Trench", - "OBFH": "Outpost Bump Favoring Hub", - "H": "Hub", - "DBFH": "Depot Bump Favoring Hub", - "DBFT": "Depot Bump Favoring Trench", - "DT": "Depot Trench" - } - }, - { - "title": "No Show", - "description": "Check if the robot did not show up for the match.", - "type": "boolean", - "required": false, - "code": "noShow", - "formResetBehavior": "reset", - "defaultValue": false - } - ] + "title": "Feeding/Passing Skill", + "description": "Rate the robot's feeding skill.", + "type": "range", + "required": false, + "code": "feedingSkill", + "formResetBehavior": "reset", + "defaultValue": 3, + "min": 0, + "max": 5, + "step": 1 }, { - "name": "Autonomous", - "fields": [ - { - "title": "Fuel Scored", - "description": "Approximate fuel scored during autonomous.", - "type": "multi-counter", - "required": false, - "code": "autoFuelScored", - "formResetBehavior": "reset", - "defaultValue": 0 - }, - { - "title": "Where Collected Fuel", - "description": "Areas where fuel was collect from during autonomous", - "type": "multi-select", - "required": false, - "code": "autoCollectLoc", - "formResetBehavior": "reset", - "choices": { - "1": "Outpost", - "2": "Depot", - "3": "Neutral Zone", - "4": "Neutral Zone 2nd Pass" - } - }, - { - "title": "Other Auto Actions", - "description": "Additional actions completed during autonomous", - "type": "multi-select", - "required": false, - "code": "autoAdditionAct", - "formResetBehavior": "reset", - "choices": { - "1": "Passed", - "2": "Bump", - "3": "Trench" - } - }, - { - "title": "Robot Stuck or Astop in Auto?", - "description": "Did robot get stuck in Auto or have to be Astopped?", - "type": "boolean", - "required": false, - "code": "autoStuck", - "formResetBehavior": "reset", - "defaultValue": false - }, - { - "title": "Climbed", - "description": "Did the robot climb during autonomous?", - "type": "select", - "required": false, - "code": "autoClimbed", - "formResetBehavior": "reset", - "defaultValue": "No", - "choices": { - "No": "No Climb", - "Out": "Output Side", - "Mid": "Middle", - "Dep": "Depot Side", - "F": "Failed Climb" - } - } - ] + "title": "Passed How?", + "description": "How did the robot pass with their shooter (i.e. not herding balls with bumpers)?", + "type": "select", + "required": false, + "code": "passedHow", + "formResetBehavior": "reset", + "defaultValue": "blank", + "choices": { + "blank": "(blank)", + "driving": "While driving", + "stationary": "While stationary", + "both": "Both", + "none": "No Passing" + } }, { - "name": "Teleop", - "fields": [ - { - "title": "Alliance won auto?", - "description": "Did your alliance win the autonomous period?", - "type": "boolean", - "required": false, - "code": "allianceWonAuto", - "formResetBehavior": "reset", - "defaultValue": false - }, - { - "title": "Actions", - "description": "Track actions performed during teleop.", - "type": "action-tracker", - "required": false, - "code": "teleopActions", - "formResetBehavior": "reset", - "defaultValue": null, - "mode": "hold", - "actions": [ - { - "label": "Faffing & Stuck", - "code": "faffing" - }, - { - "label": "Defense", - "code": "defense" - } - ], - "timerDuration": 135, - "autoStopSeconds": 150 - }, - { - "title": "Fuel Scored", - "description": "Approximate fuel scored during teleop.", - "type": "multi-counter", - "required": false, - "code": "teleopFuelScored", - "formResetBehavior": "reset", - "defaultValue": 0 - }, - { - "title": "Bump / Trench", - "description": "Did the robot go under the bump or over the trench at least once during the match?", - "type": "multi-select", - "required": false, - "code": "teleBumpTrench", - "formResetBehavior": "reset", - "choices": { - "1": "Bump", - "2": "Trench" - } - }, - { - "title": "Defended by opponent?", - "description": "Was the robot defended by an opponent during the match?", - "type": "boolean", - "required": false, - "code": "robotDefended", - "formResetBehavior": "reset", - "defaultValue": false - }, - { - "title": "Fuel Fed (Herded & Passed)", - "description": "Approximate fuel fed either by shooter or bumper herding during teleop.", - "type": "multi-counter", - "required": false, - "code": "teleopFuelFed", - "formResetBehavior": "reset", - "defaultValue": 0 - }, - { - "title": "Opposing Zone Actions", - "description": "If the robot went into the opposing zone, what actions were completed?", - "type": "multi-select", - "required": false, - "code": "teleOpposingActs", - "formResetBehavior": "reset", - "choices": { - "1": "Collecting", - "2": "Defense" - } - } - ] + "title": "Defense Skill", + "description": "Rate the robot's defensive skill.", + "type": "range", + "required": false, + "code": "defSkill", + "formResetBehavior": "reset", + "defaultValue": 0, + "min": 0, + "max": 5, + "step": 1 }, { - "name": "Endgame", - "fields": [ - { - "title": "Climbed", - "description": "The level the robot climbed during endgame.", - "type": "select", - "required": true, - "code": "climbed", - "formResetBehavior": "reset", - "defaultValue": "No", - "choices": { - "No": "No Climb", - "L1": "Level 1", - "L2": "Level 2", - "L3": "Level 3", - "F": "Failed Climb" - } - }, - { - "title": "Where Climbed", - "description": "Where on the tower did the robot climb?", - "type": "select", - "required": false, - "code": "climbPos", - "formResetBehavior": "reset", - "defaultValue": "No", - "choices": { - "No": "No Climb", - "Out": "Output Side", - "Mid": "Middle", - "Dep": "Depot Side" - } - }, - { - "title": "Mechanical Issue?", - "description": "Did the robot have a mechanical issue during the match?", - "type": "boolean", - "required": false, - "code": "mechIssue", - "formResetBehavior": "reset", - "defaultValue": false - }, - { - "title": "Died?", - "description": "Did the robot die during the match?", - "type": "boolean", - "required": false, - "code": "died", - "formResetBehavior": "reset", - "defaultValue": false - }, - { - "title": "Tipped/Fell Over", - "description": "Did the robot tip or fall over during the match?", - "type": "boolean", - "required": false, - "code": "tipped", - "formResetBehavior": "reset", - "defaultValue": false - } - ] + "title": "Yellow/Red Card", + "type": "select", + "required": true, + "code": "yc", + "formResetBehavior": "reset", + "defaultValue": "No Card", + "choices": { + "No Card": "No Card", + "Yellow": "Yellow Card", + "Red": "Red Card" + } }, { - "name": "Postmatch", - "fields": [ - { - "title": "Scoring Effectiveness", - "description": "Rate the robot's scoring effectiveness.", - "type": "range", - "required": false, - "code": "scoringEff", - "formResetBehavior": "reset", - "defaultValue": 3, - "min": 0, - "max": 5, - "step": 1 - }, - { - "title": "Scored How?", - "description": "How did the robot score?", - "type": "select", - "required": false, - "code": "scoredHow", - "formResetBehavior": "reset", - "defaultValue": "blank", - "choices": { - "blank": "(blank)", - "driving": "While driving", - "stationary": "While stationary", - "both": "Both", - "none": "No scoring" - } - }, - { - "title": "Scoring Location", - "description": "What locations in alliance zone did the robot score from?", - "type": "multi-select", - "required": false, - "code": "teleScoreLoc", - "formResetBehavior": "reset", - "choices": { - "1": "Outpost Trench", - "2": "Outpost", - "3": "Hub", - "4": "Ladder", - "5": "Depot", - "6": "Depot Trench" - } - }, - { - "title": "Feeding/Passing Skill", - "description": "Rate the robot's feeding skill.", - "type": "range", - "required": false, - "code": "feedingSkill", - "formResetBehavior": "reset", - "defaultValue": 3, - "min": 0, - "max": 5, - "step": 1 - }, - { - "title": "Passed How?", - "description": "How did the robot pass with their shooter (i.e. not herding balls with bumpers)?", - "type": "select", - "required": false, - "code": "passedHow", - "formResetBehavior": "reset", - "defaultValue": "blank", - "choices": { - "blank": "(blank)", - "driving": "While driving", - "stationary": "While stationary", - "both": "Both", - "none": "No Passing" - } - }, - { - "title": "Defense Skill", - "description": "Rate the robot's defensive skill.", - "type": "range", - "required": false, - "code": "defSkill", - "formResetBehavior": "reset", - "defaultValue": 0, - "min": 0, - "max": 5, - "step": 1 - }, - { - "title": "Yellow/Red Card", - "type": "select", - "required": true, - "code": "yc", - "formResetBehavior": "reset", - "defaultValue": "No Card", - "choices": { - "No Card": "No Card", - "Yellow": "Yellow Card", - "Red": "Red Card" - } - }, - { - "title": "Comments", - "type": "text", - "required": true, - "code": "co", - "formResetBehavior": "reset", - "defaultValue": "", - "min": 0, - "max": 100 - } - ] + "title": "Comments", + "type": "text", + "required": true, + "code": "co", + "formResetBehavior": "reset", + "defaultValue": "", + "min": 0, + "max": 100 } - ] -} \ No newline at end of file + ] + } + ] +}