Merge "Add isFlowsEnabled API"
diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts
index 3b19ca3..fc9b2f7 100644
--- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts
+++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section.ts
@@ -34,6 +34,10 @@
 import {MdOutlinedTextField} from '@material/web/textfield/outlined-text-field';
 import '@material/web/textfield/outlined-text-field';
 import {materialStyles} from '../../../styles/gr-material-styles';
+import {repeat} from 'lit/directives/repeat.js';
+import '@material/web/select/outlined-select';
+import '@material/web/select/select-option';
+import {MdOutlinedSelect} from '@material/web/select/outlined-select';
 
 const GLOBAL_NAME = 'GLOBAL_CAPABILITIES';
 
@@ -43,7 +47,7 @@
 
 @customElement('gr-access-section')
 export class GrAccessSection extends LitElement {
-  @query('#permissionSelect') private permissionSelect?: HTMLSelectElement;
+  @query('#permissionSelect') private permissionSelect?: MdOutlinedSelect;
 
   @property({type: String})
   repo?: RepoName;
@@ -81,6 +85,8 @@
   // private but used in test
   @state() permissions?: PermissionArray<EditablePermissionInfo>;
 
+  @state() private selectedIndex = 0;
+
   constructor() {
     super();
     this.addEventListener('access-saved', () => this.handleAccessSaved());
@@ -152,6 +158,8 @@
 
   override render() {
     if (!this.section) return;
+
+    const permissions = this.computePermissions();
     return html`
       <fieldset
         id="section"
@@ -182,16 +190,33 @@
           </div>
           <!-- end header -->
           <div class="sectionContent">
-            ${this.permissions?.map((permission, index) =>
-              this.renderPermission(permission, index)
+            ${repeat(
+              this.permissions ?? [],
+              perm => perm.id,
+              (permission, index) => this.renderPermission(permission, index)
             )}
             <div id="addPermission">
               Add permission:
-              <select id="permissionSelect">
-                ${this.computePermissions().map(item =>
-                  this.renderPermissionOptions(item)
+              <md-outlined-select
+                id="permissionSelect"
+                value=${permissions[this.selectedIndex]?.value.id ??
+                permissions[0]?.value.id ??
+                ''}
+                @change=${(e: Event) => {
+                  const sel = e.target as HTMLSelectElement;
+                  this.setSelectionIndex(sel.value);
+                }}
+              >
+                ${repeat(
+                  permissions,
+                  item => item.value.id,
+                  item => html`
+                    <md-select-option value=${item.value.id}>
+                      <div slot="headline">${item.value.name}</div>
+                    </md-select-option>
+                  `
                 )}
-              </select>
+              </md-outlined-select>
               <gr-button link id="addBtn" @click=${this.handleAddPermission}
                 >Add</gr-button
               >
@@ -238,13 +263,6 @@
     `;
   }
 
-  private renderPermissionOptions(item: {
-    id: string;
-    value: {name: string; id: string};
-  }) {
-    return html`<option value=${item.value.id}>${item.value.name}</option>`;
-  }
-
   override willUpdate(changedProperties: PropertyValues) {
     if (changedProperties.has('section')) {
       this.updateSection();
@@ -483,7 +501,9 @@
   // private but used in test
   handleAddPermission() {
     assertIsDefined(this.permissionSelect, 'permissionSelect');
-    const value = this.permissionSelect.value as GitRef;
+    const value = this.permissionSelect.getAttribute('value') as GitRef;
+    this.setSelectionIndex(value);
+
     const permission: PermissionArrayItem<EditablePermissionInfo> = {
       id: value,
       value: {rules: {}, added: true},
@@ -525,6 +545,14 @@
     this.permissions![index] = e.detail.value;
     this.requestUpdate();
   };
+
+  private setSelectionIndex(value: string) {
+    const currentIndex = this.computePermissions().findIndex(
+      p => p.value.id === value
+    );
+    const nextIndex = currentIndex % this.computePermissions().length;
+    this.selectedIndex = nextIndex;
+  }
 }
 
 declare global {
diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts
index 0688be6..a4760d8 100644
--- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_test.ts
@@ -87,7 +87,8 @@
                     role="button"
                     tabindex="0"
                   >
-                    <gr-icon icon="edit" id="icon" small filled></gr-icon>
+                    <gr-icon filled="" icon="edit" id="icon" small="">
+                    </gr-icon>
                   </gr-button>
                 </div>
                 <md-outlined-text-field
@@ -111,46 +112,103 @@
                 <gr-permission> </gr-permission>
                 <div id="addPermission">
                   Add permission:
-                  <select id="permissionSelect">
-                    <option value="label-Code-Review">Label Code-Review</option>
-                    <option value="labelAs-Code-Review">
-                      Label Code-Review (On Behalf Of)
-                    </option>
-                    <option value="removeLabel-Code-Review">
-                      Remove Label Code-Review
-                    </option>
-                    <option value="abandon">Abandon</option>
-                    <option value="addPatchSet">Add Patch Set</option>
-                    <option value="create">Create Reference</option>
-                    <option value="createSignedTag">Create Signed Tag</option>
-                    <option value="createTag">Create Annotated Tag</option>
-                    <option value="delete">Delete Reference</option>
-                    <option value="deleteChanges">Delete Changes</option>
-                    <option value="deleteOwnChanges">Delete Own Changes</option>
-                    <option value="editHashtags">Edit Hashtags</option>
-                    <option value="editTopicName">Edit Topic Name</option>
-                    <option value="forgeAuthor">Forge Author Identity</option>
-                    <option value="forgeCommitter">
-                      Forge Committer Identity
-                    </option>
-                    <option value="forgeServerAsCommitter">
-                      Forge Server Identity
-                    </option>
-                    <option value="owner">Owner</option>
-                    <option value="push">Push</option>
-                    <option value="pushMerge">Push Merge Commit</option>
-                    <option value="rebase">Rebase</option>
-                    <option value="removeReviewer">Remove Reviewer</option>
-                    <option value="revert">Revert</option>
-                    <option value="submit">Submit</option>
-                    <option value="submitAs">Submit (On Behalf Of)</option>
-                    <option value="toggleWipState">
-                      Toggle Work In Progress State
-                    </option>
-                    <option value="viewPrivateChanges">
-                      View Private Changes
-                    </option>
-                  </select>
+                  <md-outlined-select
+                    id="permissionSelect"
+                    value="label-Code-Review"
+                  >
+                    <md-select-option md-menu-item="" value="label-Code-Review">
+                      <div slot="headline">Label Code-Review</div>
+                    </md-select-option>
+                    <md-select-option
+                      md-menu-item=""
+                      value="labelAs-Code-Review"
+                    >
+                      <div slot="headline">
+                        Label Code-Review (On Behalf Of)
+                      </div>
+                    </md-select-option>
+                    <md-select-option
+                      md-menu-item=""
+                      value="removeLabel-Code-Review"
+                    >
+                      <div slot="headline">Remove Label Code-Review</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="abandon">
+                      <div slot="headline">Abandon</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="addPatchSet">
+                      <div slot="headline">Add Patch Set</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="create">
+                      <div slot="headline">Create Reference</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="createSignedTag">
+                      <div slot="headline">Create Signed Tag</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="createTag">
+                      <div slot="headline">Create Annotated Tag</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="delete">
+                      <div slot="headline">Delete Reference</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="deleteChanges">
+                      <div slot="headline">Delete Changes</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="deleteOwnChanges">
+                      <div slot="headline">Delete Own Changes</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="editHashtags">
+                      <div slot="headline">Edit Hashtags</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="editTopicName">
+                      <div slot="headline">Edit Topic Name</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="forgeAuthor">
+                      <div slot="headline">Forge Author Identity</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="forgeCommitter">
+                      <div slot="headline">Forge Committer Identity</div>
+                    </md-select-option>
+                    <md-select-option
+                      md-menu-item=""
+                      value="forgeServerAsCommitter"
+                    >
+                      <div slot="headline">Forge Server Identity</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="owner">
+                      <div slot="headline">Owner</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="push">
+                      <div slot="headline">Push</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="pushMerge">
+                      <div slot="headline">Push Merge Commit</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="rebase">
+                      <div slot="headline">Rebase</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="removeReviewer">
+                      <div slot="headline">Remove Reviewer</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="revert">
+                      <div slot="headline">Revert</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="submit">
+                      <div slot="headline">Submit</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="submitAs">
+                      <div slot="headline">Submit (On Behalf Of)</div>
+                    </md-select-option>
+                    <md-select-option md-menu-item="" value="toggleWipState">
+                      <div slot="headline">Toggle Work In Progress State</div>
+                    </md-select-option>
+                    <md-select-option
+                      md-menu-item=""
+                      value="viewPrivateChanges"
+                    >
+                      <div slot="headline">View Private Changes</div>
+                    </md-select-option>
+                  </md-outlined-select>
                   <gr-button
                     aria-disabled="false"
                     id="addBtn"
@@ -575,8 +633,18 @@
 
       test('add permission', async () => {
         element.editing = true;
-        queryAndAssert<HTMLSelectElement>(element, '#permissionSelect').value =
-          'label-Code-Review';
+        let permissionSelect = queryAndAssert<HTMLSelectElement>(
+          element,
+          '#permissionSelect'
+        );
+        permissionSelect.value = 'label-Code-Review';
+        permissionSelect.dispatchEvent(
+          new CustomEvent('change', {
+            composed: true,
+            bubbles: true,
+          })
+        );
+        await element.updateComplete;
         assert.equal(element.permissions!.length, 1);
         assert.equal(Object.keys(element.section!.value.permissions).length, 1);
         queryAndAssert<GrButton>(element, '#addBtn').click();
@@ -603,8 +671,18 @@
           permission.value
         );
 
-        queryAndAssert<HTMLSelectElement>(element, '#permissionSelect').value =
-          'abandon';
+        permissionSelect = queryAndAssert<HTMLSelectElement>(
+          element,
+          '#permissionSelect'
+        );
+        permissionSelect.value = 'abandon';
+        permissionSelect.dispatchEvent(
+          new CustomEvent('change', {
+            composed: true,
+            bubbles: true,
+          })
+        );
+        await element.updateComplete;
         queryAndAssert<GrButton>(element, '#addBtn').click();
         await element.updateComplete;
 
diff --git a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts
index 8bac5bd..d4849b2 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts
@@ -8,7 +8,6 @@
 import '../../../styles/shared-styles';
 import '../../shared/gr-autocomplete/gr-autocomplete';
 import '../../shared/gr-button/gr-button';
-import '../../shared/gr-select/gr-select';
 import {navigationToken} from '../../core/gr-navigation/gr-navigation';
 import {
   BranchName,
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
index 1e1a3ff..5572fad 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
@@ -11,11 +11,13 @@
 import {sharedStyles} from '../../../styles/shared-styles';
 import {css, html, LitElement, PropertyValues} from 'lit';
 import {customElement, property, state} from 'lit/decorators.js';
-import {ValueChangedEvent} from '../../../types/events';
 import {fire, fireAlert, fireReload} from '../../../utils/event-util';
 import {RepoDetailView} from '../../../models/views/repo';
 import '@material/web/textfield/outlined-text-field';
 import {materialStyles} from '../../../styles/gr-material-styles';
+import '@material/web/select/outlined-select';
+import '@material/web/select/select-option';
+import {convertToString} from '../../../utils/string-util';
 
 declare global {
   interface HTMLElementTagNameMap {
@@ -95,17 +97,21 @@
             </div>
             <div>
               <span class="value">
-                <gr-select
+                <md-outlined-select
                   id="initialCommit"
-                  .bindValue=${this.createEmptyCommit}
-                  @bind-value-changed=${this
-                    .handleCreateEmptyCommitBindValueChanged}
+                  value=${convertToString(this.createEmptyCommit ?? false)}
+                  @change=${(e: Event) => {
+                    const select = e.target as HTMLSelectElement;
+                    this.createEmptyCommit = select.value === 'true';
+                  }}
                 >
-                  <select>
-                    <option value="false">Existing Revision</option>
-                    <option value="true">Initial empty commit</option>
-                  </select>
-                </gr-select>
+                  <md-select-option value="false">
+                    <div slot="headline">Existing Revision</div>
+                  </md-select-option>
+                  <md-select-option value="true">
+                    <div slot="headline">Initial empty commit</div>
+                  </md-select-option>
+                </md-outlined-select>
               </span>
             </div>
           </section>
@@ -189,10 +195,4 @@
     }
     throw new Error(`Invalid itemDetail: ${this.itemDetail}`);
   }
-
-  private handleCreateEmptyCommitBindValueChanged(
-    e: ValueChangedEvent<string>
-  ) {
-    this.createEmptyCommit = e.detail.value === 'true';
-  }
 }
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts
index fd47ec1..5da0369 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.ts
@@ -51,12 +51,23 @@
               </div>
               <div>
                 <span class="value">
-                  <gr-select id="initialCommit">
-                    <select>
-                      <option value="false">Existing Revision</option>
-                      <option value="true">Initial empty commit</option>
-                    </select>
-                  </gr-select>
+                  <md-outlined-select id="initialCommit" value="false">
+                    <md-select-option
+                      data-aria-selected="true"
+                      md-menu-item=""
+                      tabindex="0"
+                      value="false"
+                    >
+                      <div slot="headline">Existing Revision</div>
+                    </md-select-option>
+                    <md-select-option
+                      md-menu-item=""
+                      tabindex="-1"
+                      value="true"
+                    >
+                      <div slot="headline">Initial empty commit</div>
+                    </md-select-option>
+                  </md-outlined-select>
                 </span>
               </div>
             </section>
diff --git a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
index 7c0db38..e8d1c70 100644
--- a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
+++ b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
@@ -5,7 +5,6 @@
  */
 import '../../shared/gr-autocomplete/gr-autocomplete';
 import '../../shared/gr-button/gr-button';
-import '../../shared/gr-select/gr-select';
 import {
   BranchName,
   GroupId,
diff --git a/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog.ts b/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog.ts
index 7470070..6f60850 100644
--- a/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog.ts
@@ -21,10 +21,10 @@
 import {HELP_ME_REVIEW_PROMPT, IMPROVE_COMMIT_MESSAGE} from './prompts';
 import {when} from 'lit/directives/when.js';
 import {copyToClipboard} from '../../../utils/common-util';
-import '@material/web/select/outlined-select.js';
-import '@material/web/select/select-option.js';
-import '@material/web/select/outlined-select.js';
-import '@material/web/select/select-option.js';
+import '@material/web/select/outlined-select';
+import '@material/web/select/select-option';
+import {materialStyles} from '../../../styles/gr-material-styles';
+import '@material/web/radio/radio';
 
 const PROMPT_TEMPLATES = {
   HELP_REVIEW: {
@@ -101,6 +101,7 @@
       fontStyles,
       sharedStyles,
       modalStyles,
+      materialStyles,
       css`
         :host {
           display: block;
@@ -148,7 +149,8 @@
         .template-option {
           display: flex;
           align-items: center;
-          gap: var(--spacing-s);
+          gap: var(--spacing-m);
+          margin-bottom: 0.5em;
         }
         textarea {
           width: 550px;
@@ -195,8 +197,7 @@
                       ${Object.entries(PROMPT_TEMPLATES).map(
                         ([key, template]) => html`
                           <label class="template-option">
-                            <input
-                              type="radio"
+                            <md-radio
                               name="template"
                               .value=${key}
                               ?checked=${this.selectedTemplate === key}
@@ -205,7 +206,8 @@
                                 this.selectedTemplate =
                                   input.value as PromptTemplateId;
                               }}
-                            />
+                            >
+                            </md-radio>
                             ${template.label}
                           </label>
                         `
diff --git a/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog_test.ts b/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog_test.ts
index 1d38f46..d55b48d 100644
--- a/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-ai-prompt-dialog/gr-ai-prompt-dialog_test.ts
@@ -31,80 +31,105 @@
     assert.shadowDom.equal(
       element,
       ` <section>
-          <h3 class="heading-3">Copy AI Prompt (experimental)</h3>
-        </section>
-        <section class="flexContainer">
-          <div class="content">
-            <div class="options-bar">
-              <div class="template-selector">
-                <div class="template-options">
-                  <label class="template-option">
-                    <input
-                      checked=""
-                      name="template"
-                      type="radio"
-                      value="HELP_REVIEW"
-                    />
-                    Help me with review
-                  </label>
-                  <label class="template-option">
-                    <input
-                      name="template"
-                      type="radio"
-                      value="IMPROVE_COMMIT_MESSAGE"
-                    />
-                    Improve commit message
-                  </label>
-                  <label class="template-option">
-                    <input name="template" type="radio" value="PATCH_ONLY" />
-                    Just patch content
-                  </label>
-                </div>
-              </div>
-              <div class="context-selector">
-                <md-outlined-select label="Context">
-                  <md-select-option md-menu-item="">
-                    <div slot="headline">3 lines (default)</div>
-                  </md-select-option>
-                  <md-select-option md-menu-item="">
-                    <div slot="headline">10 lines</div>
-                  </md-select-option>
-                  <md-select-option md-menu-item="">
-                    <div slot="headline">25 lines</div>
-                  </md-select-option>
-                  <md-select-option md-menu-item="">
-                    <div slot="headline">50 lines</div>
-                  </md-select-option>
-                  <md-select-option md-menu-item="">
-                    <div slot="headline">100 lines</div>
-                  </md-select-option>
-                </md-outlined-select>
-              </div>
-            </div>
-            <textarea
-              placeholder="Patch content will appear here..."
-              readonly=""
-            >
-            </textarea>
-            <div class="toolbar">
-              <div class="info-text">
-                    You can paste this prompt in an AI Model if your project
+         <h3 class="heading-3">
+           Copy AI Prompt (experimental)
+         </h3>
+       </section>
+       <section class="flexContainer">
+         <div class="content">
+           <div class="options-bar">
+             <div class="template-selector">
+               <div class="template-options">
+                 <label class="template-option">
+                   <md-radio
+                     checked=""
+                     name="template"
+                     tabindex="0"
+                   >
+                   </md-radio>
+                   Help me with review
+                 </label>
+                 <label class="template-option">
+                   <md-radio
+                     name="template"
+                     tabindex="-1"
+                   >
+                   </md-radio>
+                   Improve commit message
+                 </label>
+                 <label class="template-option">
+                   <md-radio
+                     name="template"
+                     tabindex="-1"
+                   >
+                   </md-radio>
+                   Just patch content
+                 </label>
+               </div>
+             </div>
+             <div class="context-selector">
+               <md-outlined-select label="Context">
+                 <md-select-option md-menu-item="">
+                   <div slot="headline">
+                     3 lines (default)
+                   </div>
+                 </md-select-option>
+                 <md-select-option md-menu-item="">
+                   <div slot="headline">
+                     10 lines
+                   </div>
+                 </md-select-option>
+                 <md-select-option md-menu-item="">
+                   <div slot="headline">
+                     25 lines
+                   </div>
+                 </md-select-option>
+                 <md-select-option md-menu-item="">
+                   <div slot="headline">
+                     50 lines
+                   </div>
+                 </md-select-option>
+                 <md-select-option md-menu-item="">
+                   <div slot="headline">
+                     100 lines
+                   </div>
+                 </md-select-option>
+               </md-outlined-select>
+             </div>
+           </div>
+           <textarea
+             placeholder="Patch content will appear here..."
+             readonly=""
+           >
+           </textarea>
+           <div class="toolbar">
+             <div class="info-text">
+               You can paste this prompt in an AI Model if your project
                     code can be shared with AI. We recommend a thinking model.
                     You can also use it for an AI Agent as context (a reference
                     to a git change).
-              </div>
-              <gr-button>
-                <gr-icon icon="content_copy" small=""> </gr-icon>
-                Copy Prompt
-              </gr-button>
-            </div>
-          </div>
-        </section>
-        <section class="footer">
-          <span class="closeButtonContainer">
-            <gr-button id="closeButton" link=""> Close </gr-button>
-          </span>
-        </section>`
+             </div>
+             <gr-button>
+               <gr-icon
+                 icon="content_copy"
+                 small=""
+               >
+               </gr-icon>
+               Copy Prompt
+             </gr-button>
+           </div>
+         </div>
+       </section>
+       <section class="footer">
+         <span class="closeButtonContainer">
+           <gr-button
+             id="closeButton"
+             link=""
+           >
+             Close
+           </gr-button>
+         </span>
+       </section>`
     );
   });
 });
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
index f702137..5ddc65e 100644
--- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
+++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
@@ -216,6 +216,7 @@
         .rebaseCheckbox {
           display: flex;
           align-items: center;
+          margin-top: 0.5em;
         }
         .rebaseOption {
           display: flex;
@@ -227,6 +228,13 @@
         .rebaseWithCommitterEmail {
           margin-top: var(--spacing-m);
         }
+        md-checkbox {
+          flex-shrink: 0;
+        }
+        gr-validation-options {
+          display: flex;
+          align-items: center;
+        }
       `,
     ];
   }
diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
index 96f4f01..dd3bed9 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
@@ -6,7 +6,6 @@
 import '../../diff/gr-diff-mode-selector/gr-diff-mode-selector';
 import '../../diff/gr-patch-range-select/gr-patch-range-select';
 import '../../edit/gr-edit-controls/gr-edit-controls';
-import '../../shared/gr-select/gr-select';
 import '../../shared/gr-button/gr-button';
 import '../../shared/gr-icon/gr-icon';
 import '../gr-commit-info/gr-commit-info';
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
index 9875784..b42c535 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
@@ -11,7 +11,6 @@
 import '../../shared/gr-button/gr-button';
 import '../../shared/gr-cursor-manager/gr-cursor-manager';
 import '../../shared/gr-icon/gr-icon';
-import '../../shared/gr-select/gr-select';
 import '../../shared/gr-tooltip-content/gr-tooltip-content';
 import '../../shared/gr-copy-clipboard/gr-copy-clipboard';
 import '../../shared/gr-file-status/gr-file-status';
diff --git a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts
index c5a4da0..35c991e 100644
--- a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts
+++ b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options.ts
@@ -25,13 +25,17 @@
     return [
       materialStyles,
       css`
-        .selectionLabel {
+        :host {
           display: block;
+        }
+        .selectionLabel {
           margin-left: -4px;
         }
         md-checkbox {
-          --md-checkbox-container-size: 15px;
-          --md-checkbox-icon-size: 15px;
+          flex-shrink: 0;
+        }
+        label {
+          cursor: pointer;
         }
       `,
     ];
@@ -60,10 +64,14 @@
     return html`
       <md-checkbox
         class="selectionLabel"
+        id=${option.name}
+        touch-target="wrapper"
         ?checked=${!!this.isOptionSelected.get(option.name)}
         @click=${() => this.toggleCheckbox(option)}
       ></md-checkbox>
-      ${capitalizeFirstLetter(option.description)}
+      <label for=${option.name}
+        >${capitalizeFirstLetter(option.description)}</label
+      >
     `;
   }
 
diff --git a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts
index 87eea0b..7bbdf85 100644
--- a/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts
+++ b/polygerrit-ui/app/elements/change/gr-validation-options/gr-validation-options_test.ts
@@ -32,8 +32,12 @@
     assert.shadowDom.equal(
       element,
       /* HTML */ `
-        <md-checkbox class="selectionLabel"></md-checkbox>Option 1
-        <md-checkbox class="selectionLabel"></md-checkbox>Option 2
+        <md-checkbox class="selectionLabel" id="o1" touch-target="wrapper">
+        </md-checkbox>
+        <label for="o1"> Option 1 </label>
+        <md-checkbox class="selectionLabel" id="o2" touch-target="wrapper">
+        </md-checkbox>
+        <label for="o2"> Option 2 </label>
       `
     );
   });
diff --git a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
index 1442610..6f59c01 100644
--- a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
+++ b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
@@ -4,7 +4,6 @@
  * SPDX-License-Identifier: Apache-2.0
  */
 import '../../shared/gr-dropdown-list/gr-dropdown-list';
-import '../../shared/gr-select/gr-select';
 import '../../shared/gr-weblink/gr-weblink';
 import {convertToString, pluralize} from '../../../utils/string-util';
 import {getAppContext} from '../../../services/app-context';
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
index b84aab3..1383737 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
@@ -8,7 +8,6 @@
 import '../../shared/gr-button/gr-button';
 import '../../shared/gr-diff-preferences/gr-diff-preferences';
 import '../../shared/gr-page-nav/gr-page-nav';
-import '../../shared/gr-select/gr-select';
 import '../../shared/gr-icon/gr-icon';
 import '../gr-account-info/gr-account-info';
 import '../gr-agreements-list/gr-agreements-list';