{"version":3,"file":"simplified-ui.mjs","sources":["../../../projects/simplified-ui/src/lib/simplified-ui.service.ts","../../../projects/simplified-ui/src/lib/simplified-ui.component.ts","../../../projects/simplified-ui/src/lib/material-module/material.module.ts","../../../projects/simplified-ui/src/lib/sa-primary-button/sa-primary-button.component.ts","../../../projects/simplified-ui/src/lib/sa-primary-button/sa-primary-button.component.html","../../../projects/simplified-ui/src/lib/models/SaTableDataSource.ts","../../../projects/simplified-ui/src/lib/services/sa-table-data-source.service.ts","../../../projects/simplified-ui/src/lib/models/DataFilterModels.ts","../../../projects/simplified-ui/src/lib/models/DatePickerConfigModel.ts","../../../projects/simplified-ui/src/lib/pipes/sa-date-time.pipe.ts","../../../projects/simplified-ui/src/lib/models/SaSelectModels.ts","../../../projects/simplified-ui/src/lib/sa-select/sa-select.component.ts","../../../projects/simplified-ui/src/lib/sa-select/sa-select.component.html","../../../projects/simplified-ui/src/lib/sa-date-picker/sa-date-picker.component.ts","../../../projects/simplified-ui/src/lib/sa-date-picker/sa-date-picker.component.html","../../../projects/simplified-ui/src/lib/sa-data-filter/sa-data-filter.component.ts","../../../projects/simplified-ui/src/lib/sa-data-filter/sa-data-filter.component.html","../../../projects/simplified-ui/src/lib/models/DataTableModel.ts","../../../projects/simplified-ui/src/lib/pipes/sa-value-formatter.pipe.ts","../../../projects/simplified-ui/src/lib/sa-data-table/sa-data-table.component.ts","../../../projects/simplified-ui/src/lib/sa-data-table/sa-data-table.component.html","../../../projects/simplified-ui/src/lib/sa-secondary-button/sa-secondary-button.component.ts","../../../projects/simplified-ui/src/lib/sa-secondary-button/sa-secondary-button.component.html","../../../projects/simplified-ui/src/lib/sa-anchor-button/sa-anchor-button.component.ts","../../../projects/simplified-ui/src/lib/sa-anchor-button/sa-anchor-button.component.html","../../../projects/simplified-ui/src/lib/sa-currency-input/sa-currency-input.component.ts","../../../projects/simplified-ui/src/lib/sa-currency-input/sa-currency-input.component.html","../../../projects/simplified-ui/src/lib/sa-table-of-contents/sa-table-of-contents.component.ts","../../../projects/simplified-ui/src/lib/sa-table-of-contents/sa-table-of-contents.component.html","../../../projects/simplified-ui/src/lib/sa-text-editor/sa-text-quill-base.ts","../../../projects/simplified-ui/src/lib/sa-text-editor/sa-text-editor.component.ts","../../../projects/simplified-ui/src/lib/sa-text-editor/sa-text-editor.component.html","../../../projects/simplified-ui/src/lib/sa-base-header/sa-base-header.component.ts","../../../projects/simplified-ui/src/lib/sa-base-header/sa-base-header.component.html","../../../projects/simplified-ui/src/lib/sa-button/sa-button.component.ts","../../../projects/simplified-ui/src/lib/sa-button/sa-button.component.html","../../../projects/simplified-ui/src/lib/sa-header/sa-header.component.ts","../../../projects/simplified-ui/src/lib/sa-header/sa-header.component.html","../../../projects/simplified-ui/src/lib/sa-base-page/sa-base-page.component.ts","../../../projects/simplified-ui/src/lib/sa-base-page/sa-base-page.component.html","../../../projects/simplified-ui/src/lib/sa-navigable-page/sa-navigable-page.component.ts","../../../projects/simplified-ui/src/lib/sa-navigable-page/sa-navigable-page.component.html","../../../projects/simplified-ui/src/lib/sa-stepper/sa-stepper.component.ts","../../../projects/simplified-ui/src/lib/sa-stepper/sa-stepper.component.html","../../../projects/simplified-ui/src/lib/models/ActionElementConfig.ts","../../../projects/simplified-ui/src/lib/sa-more-menu/sa-more-menu.component.ts","../../../projects/simplified-ui/src/lib/sa-more-menu/sa-more-menu.component.html","../../../projects/simplified-ui/src/lib/directives/sa-spinner.directive.ts","../../../projects/simplified-ui/src/lib/pipes/abbreviate-number.pipe.ts","../../../projects/simplified-ui/src/lib/sa-page-header/sa-page-header.component.ts","../../../projects/simplified-ui/src/lib/sa-page-header/sa-page-header.component.html","../../../projects/simplified-ui/src/lib/simplified-ui.module.ts","../../../projects/simplified-ui/src/lib/models/SaButton.ts","../../../projects/simplified-ui/src/lib/models/NavigationItem.ts","../../../projects/simplified-ui/src/lib/models/RequestModel.ts","../../../projects/simplified-ui/src/public-api.ts","../../../projects/simplified-ui/src/simplified-ui.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SimplifiedUiService {\n  constructor() {}\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'lib-simplified-ui',\n  template: `\n    <p>\n      simplified-ui works!\n    </p>\n  `,\n  styles: []\n})\nexport class SimplifiedUiComponent implements OnInit {\n  constructor() {}\n\n  ngOnInit() {}\n}\n","import { NgModule } from '@angular/core';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule, MatRippleModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\n\n@NgModule({\n  imports: [\n    CdkTableModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatButtonToggleModule,\n    MatCardModule,\n    MatCheckboxModule,\n    MatChipsModule,\n    MatStepperModule,\n    MatDatepickerModule,\n    MatDialogModule,\n    MatDividerModule,\n    MatExpansionModule,\n    MatGridListModule,\n    MatIconModule,\n    MatInputModule,\n    MatListModule,\n    MatMenuModule,\n    MatNativeDateModule,\n    MatPaginatorModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatRadioModule,\n    MatRippleModule,\n    MatSelectModule,\n    MatSidenavModule,\n    MatSliderModule,\n    MatSlideToggleModule,\n    MatSnackBarModule,\n    MatSortModule,\n    MatTableModule,\n    MatTabsModule,\n    MatToolbarModule,\n    MatTooltipModule,\n    MatFormFieldModule,\n    OverlayModule,\n    PortalModule\n  ],\n  exports: [\n    CdkTableModule,\n    MatAutocompleteModule,\n    MatButtonModule,\n    MatButtonToggleModule,\n    MatCardModule,\n    MatCheckboxModule,\n    MatChipsModule,\n    MatStepperModule,\n    MatDatepickerModule,\n    MatDialogModule,\n    MatDividerModule,\n    MatExpansionModule,\n    MatGridListModule,\n    MatIconModule,\n    MatInputModule,\n    MatListModule,\n    MatMenuModule,\n    MatNativeDateModule,\n    MatPaginatorModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatRadioModule,\n    MatRippleModule,\n    MatSelectModule,\n    MatSidenavModule,\n    MatSliderModule,\n    MatSlideToggleModule,\n    MatSnackBarModule,\n    MatSortModule,\n    MatTableModule,\n    MatTabsModule,\n    MatToolbarModule,\n    MatTooltipModule,\n    OverlayModule,\n    MatFormFieldModule,\n    PortalModule\n  ]\n})\nexport class MaterialModule {}\n","import { Component, Input, HostListener, ElementRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { SaButton } from '../models/SaButton';\n\n@Component({\n  selector: 'sa-primary-button',\n  templateUrl: './sa-primary-button.component.html',\n  styleUrls: ['./sa-primary-button.component.scss']\n})\nexport class SaPrimaryButtonComponent {\n  @Input() button: SaButton;\n  @Input() isDisabled: boolean = false;\n  @Input() isLoading: boolean = false;\n\n  constructor() {}\n\n  @HostListener('click', ['$event'])\n  clickHandler(evt) {\n    this.button.triggerNext(evt);\n  }\n}\n","<button mat-flat-button color=\"primary\" [disabled]=\"isDisabled\" class=\"button\">\n  <span fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"5px\">\n    <span>\n      {{ button.title }}\n    </span>\n    <mat-spinner *ngIf=\"isLoading\" color=\"primary\" diameter=\"20\"></mat-spinner>\n  </span>\n</button>\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { IFilterModel } from './DataFilterModels';\n\n/**\n * Interface used for the common table filter,\n * used inside CommonTableDataSource for persisting filter states\n */\nexport interface SaCommonTableFilter {\n  /** The zero-based page index of the displayed list of items. Defaulted to 0. */\n  pageNo?: number;\n  /** Number of items to display on a page. By default set to 100. */\n  pageSize?: number;\n  /** The id of the most recently sorted table column. Defaulted to 0. */\n  sortCol?: string | number;\n  /** The sort direction of the currently sorted column. Defaults to ascending */\n  sortDir?: SortDirection;\n  /** Term that should be used to filter out objects from the data array */\n  filterModel?: IFilterModel;\n  /** Stream to represent when the keyword has been updated */\n  filterModelChange?: Observable<IFilterModel>;\n}\n\n//move to separate enum file\n\n/** Sort Direction enum */\nexport enum SortDirection {\n  /** Ascending sort order */\n  Asc,\n  /** Descending sort order */\n  Desc,\n  /** Unsorted state, used by angular material sort header if 'matSortDisableClear' flag is not set*/\n  None\n}\n\n/** Defaults for the CommonTableFilter */\nexport class DefaultCommonTableFilter implements SaCommonTableFilter {\n  pageNo = 0;\n  pageSize = 20;\n  sortCol = 0;\n  sortDir = SortDirection.Desc;\n  /** Term that should be used to filter out objects from the data array\n   * Note: setting keyword trigger's keywordChange event*/\n  get filterModel(): IFilterModel {\n    return this.filterModelChange.value;\n  }\n  set filterModel(model: IFilterModel) {\n    this.filterModelChange.next(model);\n  }\n  filterModelChange = new BehaviorSubject<IFilterModel>({\n    keyword: ''\n  });\n\n  /**\n   * Provides a new instance of the CommonTableFilter with the configured default values.\n   *\n   * @param override optional function, to override any of the default values for this instance\n   */\n  constructor(override?: (instance: DefaultCommonTableFilter) => void) {\n    if (override) {\n      override(this);\n    }\n  }\n}\n","import { DataSource } from '@angular/cdk/table';\nimport { Observable, BehaviorSubject, of, Subscription, merge, combineLatest, Subject } from 'rxjs';\nimport { SaCommonTableFilter, DefaultCommonTableFilter, SortDirection } from '../models/SaTableDataSource';\nimport { map, tap, debounceTime } from 'rxjs/operators';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { IFilterModel } from '../models/DataFilterModels';\n\n/**\n * Data source that accepts a stream of data array and includes native support of filtering,\n * sorting (using MatSort), and pagination (using MatPaginator).\n *\n * It extends the default MatTableDataSource (which only works with client-side data array)\n * to include support for rendering paginated/sorted content coming from the server-side.\n */\n\nexport class SaTableDataSource<MODEL, FILTER extends SaCommonTableFilter> extends DataSource<MODEL> {\n  /** Stream emitting render data to the table (depends on ordered data changes). */\n  private readonly _renderData = new BehaviorSubject<MODEL[]>([]);\n  /**\n   * Subscription to the changes that should trigger an update to the table's rendered rows, such\n   * as filtering, sorting, pagination, or base data changes.\n   */\n  private _renderChangesSubscription = Subscription.EMPTY;\n  /** mat table data source reference, used for calling helper functions defined in it */\n  private _matTableDataSource = new MatTableDataSource<MODEL>();\n  /**\n   * Instance of the MatSort directive used by the table to control its sorting. Sort changes\n   * emitted by the MatSort will trigger onFilterChanges() event, containing the updated filter value,\n   * which can then be used to send updated data stream.\n   */\n  public get sort(): MatSort | null {\n    return this._sort;\n  }\n  public set sort(sort: MatSort | null) {\n    this._sort = sort;\n    this._updateChangeSubscription();\n  }\n  private _sort: MatSort | null;\n  /**\n   * Instance of the MatPaginator component used by the table to control what page of the data is\n   * displayed. Page changes emitted by the MatPaginator will trigger onFilterChanges() event,\n   * containing the updated filter value, which can then be used to send updated data stream.\n   *\n   * Note that the data source uses the paginator's properties to calculate which page of data\n   * should be displayed. If the paginator receives its properties as template inputs,\n   * e.g. `[pageLength]=100` or `[pageIndex]=1`, then be sure that the paginator's view has been\n   * initialized before assigning it to this data source.\n   */\n  public get paginator(): MatPaginator | null {\n    return this._paginator;\n  }\n  public set paginator(paginator: MatPaginator | null) {\n    this._paginator = paginator;\n    this._updateChangeSubscription();\n  }\n  private _paginator: MatPaginator | null;\n  /**\n   * Gets a sorted copy of the data array based on the state of the MatSort. Called\n   * after changes are made to the filtered data or when sort changes are emitted from MatSort.\n   * By default, the function retrieves the active sort and its direction and compares data\n   * by retrieving data using the sortingDataAccessor. May be overridden for a custom implementation\n   * of data ordering.\n   * @param data The array of data that should be sorted.\n   * @param sort The connected MatSort that holds the current sort state.\n   */\n  public get sortData(): (data: MODEL[], sort: MatSort) => MODEL[] {\n    return this._matTableDataSource.sortData;\n  }\n  public set sortData(sortingFunc) {\n    this._matTableDataSource.sortData = sortingFunc;\n  }\n  /**\n   * Data accessor function that is used for accessing data properties for sorting through\n   * the default sortData function.\n   * This default function assumes that the sort header IDs (which defaults to the column name)\n   * matches the data's properties (e.g. column Xyz represents data['Xyz']).\n   * May be set to a custom function for different behavior.\n   * @param data Data object that is being accessed.\n   * @param sortHeaderId The name of the column that represents the data.\n   */\n  public get sortingDataAccessor(): (data: MODEL, sortHeaderId: string) => string | number {\n    return this._matTableDataSource.sortingDataAccessor;\n  }\n  public set sortingDataAccessor(sortingAccessorFunc) {\n    this._matTableDataSource.sortingDataAccessor = sortingAccessorFunc;\n  }\n  /**\n   * Event triggered when any of the sort/pagination/keyword filter changes, or\n   * is triggered programmatically using triggerFilterChange() method.\n   * Contains the updated filter state as the first parameter within the callback function.\n   */\n  public readonly onFilterChange = new Subject<FILTER>();\n  /** Event emitter used for triggering manual filter change events */\n  private _filterChangeTrigger = new Subject<string>();\n  private readonly _MANUAL_CHANGE_TRIGGER: string = 'manual_change_trigger';\n  /**\n   * Initializes a new instance of CommonTableDataSource to render the stream of data within the mat table.\n   *\n   * [Usage]\n   * - Use the data stream passed in the constructor to update the rendered content within the table.\n   * - Use the `isAllClientSideData` flag to control if the rendered content needs to be filtered on the client-side or not.\n   * - If using the `MatSort` and/or `MatPaginator` directive, attach their reference to the source after they have been initialized in the view.\n   *\n   * The OnFilterChange() event is triggered once on initialization and every time a filter state is changed or triggerFilterChange() is called,\n   * which can be used to pass new stream of data.\n   *\n   * @param dataStream            The stream of data that needs to be render'd within the table, and can change overtime\n   * @param filter                Optional generic filter model to persist the states of sort and paginator directives,\n   *                              if not provided, uses the defaultCommonTableFilter\n   * @param isAllClientSideData   True, if the stream of data contains all the unfiltered data, in which case it would\n   *                              use the native sort and pagination helper methods from MatTableDataSource to filter out\n   *                              the rendered records client-side. If false, no such filtering is done, as it is expected that the\n   *                              filtered data would be updated through data stream.\n   */\n  constructor(public dataStream: Observable<MODEL[]>, public filter?: FILTER, public isAllClientSideData?: boolean) {\n    super();\n    this.filter = this.filter || <FILTER>(new DefaultCommonTableFilter() as any);\n    this._updateChangeSubscription();\n  }\n  /**\n   * Subscribe to changes that should trigger an update to the table's rendered rows. When the\n   * changes occur, process the current state of the filter and trigger filter change\n   * which then facilitates new stream of data coming in.\n   */\n  private _updateChangeSubscription() {\n    // Sorting and/or pagination should be watched if MatSort and/or MatPaginator are provided.\n    // The events should emit whenever the component emits a change or initializes, or if no\n    // component is provided, a stream with just a null event should be provided.\n    // The `sortChange` and `pageChange` acts as a signal to the merge events below so that the\n    // pipeline can progress to the next step. Note that the value from these streams are not used,\n    // they purely act as a signal to progress in the pipeline.\n    const sortChange: Observable<Sort | null | void> = this._sort\n      ? (merge(this._sort.sortChange, this._sort.initialized) as Observable<Sort | void>)\n      : of(null);\n    const pageChange: Observable<PageEvent | null | void> = this._paginator\n      ? (merge(this._paginator.page, this._paginator.initialized) as Observable<PageEvent | void>)\n      : of(null);\n    const keywordChange: Observable<IFilterModel | null> = this.filter.filterModelChange\n      ? this.filter.filterModelChange\n      : of(null);\n    //merge all the filter change events\n    const filterChange = merge(sortChange, pageChange, keywordChange, this._filterChangeTrigger).pipe(\n      // populate the current state of filters on change\n      tap((e: any) => this._updateFilters(e)),\n      // provide the current state of filter\n      map((e) => {\n        return {\n          filter: { filterModel: this.filter.filterModel, ...(this.filter as SaCommonTableFilter) } as FILTER,\n          isManualTrigger: e === this._MANUAL_CHANGE_TRIGGER\n        };\n      }),\n      // helps to suppress the multiple initial filter state events,\n      // which can trigger if _updateChangeSubscription() is called in quick succession multiple times\n      debounceTime(10),\n      // trigger the filter change event with the current filter state\n      tap(() => this.onFilterChange.next(this.filter))\n    );\n    // watch for base data stream or filter changes to provide a filtered set of data\n    const filteredData = combineLatest(this.dataStream, filterChange).pipe(\n      map(([data]) => this._filterData((data as unknown) as MODEL[]))\n    );\n    // watched for filtered data changes and send the result to the table to render.\n    this._renderChangesSubscription.unsubscribe();\n    this._renderChangesSubscription = filteredData.subscribe((data) => {\n      this._renderData.next(data);\n    });\n  }\n  /**\n   * Returns a filtered set of data array (for client-side data only), by applying the current state of filter\n   * i.e applying sorting,paging and keyword filter states.\n   * @param data  the whole set of data that needs to be filtered\n   */\n  private _filterData(data: MODEL[]): MODEL[] {\n    if (!this.isAllClientSideData)\n      //skip filtering if not all client-side data\n      return data;\n    //filter data using matTableDataSource native functions\n    this._matTableDataSource.filter = this.filter.filterModel.keyword;\n    let filteredData = this._matTableDataSource._filterData(data);\n    this._updatePaginator(filteredData ? filteredData.length : 0);\n    let sortedData = this._matTableDataSource._orderData.call(this, filteredData);\n    let paginatedData = this._matTableDataSource._pageData.call(this, sortedData) as MODEL[];\n    return paginatedData;\n  }\n  /**\n   * Callback function for when any of the filter directive's state is changed,\n   * updates the current state of filters\n   * @param e event emitted representing the filter change\n   */\n  private _updateFilters(e: string | void | Sort | PageEvent | IFilterModel) {\n    //sort event\n    if (this.sort && e && typeof (<Sort>e).active !== 'undefined') {\n      this.filter.sortCol = this.sort.active;\n      this.filter.sortDir = this.sort.direction\n        ? this.sort.direction == 'asc'\n          ? SortDirection.Asc\n          : SortDirection.Desc\n        : SortDirection.None;\n    }\n    //page event\n    if (this.paginator && e && typeof (<PageEvent>e).pageSize !== 'undefined') {\n      this.filter.pageNo = this.paginator.pageIndex;\n      this.filter.pageSize = this.paginator.pageSize;\n    }\n  }\n  /**\n   * Updates the paginator to reflect the length of the filtered data, and makes sure that the page\n   * index does not exceed the paginator's last page.\n   */\n  private _updatePaginator(filteredDataLength: number) {\n    const paginator = this.paginator;\n    if (!paginator) {\n      return;\n    }\n    paginator.length = filteredDataLength;\n    // If the page index is set beyond the page, reduce it to the last page.\n    if (paginator.pageIndex > 0) {\n      const lastPageIndex = Math.ceil(paginator.length / paginator.pageSize) - 1 || 0;\n      const newPageIndex = Math.min(paginator.pageIndex, lastPageIndex);\n      if (newPageIndex !== paginator.pageIndex) {\n        paginator.pageIndex = newPageIndex;\n      }\n    }\n  }\n  /**\n   * Used by the MatTable. Called when it connects to the data source.\n   */\n  connect(): Observable<MODEL[]> {\n    return this._renderData.asObservable();\n  }\n  /**\n   * Used by the MatTable. Called when it is destroyed. Performs cleanup.\n   */\n  disconnect(): void {\n    this._renderChangesSubscription.unsubscribe();\n    this.onFilterChange.complete();\n    this._renderData.complete();\n  }\n  /**\n   * Method to manually trigger the OnFilterChange() event,\n   * with the updated state of filter\n   */\n  triggerFilterChange() {\n    this._filterChangeTrigger.next(this._MANUAL_CHANGE_TRIGGER);\n  }\n}\n","export interface IDataFilterViewModel {\n  key: string;\n  filterType: FilterTypeEnum;\n  config: any;\n  title?: string;\n  defaults?: FilterDefaults;\n}\n\nexport type FilterDefaults = Date[][] | SelectDefault[];\n\nexport type SelectDefault = { value: any; displayValue: string };\n\nexport enum FilterTypeEnum {\n  select,\n  date,\n  text,\n  number,\n  none\n}\n\nexport interface IFilterModel {\n  keyword: string;\n}\n\nexport interface IFilterChip {\n  key: string;\n  title: string;\n  value: any;\n  displayValue: string;\n}\n","import { DateFormats } from '../pipes/sa-date-time.pipe';\n\n/**\n *This model is used to assign configurations for date picker\n * */\nexport class DatePickerConfig {\n  min?: Date = null;\n  max?: Date = null;\n  /**\n   * Set the type of the dateTime picker. 'both': show both calendar and timer;\n   * 'calendar': only show calendar; 'timer': only show timer.\n   */\n  pickerType?: DatePickerType = DatePickerType.both; // both | calendar | timer\n  /**\n   * Specify the style the picker would open as.\n   */\n  pickerMode?: DatePickerMode = DatePickerMode.popup; // 'popup' | 'dialog'\n  /**\n   * Specify the view that the calendar should start in.\n   */\n  startView?: DatePickerStartView = DatePickerStartView.month; // 'month' | 'year' | 'multi-years'\n  /**\n   * Specify the picker initial moment.\n   */\n  startAt?: Date = null;\n  /**\n   * Set the first day of week. Valid value is from 0 to 6. 0: Sunday ~ 6: Saturday\n   */\n  firstDayOfWeek?: number = 0;\n  /**\n   * Whether to hide dates in other months at the start or end of the current month\n   */\n  hideOtherMonths?: boolean = false;\n  /**\n   * When specify it to true, the timer would be in hour12 format mode\n   */\n  hour12Timer?: boolean = false;\n  /**\n   * Hours to change per step.\n   */\n  stepHour?: number = 1;\n  /**\n   * Minutes to change per step.\n   */\n  stepMinute?: number = 1;\n  /**\n   * Seconds to change per step.\n   */\n  stepSecond?: number = 1;\n  /**\n   * When specify to true, it would disable the picker.\n   */\n  disabled?: boolean = false;\n  /**\n   * Specify the picker's select mode. 'single': a single value allowed;\n   * 'range': allow users to select a range of date-time;\n   * 'rangeFrom': the input would only show the 'from' value and\n   * the picker could only selects 'from' value;\n   * 'rangeTo': the input would only show the\n   * 'to' value and the picker could only selects 'to' value..\n   */\n  selectMode?: DatePickerSelectMode = DatePickerSelectMode.single; //'single' | 'range' | 'rangeFrom' | 'rangeTo'\n\n  placeholder: string = 'Select Date';\n}\n\nexport enum DatePickerType {\n  both = 'both',\n  calendar = 'calendar',\n  timer = 'timer'\n}\n\nexport enum DatePickerMode {\n  popup = 'popup',\n  dialog = 'dialog'\n}\nexport enum DatePickerStartView {\n  month = 'month',\n  year = 'year',\n  multiYears = 'multi-years'\n}\nexport enum DatePickerSelectMode {\n  single = 'single',\n  range = 'range',\n  rangeFrom = 'rangeFrom',\n  rangeTo = 'rangeTo'\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DatePipe } from '@angular/common';\n\n@Pipe({\n  name: 'dateTime'\n})\nexport class SaDateTimePipe extends DatePipe implements PipeTransform {\n  transform(value: any, args?: any): any {\n    switch (args) {\n      case DateFormats.shortDate: {\n        return super.transform(value, DateFormats.shortDate);\n      }\n      case DateFormats.shortTime: {\n        return super.transform(value, DateFormats.shortTime);\n      }\n      case DateFormats.shortDateTime: {\n        return super.transform(value, DateFormats.shortDateTime);\n      }\n      case DateFormats.timeZoneAbb: {\n        return value.format(DateFormats.timeZoneAbb);\n      }\n      default: {\n        return super.transform(value, args);\n      }\n    }\n  }\n}\nexport class DateFormats {\n  static readonly shortDate = 'MMM d, yyy';\n  static readonly shortTime = 'h:mm a';\n  static readonly shortDateTime = `${DateFormats.shortDate} \\'at\\' ${DateFormats.shortTime}`;\n  static readonly timeZoneAbb = 'z';\n}\n\nexport const MOMENT_FORMATS = {\n  parseInput: 'l LT',\n  fullPickerInput: 'l LT',\n  datePickerInput: 'l',\n  timePickerInput: 'LT',\n  monthYearLabel: 'MMM YYYY',\n  dateA11yLabel: 'LL',\n  monthYearA11yLabel: 'MMMM YYYY',\n  full24HUTC: 'YYYY-MM-DDTHH:mm:ssZ'\n};\n","import { Observable, BehaviorSubject, Subject } from 'rxjs';\nimport { IGenericPageListViewModel } from './IPagerModel';\nimport { TemplateRef } from '@angular/core';\n\n/**\n * Configuration class for searchable select\n *\n * @param T Data type for select options list item.\n * */\nexport class SaSelectConfig<T> {\n  /**\n   * Callback method executed everytime the end of page is reached or\n   * search term is changed in the search box. It requires a callback\n   * with param results as array of result objects.\n   *\n   * This property can be left null when server-side filter, custom\n   * filter or pagination is not required. Leaving this blank would\n   * make the searchable select work like a regular select with search\n   * box. In that case, search would be done in all properties of\n   * model.\n   *\n   * @param page         Page number that is requested.\n   *\n   * @param searchTerm   Search term entered by user in search box.\n   *\n   * @param callback     A callback to be called with list of results\n   *                     that would be appended to the existing options\n   *                     in the select drop-down. This must be called\n   *                     to append results in dropdown.\n   */\n  getResults?: (page: number, searchTerm: string) => Observable<IGenericPageListViewModel<T>>;\n\n  /**\n   * Object Key for value attribute in mat-option.\n   */\n  key: string;\n\n  /**\n   * List of select Options to be populated by default.\n   */\n  options: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\n\n  /**\n   * Text shown when no results are found for search term\n   */\n  emptyResultsText?: string = 'No records found';\n\n  /**\n   * Placeholder for search box\n   */\n  searchPlaceholder?: string = 'Search';\n\n  /**\n   * Template for mat-option UI\n   */\n  templateRef?: TemplateRef<any>;\n\n  /**\n   * Template for mat-select-trigger UI\n   */\n  triggerTemplateRef?: TemplateRef<any>;\n\n  /**\n   *  Option to enable multi select\n   */\n  isMultiple: boolean = false;\n\n  /**\n   *  Classes to be passed to the select panel. Supports the same syntax as ngClass.\n   */\n  panelClass: string = '';\n\n  private cancelSubject: Subject<any> = new Subject();\n\n  cancel() {\n    this.cancelSubject.next();\n  }\n\n  onCancelled(): Observable<any> {\n    return this.cancelSubject.asObservable();\n  }\n\n  private refreshSubject: Subject<any> = new Subject();\n\n  refresh() {\n    this.refreshSubject.next();\n  }\n\n  onRefresh(): Observable<any> {\n    return this.refreshSubject.asObservable();\n  }\n\n  private valueSubject: Subject<any> = new Subject();\n\n  setValue(x: any) {\n    this.valueSubject.next(x);\n  }\n\n  onValueChange(): Observable<any> {\n    return this.valueSubject.asObservable();\n  }\n}\n","import {\n  Component,\n  OnInit,\n  Input,\n  Output,\n  EventEmitter,\n  HostBinding,\n  Optional,\n  Self,\n  ElementRef,\n  ViewChild,\n  DoCheck,\n  ChangeDetectionStrategy,\n  OnDestroy\n} from '@angular/core';\nimport { BehaviorSubject, Subscription, Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectChange } from '@angular/material/select';\nimport { NgControl, ControlValueAccessor, FormControl } from '@angular/forms';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SaSelectConfig } from '../models/SaSelectModels';\n\n@Component({\n  selector: 'sa-select',\n  templateUrl: './sa-select.component.html',\n  styleUrls: ['./sa-select.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{ provide: MatFormFieldControl, useExisting: SaSelectComponent }]\n})\n/**\n * A searchable and paginated select component that can be\n * used when local or server-side searching and pagination\n * is needed in select elements.\n *\n * For client side data, search feature automatically works\n * on the options data model that is passed. Search term is\n * matched with any value in all keys in model.\n *\n * @type SearchableSelectOptionComponent\n */\nexport class SaSelectComponent<T> implements OnInit, DoCheck, OnDestroy, MatFormFieldControl<T>, ControlValueAccessor {\n  matSelect = new FormControl();\n\n  /**\n   * Configuration object for select element\n   *\n   * @param T Data type of select options list item.\n   */\n  @Input() config: SaSelectConfig<T>;\n\n  @Output() selectionChange: EventEmitter<MatSelectChange> = new EventEmitter();\n  /**\n   * Behaviour subject for changes in options based on search term\n   * and pagination.\n   *\n   * This is also the output property that will be used to build\n   * mat-option view elements whenever options are changed due to\n   * search or pagination.\n   */\n  private _selectOptions = new BehaviorSubject<T[]>([]);\n  public selectOptions = new BehaviorSubject<T[]>([]);\n\n  private didFilter = false;\n  searchTerm: string = '';\n  private searchTermSubject = new Subject<string>();\n  private _isWaitingResultsCallback = false;\n  public showSpinner = false;\n\n  private originalData: T[] = [];\n  private resultCallbackSubscription: Subscription = new Subscription();\n  private totalRecords: number;\n  page = 0;\n\n  private _placeholder: string;\n  static nextId = 0;\n  stateChanges = new Subject<void>();\n  focused: boolean = false;\n  errorState = false;\n  controlType = 'app-searchable-select';\n  autofilled?: boolean;\n  private _empty = true;\n  private _disabled = false;\n  id: string;\n  private _required = false;\n\n  @ViewChild('matSelectRef', { static: true }) matSelectRef;\n  @ViewChild('searchInput', { static: true }) searchInput: ElementRef;\n\n  private destroyedSubject$ = new Subject();\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    private fm: FocusMonitor,\n    private elRef: ElementRef<HTMLElement>\n  ) {\n    if (this.ngControl != null) {\n      // Setting the value accessor directly (instead of using\n      // the providers) to avoid running into a circular import.\n      this.ngControl.valueAccessor = this;\n    }\n\n    fm.monitor(elRef.nativeElement, true)\n      .pipe(takeUntil(this.destroyedSubject$))\n      .subscribe((origin) => {\n        this.focused = !!origin;\n        this.stateChanges.next();\n      });\n\n    this._selectOptions.pipe(takeUntil(this.destroyedSubject$)).subscribe((x) => {\n      if (this.didFilter) {\n        this.didFilter = false;\n        this.originalData = x;\n        this.selectOptions.next(this.originalData);\n        return;\n      }\n      this.originalData = [...this.originalData, ...x];\n      this.selectOptions.next(this.originalData);\n      return;\n    });\n\n    this.config = new SaSelectConfig<any>();\n  }\n\n  public get isComplete(): boolean {\n    return this.originalData.length >= this.totalRecords;\n  }\n\n  ngOnInit() {\n    let time = this.isGetResultsCallbackNull() ? 0 : 500;\n    this.searchTermSubject\n      .asObservable()\n      .pipe(debounceTime(time))\n      .subscribe((_) => {\n        this._isWaitingResultsCallback = false;\n        this.resultCallbackSubscription.unsubscribe();\n        this.getNextBatch();\n      });\n\n    this.config.options.pipe(takeUntil(this.destroyedSubject$)).subscribe((x) => {\n      this.didFilter = true;\n      this.totalRecords = x.length;\n      this._selectOptions.next(x);\n      this.page = 0;\n      if (!this.isGetResultsCallbackNull()) {\n        this.getNextBatch();\n      }\n    });\n\n    if (!this.isGetResultsCallbackNull()) {\n      this.getNextBatch();\n    }\n\n    this.config\n      .onCancelled()\n      .pipe(takeUntil(this.destroyedSubject$))\n      .subscribe((x) => {\n        this._isWaitingResultsCallback = false;\n        this.resultCallbackSubscription.unsubscribe();\n      });\n\n    this.config\n      .onRefresh()\n      .pipe(takeUntil(this.destroyedSubject$))\n      .subscribe((_) => {\n        this.searchTerm = '';\n        this.filterRecords();\n      });\n\n    this.config\n      .onValueChange()\n      .pipe(takeUntil(this.destroyedSubject$))\n      .subscribe((x) => {\n        this.value = x;\n      });\n  }\n\n  ngOnDestroy() {\n    this.destroyedSubject$.next();\n    this.destroyedSubject$.complete();\n  }\n\n  clicked(event: MouseEvent): void {\n    event.stopPropagation();\n  }\n\n  searchTermChanged(event: KeyboardEvent): void {\n    event.stopPropagation();\n    this.filterRecords();\n  }\n\n  private filterRecords(): void {\n    // Do not show spinner when data is client side.\n    this.showSpinner = !this.isGetResultsCallbackNull();\n\n    this.page = 0;\n    this.searchTerm = this.searchTerm.toLowerCase();\n    this.didFilter = true;\n\n    // Do not empty the options when data is client side.\n    // Previous options are removed automatically when next\n    // time `selectOptions` subject is observed with `didFilter`\n    // flag set to true.\n    if (this.value instanceof Array) {\n      this._selectOptions.next(<Array<T>>this.value);\n    } else {\n      if (!this.isGetResultsCallbackNull()) {\n        let val = this.value ? [this.value] : [];\n        this._selectOptions.next(val);\n      }\n    }\n\n    this.searchTermSubject.next();\n  }\n\n  getNextBatch() {\n    if (this._isWaitingResultsCallback) return;\n\n    // Do not show spinner when data is client side.\n    this.showSpinner = !this.isGetResultsCallbackNull();\n\n    if (this.isGetResultsCallbackNull()) {\n      var filteredData = this.config.options.value.filter((x) => {\n        for (let key in x) {\n          if (x[key] && x[key].toString().toLowerCase().indexOf(this.searchTerm) > -1) {\n            // Check required when client side multiple select is enable to remove duplicates.\n            if (this.value instanceof Array) {\n              return !(this.value.indexOf(x) > -1);\n            }\n\n            return true;\n          }\n        }\n        return false;\n      });\n\n      this._selectOptions.next(filteredData);\n      this.totalRecords = filteredData.length;\n      return;\n    }\n\n    this._isWaitingResultsCallback = true;\n    this.resultCallbackSubscription = this.config.getResults(this.page, this.searchTerm).subscribe((result) => {\n      this.showSpinner = false;\n      this._isWaitingResultsCallback = false;\n      this._selectOptions.next(result.List);\n      this.totalRecords = result.Pager.TotalRecords;\n      this.page++;\n    });\n  }\n\n  private isGetResultsCallbackNull(): boolean {\n    return this.config.getResults == null;\n  }\n\n  onSelect(event: MatSelectChange) {\n    this.value = event.value;\n    this.selectionChange.emit(event);\n  }\n\n  selectOpenChanged(opened: boolean) {\n    if (!opened && this.searchTerm.trim() != '') {\n      this.config.refresh();\n    }\n\n    if (opened && !this.value) {\n      this.searchInput.nativeElement.focus();\n    }\n  }\n\n  writeValue(value: any): void {\n    if (value != null) this._empty = false;\n    this.value = value;\n  }\n\n  private _value: T;\n  get value(): T {\n    return this._value;\n  }\n\n  set value(val: T) {\n    this._value = val;\n    if (this._value != null || (this._value != null && (<any>this._value).length > 0)) this._empty = false;\n    else this._empty = true;\n\n    this.matSelectRef.value = val;\n    this.matSelect.setValue(val);\n    this.matSelectRef.writeValue(val);\n\n    this.onChange(val);\n    this.stateChanges.next();\n  }\n\n  @Input()\n  get required() {\n    return this._required;\n  }\n  set required(req) {\n    this._required = coerceBooleanProperty(req);\n    this.stateChanges.next();\n  }\n\n  ngDoCheck(): void {\n    if (this.ngControl) {\n      this.errorState = this.ngControl.invalid && this.ngControl.touched;\n      this.stateChanges.next();\n    }\n  }\n  markAsTouched() {\n    if (this.ngControl != undefined && this.ngControl != null) this.ngControl.control.markAsTouched();\n  }\n  @Output() onSelection: EventEmitter<any> = new EventEmitter();\n\n  onChange = (_: any) => {};\n  onTouched = () => {};\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n    if (this._disabled) {\n      this.elRef.nativeElement.setAttribute('style', 'pointer-events: none');\n    } else {\n      this.elRef.nativeElement.setAttribute('style', 'pointer-events: auto');\n    }\n\n    this.stateChanges.next();\n  }\n\n  @HostBinding('attr.aria-describedby') describedBy = '';\n\n  setDescribedByIds(ids: string[]): void {\n    this.describedBy = ids.join(' ');\n  }\n\n  @HostBinding('class.floating')\n  get shouldLabelFloat() {\n    return this.focused || !this._empty;\n  }\n\n  get empty() {\n    return this._empty;\n  }\n\n  @Input()\n  get placeholder() {\n    return this._placeholder;\n  }\n\n  set placeholder(plh) {\n    this._placeholder = plh;\n    this.stateChanges.next();\n  }\n\n  onContainerClick(event: MouseEvent): void {\n    this.focused = true;\n  }\n}\n","<mat-select\n  msInfiniteScroll\n  [placeholder]=\"placeholder\"\n  (infiniteScroll)=\"getNextBatch()\"\n  [complete]=\"isComplete\"\n  (blur)=\"markAsTouched()\"\n  (selectionChange)=\"onSelect($event)\"\n  required=\"required\"\n  [multiple]=\"this.config.isMultiple\"\n  #matSelectRef\n  [formControl]=\"matSelect\"\n  (openedChange)=\"selectOpenChanged($event)\"\n  [panelClass]=\"this.config.panelClass\"\n>\n  <mat-option [value]=\"null\" class=\"custom-option\">\n    <input\n      matInput\n      [(ngModel)]=\"searchTerm\"\n      [placeholder]=\"this.config.searchPlaceholder\"\n      (click)=\"clicked($event)\"\n      (keydown)=\"$event.stopPropagation()\"\n      (keyup)=\"searchTermChanged($event)\"\n      #searchInput\n    />\n  </mat-option>\n  <mat-select-trigger *ngIf=\"this.config.triggerTemplateRef\">\n    <ng-container *ngTemplateOutlet=\"this.config.triggerTemplateRef; context: { $implicit: value }\"></ng-container>\n  </mat-select-trigger>\n  <mat-option *ngFor=\"let item of selectOptions | async\" [value]=\"item\">\n    <ng-container *ngTemplateOutlet=\"this.config.templateRef; context: { $implicit: item }\"></ng-container>\n  </mat-option>\n  <mat-option class=\"custom-option empty-text-option\" *ngIf=\"(selectOptions | async).length == 0 && !showSpinner\" [value]=\"null\">\n    {{ this.config.emptyResultsText }}</mat-option\n  >\n  <mat-option class=\"custom-option\" *ngIf=\"showSpinner\" [value]=\"null\">\n    <mat-spinner diameter=\"30\"></mat-spinner>\n  </mat-option>\n</mat-select>\n","import {\n  Component,\n  OnInit,\n  OnDestroy,\n  Input,\n  ElementRef,\n  Optional,\n  Self,\n  HostBinding,\n  ViewChild,\n  Output,\n  EventEmitter\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormControl } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject } from 'rxjs';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { DatePickerConfig, DatePickerType } from '../models/DatePickerConfigModel';\nimport moment from 'moment-timezone';\nimport { MOMENT_FORMATS } from '../pipes/sa-date-time.pipe';\n\n@Component({\n  selector: 'sa-date-picker',\n  templateUrl: './sa-date-picker.component.html',\n  styleUrls: ['./sa-date-picker.component.scss'],\n  providers: [{ provide: MatFormFieldControl, useExisting: SaDatePickerComponent }]\n})\nexport class SaDatePickerComponent\n  implements ControlValueAccessor, MatFormFieldControl<Date | Date[]>, OnDestroy, OnInit\n{\n  @ViewChild('input', { static: true }) inputRef: ElementRef;\n\n  @Input() dateConfig: DatePickerConfig;\n\n  dateTime = new FormControl();\n\n  @Output() onSelection: EventEmitter<any> = new EventEmitter();\n  @Output() click: EventEmitter<MouseEvent> = new EventEmitter();\n\n  id: string;\n  onChange = (_: any) => {};\n  onTouched = () => {};\n\n  writeValue(date: Date): void {\n    this._empty = false;\n    this.dateTime.patchValue(date);\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  @HostBinding('attr.aria-describedby') describedBy = '';\n\n  setDescribedByIds(ids: string[]): void {\n    this.describedBy = ids.join(' ');\n  }\n\n  @HostBinding('class.floating')\n  get shouldLabelFloat() {\n    return this.focused || !this._empty;\n  }\n\n  onDateChange(event: any) {\n    this.value = this.dateTime.value;\n  }\n\n  static nextId = 0;\n\n  stateChanges = new Subject<void>();\n\n  focused: boolean;\n  errorState: false;\n  controlType = 'app-date-picker';\n  autofilled?: boolean;\n\n  @Input()\n  get placeholder() {\n    return this._placeholder;\n  }\n  set placeholder(plh) {\n    this._placeholder = plh;\n    this.stateChanges.next();\n  }\n  private _placeholder: string;\n\n  onContainerClick(event: MouseEvent): void {\n    if (!this.disabled) this.click.emit(event);\n    this.focused = true;\n  }\n\n  datePickerContent: any;\n  @Input()\n  get value(): Date | Date[] | null {\n    this.datePickerContent = this.dateTime;\n    if (this.datePickerContent) return this.datePickerContent;\n    return null;\n  }\n  set value(date: Date | Date[] | null) {\n    this.onSelection.emit(date);\n    this.onChange(date);\n    this.stateChanges.next();\n  }\n\n  private _empty = true;\n  get empty() {\n    return this._empty;\n  }\n\n  @Input()\n  get required() {\n    return this._required;\n  }\n  set required(req) {\n    this._required = coerceBooleanProperty(req);\n    this.stateChanges.next();\n  }\n  private _required = false;\n\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n    if (this._disabled) {\n      this.elRef.nativeElement.setAttribute('style', 'pointer-events: none');\n    } else {\n      this.elRef.nativeElement.setAttribute('style', 'pointer-events: auto');\n    }\n    this.stateChanges.next();\n  }\n  private _disabled = false;\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n    this.fm.stopMonitoring(this.elRef.nativeElement);\n  }\n\n  constructor(\n    @Optional() @Self() public ngControl: NgControl,\n    private fm: FocusMonitor,\n    private elRef: ElementRef<HTMLElement>\n  ) {\n    if (this.ngControl != null) {\n      // Setting the value accessor directly (instead of using\n      // the providers) to avoid running into a circular import.\n      this.ngControl.valueAccessor = this;\n    }\n\n    fm.monitor(elRef.nativeElement, true).subscribe((origin) => {\n      this.focused = !!origin;\n      this.stateChanges.next();\n    });\n  }\n\n  ngOnInit() {\n    this.dateTime.valueChanges.subscribe((x) => {\n      if (x instanceof Array) {\n        this.value = x.map((date) => this.formatDate(date));\n      } else {\n        this.value = this.formatDate(x);\n      }\n    });\n  }\n\n  private formatDate(date: Date): Date {\n    let formattedDate: Date;\n\n    switch (this.dateConfig.pickerType) {\n      case DatePickerType.calendar:\n        formattedDate = moment(date).format(MOMENT_FORMATS.dateA11yLabel);\n        break;\n      case DatePickerType.timer:\n        formattedDate = moment(date).format(MOMENT_FORMATS.timePickerInput);\n        break;\n      case DatePickerType.both:\n      default:\n        formattedDate = moment(date).utc().format(MOMENT_FORMATS.full24HUTC);\n        break;\n    }\n\n    return formattedDate;\n  }\n}\n","<input\n  matInput\n  [placeholder]=\"dateConfig.placeholder\"\n  [owlDateTime]=\"dt1\"\n  [owlDateTimeTrigger]=\"dt1\"\n  [formControl]=\"dateTime\"\n  (click)=\"onContainerClick($event)\"\n  [min]=\"dateConfig.min\"\n  [max]=\"dateConfig.max\"\n  [selectMode]=\"dateConfig.selectMode\"\n  class=\"cursor-pointer\"\n  #input\n  readonly\n/>\n<owl-date-time\n  [pickerType]=\"dateConfig.pickerType\"\n  [pickerMode]=\"dateConfig.pickerMode\"\n  [startView]=\"dateConfig.startView\"\n  [startAt]=\"dateConfig.startAt\"\n  [firstDayOfWeek]=\"dateConfig.firstDayOfWeek\"\n  [hideOtherMonths]=\"dateConfig.hideOtherMonths\"\n  [hour12Timer]=\"dateConfig.hour12Timer\"\n  [stepHour]=\"dateConfig.stepHour\"\n  [stepMinute]=\"dateConfig.stepMinute\"\n  [stepSecond]=\"dateConfig.stepSecond\"\n  [disabled]=\"dateConfig.disabled\"\n  #dt1\n></owl-date-time>\n","import {\n  Component,\n  OnInit,\n  Input,\n  QueryList,\n  ViewChildren,\n  Output,\n  EventEmitter,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { debounceTime } from 'rxjs/operators';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelectChange } from '@angular/material/select';\nimport {\n  IDataFilterViewModel,\n  IFilterModel,\n  FilterTypeEnum,\n  IFilterChip,\n  SelectDefault\n} from '../models/DataFilterModels';\nimport { SaDatePickerComponent } from '../sa-date-picker/sa-date-picker.component';\nimport { SaSelectComponent } from '../sa-select/sa-select.component';\nimport { SaSelectConfig } from '../models/SaSelectModels';\nimport moment from 'moment-timezone';\nimport { DatePickerConfig, DatePickerType } from '../models/DatePickerConfigModel';\nimport { MOMENT_FORMATS } from '../pipes/sa-date-time.pipe';\n\n@Component({\n  selector: 'sa-data-filter',\n  templateUrl: './sa-data-filter.component.html',\n  styleUrls: ['./sa-data-filter.component.scss']\n})\nexport class SaDataFilterComponent implements OnInit, OnChanges {\n  @ViewChildren('datePicker') datePickers: QueryList<SaDatePickerComponent>;\n\n  @Input() filters: IDataFilterViewModel[];\n\n  /**\n   * Event emmited when filter model is updated.\n   * This will always have the latest filter values.\n   */\n  @Output() filterChange: EventEmitter<IFilterModel> = new EventEmitter();\n\n  keyword = new FormControl('');\n\n  get filterType() {\n    return FilterTypeEnum;\n  }\n\n  chips: IFilterChip[] = [];\n\n  private filterModel: IFilterModel = {\n    keyword: ''\n  };\n\n  nonTextFilters: IDataFilterViewModel[];\n\n  textFilters: IDataFilterViewModel[];\n\n  constructor() {}\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.filters) {\n      this.initFilters();\n      this.updateDefaults();\n    }\n  }\n\n  ngOnInit() {\n    this.initFilters();\n    this.keyword.valueChanges.pipe(debounceTime(500)).subscribe((value) => {\n      this.filterModel.keyword = value;\n      this.filterChange.emit(this.filterModel);\n    });\n  }\n\n  private initFilters() {\n    this.nonTextFilters = this.filters.filter(\n      (x) => !(x.filterType == FilterTypeEnum.text || x.filterType == FilterTypeEnum.none)\n    );\n    this.textFilters = this.filters.filter((x) => x.filterType == FilterTypeEnum.text);\n    this.chips = [];\n    this.filters.forEach((x) => {\n      this.filterModel[x.key] = [];\n    });\n  }\n\n  ngAfterViewInit() {\n    this.updateDefaults();\n  }\n\n  private updateDefaults() {\n    this.filters.forEach((filter) => {\n      if (filter.filterType == this.filterType.date && filter.defaults) {\n        (filter.defaults as Date[][]).forEach((y) => {\n          this.pushDatesToFilterModel(y, filter);\n        });\n      }\n\n      if (filter.filterType == this.filterType.select && filter.defaults) {\n        (filter.defaults as SelectDefault[]).forEach((y) => {\n          this.addSelectItemToFilter(y.value, y.displayValue, filter);\n        });\n      }\n    });\n  }\n\n  onSelect(event: MatSelectChange, filter: IDataFilterViewModel) {\n    let val = event.value[filter.config.key];\n\n    if (val == null) return;\n\n    this.addSelectItemToFilter(val, (<MatOption>event.source.selected).viewValue.trim(), filter);\n\n    event.source.value = null;\n  }\n\n  private addSelectItemToFilter(val: any, displayValue: string, filter: IDataFilterViewModel) {\n    let filterProperty = this.filterModel[filter.key];\n    let isExist: boolean = filterProperty.filter((x) => x == val).length > 0;\n\n    if (!isExist) {\n      filterProperty.push(val);\n      this.chips.push({\n        displayValue: displayValue,\n        key: filter.key,\n        title: filter.title,\n        value: val\n      });\n      this.filterChange.emit(this.filterModel);\n    }\n\n    <SaSelectConfig<any>>this.filters.find((x) => x.key === filter.key).config.setValue(null);\n  }\n\n  removeChip(chip: IFilterChip) {\n    if (chip.value instanceof Array) {\n      this.filterModel[chip.key] = this.filterModel[chip.key].filter(\n        (x) => x.from != chip.value[0] || x.to != chip.value[1]\n      );\n    } else {\n      this.filterModel[chip.key] = this.filterModel[chip.key].filter((x) => x != chip.value);\n    }\n    this.chips = this.chips.filter((x) => !(x.key == chip.key && x.value == chip.value));\n    this.filterChange.emit(this.filterModel);\n  }\n\n  dateButtonClicked(ref: SaDatePickerComponent) {\n    (<HTMLElement>ref.inputRef.nativeElement).click();\n  }\n\n  selectButtonClicked(ref: SaSelectComponent<any>) {\n    ref.matSelectRef.open();\n  }\n\n  datePickerChange(dates: Date[], filter: IDataFilterViewModel, ref: SaDatePickerComponent) {\n    if (dates == null) return;\n    this.pushDatesToFilterModel(dates, filter);\n\n    ref.value = null;\n  }\n\n  private pushDatesToFilterModel(dates: Date[], filter: IDataFilterViewModel) {\n    let filterProperty = this.filterModel[filter.key];\n\n    filterProperty.push({\n      from: dates[0],\n      to: dates[1]\n    });\n\n    let displayValue =\n      this.getDateDisplayValue(dates[0], filter.config) + ' - ' + this.getDateDisplayValue(dates[1], filter.config);\n\n    this.chips.push({\n      displayValue: displayValue,\n      key: filter.key,\n      title: filter.title,\n      value: dates\n    });\n    this.filterChange.emit(this.filterModel);\n  }\n\n  private getDateDisplayValue(date: Date, filterConfig: DatePickerConfig): Date {\n    return filterConfig.pickerType == DatePickerType.both\n      ? moment.tz(date, moment.tz?.guess()).format(MOMENT_FORMATS.dateA11yLabel)\n      : date;\n  }\n}\n","<div fxFlex=\"100\" fxLayout=\"column\" fxLayoutGap=\"10px\">\n  <div fxFlex=\"100\" fxLayout=\"row wrap\" fxLayoutAlign=\"start center\" fxLayoutGap=\"16px\">\n    <mat-form-field *ngIf=\"textFilters.length > 0\" [fxFlex]=\"nonTextFilters.length > 0 ? 20 : 50\" fxFlex.lt-md=\"100\">\n      <mat-label>Search </mat-label>\n      <input matInput [formControl]=\"keyword\" placeholder=\"Search...\" />\n    </mat-form-field>\n    <ng-container *ngFor=\"let filter of filters\">\n      <div *ngIf=\"filter.filterType == filterType.select\" fxFlex=\"nogrow\" fxHide.lt-md>\n        <button mat-button class=\"no-hover-effect\" (click)=\"selectButtonClicked(select)\">\n          <mat-label>{{ filter.title }}</mat-label>\n          <sa-select [config]=\"filter.config\" (selectionChange)=\"onSelect($event, filter)\" fxFlex=\"nogrow\" #select>\n          </sa-select>\n        </button>\n      </div>\n      <div *ngIf=\"filter.filterType == filterType.date\" fxHide.lt-md>\n        <button mat-button class=\"no-hover-effect dateFilter\" (click)=\"dateButtonClicked(datePicker)\">\n          <mat-label>{{ filter.title }}</mat-label>\n          <sa-date-picker\n            [dateConfig]=\"filter.config\"\n            #datePicker\n            (onSelection)=\"datePickerChange($event, filter, datePicker)\"\n          >\n          </sa-date-picker>\n          <mat-icon>arrow_drop_down</mat-icon>\n        </button>\n      </div>\n    </ng-container>\n  </div>\n  <div>\n    <mat-chip-list fxHide.lt-md>\n      <mat-chip *ngFor=\"let item of chips\" removable=\"true\" (removed)=\"removeChip(item)\">\n        {{ item.title }}: {{ item.displayValue }}\n        <mat-icon matChipRemove>cancel</mat-icon>\n      </mat-chip>\n    </mat-chip-list>\n  </div>\n</div>\n","import { IGenericPageListViewModel } from './IPagerModel';\nimport { Observable, Subject, ReplaySubject } from 'rxjs';\nimport { IDataFilterViewModel, IFilterModel, FilterDefaults } from '../models/DataFilterModels';\nimport { SortDirection } from './SaTableDataSource';\nimport { SaButtonConfig } from '../sa-button/sa-button.component';\nimport { TemplateRef, ElementRef } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\n\n//data for each column in a table\nexport enum DataTableColumnTypeEnum {\n  text = 'text',\n  number = 'number',\n  date = 'date',\n  dateTime = 'dateTime'\n}\n\n//data for each column in a table\nexport interface IDataTableColumn {\n  key: string;\n  title: string;\n  type: DataTableColumnTypeEnum;\n  filter: IDataFilterViewModel;\n  sticky?: boolean;\n  stickyEnd?: boolean;\n  template?: TemplateRef<any>;\n  headerTemplate?: TemplateRef<any>;\n  data?: any;\n  disableSort?: boolean;\n  width?: string;\n}\n\nexport interface IRequestModel {\n  pageNumber: number;\n  pageSize: number;\n  sortCol: string | number;\n  sortDir: SortDirection;\n  filter: IFilterModel;\n}\n\n//abstract class which each data table/track pages will implement\nexport class DataTable<T> {\n  private columns: IDataTableColumn[] = [];\n  private columnsUpdatedSubject: ReplaySubject<IDataTableColumn[]> = new ReplaySubject();\n  private columnAddedSubject: ReplaySubject<IDataTableColumn> = new ReplaySubject();\n  private columnRemovedSubject: ReplaySubject<IDataTableColumn> = new ReplaySubject();\n  private addFilterSubject: ReplaySubject<IDataFilterViewModel> = new ReplaySubject();\n  private applyFilterSubject: ReplaySubject<{ key: string; defaults: FilterDefaults }[]> = new ReplaySubject();\n\n  private rowAddedSubject: ReplaySubject<T> = new ReplaySubject();\n\n  private deleteRowSubect: ReplaySubject<T | number | ((sourceList: T[]) => T[])> = new ReplaySubject();\n\n  private refreshTableSubject: Subject<any> = new Subject();\n  private toggleCheckboxColumnSubject: Subject<boolean> = new Subject();\n  mainActionMenu: SaButtonConfig[] = [];\n\n  routerLinkEnabled: boolean = false;\n\n  isClientSide: boolean = false;\n\n  showCheckboxColumn: boolean = false;\n\n  showPaginator?: boolean = true;\n\n  showFilters?: boolean = true;\n\n  disableSorting?: boolean = false;\n\n  showColumnToggle?: boolean = true;\n\n  showTableMinimap?: boolean = false;\n\n  optionsColumnRef: TemplateRef<ElementRef>;\n\n  defaultPageSize?: number;\n\n  actionsTemplate?: TemplateRef<any>;\n\n  /**\n   * Enable data container on the right of data table for selected row visualization.\n   *\n   */\n  enableDataContainer?: boolean = false;\n  /**\n   * Component or template ref of data table, this works similarly to the Mat Dialog\n   * where you can get access to the selected row in the injection of the constructor\n   */\n  componentOrTemplateRef: ComponentType<T> | TemplateRef<T>;\n\n  getResults?: (requestModel: IRequestModel) => Observable<IGenericPageListViewModel<T>>;\n\n  /**\n   * This method implementation is required when selection and server-side data\n   * rendering is enabled together. Because the instance of same data is dynamic,\n   * the state for selection does not match between the selection array and incoming\n   * data with same values.\n   *\n   * By implementing this method, you will allow the data table to understand\n   * if the row should be selected or not when data is refreshed or page changes.\n   *\n   * @param insertedRow The instance of row that is inserted in data table\n   * @param selected The instance of selected row from selection array. This is\n   * optional to allow pre-selected rows.\n   *\n   * @returns Boolean value indicating if the row should be selected or not. If this\n   * is true, the row will be in selected state. Otherwise, it will not be selected.\n   *\n   */\n  selectedRowPredicate?: (insertedRow: T, selected?: T) => boolean;\n\n  /**\n   * Adds the row to the top of table.\n   * @param row The row to be added.\n   */\n  addRow(row: T): void {\n    this.rowAddedSubject.next(row);\n  }\n\n  onRowAdded(): Observable<T> {\n    return this.rowAddedSubject.asObservable();\n  }\n\n  /**\n   * Adds the column at given index. If Index is null,\n   * pushes the column at end of table.\n   *\n   * @param column Column to be added.\n   * @param index Index at which the column should be added.\n   */\n  addColumn(column: IDataTableColumn, index?: number): void {\n    if (index) {\n      this.columns.splice(index, 0, column);\n    } else {\n      this.columns.push(column);\n    }\n    this.columnAddedSubject.next(column);\n    this.columnsUpdatedSubject.next(this.columns);\n  }\n\n  /**\n   * Removes the last column from list.\n   */\n  removeColumn(): IDataTableColumn;\n  /**\n   * Removes the column from given index.\n   * @param index Index from where the column should be removed.\n   */\n  removeColumn(index: number): IDataTableColumn;\n  /**\n   * Removes the column with given key.\n   * @param key Key for which the column should be removed.\n   */\n  removeColumn(key: string): IDataTableColumn;\n  removeColumn(keyOrIndex?: string | number): IDataTableColumn {\n    let removedColumn: IDataTableColumn;\n\n    if (!keyOrIndex) {\n      removedColumn = this.columns.pop();\n    }\n    if (typeof keyOrIndex === 'string') {\n      removedColumn = this.columns.find((x) => x.key == keyOrIndex);\n      this.columns = this.columns.filter((x) => x.key != keyOrIndex);\n    }\n    if (typeof keyOrIndex === 'number') {\n      removedColumn = this.columns.splice(<number>keyOrIndex, 1)[0];\n    }\n\n    this.columnRemovedSubject.next(removedColumn);\n    this.columnsUpdatedSubject.next(this.columns);\n\n    return removedColumn;\n  }\n\n  onColumnAdded(): Observable<IDataTableColumn> {\n    return this.columnAddedSubject.asObservable();\n  }\n\n  onColumnRemoved(): Observable<IDataTableColumn> {\n    return this.columnRemovedSubject.asObservable();\n  }\n\n  onColumnUpdated(): Observable<IDataTableColumn[]> {\n    return this.columnsUpdatedSubject.asObservable();\n  }\n\n  onRowDelete(): Observable<T | number | ((sourceList: T[]) => T[])> {\n    return this.deleteRowSubect.asObservable();\n  }\n\n  onRefresh(): Observable<any> {\n    return this.refreshTableSubject.asObservable();\n  }\n\n  onCheckboxColumnToggle(): Observable<boolean> {\n    return this.toggleCheckboxColumnSubject.asObservable();\n  }\n\n  /**\n   * Deletes the row by matching object reference\n   * @param item Item to be deleted\n   */\n  deleteRow(item: T);\n  /**\n   * Deletes the row by index\n   * @param index Zero based index where the row should be deleted\n   */\n  deleteRow(index: number);\n  /**\n   * Recieves the source list from which the item can be deleted using custom logic.\n   * @param predicate Method receiving the source list. Must return the updated source List\n   */\n  deleteRow(predicate: (sourceList: T[]) => T[]);\n  deleteRow(itemOrIndexOrPredicate: T | number | ((sourceList: T[]) => T[])) {\n    this.deleteRowSubect.next(itemOrIndexOrPredicate);\n  }\n\n  refresh() {\n    this.refreshTableSubject.next();\n  }\n\n  toggleCheckboxColumn(value = null) {\n    this.toggleCheckboxColumnSubject.next(value);\n  }\n\n  /**\n   * Adds a new filter\n   * @param filter Filter to be added\n   */\n  addFilter(filter: IDataFilterViewModel) {\n    this.addFilterSubject.next(filter);\n  }\n\n  onFilterAdded(): Observable<IDataFilterViewModel> {\n    return this.addFilterSubject.asObservable();\n  }\n\n  applyFilter(filters: { key: string; defaults: FilterDefaults }[]) {\n    this.applyFilterSubject.next(filters);\n  }\n\n  onFilterApplied(): Observable<{ key: string; defaults: FilterDefaults }[]> {\n    return this.applyFilterSubject.asObservable();\n  }\n}\n","import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';\nimport { DatePipe, formatCurrency, getCurrencySymbol } from '@angular/common';\nimport { DataTableColumnTypeEnum } from '../models/DataTableModel';\nimport { DateFormats } from './sa-date-time.pipe';\n\n@Pipe({\n  name: 'valueFormatter'\n})\nexport class SaValueFormatterPipe implements PipeTransform {\n  constructor(@Inject(LOCALE_ID) private locale: string) {}\n\n  transform(value: any, type: string): any {\n    if (value === undefined) {\n      return 'not available';\n    }\n\n    if (type === 'number') {\n      return value;\n    }\n\n    if (type === 'date') {\n      return new Date(value).toLocaleDateString();\n    }\n\n    if (type === DataTableColumnTypeEnum.dateTime) {\n      return new DatePipe(this.locale).transform(value, DateFormats.shortDateTime);\n    }\n\n    if (type == 'currency') {\n      let symbol = getCurrencySymbol('USD', symbolFormatEnum.narrow, this.locale);\n      return formatCurrency(value, this.locale, symbol);\n    }\n\n    return value;\n  }\n}\n\nexport enum symbolFormatEnum {\n  wide = 'wide',\n  narrow = 'narrow'\n}\n","import {\n  Component,\n  OnInit,\n  Input,\n  ViewChild,\n  Output,\n  EventEmitter,\n  AfterViewInit,\n  OnDestroy,\n  ElementRef,\n  Renderer2,\n  TemplateRef,\n  ContentChild,\n  ViewContainerRef,\n  InjectionToken,\n  Injector,\n  ChangeDetectorRef,\n  SimpleChanges\n} from '@angular/core';\nimport { MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { DataTable, IRequestModel, IDataTableColumn } from '../models/DataTableModel';\nimport { SaTableDataSource } from '../services/sa-table-data-source.service';\nimport { BehaviorSubject, Subscription, Observable, of } from 'rxjs';\nimport { DefaultCommonTableFilter, SaCommonTableFilter } from '../models/SaTableDataSource';\nimport { switchMap, tap } from 'rxjs/operators';\nimport { IGenericPageListViewModel } from '../models/IPagerModel';\nimport { SaButton } from '../models/SaButton';\nimport { IDataFilterViewModel, IFilterModel } from '../models/DataFilterModels';\nimport { CdkPortalOutlet, ComponentPortal, Portal, PortalInjector, TemplatePortal } from '@angular/cdk/portal';\nexport const CONTAINER_DATA = new InjectionToken<{}>('CONTAINER_DATA');\n@Component({\n  selector: 'sa-data-table',\n  templateUrl: './sa-data-table.component.html',\n  styleUrls: ['./sa-data-table.component.scss']\n})\nexport class SaDataTableComponent<T> implements OnInit, AfterViewInit, OnDestroy {\n  @Input() dataTable: DataTable<T>;\n  //container element\n  containerElement: BehaviorSubject<T> | null = new BehaviorSubject(null);\n  opened = false;\n\n  @ViewChild('templatePortalContent', { static: true }) templatePortalContent: TemplateRef<any>;\n\n  @Output() rowClick = new EventEmitter<T>();\n  @Output() rowSelect = new EventEmitter<RowSelectEventDataModel<T>>();\n  @Output() selectionChange = new EventEmitter<T[]>();\n\n  columnToDisplay: string[] = [];\n  columns: IDataTableColumn[] = [];\n  actionsTemplate: TemplateRef<any>;\n\n  @ViewChild('iconSelector') iconSelector;\n  filterArray: IDataFilterViewModel[] = [];\n\n  /** list of paginated  rendered within the table */\n  public get sourceList(): T[] {\n    return this._source.value;\n  }\n  public set sourceList(list) {\n    this._source.next(list);\n  }\n  private _source = new BehaviorSubject<T[]>([]);\n  public requestModel: IRequestModel = null;\n  public baseUrl: string;\n  public isRender: boolean = false;\n  public showFilter: boolean = false;\n\n  public tableDataSource: SaTableDataSource<T, DefaultCommonTableFilter>;\n  subs: Subscription[] = [];\n  //minimap initializations\n  @ViewChild('table', { static: true }) table: ElementRef;\n  @ViewChild('scroller_div', { static: true }) scroller_div: ElementRef;\n  @ViewChild('scroll_container', { static: true }) scroll_container: ElementRef;\n  @ViewChild('scroller', { static: true }) scroller: ElementRef;\n  @ViewChild('container', { read: CdkPortalOutlet })\n  virtualPotalOutlet: CdkPortalOutlet;\n  scrollerContainerWidth = 150;\n  scrollerWidth = 100;\n\n  @ViewChild(MatPaginator) paginator: MatPaginator;\n  @ViewChild(MatSort, { static: true }) sort: MatSort;\n  @ContentChild('listItemTemplate', { static: true }) listItemTemplateRef: TemplateRef<any>;\n  highlightedRows = [];\n  totalCount: number;\n  selection = new SelectionModel<T>(true, []);\n\n  private resizeStartX: number;\n  private resizeStartWidth: number;\n  isResizing: boolean;\n  private resizeIndex: number;\n\n  /** Whether the number of selected elements matches the total number of rows. */\n  isAllSelected() {\n    const numSelected = this.selection.selected.length;\n    if (this.tableDataSource.dataStream != null) {\n      return numSelected === this.sourceList.length;\n    }\n    return false;\n  }\n\n  /** Selects all rows if they are not all selected; otherwise clear selection. */\n  masterToggle() {\n    this.isAllSelected()\n      ? this.selection.clear()\n      : this.tableDataSource.dataStream.subscribe((row) => row.forEach((r) => this.selection.select(r)));\n\n    this.selectionChange.next(this.selection.selected);\n  }\n\n  checkboxLabel(row?: T): string {\n    if (!row) {\n      return `${this.isAllSelected() ? 'select' : 'deselect'} all`;\n    }\n    return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row -`;\n  }\n\n  constructor(private _renderer: Renderer2, private changeDetector: ChangeDetectorRef, private _injector: Injector) {\n    this.tableDataSource = new SaTableDataSource(\n      this._source.asObservable(),\n      new DefaultCommonTableFilter(),\n      this.dataTable == undefined ? false : true\n    );\n  }\n\n  menuItemClicked(button: SaButton, evt) {\n    button.triggerNext(evt);\n  }\n\n  onColumnResize = (event: MouseEvent, index: number, header) => {\n    this.isResizing = true;\n    this.resizeStartX = event.pageX;\n    this.resizeIndex = index;\n    this.resizeStartWidth = header._elementRef.nativeElement.clientWidth;\n  };\n\n  onMouseMove = (event: MouseEvent) => {\n    if (this.isResizing) {\n      let width = this.resizeStartWidth + (event.pageX - this.resizeStartX);\n      this.columns[this.resizeIndex].width = `${width}px`;\n    }\n  };\n\n  onMouseUp = () => {\n    this.isResizing = false;\n  };\n\n  ngOnInit() {\n    this._renderer.listen('document', 'mouseup', this.onMouseUp);\n\n    this.actionsTemplate = this.dataTable.actionsTemplate;\n    this.subs.push(\n      this.dataTable.onColumnAdded().subscribe((column) => {\n        if (column.filter) this.filterArray.push(column.filter);\n      })\n    );\n    this.subs.push(\n      this.dataTable.onColumnRemoved().subscribe((column) => {\n        this.filterArray =\n          column.filter != null ? this.filterArray.filter((x) => x.key != column.filter.key) : this.filterArray;\n      })\n    );\n    this.subs.push(\n      this.dataTable.onColumnUpdated().subscribe((columns) => {\n        this.columns = columns;\n        this.columnToDisplay = columns.map((z) => {\n          return z.key;\n        });\n\n        if (this.dataTable.optionsColumnRef) {\n          this.columnToDisplay.push('options');\n        }\n\n        if (this.dataTable.enableDataContainer) {\n          this.columnToDisplay.push('container');\n        }\n\n        if (this.dataTable.showCheckboxColumn) {\n          this.columnToDisplay.unshift('select');\n        }\n      })\n    );\n\n    this.subs.push(\n      this.dataTable.onFilterAdded().subscribe((filter) => {\n        this.filterArray.push(filter);\n      })\n    );\n\n    this.subs.push(\n      this.dataTable.onRowDelete().subscribe((itemOrIndexOrPredicate) => {\n        if (typeof itemOrIndexOrPredicate == 'function') {\n          this.sourceList = (itemOrIndexOrPredicate as Function)(this.sourceList);\n        } else if (typeof itemOrIndexOrPredicate == 'number') {\n          this.sourceList = this.sourceList.filter((_, i) => i != itemOrIndexOrPredicate);\n        } else {\n          this.sourceList = this.sourceList.filter((x) => x != itemOrIndexOrPredicate);\n        }\n      })\n    );\n\n    this.subs.push(\n      this.dataTable.onRefresh().subscribe((_) => {\n        this.tableDataSource.triggerFilterChange();\n      })\n    );\n\n    this.subs.push(\n      this.dataTable.onCheckboxColumnToggle().subscribe((value) => {\n        if (value === null) {\n          this.dataTable.showCheckboxColumn = !this.dataTable.showCheckboxColumn;\n        } else {\n          this.dataTable.showCheckboxColumn = value;\n        }\n\n        if (this.dataTable.showCheckboxColumn) {\n          this.columnToDisplay.unshift('select');\n        } else {\n          this.columnToDisplay = this.columnToDisplay.filter((x) => x != 'select');\n        }\n      })\n    );\n\n    this.subs.push(\n      this.dataTable.onFilterApplied().subscribe((filters) => {\n        this.filterArray.forEach((x) => (x.defaults = null));\n        var clone = Object.assign([], this.filterArray);\n        for (const filter of filters) {\n          const index = clone.findIndex((x) => x.key == filter.key);\n          if (index != -1) {\n            clone[index].defaults = filter.defaults;\n          }\n        }\n        this.filterArray = [];\n        this.filterArray = clone;\n      })\n    );\n\n    // listen to dataSource filter change\n    this.subs.push(\n      this.tableDataSource.onFilterChange\n        // here we return a new observable to get the new records on filter change using switchMap,\n        // which also discards any pending subscription if a new filter change event is emitted\n        // while the previous request hasn't been completed\n        .pipe(switchMap((filter) => this._getRecords(filter)))\n        .subscribe((res) => {\n          this.totalCount = res.Pager.TotalRecords;\n          this.sourceList = res.List;\n          this.isRender = true;\n          this.showFilter = true;\n\n          if (this.dataTable.selectedRowPredicate) {\n            res.List.forEach((row) => {\n              if (!this.selection.isSelected(row) && this.dataTable.selectedRowPredicate(row)) {\n                this.selection.select(row);\n              }\n\n              this.selection.selected.forEach((selected) => {\n                if (!this.dataTable.selectedRowPredicate(selected)) {\n                  this.selection.deselect(selected);\n                }\n              });\n            });\n          }\n        })\n    );\n\n    this.subs.push(\n      this.dataTable.onRowAdded().subscribe((x) => {\n        this._source.next([...[x], ...this._source.value]);\n      })\n    );\n\n    this.tableDataSource.filter.pageSize = this.dataTable.defaultPageSize || this.tableDataSource.filter.pageSize;\n  }\n\n  ngAfterViewInit(): void {\n    //attaching sort and paginator directives to the data source, after they are bound to the view\n\n    if (this.dataTable.disableSorting) {\n      this.sort.disabled = true;\n    }\n\n    this.tableDataSource.sort = this.sort;\n    this.tableDataSource.paginator = this.paginator;\n  }\n\n  ngOnDestroy(): void {\n    if (this.subs && this.subs.length > 0) {\n      while (this.subs.length > 0) {\n        let sub = this.subs.pop();\n        sub.unsubscribe();\n        sub = null;\n      }\n    }\n    this._source.complete();\n  }\n\n  //* Callback for when table filter change is triggered.\n  //  * Returns a new observable to fetch the new list of records using the updated filter model\n  //*\n  //  * @param filter updated table filter model\n  //* /\n  private _getRecords(filter: SaCommonTableFilter): Observable<IGenericPageListViewModel<T>> {\n    this.isRender = false;\n    let requestModel: IRequestModel = {\n      pageNumber: filter.pageNo,\n      pageSize: filter.pageSize,\n      sortDir: filter.sortDir,\n      filter: filter.filterModel,\n      sortCol: filter.sortCol\n    };\n\n    return this.dataTable.getResults(requestModel);\n  }\n\n  filterChange(filter: IFilterModel) {\n    this.tableDataSource.filter.pageNo = 0;\n    this.tableDataSource.filter.filterModel = filter;\n  }\n\n  dataRowClick(row: T) {\n    this.rowClick.emit(row);\n  }\n\n  openContainer(ele) {\n    this.containerElement.next(ele);\n    this.opened = true;\n    this.virtualPotalOutlet.detach();\n    if (!this.dataTable.componentOrTemplateRef) {\n      let x = new TemplatePortal<T>(this.templatePortalContent, null, { $implicit: ele } as any);\n      this.virtualPotalOutlet.attach(x);\n      return;\n    }\n    if (this.dataTable.componentOrTemplateRef instanceof TemplateRef) {\n      let portal = new TemplatePortal<T>(this.dataTable.componentOrTemplateRef, null, { $implicit: ele } as any);\n      this.virtualPotalOutlet.attach(portal);\n    } else {\n      this.virtualPotalOutlet.detach();\n      let portal = new ComponentPortal(this.dataTable.componentOrTemplateRef, null, this.createInjector(ele));\n      this.virtualPotalOutlet.attach(portal);\n    }\n  }\n  private createInjector(dataToPass) {\n    return Injector.create({\n      parent: this._injector,\n      providers: [{ provide: CONTAINER_DATA, useValue: dataToPass }]\n    });\n  }\n  closeContainer() {\n    this.opened = false;\n    if (this.virtualPotalOutlet) this.virtualPotalOutlet.detach();\n    this.containerElement.next(null);\n  }\n  getContainerElement() {\n    return this.containerElement.asObservable();\n  }\n\n  openSubMenuOptions() {\n    this.iconSelector.open();\n  }\n\n  columnChangeClicked(event: MatCheckboxChange, column: IDataTableColumn) {\n    if (event.checked) {\n      this.columnToDisplay.splice(-1, 0, column.key);\n    } else {\n      this.columnToDisplay = this.columnToDisplay.filter((x) => x != column.key);\n    }\n  }\n\n  isColumnVisible(column: IDataTableColumn): boolean {\n    return this.columnToDisplay.some((x) => x == column.key);\n  }\n\n  onCheckBoxChange(event, row) {\n    this.selection.toggle(row);\n    const eventdata: RowSelectEventDataModel<T> = {\n      checked: event.checked,\n      rowData: row\n    };\n    this.rowSelect.emit(eventdata);\n    this.selectionChange.next(this.selection.selected);\n  }\n\n  initializeMinimap() {\n    var elementWidth = this.table.nativeElement.offsetWidth;\n\n    var scrollableWidth = this.table.nativeElement.scrollWidth;\n\n    var scrollerRatio = scrollableWidth / elementWidth;\n\n    this.scrollerWidth = this.scrollerContainerWidth / scrollerRatio;\n\n    if (scrollableWidth > elementWidth) {\n      var difference = scrollableWidth - elementWidth;\n      var maxMargin = this.scrollerContainerWidth - this.scrollerWidth;\n      var ratio = difference / maxMargin;\n\n      let xValue = 0;\n      let marginLeft = 0;\n      var isDown = false;\n\n      var right = (document.body.clientWidth - this.table.nativeElement.clientWidth + 40).toString() + 'px';\n\n      this.scroller_div.nativeElement.style.visibility = 'visible';\n\n      document.getElementById('parent').style.right = right;\n\n      document.getElementById('parent').style.bottom = '40px';\n\n      if (\n        this.table.nativeElement.getBoundingClientRect().top >\n        (window.innerHeight || document.documentElement.clientHeight) - 200\n      ) {\n        document.getElementById('parent').style.cssText = 'display: none !important';\n      }\n\n      this._renderer.listen(document, 'scroll', (e) => {\n        var bounds = this.table.nativeElement.getBoundingClientRect();\n        if (\n          bounds.bottom < (window.innerHeight || document.documentElement.clientHeight) ||\n          bounds.top > (window.innerHeight || document.documentElement.clientHeight) - 200\n        ) {\n          document.getElementById('parent').style.cssText = 'display: none !important';\n        } else {\n          document.getElementById(\n            'parent'\n          ).style.cssText = `position: fixed; top: unset; bottom: 40px; right: ${right} !important`;\n        }\n      });\n\n      this._renderer.listen(this.scroller.nativeElement, 'mousedown', (e) => {\n        isDown = true;\n        xValue = e.clientX;\n      });\n\n      this._renderer.listen(document, 'mouseup', () => {\n        isDown = false;\n      });\n\n      this._renderer.listen(this.scroller.nativeElement, 'mousemove', (e) => {\n        if (isDown) {\n          this.table.nativeElement.scrollLeft += ((e.clientX - xValue) * ratio) / 50;\n          marginLeft += (e.clientX - xValue) / 50;\n\n          switch (true) {\n            case marginLeft > maxMargin:\n              marginLeft = maxMargin;\n              this.scroller.nativeElement.style.marginLeft = maxMargin.toString() + 'px';\n              break;\n\n            case marginLeft <= 0:\n              marginLeft = 0;\n              this.scroller.nativeElement.style.marginLeft = '0px';\n              break;\n\n            default:\n              this.scroller.nativeElement.style.marginLeft = marginLeft + 'px';\n              break;\n          }\n        }\n      });\n\n      this._renderer.listen(this.scroll_container.nativeElement, 'click', (e) => {\n        if (!isDown && (e.target as HTMLElement).id == 'scroll-container') {\n          var clickOffsetLeft = e.clientX;\n\n          this.table.nativeElement.scrollLeft += (clickOffsetLeft - this.scrollerWidth) * ratio;\n          marginLeft += clickOffsetLeft - this.scrollerWidth;\n\n          switch (true) {\n            case marginLeft > maxMargin:\n              marginLeft = maxMargin;\n              this.scroller.nativeElement.style.marginLeft = maxMargin.toString() + 'px';\n              break;\n\n            case marginLeft <= 0:\n              marginLeft = 0;\n              this.scroller.nativeElement.style.marginLeft = '0px';\n              break;\n\n            default:\n              this.scroller.nativeElement.style.marginLeft = marginLeft + 'px';\n              break;\n          }\n        }\n      });\n\n      this._renderer.listen(this.table.nativeElement, 'scroll', (e) => {\n        var denominator = difference / (this.scrollerContainerWidth - this.scrollerWidth);\n        this.scroller.nativeElement.style.marginLeft =\n          (this.table.nativeElement.scrollLeft / denominator).toString() + 'px';\n      });\n    }\n  }\n}\n\nexport interface RowSelectEventDataModel<T> {\n  checked: boolean;\n  rowData: T;\n}\n","<div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start strech\" fxLayoutGap=\"8px\" class=\"parent-container\">\n  <div fxFlex=\"nogrow\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n    <div fxFlex=\"grow\">\n      <sa-data-filter\n        *ngIf=\"dataTable.showFilters == null || dataTable.showFilters\"\n        [filters]=\"filterArray\"\n        (filterChange)=\"filterChange($event)\"\n      ></sa-data-filter>\n    </div>\n    <div fxFlex=\"nogrow\">\n      <button mat-button *ngIf=\"dataTable.mainActionMenu.length > 0\" color=\"primary\" [matMenuTriggerFor]=\"menu\">\n        Action\n      </button>\n      <mat-menu #menu=\"matMenu\">\n        <button\n          mat-menu-item\n          color=\"primary\"\n          *ngFor=\"let action of dataTable.mainActionMenu\"\n          (click)=\"menuItemClicked(action, $event)\"\n        >\n          {{ action.title }}\n        </button>\n      </mat-menu>\n    </div>\n    <div fxFlex=\"nogrow\" *ngIf=\"dataTable.showColumnToggle == null || dataTable.showColumnToggle\">\n      <button mat-button color=\"primary\" [matMenuTriggerFor]=\"columnMenu\">\n        Columns <mat-icon>keyboard_arrow_down</mat-icon>\n      </button>\n      <mat-menu #columnMenu>\n        <mat-checkbox\n          class=\"mat-menu-item\"\n          *ngFor=\"let column of columns\"\n          (change)=\"columnChangeClicked($event, column)\"\n          [checked]=\"isColumnVisible(column)\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          {{ column.title }}\n        </mat-checkbox>\n      </mat-menu>\n    </div>\n  </div>\n\n  <div fxLayout=\"row\" fxLayoutAlign=\"end\" id=\"scroller-div\" #scroller_div fxHide.lt-md>\n    <mat-card id=\"parent\">\n      <div id=\"scroll-container\" #scroll_container [style.width.px]=\"scrollerContainerWidth\">\n        <div id=\"scroller\" fxLayoutAlign=\"center center\" #scroller [style.width.px]=\"scrollerWidth\"> </div>\n      </div>\n    </mat-card>\n  </div>\n  <mat-sidenav-container>\n    <mat-sidenav #sidenav mode=\"side\" position=\"end\" [(opened)]=\"opened\" style=\"width: 30vw\">\n      <button mat-button>\n        <mat-icon (click)=\"closeContainer()\">cancel</mat-icon>\n      </button>\n      <ng-container #container cdkPortalOutlet> </ng-container>\n    </mat-sidenav>\n    <mat-sidenav-content class=\"side-container\">\n      <ng-container *ngTemplateOutlet=\"actionsTemplate\"> </ng-container>\n      <div fxFlex=\"noshrink\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"table-container\" id=\"table\" #table>\n        <mat-nav-list\n          fxFlexFill\n          fxHide\n          [fxShow.lt-md]=\"listItemTemplateRef != null && listItemTemplateRef != undefined\"\n        >\n          <div *ngFor=\"let row of sourceList\">\n            <ng-container *ngTemplateOutlet=\"listItemTemplateRef; context: { row: row }\"></ng-container>\n          </div>\n        </mat-nav-list>\n\n        <table\n          mat-table\n          [dataSource]=\"tableDataSource\"\n          matSort\n          fxShow\n          [ngClass]=\"{ 'cursor-resize': isResizing }\"\n          [fxHide.lt-md]=\"listItemTemplateRef != null && listItemTemplateRef != undefined\"\n          (mousemove)=\"onMouseMove($event)\"\n        >\n          <!-- Checkbox Column -->\n          <ng-container matColumnDef=\"select\" sticky=\"true\">\n            <th mat-header-cell *matHeaderCellDef>\n              <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n                <mat-checkbox\n                  (change)=\"$event ? masterToggle() : null\"\n                  [checked]=\"selection.hasValue() && isAllSelected()\"\n                  [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n                  [aria-label]=\"checkboxLabel()\"\n                >\n                </mat-checkbox>\n              </div>\n            </th>\n            <td mat-cell *matCellDef=\"let row\">\n              <div fxLayout=\"row\" fxLayoutAlign=\"center center\">\n                <mat-checkbox\n                  (click)=\"$event.stopPropagation()\"\n                  (change)=\"$event ? onCheckBoxChange($event, row) : null\"\n                  [checked]=\"selection.isSelected(row)\"\n                  [aria-label]=\"checkboxLabel(row)\"\n                >\n                </mat-checkbox>\n              </div>\n            </td>\n          </ng-container>\n\n          <!-- button Column -->\n          <ng-container matColumnDef=\"options\" stickyEnd>\n            <th mat-header-cell *matHeaderCellDef> </th>\n            <td mat-cell *matCellDef=\"let row\">\n              <ng-container *ngTemplateOutlet=\"dataTable.optionsColumnRef; context: { $implicit: row }\"> </ng-container>\n            </td>\n          </ng-container>\n\n          <ng-container matColumnDef=\"container\" stickyEnd>\n            <th mat-header-cell *matHeaderCellDef> </th>\n            <td mat-cell *matCellDef=\"let element\">\n              <button\n                *ngIf=\"(getContainerElement() | async) !== element; else containerRightIcon\"\n                (click)=\"openContainer(element)\"\n                mat-icon-button\n              >\n                <mat-icon>keyboard_arrow_left</mat-icon>\n              </button>\n            </td>\n          </ng-container>\n\n          <!-- Sliced 1 to not to reinitilize the select controller-->\n          <ng-container\n            *ngFor=\"let col of columns; let i = index\"\n            matColumnDef=\"{{ col }}\"\n            [matColumnDef]=\"col.key\"\n            [sticky]=\"!dataTable.showCheckboxColumn && col.sticky\"\n            [stickyEnd]=\"col.stickyEnd\"\n          >\n            <th\n              mat-header-cell\n              *matHeaderCellDef\n              mat-sort-header\n              [ngClass]=\"{ 'disable-sort': col.disableSort || isResizing }\"\n              [disabled]=\"col.disableSort || isResizing\"\n              matTooltip=\"{{ col.title }}\"\n              #tableHeader\n            >\n              <div *ngIf=\"!col.headerTemplate\" class=\"truncate\">{{ col.title | uppercase }}</div>\n              <div *ngIf=\"col.headerTemplate\">\n                <ng-container *ngTemplateOutlet=\"col.headerTemplate; context: { column: col }\"> </ng-container>\n              </div>\n              <div class=\"sort-arrow-placeholder\"></div>\n              <span class=\"resize-handle\" (mousedown)=\"onColumnResize($event, i, tableHeader)\"></span>\n            </th>\n            <ng-container *ngIf=\"col.template\">\n              <td\n                mat-cell\n                [style.min-width]=\"col.width ? col.width : '120px'\"\n                (click)=\"dataRowClick(element)\"\n                *matCellDef=\"let element\"\n              >\n                <div class=\"cell-container\" *ngIf=\"dataTable.routerLinkEnabled\">\n                  <a [routerLink]=\"[element['route']]\" fxFlexFill fxLayoutAlign=\"start center\">\n                    <ng-container *ngTemplateOutlet=\"col.template; context: { column: col, row: element }\">\n                    </ng-container>\n                  </a>\n                </div>\n                <div class=\"cell-container\" *ngIf=\"!dataTable.routerLinkEnabled\" fxLayoutAlign=\"start center\">\n                  <ng-container *ngTemplateOutlet=\"col.template; context: { column: col, row: element }\">\n                  </ng-container>\n                </div>\n              </td>\n            </ng-container>\n\n            <ng-container *ngIf=\"!col.template\">\n              <td\n                mat-cell\n                [style.min-width]=\"col.width ? col.width : '120px'\"\n                (click)=\"dataRowClick(element)\"\n                *matCellDef=\"let element\"\n              >\n                <div class=\"cell-container\" *ngIf=\"dataTable.routerLinkEnabled\">\n                  <a [routerLink]=\"[element['route']]\" fxFlexFill fxLayoutAlign=\"start center\">\n                    <span matTooltip=\"{{ element[col.key] | valueFormatter: col.type }}\" class=\"truncate\">\n                      {{ element[col.key] | valueFormatter: col.type }}\n                    </span>\n                  </a>\n                </div>\n\n                <div class=\"cell-container\" *ngIf=\"!dataTable.routerLinkEnabled\" fxLayoutAlign=\"start center\">\n                  <span matTooltip=\"{{ element[col.key] | valueFormatter: col.type }}\" class=\"truncate\">\n                    {{ element[col.key] | valueFormatter: col.type }}\n                  </span>\n                </div>\n              </td>\n            </ng-container>\n          </ng-container>\n\n          <tr mat-header-row *matHeaderRowDef=\"columnToDisplay; sticky: true\"></tr>\n          <tr mat-row *matRowDef=\"let element; columns: columnToDisplay\"> </tr>\n        </table>\n        <ng-container *ngIf=\"(tableDataSource.dataStream | async)?.length == 0 && isRender\">\n          <div class=\"blank-card\">\n            <p> There are no items to show currently. </p>\n          </div>\n        </ng-container>\n\n        <div *ngIf=\"!isRender\" class=\"loading\">\n          <mat-spinner diameter=\"30\"></mat-spinner>\n        </div>\n      </div>\n      <mat-paginator\n        *ngIf=\"dataTable.showPaginator == null || dataTable.showPaginator\"\n        [pageSizeOptions]=\"[5, 10, 20, 30, 40, 100]\"\n        [length]=\"totalCount\"\n        [pageSize]=\"tableDataSource.filter.pageSize\"\n        [pageIndex]=\"tableDataSource.filter.pageNo\"\n        showFirstLastButtons\n        style=\"position: sticky; left: 0; right: 0; z-index: 2\"\n      >\n      </mat-paginator>\n    </mat-sidenav-content>\n  </mat-sidenav-container>\n</div>\n<ng-template #templatePortalContent let-items>\n  <mat-list>\n    <mat-list-item *ngFor=\"let item of items | keyvalue\">\n      {{ item.key | uppercase }}: &ensp;&ensp; <b>{{ item.value }}</b>\n    </mat-list-item>\n  </mat-list>\n</ng-template>\n\n<ng-template #containerRightIcon>\n  <button (click)=\"closeContainer()\" mat-icon-button>\n    <mat-icon>keyboard_arrow_right</mat-icon>\n  </button>\n</ng-template>\n","import { Component, Input, HostListener } from '@angular/core';\nimport { SaButton } from '../models/SaButton';\n\n@Component({\n  selector: 'sa-secondary-button',\n  templateUrl: './sa-secondary-button.component.html',\n  styleUrls: ['./sa-secondary-button.component.scss']\n})\nexport class SaSecondaryButtonComponent {\n  @Input() button: SaButton;\n  @Input() isDisabled: boolean = false;\n  @Input() isLoading: boolean = false;\n\n  constructor() {}\n\n  @HostListener('click', ['$event'])\n  clickHandler(evt) {\n    this.button.triggerNext(evt);\n  }\n}\n","<button mat-stroked-button color=\"primary\" [disabled]=\"isDisabled\" class=\"button\">\n  <span fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"5px\">\n    <span>\n      {{ button.title }}\n    </span>\n    <mat-spinner *ngIf=\"isLoading\" color=\"primary\" diameter=\"20\"></mat-spinner>\n  </span>\n</button>\n","import { Component, HostListener, Input } from '@angular/core';\nimport { SaButton } from '../models/SaButton';\n\n@Component({\n  selector: 'sa-anchor-button',\n  templateUrl: './sa-anchor-button.component.html',\n  styleUrls: ['./sa-anchor-button.component.scss']\n})\nexport class SaAnchorButtonComponent {\n  @Input() button: SaButton;\n  @Input() isDisabled: boolean = false;\n  @Input() isLoading: boolean = false;\n\n  constructor() {}\n\n  @HostListener('click', ['$event'])\n  clickHandler(evt) {\n    this.button.triggerNext(evt);\n  }\n}\n","<button mat-button color=\"primary\" [disabled]=\"isDisabled\">\n  <span fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"5px\">\n    <span>\n      {{ button.title }}\n    </span>\n    <mat-spinner *ngIf=\"isLoading\" color=\"primary\" diameter=\"20\"></mat-spinner>\n  </span>\n</button>\n","import {\n  Component,\n  OnDestroy,\n  ViewChild,\n  ElementRef,\n  Input,\n  Optional,\n  Self,\n  OnInit,\n  Inject,\n  LOCALE_ID,\n  DoCheck\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport { debounceTime } from 'rxjs/operators';\nimport { formatCurrency, getCurrencySymbol } from '@angular/common';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from '@angular/forms';\nimport { symbolFormatEnum } from '../pipes/sa-value-formatter.pipe';\n\n@Component({\n  selector: 'sa-currency-input',\n  templateUrl: './sa-currency-input.component.html',\n  styleUrls: ['./sa-currency-input.component.scss'],\n  providers: [{ provide: MatFormFieldControl, useExisting: SaCurrencyInputComponent }]\n})\nexport class SaCurrencyInputComponent\n  implements ControlValueAccessor, MatFormFieldControl<any>, OnInit, OnDestroy, DoCheck {\n  @ViewChild('input') inputRef: ElementRef;\n  @Input() allowNegative: boolean = true;\n\n  static nextId = 0;\n  private decimalSeparator: string;\n  public currencyValue = new FormControl();\n  stateChanges = new Subject<void>();\n  private _value: any;\n  private viewValue: string;\n  focused = false;\n  errorState = false;\n  controlType = 'currency-input';\n  id = `currency-input-${SaCurrencyInputComponent.nextId++}`;\n  describedBy = '';\n  onChange = (_: any) => {};\n  onTouched = () => {};\n  private _empty = true;\n  private symbol: string;\n  private _disabled = false;\n  private _placeholder: string;\n\n  constructor(\n    private _focusMonitor: FocusMonitor,\n    private _elementRef: ElementRef<HTMLElement>,\n    @Optional() @Self() public ngControl: NgControl,\n    @Inject(LOCALE_ID) private locale: string\n  ) {\n    this.decimalSeparator = '.';\n    this.symbol = getCurrencySymbol('USD', symbolFormatEnum.narrow);\n    _focusMonitor.monitor(_elementRef, true).subscribe((origin) => {\n      if (this.focused && !origin) {\n        if (this.viewValue) {\n          if (this.parse(this.viewValue))\n            this.currencyValue.patchValue(formatCurrency(parseFloat(this.parse(this.viewValue)), 'en-US', this.symbol));\n          else this.currencyValue.patchValue('');\n        }\n        this.onTouched();\n      } else {\n        if (this._value) {\n          this.currencyValue.patchValue(this.parse(this._value));\n        }\n      }\n      this.focused = !!origin;\n      this.stateChanges.next();\n    });\n\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  ngOnInit() {\n    this.currencyValue.valueChanges.pipe(debounceTime(200)).subscribe((num) => {\n      this.viewValue = num;\n      this.value = this.parse(num);\n    });\n  }\n\n  ngDoCheck(): void {\n    if (this.ngControl) {\n      this.errorState = this.ngControl.invalid && this.ngControl.touched;\n      this.stateChanges.next();\n    }\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n    this._focusMonitor.stopMonitoring(this._elementRef);\n  }\n\n  get empty() {\n    return this._empty;\n  }\n\n  get shouldLabelFloat() {\n    return this.focused || !this.empty;\n  }\n\n  @Input()\n  get placeholder(): string {\n    return this._placeholder;\n  }\n  set placeholder(d: string) {\n    this._placeholder = d;\n    this.stateChanges.next();\n  }\n\n  @Input()\n  get required(): boolean {\n    return this._required;\n  }\n  set required(value: boolean) {\n    this._required = coerceBooleanProperty(value);\n    this.stateChanges.next();\n  }\n  private _required = false;\n\n  @Input()\n  get disabled(): boolean {\n    return this._disabled;\n  }\n  set disabled(value: boolean) {\n    this._disabled = coerceBooleanProperty(value);\n    this._disabled ? this.currencyValue.disable() : this.currencyValue.enable();\n    this.stateChanges.next();\n  }\n\n  @Input()\n  get value(): string | null {\n    return this._value;\n  }\n\n  set value(val: string | null) {\n    this._value = val;\n    if (this._value != null && this._value !== '') {\n      this._empty = false;\n    } else {\n      this._empty = true;\n    }\n    this.onChange(this._value);\n    this.stateChanges.next();\n  }\n\n  setDescribedByIds(ids: string[]) {\n    this.describedBy = ids.join(' ');\n  }\n\n  onContainerClick(event: MouseEvent) {}\n\n  writeValue(val: string | null): void {\n    if (val != null) {\n      this._empty = false;\n      this.currencyValue.patchValue(formatCurrency(parseFloat(val), 'en-US', this.symbol));\n    }\n    this.value = val;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  _handleInput(): void {\n    this.onChange(this.currencyValue.value);\n  }\n\n  parse(value: string) {\n    let [integer, fraction = ''] = (value.toString() || '').split(this.decimalSeparator);\n    integer = integer.replace(new RegExp(/[^\\d\\.]/, 'g'), '');\n    fraction = parseInt(fraction, 10) > 0 && 2 > 0 ? this.decimalSeparator + (fraction + '000000').substring(0, 2) : '';\n    if (this.allowNegative && (value.toString() || '').startsWith('-')) {\n      return (-1 * parseFloat(integer + fraction)).toString();\n    } else {\n      return integer + fraction;\n    }\n  }\n}\n","<input matInput [placeholder]=\"placeholder\" type=\"text\" [formControl]=\"currencyValue\" required=\"required\" />\n","import { Component, OnInit, Input, AfterViewInit, OnChanges, SimpleChanges, NgZone } from '@angular/core';\nimport { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport { NavigationItem } from '../models/NavigationItem';\nimport { Subscription } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n  selector: 'sa-table-of-contents',\n  templateUrl: './sa-table-of-contents.component.html',\n  styleUrls: ['./sa-table-of-contents.component.scss']\n})\nexport class SaTableOfContentsComponent implements OnInit, AfterViewInit, OnChanges {\n  @Input() primaryMenu: NavigationItem[] = [];\n  @Input() secondaryMenu: NavigationItem[] = [];\n\n  private primaryMenuSubscription: Subscription[] = [];\n  private secondaryMenuSubscription: Subscription[] = [];\n\n  scrollListener: Subscription;\n\n  href: string = '';\n  currentRoute: string;\n\n  constructor(private scrollDispatcher: ScrollDispatcher, private zone: NgZone, private route: ActivatedRoute) {}\n\n  ngOnInit() {\n    this.href = window.location.pathname;\n  }\n\n  ngAfterViewInit() {\n    if (this.primaryMenu.length) {\n      this.currentRoute = this.primaryMenu[0].route;\n    } else if (this.secondaryMenu.length) {\n      this.currentRoute = this.secondaryMenu[0].route;\n    }\n\n    this.primaryMenu.forEach((menuItem) => {\n      this.primaryMenuSubscription.push(this.subscribeNavigableMenu(menuItem));\n    });\n    this.secondaryMenu.forEach((menuItem) => {\n      this.secondaryMenuSubscription.push(this.subscribeNavigableMenu(menuItem));\n    });\n\n    if (this.scrollListener) this.scrollListener.unsubscribe();\n\n    this.scrollListener = this.scrollDispatcher.scrolled(25).subscribe((x) => {\n      if (x) {\n        let scroll_start = x['elementRef'].nativeElement.scrollTop;\n        let scrollHeight = scroll_start + 120;\n\n        this.zone.run((_) => {\n          let itemOffsets = this.getItemOffsets();\n          for (let i = 0; i < itemOffsets.length; i++) {\n            if (scroll_start <= itemOffsets[0].top - 66) {\n              this.triggerEvent(itemOffsets[0].route);\n            } else if (scrollHeight >= itemOffsets[itemOffsets.length - 1].top) {\n              this.triggerEvent(itemOffsets[itemOffsets.length - 1].route);\n            } else if (scrollHeight >= itemOffsets[i].top && scrollHeight < itemOffsets[i + 1]?.top) {\n              this.triggerEvent(itemOffsets[i].route);\n            }\n          }\n        });\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.primaryMenu != undefined && changes.primaryMenu != null) {\n      if (changes.primaryMenu.previousValue != undefined) {\n        changes.primaryMenu.previousValue.forEach((x: NavigationItem) => {\n          this.primaryMenuSubscription.forEach((y: Subscription) => {\n            y.unsubscribe();\n          });\n        });\n\n        this.primaryMenuSubscription = [];\n      }\n\n      changes.primaryMenu.currentValue.forEach((x: NavigationItem) => {\n        this.primaryMenuSubscription.push(this.subscribeNavigableMenu(x));\n      });\n    }\n\n    if (changes.secondaryMenu != undefined && changes.secondaryMenu != null) {\n      if (changes.secondaryMenu.previousValue != undefined) {\n        changes.secondaryMenu.previousValue.forEach((x: NavigationItem) => {\n          this.secondaryMenuSubscription.forEach((y: Subscription) => {\n            y.unsubscribe();\n          });\n        });\n\n        this.secondaryMenuSubscription = [];\n      }\n      changes.secondaryMenu.currentValue.forEach((x: NavigationItem) => {\n        this.secondaryMenuSubscription.push(this.subscribeNavigableMenu(x));\n      });\n    }\n\n    if (changes.primaryMenu || changes.secondaryMenu) {\n      let route = this.route.snapshot.fragment;\n      const element = document.querySelector(\"a[name='\" + route + \"']\");\n\n      if (element) {\n        this.currentRoute = route;\n        element.scrollIntoView();\n        this.triggerEvent(route);\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.scrollListener) this.scrollListener.unsubscribe();\n  }\n\n  private subscribeNavigableMenu(menuItem: NavigationItem): Subscription {\n    return menuItem.obs$.subscribe((result) => {\n      this.currentRoute = result;\n    });\n  }\n\n  getItemOffsets() {\n    const that = this;\n    let itemOffsets = [];\n    this.primaryMenu.forEach((item) => {\n      var top = that.getDistanceFromTop(document.querySelector('a[name=\"' + item.route + '\"]'));\n      let itemOffset = {\n        top: top,\n        route: item.route\n      };\n      itemOffsets.push(itemOffset);\n    });\n    this.secondaryMenu.forEach((item) => {\n      var top = that.getDistanceFromTop(document.querySelector('a[name=\"' + item.route + '\"]'));\n      let itemOffset = {\n        top: top,\n        route: item.route\n      };\n      itemOffsets.push(itemOffset);\n    });\n\n    return itemOffsets;\n  }\n\n  getDistanceFromTop(element) {\n    var top = 0;\n\n    while (element) {\n      top += element.offsetTop;\n      element = element.offsetParent;\n    }\n\n    return top;\n  }\n\n  triggerEvent(route: string) {\n    const menuItem =\n      this.primaryMenu.find((x) => x.route === route) || this.secondaryMenu.find((x) => x.route === route);\n    menuItem?.triggerNext();\n  }\n}\n","<mat-nav-list>\n  <div *ngIf=\"primaryMenu.length > 0\">\n    <mat-list-item\n      class=\"menu-list\"\n      (click)=\"currentRoute = item.route\"\n      *ngFor=\"let item of primaryMenu; index as i\"\n      [ngClass]=\"{ selected: item.route == currentRoute }\"\n    >\n      <a class=\"menu-link\" href=\"{{ href }}#{{ item.route }}\">{{ item.name }}</a>\n    </mat-list-item>\n  </div>\n  <mat-divider class=\"menu-divider\" *ngIf=\"secondaryMenu.length > 0 && primaryMenu.length > 0\"></mat-divider>\n  <div *ngIf=\"secondaryMenu.length > 0\">\n    <mat-list-item\n      [ngClass]=\"{ selected: item.route == currentRoute }\"\n      class=\"menu-list\"\n      (click)=\"currentRoute = item.route\"\n      *ngFor=\"let item of secondaryMenu\"\n    >\n      <a class=\"menu-link\" href=\"{{ href }}#{{ item.route }}\">{{ item.name }}</a>\n    </mat-list-item>\n  </div>\n</mat-nav-list>\n","import {\n  AfterViewInit,\n  ElementRef,\n  HostBinding,\n  Inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  PLATFORM_ID,\n  Renderer2,\n  Self,\n  Directive,\n  DoCheck\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, Validator } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { QuillEditorBase, QuillService } from 'ngx-quill';\nimport {\n  mixinDisabled,\n  mixinErrorState,\n  CanDisable,\n  CanUpdateErrorState,\n  ErrorStateMatcher\n} from '@angular/material/core';\nimport { HasErrorState } from '@angular/material/core/common-behaviors/error-state';\nimport { MatFormFieldControl } from '@angular/material/form-field';\n\nclass SaTextQuillBase extends QuillEditorBase {\n  constructor(\n    public _defaultErrorStateMatcher: ErrorStateMatcher,\n    public _parentForm: NgForm,\n    public _parentFormGroup: FormGroupDirective,\n    public ngControl: NgControl,\n    elementRef: ElementRef,\n    domSanitizer: DomSanitizer,\n    doc: any,\n    platformId: any,\n    renderer: Renderer2,\n    zone: NgZone,\n    service: QuillService\n  ) {\n    super(elementRef, domSanitizer, doc, platformId, renderer, zone, service);\n  }\n}\nconst _MatQuillMixinBase = mixinErrorState(mixinDisabled(SaTextQuillBase));\n@Directive()\nexport abstract class _MatQuillBase\n  extends _MatQuillMixinBase\n  implements\n    AfterViewInit,\n    CanDisable,\n    CanUpdateErrorState,\n    ControlValueAccessor,\n    HasErrorState,\n    MatFormFieldControl<any>,\n    OnChanges,\n    OnDestroy,\n    Validator,\n    DoCheck\n{\n  abstract controlType: string;\n  focused = false;\n  abstract id: string;\n  constructor(\n    defaultErrorStateMatcher: ErrorStateMatcher,\n    @Optional() parentForm: NgForm,\n    @Optional() parentFormGroup: FormGroupDirective,\n    @Optional() @Self() public ngControl: NgControl,\n    elementRef: ElementRef,\n    domSanitizer: DomSanitizer,\n    @Inject(DOCUMENT) doc: any,\n    @Inject(PLATFORM_ID) platformId: any,\n    renderer: Renderer2,\n    zone: NgZone,\n    service: QuillService\n  ) {\n    super(\n      defaultErrorStateMatcher,\n      parentForm,\n      parentFormGroup,\n      ngControl,\n      elementRef,\n      domSanitizer,\n      doc,\n      platformId,\n      renderer,\n      zone,\n      service\n    );\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n    this.onBlur.subscribe(() => {\n      this.focused = false;\n      this.stateChanges.next();\n    });\n    this.onFocus.subscribe(() => {\n      this.focused = true;\n      this.stateChanges.next();\n    });\n  }\n  autofilled?: boolean;\n\n  async ngAfterViewInit() {\n    await super.ngAfterViewInit();\n    this.renderer.addClass(this.elementRef.nativeElement.querySelector('.ql-editor'), 'notranslate');\n  }\n\n  ngDoCheck(): void {\n    if (this.ngControl != null) {\n      this.ngControl.control.setValidators([this.validate.bind(this)]);\n    }\n  }\n\n  disabled = false;\n  private _empty = false;\n  get empty() {\n    return this._empty;\n  }\n  placeholder: string;\n  required = false;\n  @HostBinding('class.floating')\n  get shouldLabelFloat() {\n    return this.focused || !this.empty;\n  }\n  get value(): any {\n    try {\n      return this.valueGetter(this.quillEditor, this.editorElem!);\n    } catch (e) {\n      return;\n    }\n  }\n  set value(value: any) {\n    this.writeValue(value);\n    this.stateChanges.next();\n  }\n  /*\n   * METHODS\n   */\n  blur() {\n    (this.editorElem.childNodes as NodeListOf<HTMLElement>)[0]['blur']();\n  }\n  focus() {\n    this.quillEditor.focus();\n  }\n  @HostBinding('attr.aria-describedby') _describedBy = '';\n  setDescribedByIds(ids: string[]) {\n    this._describedBy = ids.join(' ');\n  }\n  onContainerClick(event: MouseEvent) {\n    if (!this.focused) {\n      this.quillEditor.focus();\n    }\n  }\n\n  static ngAcceptInputType_disabled: boolean | string | null | undefined;\n  static ngAcceptInputType_required: boolean | string | null | undefined;\n}\n","import { Component, HostBinding, ChangeDetectionStrategy } from '@angular/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { _MatQuillBase } from './sa-text-quill-base';\n\n// Increasing integer for generating unique ids for mat-quill components.\nlet nextUniqueId = 0;\n\nconst SELECTOR = 'sa-text-editor';\n@Component({\n  selector: SELECTOR,\n  host: {\n    '[id]': 'id',\n    '[attr.aria-describedby]': 'describedBy'\n  },\n  templateUrl: './sa-text-editor.component.html',\n  styleUrls: ['./sa-text-editor.component.scss'],\n  inputs: ['disabled'],\n  providers: [{ provide: MatFormFieldControl, useExisting: SaTextEditorComponent }],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SaTextEditorComponent extends _MatQuillBase {\n  controlType = SELECTOR;\n  @HostBinding() id = `${SELECTOR}-${nextUniqueId++}`;\n\n  static ngAcceptInputType_disabled: boolean | string | null | undefined;\n  static ngAcceptInputType_required: boolean | string | null | undefined;\n}\n","<ng-content select=\"[quill-editor-toolbar]\"></ng-content> <ng-content></ng-content>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'sa-base-header',\n  templateUrl: './sa-base-header.component.html',\n  styleUrls: ['./sa-base-header.component.scss']\n})\nexport class SaBaseHeaderComponent {\n  constructor() {}\n}\n","<mat-toolbar>\n  <ng-content select=\".sa-base-header-content\"> </ng-content>\n</mat-toolbar>\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\n\nexport class SaButtonConfig {\n  isDisabled: boolean = false;\n  type: SaButtonType = SaButtonType.Primary;\n  loadingText: string;\n\n  private _isSpinning: boolean = false;\n  get isSpinning(): boolean {\n    return this._isSpinning;\n  }\n  set isSpinning(val: boolean) {\n    if (this._isSpinning == true && val == false) {\n      this.loadingSubject.next(true);\n    }\n    this._isSpinning = val;\n  }\n\n  private loadingSubject: Subject<boolean> = new Subject();\n\n  get loadingStopped(): Observable<boolean> {\n    return this.loadingSubject.asObservable();\n  }\n\n  constructor(public title: string) {}\n}\n\nexport enum SaButtonType {\n  Primary,\n  Secondary,\n  Anchor\n}\n\n@Component({\n  selector: 'sa-button',\n  templateUrl: './sa-button.component.html',\n  styleUrls: ['./sa-button.component.scss'],\n  animations: [\n    trigger('Fading', [\n      state('false', style({ opacity: 1 })),\n      state('true', style({ opacity: 0 })),\n      transition('false => true', animate('800ms ease-out'))\n    ])\n  ]\n})\nexport class SaButtonComponent {\n  @Input() config: SaButtonConfig;\n  @Output() onClick: EventEmitter<Event> = new EventEmitter();\n\n  buttonType = SaButtonType;\n\n  showCheckmark: boolean;\n\n  showAnimation: boolean = false;\n\n  constructor() {}\n\n  @Input() set isDisabled(val: boolean) {\n    if (this.config)\n      this.config.isDisabled = val;\n  }\n\n  get isDisabled(): boolean {\n    return this.config.isDisabled;\n  }\n\n  ngOnInit() {\n    this.config.loadingStopped.subscribe((res) => {\n      if (res) {\n        this.showCheckmark = true;\n        setTimeout(() => {\n          this.showAnimation = true;\n          setTimeout(() => {\n            this.showCheckmark = false;\n            this.showAnimation = false;\n          }, 800);\n        }, 1600);\n      }\n    });\n  }\n\n  onButtonClick(evt: Event) {\n    this.onClick.emit(evt);\n  }\n}\n","<button\n  mat-flat-button\n  [class.no-pointer]=\"config.isSpinning\"\n  color=\"primary\"\n  [disabled]=\"config.isDisabled && !config.isSpinning\"\n  class=\"button\"\n  (click)=\"onButtonClick($event)\"\n  *ngIf=\"config.type == buttonType.Primary\"\n>\n  <span fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"5px\">\n    <span>\n      {{ config.isSpinning && config.loadingText ? config.loadingText : config.title }}\n    </span>\n    <mat-spinner *ngIf=\"config.isSpinning\" class=\"primary\" color=\"primary\" diameter=\"20\"></mat-spinner>\n    <mat-icon *ngIf=\"showCheckmark\" [@Fading]=\"showAnimation\">done</mat-icon>\n  </span>\n</button>\n\n<button\n  mat-stroked-button\n  [class.no-pointer]=\"config.isSpinning\"\n  color=\"primary\"\n  [disabled]=\"config.isDisabled && !config.isSpinning\"\n  class=\"button secondary\"\n  (click)=\"onButtonClick($event)\"\n  *ngIf=\"config.type == buttonType.Secondary\"\n>\n  <span fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"5px\">\n    <span>\n      {{ config.isSpinning && config.loadingText ? config.loadingText : config.title }}\n    </span>\n    <mat-spinner *ngIf=\"config.isSpinning\" color=\"primary\" diameter=\"20\"></mat-spinner>\n    <mat-icon *ngIf=\"showCheckmark\" [@Fading]=\"showAnimation\">done</mat-icon>\n  </span>\n</button>\n\n<button\n  mat-button\n  [class.no-pointer]=\"config.isSpinning\"\n  color=\"primary\"\n  [disabled]=\"config.isDisabled && !config.isSpinning\"\n  (click)=\"onButtonClick($event)\"\n  *ngIf=\"config.type == buttonType.Anchor\"\n>\n  <span fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"5px\">\n    <span>\n      {{ config.isSpinning && config.loadingText ? config.loadingText : config.title }}\n    </span>\n    <mat-spinner *ngIf=\"config.isSpinning\" color=\"primary\" diameter=\"20\"></mat-spinner>\n    <mat-icon *ngIf=\"showCheckmark\" [@Fading]=\"showAnimation\">done</mat-icon>\n  </span>\n</button>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IHeaderViewModel } from '../models/HeaderViewModels';\n\n@Component({\n  selector: 'sa-header',\n  templateUrl: './sa-header.component.html',\n  styleUrls: ['./sa-header.component.scss']\n})\nexport class SaHeaderComponent {\n  @Input() header: IHeaderViewModel;\n  @Output() primaryClick: EventEmitter<Event> = new EventEmitter();\n  @Output() secondaryClick: EventEmitter<Event> = new EventEmitter();\n\n  constructor() {}\n\n  onPrimaryClick(event: Event) {\n    this.primaryClick.emit(event);\n  }\n\n  onSecodaryClick(event: Event) {\n    this.secondaryClick.emit(event);\n  }\n}\n","<sa-base-header>\n  <div class=\"sa-base-header-content\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n    <div fxLayout=\"row\" fxLayoutGap=\"2px\">\n      <span fxFlex=\"none\" fxLayoutAlign=\" center\" class=\"sidenav-toggle\">{{ header.title }}</span>\n      <mat-icon *ngIf=\"header.tooltip\" fxHide.lt-md [matTooltip]=\"header.tooltip\" matTooltipClass=\"multilineTooltip\"\n        >info_outline</mat-icon\n      >\n    </div>\n    <span fxFlex></span>\n    <div fxFlex=\"nogrow\" fxLayoutGap=\"5px\">\n      <sa-button\n        fxHide.lt-md\n        [config]=\"header.secondaryButton\"\n        *ngIf=\"header.secondaryButton\"\n        (onClick)=\"onSecodaryClick($event)\"\n      ></sa-button>\n      <sa-button\n        fxHide.lt-md\n        [config]=\"header.primaryButton\"\n        *ngIf=\"header.primaryButton\"\n        (onClick)=\"onPrimaryClick($event)\"\n      ></sa-button>\n    </div>\n    <div fxFlex=\"nogrow\" fxFlexOffset=\"5px\" *ngIf=\"header.menuTemplate\">\n      <ng-container *ngTemplateOutlet=\"header.menuTemplate\"></ng-container>\n    </div>\n  </div>\n</sa-base-header>\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { ResizeObserver as Polyfill } from '@juggle/resize-observer';\n\nconst ResizeObserver = (window as any).ResizeObserver || Polyfill;\n\n@Component({\n  selector: 'sa-base-page',\n  templateUrl: './sa-base-page.component.html',\n  styleUrls: ['./sa-base-page.component.scss']\n})\nexport class SaBasePageComponent implements OnInit {\n  resizeObserver: Polyfill;\n\n  constructor(private host: ElementRef) {}\n\n  ngOnInit() {}\n\n  ngAfterViewInit() {\n    let pageBody = this.host.nativeElement.querySelector('.page-body');\n    let subHeader = this.host.nativeElement.querySelector('.sub-header');\n    this.resizeObserver = new ResizeObserver((entries) => {\n      entries.forEach((entry) => {\n        if (subHeader) {\n          subHeader['style'].width = pageBody.getBoundingClientRect().width + 'px';\n          subHeader['style'].left = pageBody.getBoundingClientRect().x + 'px';\n        }\n      });\n    });\n\n    if (pageBody) this.resizeObserver.observe(pageBody);\n  }\n\n  ngOnDestroy() {\n    this.resizeObserver.unobserve(this.host.nativeElement.querySelector('.page-body'));\n  }\n}\n","<ng-content select=\".page-header\"> </ng-content>\n<ng-content select=\".sub-header\"> </ng-content>\n<ng-content select=\".page-body\"> </ng-content>\n","import { Component, OnInit, Input, ElementRef } from '@angular/core';\nimport { MediaChange, MediaObserver } from '@angular/flex-layout';\nimport { ActivatedRoute } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ResizeObserver as Polyfill } from '@juggle/resize-observer';\nimport { NavigationItem } from '../models/NavigationItem';\n\nconst ResizeObserver = (window as any).ResizeObserver || Polyfill;\n\n@Component({\n  selector: 'sa-navigable-page',\n  templateUrl: './sa-navigable-page.component.html',\n  styleUrls: ['./sa-navigable-page.component.scss']\n})\nexport class SaNavigablePageComponent implements OnInit {\n  @Input() primaryMenu: NavigationItem[] = [];\n  @Input() secondaryMenu: NavigationItem[] = [];\n\n  navigationList: NavigationItem[];\n\n  panelOpenState: boolean;\n\n  viewPortSize$: Observable<string>;\n\n  resizeObserver: Polyfill;\n\n  constructor(private mediaObserver$: MediaObserver, private route: ActivatedRoute, private host: ElementRef) {\n    mediaObserver$.media$.subscribe();\n    this.viewPortSize$ = mediaObserver$.media$.pipe(\n      map((change: MediaChange) => {\n        return change.mqAlias;\n      })\n    );\n  }\n\n  ngOnInit() {\n    this.navigationList = this.primaryMenu.concat(this.secondaryMenu);\n    this.route.fragment.subscribe((f) => {\n      const element = document.querySelector(\"a[name='\" + f + \"']\");\n      if (element) {\n        element.scrollIntoView();\n      }\n    });\n  }\n\n  ngAfterViewInit() {\n    let pageContent = this.host.nativeElement.querySelector('.page-body  .mat-drawer-content');\n    let subHeader = this.host.nativeElement.querySelector('.sub-header');\n    this.resizeObserver = new ResizeObserver((entries) => {\n      entries.forEach((entry) => {\n        if (subHeader) {\n          subHeader['style'].width = pageContent.getBoundingClientRect().width + 'px';\n          subHeader['style'].left = pageContent.getBoundingClientRect().x + 'px';\n        }\n      });\n    });\n\n    if (pageContent) this.resizeObserver.observe(pageContent);\n  }\n\n  ngOnDestroy() {\n    this.resizeObserver.unobserve(this.host.nativeElement.querySelector('.page-body'));\n  }\n}\n","<sa-base-page>\n  <ng-content class=\"page-header\" select=\".page-header\"></ng-content>\n  <div class=\"page-body\">\n    <mat-sidenav-container>\n      <mat-sidenav\n        *ngIf=\"(viewPortSize$ | async) != 'xs'\"\n        #tableOfContents\n        mode=\"side\"\n        [disableClose]=\"true\"\n        opened\n        position=\"end\"\n        [fixedInViewport]=\"true\"\n        [fixedTopGap]=\"64\"\n        style=\"margin: 20px !important\"\n      >\n        <sa-table-of-contents [primaryMenu]=\"primaryMenu\" [secondaryMenu]=\"secondaryMenu\"> </sa-table-of-contents>\n      </mat-sidenav>\n\n      <mat-sidenav-content>\n        <div class=\"mdc-layout-grid\" fxLayout=\"column\">\n          <ng-content select=\".sub-header\"></ng-content>\n          <mat-accordion *ngIf=\"(viewPortSize$ | async) == 'xs'\">\n            <mat-expansion-panel (opened)=\"panelOpenState = true\" (closed)=\"panelOpenState = false\">\n              <mat-expansion-panel-header>\n                <mat-panel-title *ngIf=\"panelOpenState\" class=\"layout-section-title\">\n                  Hide Table of Contents\n                </mat-panel-title>\n                <mat-panel-title *ngIf=\"!panelOpenState\" class=\"layout-section-title\">\n                  Show Table of Contents\n                </mat-panel-title>\n              </mat-expansion-panel-header>\n              <sa-table-of-contents [primaryMenu]=\"navigationList\"> </sa-table-of-contents>\n            </mat-expansion-panel>\n          </mat-accordion>\n          <ng-content></ng-content>\n        </div>\n      </mat-sidenav-content>\n    </mat-sidenav-container>\n  </div>\n</sa-base-page>\n","import { Component, OnInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'sa-stepper',\n  templateUrl: './sa-stepper.component.html',\n  styleUrls: ['./sa-stepper.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class SaStepperComponent implements OnInit {\n  @Input() value: number;\n  @Input() min: number;\n  @Input() max: number;\n  @Input() label: string;\n\n  @Output() valueChanged: EventEmitter<number> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit() {}\n\n  increment() {\n    if (this.max == null || this.max == undefined || this.value < this.max) {\n      this.value++;\n      this.valueChanged.emit(this.value);\n    }\n  }\n\n  decrement() {\n    if (this.min == null || this.min == undefined || this.value > this.min) {\n      this.value--;\n      this.valueChanged.emit(this.value);\n    }\n  }\n}\n","<mat-form-field class=\"stepper\">\n  <mat-label>{{ label }}</mat-label>\n  <button mat-button *ngIf=\"value !== null\" matPrefix mat-icon-button aria-label=\"Minus\" (click)=\"decrement()\">\n    <mat-icon>remove</mat-icon>\n  </button>\n  <input matInput type=\"text\" placeholder=\"label\" [(ngModel)]=\"value\" readonly />\n  <button mat-button *ngIf=\"value !== null\" matSuffix mat-icon-button aria-label=\"Plus\" (click)=\"increment()\">\n    <mat-icon>add</mat-icon>\n  </button>\n</mat-form-field>\n","import { Subject, Observable } from 'rxjs';\n\nexport abstract class ActionElementConfig {\n  clickSubject: Subject<Event> = new Subject<Event>();\n\n  data: any = null;\n\n  get onClick(): Observable<Event> {\n    return this.clickSubject.asObservable();\n  }\n\n  constructor(public title: string) {}\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { ActionElementConfig } from '../models/ActionElementConfig';\n\n@Component({\n  selector: 'sa-more-menu',\n  templateUrl: './sa-more-menu.component.html',\n  styleUrls: ['./sa-more-menu.component.scss']\n})\nexport class SaMoreMenuComponent implements OnInit {\n  @Input() items: SaMoreMenuItem[] = [];\n\n  constructor() {}\n\n  ngOnInit() {}\n}\n\nexport class SaMoreMenuItem extends ActionElementConfig {}\n","<button mat-icon-button [matMenuTriggerFor]=\"menu\">\n  <mat-icon>more_horiz</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n  <button mat-menu-item *ngFor=\"let item of items\" (click)=\"item.clickSubject.next($event)\">{{ item.title }}</button>\n</mat-menu>\n","import { Directive, Input, ElementRef, Renderer2, ComponentFactoryResolver, ViewContainerRef } from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\n\n@Directive({\n  selector: '[saSpinner]'\n})\nexport class SaSpinnerDirective {\n  private _isSpinning: boolean = false;\n  @Input('saSpinner')\n  set isSpinning(val: boolean) {\n    this._isSpinning = val;\n    this.updateSpinner();\n  }\n\n  private _backgroundColor: string;\n  @Input()\n  set backgroundColor(val: string) {\n    this._backgroundColor = val;\n    this.updateSpinner();\n  }\n\n  private _diameter: number;\n  @Input()\n  set diameter(val: number) {\n    this._diameter = val;\n    this.updateSpinner();\n  }\n\n  private _opacity: string;\n  @Input()\n  set opacity(val: string) {\n    this._opacity = val;\n    this.updateSpinner();\n  }\n\n  private parentDiv: any;\n\n  constructor(\n    private el: ElementRef<HTMLElement>,\n    private renderer: Renderer2,\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private viewContainerRef: ViewContainerRef\n  ) {}\n\n  private updateSpinner() {\n    if (this._isSpinning) {\n      this.removeSpinner();\n      this.addSpinner();\n    } else {\n      this.removeSpinner();\n    }\n  }\n\n  private addSpinner() {\n    // Create Mat-Spinner\n    const factory = this.componentFactoryResolver.resolveComponentFactory(MatProgressSpinner);\n    const spinner = this.viewContainerRef.createComponent(factory);\n    spinner.instance.diameter = this._diameter || 35;\n    spinner.instance.mode = 'indeterminate';\n    let spinnerElement = spinner.injector.get(MatProgressSpinner)._elementRef.nativeElement;\n    spinnerElement.style.position = 'absolute';\n    spinnerElement.style.zIndex = '10';\n\n    // The host element must be relatively positioned to use the directive\n    this.el.nativeElement.style.position = 'relative';\n\n    // Create a parent div to hold transparency and mat-spinner\n    this.parentDiv = this.renderer.createElement('div');\n    this.parentDiv.style.width = '100%';\n    this.parentDiv.style.height = '100%';\n    this.parentDiv.style.position = 'absolute';\n    this.parentDiv.style.top = '0px';\n    this.parentDiv.style.left = '0px';\n    this.parentDiv.style.display = 'flex';\n    this.parentDiv.style.justifyContent = 'center';\n    this.parentDiv.style.alignItems = 'center';\n    this.renderer.addClass(this.parentDiv, 'saSpinner-parent');\n\n    // Create a transclucent background to show spinner on.\n    var newDiv = this.renderer.createElement('div');\n    newDiv.style.width = '100%';\n    newDiv.style.height = '100%';\n    newDiv.style.backgroundColor = this._backgroundColor || '#bdbdbd';\n    newDiv.style.opacity = this._opacity || '0.25';\n    newDiv.style.position = 'absolute';\n    newDiv.style.top = '0px';\n    newDiv.style.left = '0px';\n\n    // Add transclusent background and spinner in parent div.\n    this.renderer.appendChild(this.parentDiv, newDiv);\n    this.renderer.appendChild(this.parentDiv, spinnerElement);\n\n    // Add parent div to host element.\n    let container = this.el.nativeElement;\n    this.renderer.appendChild(container, this.parentDiv);\n  }\n\n  private removeSpinner() {\n    if (!this.parentDiv) return;\n    let container = this.el.nativeElement;\n    this.renderer.removeChild(container, this.parentDiv);\n  }\n}\n","import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';\nimport { getCurrencySymbol } from '@angular/common';\nimport { symbolFormatEnum } from './sa-value-formatter.pipe';\n\n@Pipe({\n  name: 'abbreviateNumber'\n})\nexport class AbbreviateNumberPipe implements PipeTransform {\n  constructor(@Inject(LOCALE_ID) private locale: string) {}\n\n  transform(value: number | string, isCurrency: boolean = false): any {\n    let number: number;\n\n    let currencySymbol: string;\n\n    if (isCurrency) {\n      currencySymbol = getCurrencySymbol('USD', symbolFormatEnum.narrow, this.locale);\n      number = Number(\n        value\n          ?.toString()\n          .replace(currencySymbol, '')\n          .match(/[+-]?\\d+(?:\\.\\d+)?/g)\n          .join('')\n      );\n    } else {\n      number = Number(value);\n    }\n\n    if (isNaN(number)) return value;\n    if (number === null) return null;\n    if (number === 0) return value;\n    let absValue = Math.abs(number);\n    const isNegative = number < 0;\n    let key = '';\n\n    const powers = [\n      { key: 'T', value: Math.pow(10, 12) },\n      { key: 'B', value: Math.pow(10, 9) },\n      { key: 'M', value: Math.pow(10, 6) },\n      { key: 'K', value: 1000 }\n    ];\n\n    for (let i = 0; i < powers.length; i++) {\n      let reduced = absValue / powers[i].value;\n      if (reduced >= 1) {\n        absValue = reduced;\n        key = powers[i].key;\n        break;\n      }\n    }\n    return (isNegative ? '-' : '') + (isCurrency ? currencySymbol : '') + Math.round(absValue * 100) / 100 + ' ' + key;\n  }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';\nimport { IHeaderViewModel } from '../models/HeaderViewModels';\n\n@Component({\n  selector: 'sa-page-header',\n  templateUrl: './sa-page-header.component.html',\n  styleUrls: ['./sa-page-header.component.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class SaPageHeaderComponent implements OnInit {\n  @Input() header: IHeaderViewModel;\n  @Output() primaryClick: EventEmitter<Event> = new EventEmitter();\n  @Output() secondaryClick: EventEmitter<Event> = new EventEmitter();\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  onPrimaryClick(event: Event) {\n    this.primaryClick.emit(event);\n  }\n\n  onSecodaryClick(event: Event) {\n    this.secondaryClick.emit(event);\n  }\n}\n","<div fxLayout=\"column\" fxLayoutGap=\"8px\">\n  <xng-breadcrumb [autoGenerate]=\"false\" separator=\">\"></xng-breadcrumb>\n\n  <div class=\"\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n    <div fxLayout=\"row\" fxLayoutGap=\"2px\">\n      <span fxFlex=\"none\" class=\"page-header-title\" fxLayoutAlign=\"center\">{{ header.title }}</span>\n      <mat-icon *ngIf=\"header.tooltip\" fxHide.lt-md [matTooltip]=\"header.tooltip\" matTooltipClass=\"multilineTooltip\"\n        >info_outline</mat-icon\n      >\n    </div>\n    <span fxFlex></span>\n    <div fxFlex=\"nogrow\" fxLayoutGap=\"5px\">\n      <sa-button\n        class=\"header-button\"\n        fxHide.lt-md\n        [config]=\"header.secondaryButton\"\n        *ngIf=\"header.secondaryButton\"\n        (onClick)=\"onSecodaryClick($event)\"\n      ></sa-button>\n      <sa-button\n        fxHide.lt-md\n        class=\"header-button\"\n        [config]=\"header.primaryButton\"\n        *ngIf=\"header.primaryButton\"\n        (onClick)=\"onPrimaryClick($event)\"\n      ></sa-button>\n    </div>\n    <div fxFlex=\"nogrow\" fxFlexOffset=\"5px\" *ngIf=\"header.menuTemplate\">\n      <ng-container *ngTemplateOutlet=\"header.menuTemplate\"></ng-container>\n    </div>\n  </div>\n</div>\n","import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { SimplifiedUiComponent } from './simplified-ui.component';\nimport { MaterialModule } from './material-module/material.module';\nimport { SaPrimaryButtonComponent } from './sa-primary-button/sa-primary-button.component';\nimport { SaDataTableComponent } from './sa-data-table/sa-data-table.component';\nimport { CommonModule } from '@angular/common';\nimport { SaDataFilterComponent } from './sa-data-filter/sa-data-filter.component';\nimport { SaDatePickerComponent } from './sa-date-picker/sa-date-picker.component';\nimport { SaDateTimePipe, MOMENT_FORMATS } from './pipes/sa-date-time.pipe';\nimport { SaValueFormatterPipe } from './pipes/sa-value-formatter.pipe';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SaSelectComponent } from './sa-select/sa-select.component';\nimport { MatSelectInfiniteScrollModule } from 'ng-mat-select-infinite-scroll';\nimport { SaSecondaryButtonComponent } from './sa-secondary-button/sa-secondary-button.component';\nimport { SaAnchorButtonComponent } from './sa-anchor-button/sa-anchor-button.component';\nimport { SaCurrencyInputComponent } from './sa-currency-input/sa-currency-input.component';\nimport { SaTableOfContentsComponent } from './sa-table-of-contents/sa-table-of-contents.component';\nimport { SaTextEditorComponent } from './sa-text-editor/sa-text-editor.component';\nimport { QuillModule } from 'ngx-quill';\nimport { SaBaseHeaderComponent } from './sa-base-header/sa-base-header.component';\nimport { SaHeaderComponent } from './sa-header/sa-header.component';\nimport { SaBasePageComponent } from './sa-base-page/sa-base-page.component';\nimport { SaNavigablePageComponent } from './sa-navigable-page/sa-navigable-page.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { SaStepperComponent } from './sa-stepper/sa-stepper.component';\nimport { SaMoreMenuComponent } from './sa-more-menu/sa-more-menu.component';\nimport { SaButtonComponent } from './sa-button/sa-button.component';\nimport { SaSpinnerDirective } from './directives/sa-spinner.directive';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { RouterModule } from '@angular/router';\nimport { AbbreviateNumberPipe } from './pipes/abbreviate-number.pipe';\nimport Counter from './sa-text-editor/counter';\nimport {\n  OwlDateTimeModule,\n  OWL_DATE_TIME_FORMATS,\n  OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS\n} from '@danielmoncada/angular-datetime-picker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { SaPageHeaderComponent } from './sa-page-header/sa-page-header.component';\n\n@NgModule({\n  declarations: [\n    SimplifiedUiComponent,\n    SaPrimaryButtonComponent,\n    SaDataTableComponent,\n    SaDataFilterComponent,\n    SaDatePickerComponent,\n    SaDateTimePipe,\n    SaValueFormatterPipe,\n    SaSelectComponent,\n    SaSecondaryButtonComponent,\n    SaAnchorButtonComponent,\n    SaTableOfContentsComponent,\n    SaTextEditorComponent,\n    SaCurrencyInputComponent,\n    SaTableOfContentsComponent,\n    SaBaseHeaderComponent,\n    SaHeaderComponent,\n    SaBasePageComponent,\n    SaNavigablePageComponent,\n    SaStepperComponent,\n    SaMoreMenuComponent,\n    SaButtonComponent,\n    SaSpinnerDirective,\n    AbbreviateNumberPipe,\n    SaPageHeaderComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    OwlDateTimeModule,\n    MatSelectInfiniteScrollModule,\n    FlexLayoutModule,\n    QuillModule.forRoot({\n      formats: [\n        'background',\n        'bold',\n        'color',\n        'font',\n        'code',\n        'italic',\n        'link',\n        'size',\n        'strike',\n        'script',\n        'underline',\n        'blockquote',\n        'header',\n        'indent',\n        'list',\n        'align',\n        'direction',\n        'code-block',\n        'formula'\n      ],\n      customOptions: [\n        {\n          import: 'formats/font',\n          whitelist: ['mirza', 'roboto', 'aref', 'serif', 'sansserif', 'monospace']\n        }\n      ],\n      modules: {\n        toolbar: [\n          ['bold', 'italic', 'underline', 'strike'],\n          [{ list: 'ordered' }, { list: 'bullet' }],\n          [{ script: 'sub' }, { script: 'super' }],\n          [{ indent: '-1' }, { indent: '+1' }],\n          [{ header: [1, 2, 3, 4, 5, 6, false] }],\n          [{ color: [] }, { background: [] }],\n          [{ font: [] }],\n          [{ align: [] }],\n          ['link']\n        ]\n      }\n    }),\n    MaterialModule,\n    MatFormFieldModule,\n    RouterModule\n  ],\n  exports: [\n    SimplifiedUiComponent,\n    MaterialModule,\n    SaPrimaryButtonComponent,\n    SaSecondaryButtonComponent,\n    SaAnchorButtonComponent,\n    SaDataTableComponent,\n    SaDataFilterComponent,\n    SaDatePickerComponent,\n    SaDateTimePipe,\n    SaValueFormatterPipe,\n    SaSelectComponent,\n    SaTableOfContentsComponent,\n    SaTextEditorComponent,\n    SaCurrencyInputComponent,\n    SaTableOfContentsComponent,\n    SaBaseHeaderComponent,\n    SaHeaderComponent,\n    SaBasePageComponent,\n    SaNavigablePageComponent,\n    SaStepperComponent,\n    SaMoreMenuComponent,\n    SaButtonComponent,\n    SaSpinnerDirective,\n    AbbreviateNumberPipe\n  ],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  entryComponents: [MatProgressSpinner],\n  providers: [{ provide: OWL_MOMENT_DATE_TIME_ADAPTER_OPTIONS, useValue: { useUtc: true } }]\n})\nexport class SimplifiedUiModule {}\n","import { Subject } from 'rxjs';\nimport { ElementRef } from '@angular/core';\n\nexport class SaButton {\n  constructor(public title: string) {}\n\n  obs = new Subject<ElementRef>();\n  public obs$ = this.obs.asObservable();\n\n  triggerNext(elRef) {\n    this.obs.next(elRef);\n  }\n\n  unsubscribeEvent() {\n    this.obs.unsubscribe();\n  }\n}\n","import { Observable, Subject } from 'rxjs';\n\nexport class NavigationItem {\n  constructor(\n    public name: string,\n    public route: string,\n    public iconUrl?: string,\n    public badge: Observable<string> = null\n  ) {}\n\n  obs = new Subject<string>();\n  public obs$ = this.obs.asObservable();\n\n  triggerNext() {\n    this.obs.next(this.route);\n  }\n\n  unsubscribeEvent() {\n    this.obs.unsubscribe();\n  }\n}\n","import { IRequestModel } from './DataTableModel';\nimport { IFilterModel } from './DataFilterModels';\nimport { SortDirection } from './SaTableDataSource';\n\nexport class RequestModel implements IRequestModel {\n  filter: IFilterModel;\n  pageNumber: number;\n  pageSize: number;\n  sortCol: string | number;\n  sortDir: SortDirection;\n\n  constructor(\n    filter: IFilterModel = { keyword: '' },\n    pageNumber: number = 0,\n    pageSize: number = 20,\n    sortCol: string | number = 0,\n    sortDir: SortDirection = SortDirection.Asc\n  ) {\n    this.filter = filter;\n    this.pageNumber = pageNumber;\n    this.pageSize = pageSize;\n    this.sortCol = sortCol;\n    this.sortDir = sortDir;\n  }\n}\n","/*\n * Public API Surface of simplified-ui\n */\n\nexport * from './lib/simplified-ui.service';\nexport * from './lib/simplified-ui.component';\nexport * from './lib/simplified-ui.module';\nexport * from './lib/material-module/material.module';\n\n/*\n * Public API Surface For Models\n */\nexport * from './lib/models/DataFilterModels';\nexport * from './lib/models/DataTableModel';\nexport * from './lib/models/DatePickerConfigModel';\nexport * from './lib/models/IPagerModel';\nexport * from './lib/models/SaButton';\nexport * from './lib/models/SaTableDataSource';\nexport * from './lib/models/SaSelectModels';\nexport * from './lib/models/NavigationItem';\nexport * from './lib/models/HeaderViewModels';\nexport * from './lib/models/RequestModel';\n\n/*\n * Public API Surface For Components\n */\nexport * from './lib/sa-primary-button/sa-primary-button.component';\nexport * from './lib/sa-secondary-button/sa-secondary-button.component';\nexport * from './lib/sa-anchor-button/sa-anchor-button.component';\nexport * from './lib/sa-data-filter/sa-data-filter.component';\nexport * from './lib/sa-data-table/sa-data-table.component';\nexport * from './lib/sa-date-picker/sa-date-picker.component';\nexport * from './lib/sa-select/sa-select.component';\nexport * from './lib/sa-currency-input/sa-currency-input.component';\nexport * from './lib/sa-table-of-contents/sa-table-of-contents.component';\nexport * from './lib/sa-text-editor/sa-text-editor.component';\nexport * from './lib/sa-base-header/sa-base-header.component';\nexport * from './lib/sa-header/sa-header.component';\nexport * from './lib/sa-base-page/sa-base-page.component';\nexport * from './lib/sa-navigable-page/sa-navigable-page.component';\nexport * from './lib/sa-stepper/sa-stepper.component';\nexport * from './lib/sa-more-menu/sa-more-menu.component';\nexport * from './lib/sa-button/sa-button.component';\nexport * from './lib/sa-page-header/sa-page-header.component';\n\n/*\n * Public API Surface For Pipes\n */\nexport * from './lib/pipes/sa-date-time.pipe';\nexport * from './lib/pipes/sa-value-formatter.pipe';\nexport * from './lib/pipes/abbreviate-number.pipe';\n\n/*\n * Public API Surface For Directives\n */\nexport * from './lib/directives/sa-spinner.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ResizeObserver","Polyfill"],"mappings":"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"}