Merge "Scouting: Add DeleteFromStats() to db.go"
diff --git a/scouting/webserver/requests/messages/submit_actions.fbs b/scouting/webserver/requests/messages/submit_actions.fbs
index 863e2fc..dfb980f 100644
--- a/scouting/webserver/requests/messages/submit_actions.fbs
+++ b/scouting/webserver/requests/messages/submit_actions.fbs
@@ -15,6 +15,11 @@
     kHigh
 }
 
+table AutoBalanceAction {
+    docked:bool (id:0);
+    engaged:bool (id:1);
+}
+
 table PickupObjectAction {
     object_type:ObjectType (id:0);
     auto:bool (id:1);
@@ -36,6 +41,7 @@
 }
 
 union ActionType {
+    AutoBalanceAction,
     StartMatchAction,
     PickupObjectAction,
     PlaceObjectAction,
diff --git a/scouting/www/entry/entry.component.css b/scouting/www/entry/entry.component.css
index a78a00a..b41cb22 100644
--- a/scouting/www/entry/entry.component.css
+++ b/scouting/www/entry/entry.component.css
@@ -2,11 +2,6 @@
   padding: 10px;
 }
 
-.buttons {
-  display: flex;
-  justify-content: space-between;
-}
-
 textarea {
   width: 350px;
   height: 180px;
diff --git a/scouting/www/entry/entry.component.ts b/scouting/www/entry/entry.component.ts
index 9aae0d1..80f7e6a 100644
--- a/scouting/www/entry/entry.component.ts
+++ b/scouting/www/entry/entry.component.ts
@@ -15,6 +15,7 @@
   ScoreLevel,
   SubmitActions,
   StartMatchAction,
+  AutoBalanceAction,
   PickupObjectAction,
   PlaceObjectAction,
   RobotDeathAction,
@@ -53,6 +54,12 @@
       position: number;
     }
   | {
+      type: 'autoBalanceAction';
+      timestamp?: number;
+      docked: boolean;
+      engaged: boolean;
+    }
+  | {
       type: 'pickupObjectAction';
       timestamp?: number;
       objectType: ObjectType;
diff --git a/scouting/www/entry/entry.ng.html b/scouting/www/entry/entry.ng.html
index ec95f39..ca04fba 100644
--- a/scouting/www/entry/entry.ng.html
+++ b/scouting/www/entry/entry.ng.html
@@ -69,110 +69,163 @@
       </label>
     </div>
     <div class="buttons">
-      <button
-        class="btn btn-primary"
-        [disabled]="!selectedValue"
-        (click)="changeSectionTo('Pickup'); addAction({type: 'startMatchAction', position: selectedValue});"
-      >
-        Start Match
-      </button>
+      <!-- Creates a responsive stack of full-width, "block buttons". -->
+      <div class="d-grid gap-2">
+        <button
+          class="btn btn-primary"
+          [disabled]="!selectedValue"
+          (click)="changeSectionTo('Pickup'); addAction({type: 'startMatchAction', position: selectedValue});"
+        >
+          Start Match
+        </button>
+      </div>
     </div>
   </div>
 
   <div *ngSwitchCase="'Pickup'" id="PickUp" class="container-fluid">
-    <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
-    <button
-      class="btn btn-warning"
-      (click)="changeSectionTo('Place'); addAction({type: 'pickupObjectAction', objectType: ObjectType.kCone});"
-    >
-      CONE
-    </button>
-    <button
-      class="btn btn-primary"
-      (click)="changeSectionTo('Place'); addAction({type: 'pickupObjectAction', objectType: ObjectType.kCube});"
-    >
-      CUBE
-    </button>
-    <button
-      *ngIf="autoPhase"
-      class="btn btn-info"
-      (click)="autoPhase = false; addAction({type: 'endAutoPhase'});"
-    >
-      Start Teleop
-    </button>
-    <button
-      *ngIf="!autoPhase"
-      class="btn btn-info"
-      (click)="changeSectionTo('Endgame')"
-    >
-      Endgame
-    </button>
+    <div class="d-grid gap-2">
+      <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
+      <button
+        class="btn btn-warning"
+        (click)="changeSectionTo('Place'); addAction({type: 'pickupObjectAction', objectType: ObjectType.kCone});"
+      >
+        CONE
+      </button>
+      <button
+        class="btn btn-primary"
+        (click)="changeSectionTo('Place'); addAction({type: 'pickupObjectAction', objectType: ObjectType.kCube});"
+      >
+        CUBE
+      </button>
+      <!-- 'Balancing' during auto. -->
+      <div *ngIf="autoPhase" class="d-grid gap-2">
+        <label>
+          <input type="checkbox" (change)="dockedValue = $event.target.value" />
+          Docked
+        </label>
+        <label>
+          <input
+            type="checkbox"
+            (change)="engagedValue = $event.target.value"
+          />
+          Engaged
+        </label>
+        <br />
+        <button
+          class="btn btn-info"
+          (click)="addAction({type: 'autoBalanceAction', docked: dockedValue, engaged: engagedValue});"
+        >
+          Submit Balancing
+        </button>
+      </div>
+      <button
+        *ngIf="autoPhase"
+        class="btn btn-info"
+        (click)="autoPhase = false; addAction({type: 'endAutoPhase'});"
+      >
+        Start Teleop
+      </button>
+      <button
+        *ngIf="!autoPhase"
+        class="btn btn-info"
+        (click)="changeSectionTo('Endgame')"
+      >
+        Endgame
+      </button>
+    </div>
   </div>
 
   <div *ngSwitchCase="'Place'" id="Place" class="container-fluid">
-    <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
-    <button
-      class="btn btn-success"
-      (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kHigh});"
-    >
-      HIGH
-    </button>
-    <button
-      class="btn btn-warning"
-      (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kMiddle});"
-    >
-      MID
-    </button>
-    <button
-      class="btn btn-danger"
-      (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kLow});"
-    >
-      LOW
-    </button>
-    <button
-      *ngIf="autoPhase"
-      class="btn btn-info"
-      (click)="autoPhase = false; addAction({type: 'endAutoPhase'});"
-    >
-      Start Teleop
-    </button>
-    <button
-      *ngIf="!autoPhase"
-      class="btn btn-info"
-      (click)="changeSectionTo('Endgame')"
-    >
-      Endgame
-    </button>
+    <div class="d-grid gap-2">
+      <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
+      <button
+        class="btn btn-success"
+        (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kHigh});"
+      >
+        HIGH
+      </button>
+      <button
+        class="btn btn-warning"
+        (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kMiddle});"
+      >
+        MID
+      </button>
+      <button
+        class="btn btn-danger"
+        (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kLow});"
+      >
+        LOW
+      </button>
+      <!-- 'Balancing' during auto. -->
+      <div *ngIf="autoPhase" class="d-grid gap-2">
+        <label>
+          <input type="checkbox" (change)="dockedValue = $event.target.value" />
+          Docked
+        </label>
+        <label>
+          <input
+            type="checkbox"
+            (change)="engagedValue = $event.target.value"
+          />
+          Engaged
+        </label>
+        <br />
+        <button
+          class="btn btn-info"
+          (click)="addAction({type: 'autoBalanceAction', docked: dockedValue, engaged: engagedValue});"
+        >
+          Submit Balancing
+        </button>
+      </div>
+      <button
+        *ngIf="autoPhase"
+        class="btn btn-info"
+        (click)="autoPhase = false; addAction({type: 'endAutoPhase'});"
+      >
+        Start Teleop
+      </button>
+      <button
+        *ngIf="!autoPhase"
+        class="btn btn-info"
+        (click)="changeSectionTo('Endgame')"
+      >
+        Endgame
+      </button>
+    </div>
   </div>
 
   <div *ngSwitchCase="'Endgame'" id="Endgame" class="container-fluid">
-    <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
-    <label>
-      <input type="checkbox" (change)="dockedValue = $event.target.value" />
-      Docked
-    </label>
-    <label>
-      <input type="checkbox" (change)="engagedValue = $event.target.value" />
-      Engaged
-    </label>
-    <button
-      *ngIf="!autoPhase"
-      class="btn btn-info"
-      (click)="changeSectionTo('Review and Submit'); addAction({type: 'endMatchAction', docked: dockedValue, engaged: engagedValue});"
-    >
-      End Match
-    </button>
+    <div class="d-grid gap-2">
+      <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
+      <label>
+        <input type="checkbox" (change)="dockedValue = $event.target.value" />
+        Docked
+      </label>
+      <label>
+        <input type="checkbox" (change)="engagedValue = $event.target.value" />
+        Engaged
+      </label>
+      <button
+        *ngIf="!autoPhase"
+        class="btn btn-info"
+        (click)="changeSectionTo('Review and Submit'); addAction({type: 'endMatchAction', docked: dockedValue, engaged: engagedValue});"
+      >
+        End Match
+      </button>
+    </div>
   </div>
 
   <div *ngSwitchCase="'Review and Submit'" id="Review" class="container-fluid">
-    <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
-    <button
-      *ngIf="!autoPhase"
-      class="btn btn-warning"
-      (click)="submitActions();"
-    >
-      Submit
-    </button>
+    <div class="d-grid gap-2">
+      <button class="btn btn-danger" (click)="undoLastAction()">UNDO</button>
+      <button
+        *ngIf="!autoPhase"
+        class="btn btn-warning"
+        (click)="submitActions();"
+      >
+        Submit
+      </button>
+    </div>
   </div>
 
   <div *ngSwitchCase="'Success'" id="Success" class="container-fluid">