<commit_before><form class="forge-app-generator-component" role="form" #dynamicForm="ngForm" novalidate>
  <header class="container-fluid user-select-none">
    <div class="row">
      <div class="col-xs-12 wizard-step-title">
        <h3><strong>{{forgeClient.state.title}}</strong></h3>
        <div class="busy-indicator">
          <div *ngIf="!forgeClient.hasErrorMessage && forgeClient.processing===true" class="spinner spinner-lg"></div>
        </div>
        <span title="Close" id="forge-close-button" (click)="forgeClient.close()" class="pficon pficon-close"></span>
      </div>
    </div>
  </header>
  <forge-step-view  [class.hide]="forgeClient.hasProcessingMessage||forgeClient.hasSuccessMessage" [state]="forgeClient.state"  ></forge-step-view>

  <section  [class.hide]="!forgeClient.hasProcessingMessage" class="app-generator-message app-generator-message-processing">
    <div class="message-title-container">
      <div class="message-title">
        <span class="message-title-text" >{{forgeClient.processingMessage.title||''}}</span>
      </div>
    </div>
    <div class="message-body-container">
      <div class="message-body">
        <div class="busy-indicator">
          <div class="spinner spinner-lg"></div>
        </div>
      </div>

    </div>
  </section>

  <section [class.hide]="!forgeClient.hasErrorMessage" class="app-generator-message app-generator-message-error">
    <div class="message-title-container">

      <div class="message-title">
        <span class="message-title-icon fa-2x pficon pficon-error-circle-o"></span>
        <span class="message-title-icon-label" >Error!</span>
        <span class="message-title-text" >{{forgeClient.errorMessage.title||''}}</span>
      </div>

    </div>
    <div class="message-body-container">

      <div [innerHTML]="forgeClient.errorMessage.body" class="message-body"></div>

    </div>
  </section>

  <section [class.hide]="!forgeClient.hasSuccessMessage" class="app-generator-message app-generator-message-success">
    <div class="message-title-container">
      <div class="message-title">
        <span class="message-title-icon fa-2x pficon pficon-ok"></span>
        <span class="message-title-icon-label" >Success!</span>
        <span class="message-title-text">{{forgeClient.successMessage.title||''}}</span>
      </div>
    </div>
    <div class="message-body-container">
      <div [innerHTML]="forgeClient.successMessage.body" class="message-body">
      </div>
    </div>
  </section>

  <section [hidden]="forgeClient.hasErrorMessage||forgeClient.hasSuccessMessage||forgeClient.hasProcessingMessage" class="container-fluid padding-top-standard-offset">
    <div class="row">
      <div class="col-xs-12">
        <div class="form-horizontal">
          <div [class.has-danger]="!forgeClient.fields[i].display.valid" class="form-group" *ngFor="let field of forgeClient.fields; let i=index; trackBy:trackByFn">
            <label title="{{forgeClient.fields[i].display.label}}" [class.required]="forgeClient.fields[i].display.required===true" for="{{forgeClient.fields[i].name}}" *ngIf="field.display.showLabel!==false"
             [class.col-xs-12]="field.display.showLabel!==false" [class.col-sm-4]="field.display.showLabel!==false" class="user-select-none control-label">{{field.display.label}}</label>
            <div [class.col-sm-8]="field.display.showLabel!==false" [class.col-xs-12]="field.display.showLabel===false" [ngSwitch]="forgeClient.fields[i].display.inputType ">

              <div *ngSwitchCase="'singleInput'" [ngSwitch]="forgeClient.fields[i].valueType">
                <input *ngSwitchCase="'string'" id="{{forgeClient.fields[i].name}}" title="{{forgeClient.fields[i].display.label}}" name="{{forgeClient.fields[i].name}}" (change)="forgeClient.validate()"
                  (keyup.enter)="forgeClient.validate()" [(ngModel)]="forgeClient.fields[i].value" type="text" [class.form-control-danger]="!forgeClient.fields[i].display.valid"
                  class="form-control" placeholder="{{forgeClient.fields[i].description}}" [disabled]="forgeClient.fields[i].display.enabled===false"
                  [required]="forgeClient.fields[i].display.required" />
                <input *ngSwitchCase="'boolean'" style="box-shadow:none;" title="{{forgeClient.fields[i].display.label}}" [class.form-control-danger]="!forgeClient.fields[i].display.valid" (change)="forgeClient.validate()"
                  type="checkbox" name="{{forgeClient.fields[i].name}}" [(ngModel)]="forgeClient.fields[i].value" class="form-control"
                  [required]="forgeClient.fields[i].display.required" [disabled]="forgeClient.fields[i].display.enabled===false">
                <input *ngSwitchCase="'number'" [class.form-control-danger]="!forgeClient.fields[i].display.valid" title="{{forgeClient.fields[i].display.label}}" type="number" (change)="forgeClient.validate()"
                  name="{{forgeClient.fields[i].name}}" [(ngModel)]="forgeClient.fields[i].value" class="form-control" [required]="forgeClient.fields[i].display.required"
                  [disabled]="forgeClient.fields[i].display.enabled===false">
              </div>

              <div class="combobox-container" *ngSwitchCase="'singleSelectionDropdown'">
                <input type="hidden"   name value>
                <div [class.width-100]="forgeClient.fields[i].display.enabled===false" class="input-group">
                  <input type="text" title="{{forgeClient.fields[i].display.label}}" [class.form-control-danger]="!forgeClient.fields[i].display.valid" id="{{forgeClient.fields[i].name}}" name="{{forgeClient.fields[i].name}}"
                    class="user-select-none combobox form-control" readonly="true" (change)="forgeClient.validate()" [disabled]="forgeClient.fields[i].display.enabled===false"
                    (click)="forgeClient.fields[i].display.open =!forgeClient.fields[i].display.open" [(ngModel)]="forgeClient.fields[i].display.text" placeholder="select an option">
                  <ul class="dropdown-menu" [class.open]="forgeClient.fields[i].display.open">
                    <li class="choice-container" (click)="forgeClient.fields[i].display.text=choice.name;forgeClient.fields[i].display.note=choice.description;forgeClient.fields[i].value=choice.id;forgeClient.fields[i].display.open=false;forgeClient.validate();"
                      *ngFor="let choice of forgeClient.fields[i].display.choices">
                      <div [class.selected]="forgeClient.fields[i].value === choice.id" class="dropdown-menu-item user-select-none cursor-pointer">
                        <div [class.vertical-layout]="choice.verticalLayout===true" class="choice-item">
                          <div *ngIf="choice.hasIcon===true" class="choice-icon margin-right-standard-offset">
                            <div [ngClass]="[choice.icon]"></div>
                          </div>
                          <div class="choice-content">
                            <div class="item-name">{{choice.name}}</div>
                            <div *ngIf="choice.description" class="item-description">{{choice.description||''}}</div>
                          </div>

                        </div>
                      </div>

                    </li>
                  </ul>
                  <span *ngIf="forgeClient.fields[i].display.enabled" class="input-group-addon" (click)="forgeClient.fields[i].display.open =!forgeClient.fields[i].display.open">
                      <span class="caret"></span>
                  <span class="glyphicon glyphicon-remove"></span>
                  </span>
                </div>
              </div>
              <app-generator-single-selection-list class="input-group width-100" [appGenerator]="forgeClient" [field]="forgeClient.fields[i]"  *ngSwitchCase="'singleSelectionList'" ></app-generator-single-selection-list>

              <div *ngSwitchCase="'multipleSelection'" style="border:solid 1px #bbb; overflow:hidden;  ; border-radius:4px;">
                <!--input-->
                <div class="input-group">
                  <div class="input-group-btn">
                    <div (click)="toggleSelectAll(field)" class="btn btn-default btn-sm btn-left-multi-select-button">
                      <span [ngClass]="{'fa-check-square-o' : allOptionsSelected(forgeClient.fields[i]),'fa-square-o' : !allOptionsSelected(forgeClient.fields[i])}"
                        class="fa"></span>
                    </div>
                  </div>
                  <input #optionFilter [class.form-control-danger]="!forgeClient.fields[i].display.valid" id="{{forgeClient.fields[i].name}}" name="{{forgeClient.fields[i].name}}"
                    class="form-control form-control-filter-input" title="{{forgeClient.fields[i].display.label}}" (keyup)="filterList(forgeClient.fields[i],optionFilter.value)"
                  />
                  <div class="input-group-btn">
                    <div class="btn btn-default btn-sm btn-right-multi-select-button">
                      <span class="fa fa-search"></span>
                    </div>
                  </div>
                </div>
                <!--included list-->
                <div style="display:flex;flex-direction:row;flex-wrap:wrap; justify-content:start;" class="included-list">
                  <span class="btn btn-primary btn-sm" (click)="deselectOption(forgeClient.fields[i],choice)" *ngFor="let choice of forgeClient.fields[i].display.choices|selectedItems">
                      <span class="pficon pficon-close"  ></span> {{choice.id}}
                  </span>
                </div>
                <!--filtered list-->
                <div class="excluded-list">
                  <div [class.selected]="choice.selected" *ngFor="let choice of forgeClient.fields[i].display.choices|visibleItems">
                    <label (click)="toggleOption(forgeClient.fields[i],choice)" class="unselectedOption">
                      <span style="padding-left:5px;padding-right:5px;" class="fa"
                            [class.fa-check-square-o]="choice.selected"
                            [class.fa-square-o]="!choice.selected"></span>
                      {{choice.id}}
                    </label>
                  </div>
                </div>
              </div>
              <small class="form-text text-muted user-select-none" *ngIf="forgeClient.fields[i].display.note"><span class="color-info fa fa-info-circle"></span> <i>{{forgeClient.fields[i].display.note}}</i></small>
              <div *ngIf="!forgeClient.fields[i].display.valid" style="position:relative;height:auto;display:block;" class="form-control-feedback user-select-none">
                {{forgeClient.fields[i].display.message.description}}
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </section>
  <footer class="container-fluid padding-top-standard-offset" [class.border-transparent]="forgeClient.hasProcessingMessage" >
    <div class="row">
      <div class="col-xs-12 wizard-step-tool-bar with-items-at-end">
        <button title="Cancel" id="forge-cancel-button" type="button" class="btn btn-primary margin-right-5" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage && !forgeClient.hasProcessingMessage"
          (click)="forgeClient.cancel()">Cancel</button>
        <!--<button title="Back" type="button" class="btn btn-primary margin-right-5" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage !forgeClient.hasProcessingMessage" [disabled]="(!forgeClient.state.canMoveToPreviousStep)||(forgeClient.processing === true)"
            (click)="forgeClient.gotoPreviousStep()">Back</button>-->
        <button title="Next" id="forge-next-button" type="button" class="btn btn-primary margin-right-5" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage && !forgeClient.hasProcessingMessage"
          [disabled]="(!forgeClient.state.canMoveToNextStep)||(forgeClient.processing === true)" (click)="forgeClient.gotoNextStep()">Next</button>
        <button id="forge-finish-button" type="button" class="btn btn-primary" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage && !forgeClient.hasProcessingMessage"
          [disabled]="(!forgeClient.state.canExecute)||(forgeClient.processing === true)" (click)="forgeClient.finish()">Finish</button>
        <button title="OK" id="forge-error-ok-button" type="button" class="btn btn-primary" *ngIf="forgeClient.hasErrorMessage" (click)="forgeClient.acknowledgeErrorMessage()">OK</button>
        <button title="OK" id="forge-ok-button" type="button" class="btn btn-primary" *ngIf="forgeClient.hasSuccessMessage" (click)="forgeClient.acknowledgeSuccessMessage()">OK</button>
      </div>
    </div>
  </footer><commit_msg>fix(test): restored title inadvertently removed - title="Finish"<commit_after><form class="forge-app-generator-component" role="form" #dynamicForm="ngForm" novalidate>
  <header class="container-fluid user-select-none">
    <div class="row">
      <div class="col-xs-12 wizard-step-title">
        <h3><strong>{{forgeClient.state.title}}</strong></h3>
        <div class="busy-indicator">
          <div *ngIf="!forgeClient.hasErrorMessage && forgeClient.processing===true" class="spinner spinner-lg"></div>
        </div>
        <span title="Close" id="forge-close-button" (click)="forgeClient.close()" class="pficon pficon-close"></span>
      </div>
    </div>
  </header>
  <forge-step-view  [class.hide]="forgeClient.hasProcessingMessage||forgeClient.hasSuccessMessage" [state]="forgeClient.state"  ></forge-step-view>

  <section  [class.hide]="!forgeClient.hasProcessingMessage" class="app-generator-message app-generator-message-processing">
    <div class="message-title-container">
      <div class="message-title">
        <span class="message-title-text" >{{forgeClient.processingMessage.title||''}}</span>
      </div>
    </div>
    <div class="message-body-container">
      <div class="message-body">
        <div class="busy-indicator">
          <div class="spinner spinner-lg"></div>
        </div>
      </div>

    </div>
  </section>

  <section [class.hide]="!forgeClient.hasErrorMessage" class="app-generator-message app-generator-message-error">
    <div class="message-title-container">

      <div class="message-title">
        <span class="message-title-icon fa-2x pficon pficon-error-circle-o"></span>
        <span class="message-title-icon-label" >Error!</span>
        <span class="message-title-text" >{{forgeClient.errorMessage.title||''}}</span>
      </div>

    </div>
    <div class="message-body-container">

      <div [innerHTML]="forgeClient.errorMessage.body" class="message-body"></div>

    </div>
  </section>

  <section [class.hide]="!forgeClient.hasSuccessMessage" class="app-generator-message app-generator-message-success">
    <div class="message-title-container">
      <div class="message-title">
        <span class="message-title-icon fa-2x pficon pficon-ok"></span>
        <span class="message-title-icon-label" >Success!</span>
        <span class="message-title-text">{{forgeClient.successMessage.title||''}}</span>
      </div>
    </div>
    <div class="message-body-container">
      <div [innerHTML]="forgeClient.successMessage.body" class="message-body">
      </div>
    </div>
  </section>

  <section [hidden]="forgeClient.hasErrorMessage||forgeClient.hasSuccessMessage||forgeClient.hasProcessingMessage" class="container-fluid padding-top-standard-offset">
    <div class="row">
      <div class="col-xs-12">
        <div class="form-horizontal">
          <div [class.has-danger]="!forgeClient.fields[i].display.valid" class="form-group" *ngFor="let field of forgeClient.fields; let i=index; trackBy:trackByFn">
            <label title="{{forgeClient.fields[i].display.label}}" [class.required]="forgeClient.fields[i].display.required===true" for="{{forgeClient.fields[i].name}}" *ngIf="field.display.showLabel!==false"
             [class.col-xs-12]="field.display.showLabel!==false" [class.col-sm-4]="field.display.showLabel!==false" class="user-select-none control-label">{{field.display.label}}</label>
            <div [class.col-sm-8]="field.display.showLabel!==false" [class.col-xs-12]="field.display.showLabel===false" [ngSwitch]="forgeClient.fields[i].display.inputType ">

              <div *ngSwitchCase="'singleInput'" [ngSwitch]="forgeClient.fields[i].valueType">
                <input *ngSwitchCase="'string'" id="{{forgeClient.fields[i].name}}" title="{{forgeClient.fields[i].display.label}}" name="{{forgeClient.fields[i].name}}" (change)="forgeClient.validate()"
                  (keyup.enter)="forgeClient.validate()" [(ngModel)]="forgeClient.fields[i].value" type="text" [class.form-control-danger]="!forgeClient.fields[i].display.valid"
                  class="form-control" placeholder="{{forgeClient.fields[i].description}}" [disabled]="forgeClient.fields[i].display.enabled===false"
                  [required]="forgeClient.fields[i].display.required" />
                <input *ngSwitchCase="'boolean'" style="box-shadow:none;" title="{{forgeClient.fields[i].display.label}}" [class.form-control-danger]="!forgeClient.fields[i].display.valid" (change)="forgeClient.validate()"
                  type="checkbox" name="{{forgeClient.fields[i].name}}" [(ngModel)]="forgeClient.fields[i].value" class="form-control"
                  [required]="forgeClient.fields[i].display.required" [disabled]="forgeClient.fields[i].display.enabled===false">
                <input *ngSwitchCase="'number'" [class.form-control-danger]="!forgeClient.fields[i].display.valid" title="{{forgeClient.fields[i].display.label}}" type="number" (change)="forgeClient.validate()"
                  name="{{forgeClient.fields[i].name}}" [(ngModel)]="forgeClient.fields[i].value" class="form-control" [required]="forgeClient.fields[i].display.required"
                  [disabled]="forgeClient.fields[i].display.enabled===false">
              </div>

              <div class="combobox-container" *ngSwitchCase="'singleSelectionDropdown'">
                <input type="hidden"   name value>
                <div [class.width-100]="forgeClient.fields[i].display.enabled===false" class="input-group">
                  <input type="text" title="{{forgeClient.fields[i].display.label}}" [class.form-control-danger]="!forgeClient.fields[i].display.valid" id="{{forgeClient.fields[i].name}}" name="{{forgeClient.fields[i].name}}"
                    class="user-select-none combobox form-control" readonly="true" (change)="forgeClient.validate()" [disabled]="forgeClient.fields[i].display.enabled===false"
                    (click)="forgeClient.fields[i].display.open =!forgeClient.fields[i].display.open" [(ngModel)]="forgeClient.fields[i].display.text" placeholder="select an option">
                  <ul class="dropdown-menu" [class.open]="forgeClient.fields[i].display.open">
                    <li class="choice-container" (click)="forgeClient.fields[i].display.text=choice.name;forgeClient.fields[i].display.note=choice.description;forgeClient.fields[i].value=choice.id;forgeClient.fields[i].display.open=false;forgeClient.validate();"
                      *ngFor="let choice of forgeClient.fields[i].display.choices">
                      <div [class.selected]="forgeClient.fields[i].value === choice.id" class="dropdown-menu-item user-select-none cursor-pointer">
                        <div [class.vertical-layout]="choice.verticalLayout===true" class="choice-item">
                          <div *ngIf="choice.hasIcon===true" class="choice-icon margin-right-standard-offset">
                            <div [ngClass]="[choice.icon]"></div>
                          </div>
                          <div class="choice-content">
                            <div class="item-name">{{choice.name}}</div>
                            <div *ngIf="choice.description" class="item-description">{{choice.description||''}}</div>
                          </div>

                        </div>
                      </div>

                    </li>
                  </ul>
                  <span *ngIf="forgeClient.fields[i].display.enabled" class="input-group-addon" (click)="forgeClient.fields[i].display.open =!forgeClient.fields[i].display.open">
                      <span class="caret"></span>
                  <span class="glyphicon glyphicon-remove"></span>
                  </span>
                </div>
              </div>
              <app-generator-single-selection-list class="input-group width-100" [appGenerator]="forgeClient" [field]="forgeClient.fields[i]"  *ngSwitchCase="'singleSelectionList'" ></app-generator-single-selection-list>

              <div *ngSwitchCase="'multipleSelection'" style="border:solid 1px #bbb; overflow:hidden;  ; border-radius:4px;">
                <!--input-->
                <div class="input-group">
                  <div class="input-group-btn">
                    <div (click)="toggleSelectAll(field)" class="btn btn-default btn-sm btn-left-multi-select-button">
                      <span [ngClass]="{'fa-check-square-o' : allOptionsSelected(forgeClient.fields[i]),'fa-square-o' : !allOptionsSelected(forgeClient.fields[i])}"
                        class="fa"></span>
                    </div>
                  </div>
                  <input #optionFilter [class.form-control-danger]="!forgeClient.fields[i].display.valid" id="{{forgeClient.fields[i].name}}" name="{{forgeClient.fields[i].name}}"
                    class="form-control form-control-filter-input" title="{{forgeClient.fields[i].display.label}}" (keyup)="filterList(forgeClient.fields[i],optionFilter.value)"
                  />
                  <div class="input-group-btn">
                    <div class="btn btn-default btn-sm btn-right-multi-select-button">
                      <span class="fa fa-search"></span>
                    </div>
                  </div>
                </div>
                <!--included list-->
                <div style="display:flex;flex-direction:row;flex-wrap:wrap; justify-content:start;" class="included-list">
                  <span class="btn btn-primary btn-sm" (click)="deselectOption(forgeClient.fields[i],choice)" *ngFor="let choice of forgeClient.fields[i].display.choices|selectedItems">
                      <span class="pficon pficon-close"  ></span> {{choice.id}}
                  </span>
                </div>
                <!--filtered list-->
                <div class="excluded-list">
                  <div [class.selected]="choice.selected" *ngFor="let choice of forgeClient.fields[i].display.choices|visibleItems">
                    <label (click)="toggleOption(forgeClient.fields[i],choice)" class="unselectedOption">
                      <span style="padding-left:5px;padding-right:5px;" class="fa"
                            [class.fa-check-square-o]="choice.selected"
                            [class.fa-square-o]="!choice.selected"></span>
                      {{choice.id}}
                    </label>
                  </div>
                </div>
              </div>
              <small class="form-text text-muted user-select-none" *ngIf="forgeClient.fields[i].display.note"><span class="color-info fa fa-info-circle"></span> <i>{{forgeClient.fields[i].display.note}}</i></small>
              <div *ngIf="!forgeClient.fields[i].display.valid" style="position:relative;height:auto;display:block;" class="form-control-feedback user-select-none">
                {{forgeClient.fields[i].display.message.description}}
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </section>
  <footer class="container-fluid padding-top-standard-offset" [class.border-transparent]="forgeClient.hasProcessingMessage" >
    <div class="row">
      <div class="col-xs-12 wizard-step-tool-bar with-items-at-end">
        <button title="Cancel" id="forge-cancel-button" type="button" class="btn btn-primary margin-right-5" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage && !forgeClient.hasProcessingMessage"
          (click)="forgeClient.cancel()">Cancel</button>
        <!--<button title="Back" type="button" class="btn btn-primary margin-right-5" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage !forgeClient.hasProcessingMessage" [disabled]="(!forgeClient.state.canMoveToPreviousStep)||(forgeClient.processing === true)"
            (click)="forgeClient.gotoPreviousStep()">Back</button>-->
        <button title="Next" id="forge-next-button" type="button" class="btn btn-primary margin-right-5" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage && !forgeClient.hasProcessingMessage"
          [disabled]="(!forgeClient.state.canMoveToNextStep)||(forgeClient.processing === true)" (click)="forgeClient.gotoNextStep()">Next</button>
        <button title="Finish" id="forge-finish-button" type="button" class="btn btn-primary" *ngIf="!forgeClient.hasErrorMessage && !forgeClient.hasSuccessMessage && !forgeClient.hasProcessingMessage"
          [disabled]="(!forgeClient.state.canExecute)||(forgeClient.processing === true)" (click)="forgeClient.finish()">Finish</button>
        <button title="OK" id="forge-error-ok-button" type="button" class="btn btn-primary" *ngIf="forgeClient.hasErrorMessage" (click)="forgeClient.acknowledgeErrorMessage()">OK</button>
        <button title="OK" id="forge-ok-button" type="button" class="btn btn-primary" *ngIf="forgeClient.hasSuccessMessage" (click)="forgeClient.acknowledgeSuccessMessage()">OK</button>
      </div>
    </div>
  </footer>
{'fraction_non_alphanumeric': 0.1775875486381323, 'fraction_numerical': 0.002256809338521401, 'mean_word_length': 3.065970574276222, 'pattern_counts': {'":': 0, '<': 361, '<?xml version=': 0, '>': 361, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '683864', 'n_tokens_mistral': 7775, 'n_tokens_neox': 7237, 'n_words': 939}