{"version":3,"file":"right-angled.mjs","sources":["../../../projects/right-angled/src/lib/core/operation-status.ts","../../../projects/right-angled/src/lib/core/sort-parameter.ts","../../../projects/right-angled/src/lib/utilities.ts","../../../projects/right-angled/src/lib/filters/filters.service.ts","../../../projects/right-angled/src/lib/filters/register-as-filter.directive.ts","../../../projects/right-angled/src/lib/filters/filter.annotation.ts","../../../projects/right-angled/src/lib/filters/filters.module.ts","../../../projects/right-angled/src/lib/lists/providers/sortings.service.ts","../../../projects/right-angled/src/lib/lists/providers/async-subscriber.ts","../../../projects/right-angled/src/lib/lists/providers/null-object-pager.ts","../../../projects/right-angled/src/lib/lists/providers/state.service.ts","../../../projects/right-angled/src/lib/lists/providers/list.ts","../../../projects/right-angled/src/lib/lists/list.directive.ts","../../../projects/right-angled/src/lib/lists/status/status-done.component.ts","../../../projects/right-angled/src/lib/lists/status/status-failed.component.ts","../../../projects/right-angled/src/lib/lists/status/status-in-progress.component.ts","../../../projects/right-angled/src/lib/lists/status/status-initial.component.ts","../../../projects/right-angled/src/lib/lists/status/status-no-data.component.ts","../../../projects/right-angled/src/lib/lists/status/status-request-cancelled.component.ts","../../../projects/right-angled/src/lib/lists/row-number.pipe.ts","../../../projects/right-angled/src/lib/lists/sort.directive.ts","../../../projects/right-angled/src/lib/lists/providers/buffered-pager.ts","../../../projects/right-angled/src/lib/lists/paging/buffered-pager.component.ts","../../../projects/right-angled/src/lib/lists/paging/infinite.directive.ts","../../../projects/right-angled/src/lib/lists/providers/paged-pager.ts","../../../projects/right-angled/src/lib/lists/paging/page-number.directive.ts","../../../projects/right-angled/src/lib/lists/paging/page-size.directive.ts","../../../projects/right-angled/src/lib/lists/paging/paged-pager.component.ts","../../../projects/right-angled/src/lib/lists/paging/row-count.directive.ts","../../../projects/right-angled/src/lib/lists/lists.module.ts","../../../projects/right-angled/src/lib/misc/focus-on-render.directive.ts","../../../projects/right-angled/src/lib/misc/events-attacher.base.ts","../../../projects/right-angled/src/lib/misc/prevent-defaults.directive.ts","../../../projects/right-angled/src/lib/misc/select-on-focus.directive.ts","../../../projects/right-angled/src/lib/misc/stop-events.directive.ts","../../../projects/right-angled/src/lib/misc/misc.module.ts","../../../projects/right-angled/src/lib/selection/providers/selection.service.ts","../../../projects/right-angled/src/lib/selection/providers/selection-events-helper.ts","../../../projects/right-angled/src/lib/selection/selection-area.directive.ts","../../../projects/right-angled/src/lib/selection/selectable.directive.ts","../../../projects/right-angled/src/lib/selection/selection-checkbox-for.directive.ts","../../../projects/right-angled/src/lib/selection/selection.module.ts","../../../projects/right-angled/src/lib/right-angled.module.ts","../../../projects/right-angled/src/public_api.ts","../../../projects/right-angled/src/right-angled.ts"],"sourcesContent":["/**\r\n * Represents possible values for operation status (e.g. of request to the server).\r\n */\r\nexport enum OperationStatus {\r\n    /**\r\n     * Nothing was performed before.\r\n     */\r\n    Initial = 0,\r\n    /**\r\n     * Last operation completed successfully.\r\n     */\r\n    Done = 1,\r\n    /**\r\n     * Operation is performing right now.\r\n     */\r\n    Progress = 2,\r\n    /**\r\n     * Last operation completed with failure.\r\n     */\r\n    Fail = 3,\r\n    /**\r\n     * Last operation was cancelled.\r\n     */\r\n    Cancelled = 4,\r\n    /**\r\n     * Last operation doesn't return any data.\r\n     */\r\n    NoData = 5\r\n}\r\n","/**\r\n * Represents sort direction that applied as parameter by {@link SortParameter} class.\r\n */\r\nexport enum SortDirection {\r\n  /**\r\n   * Ascending sort order.\r\n   */\r\n  Asc = 0,\r\n  /**\r\n   * Descending sort order.\r\n   */\r\n  Desc = 1\r\n}\r\n\r\nexport type SortDirectionStr = 'Asc' | 'Desc';\r\n\r\n/**\r\n * Represents sorting parameter applied to the server request by {@link RTSortingsService}.\r\n */\r\nexport interface SortParameter {\r\n  /**\r\n   * Sort direction.\r\n   */\r\n  direction: SortDirection;\r\n  /**\r\n   * Name of the field by which sorting must be performed.\r\n   */\r\n  fieldName: string;\r\n}\r\n","/**\r\n * Copies values of all properties from passed object to the new object literal.\r\n *\r\n * If any of the properties of passed object is also a complex object then {@link cloneAsLiteral} will be called recursively.\r\n *\r\n * Function declarations are ignored.\r\n * @param value value to clone.\r\n * @returns resulted literal.\r\n */\r\nexport function cloneAsLiteral(value: any): any {\r\n  if (value === null) {\r\n    return null;\r\n  }\r\n  if (typeof value === 'undefined') {\r\n    return undefined;\r\n  }\r\n  if (Array.isArray(value)) {\r\n    return value.map(cloneAsLiteral);\r\n  }\r\n  if (typeof value === 'object') {\r\n    const result: { [id: string]: any } = {};\r\n    for (const index in value) {\r\n      if (Object.prototype.hasOwnProperty.call(value, index) && typeof value[index] !== 'function') {\r\n        result[index] = cloneAsLiteral(value[index]);\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n  return value;\r\n}\r\n\r\n/**\r\n * Set of key-value pairs which is used by {@link coerceValue} method to coerce specific values.\r\n */\r\n// tslint:disable-next-line: object-literal-key-quotes\r\nexport const coerceTypes: any = { true: !0, false: !1, null: null };\r\n\r\n/**\r\n * Coerce type of passed value.\r\n *\r\n * For example if you pass string with value 'null' it returns `null`, if you pass 'true' it returns boolean value `true`, if you pass '1.0' it returns number `1.0` etc.\r\n *\r\n * If passed value is complex object or array this method will be called for each property or array item.\r\n * @param value value to coerce.\r\n * @returns resulted value.\r\n * @see {@link coerceTypes}\r\n */\r\nexport function coerceValue(value: any): any {\r\n  let result = value;\r\n  if (result === null) {\r\n    return null;\r\n  }\r\n  if (typeof result === 'undefined') {\r\n    return undefined;\r\n  }\r\n  if (typeof result === 'object' || Array.isArray(result)) {\r\n    for (const index in result) {\r\n      if (Object.prototype.hasOwnProperty.call(result, index)) {\r\n        result[index] = coerceValue(result[index]);\r\n      }\r\n    }\r\n  } else if (result && result !== true && !isNaN(result)) {\r\n    result = +result;\r\n  } else if (result === 'undefined') {\r\n    result = undefined;\r\n  } else if (typeof coerceTypes[result] !== 'undefined') {\r\n    result = coerceTypes[result];\r\n  }\r\n  return result;\r\n}\r\n/**\r\n * Cleaning up passed array by calling `splice` function.\r\n *\r\n * Next, each element of passed array will be checked for existence of `destroy` method and if it exists it will be called.\r\n * @param collection array of elements to destroy.\r\n * @param async if `true` then iterating over array and `destroy` methods calling will be executed via setTimeout (,0).\r\n */\r\nexport function destroyAll(collection: any[], async = true) {\r\n  if (!Array.isArray(collection)) {\r\n    return;\r\n  }\r\n  let items = collection.splice(0, collection.length);\r\n\r\n  if (async) {\r\n    setTimeout(() => {\r\n      items.forEach((item: any) => {\r\n        if (item && item.destroy) {\r\n          item.destroy();\r\n        }\r\n      });\r\n      items = null;\r\n    }, 0);\r\n  } else {\r\n    items.forEach((item: any) => {\r\n      if (item && item.destroy) {\r\n        item.destroy();\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { FilterConfig } from '../core/filter-config';\r\nimport { cloneAsLiteral, coerceValue } from '../utilities';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n/**\r\n * Used for declarative building of objects which represent valuable state of `target object`.\r\n *\r\n * Since this declaration is pretty abstract and hard to understand, let's look at a specific sample.\r\n *\r\n * Typical usage of this service is something like this:\r\n * ```JavaScript\r\n *      class EndUserClass {\r\n *         @filter\r\n *         public parameter1 = 'Hey';\r\n *         @filter\r\n *         public parameter2 = 'There';\r\n *      }\r\n *      let endUserClassInstance = new EndUserClass();\r\n *      let filterService = new FilterService(endUserClassInstance);\r\n * ```\r\n * Now we can use created `filtersService` instance for several cases:\r\n *  - by calling {@link getRequestState} we can get serializable representation of object state\r\n * ```JavaScript\r\n *      {\r\n *         parameter1: 'Hey',\r\n *         parameter2: 'There'\r\n *      }\r\n * ```\r\n *  - by calling {@link resetValues} we can reset values of annotated properties to initial values (or to what was specified in {@link FilterConfig.defaultValue} property).\r\n *  - by calling {@link applyParams} we can automatically apply any set of values to annotated properties (we can pass queryString object to automatically apply values from it, for example).\r\n *  - by calling {@link getRequestState} with some filters we can \"query\" the state of filters and save it to the settings storage, for example.\r\n *  - by calling {@link registerFilterTarget} you can add any count of additional objects and get their\r\n * composed state via {@link getRequestState} method as well as process them all with {@link resetValues} and {@link applyParams}.\r\n */\r\n@Injectable()\r\nexport class RTFiltersService {\r\n  /**\r\n   * Global collection of all filters configuration.\r\n   *\r\n   * Used to build {@link appliedFiltersMap} for concrete set of objects that were registered as `target objects` via {@link registerFilterTarget} for concrete service instance.\r\n   */\r\n  public static filterPropertiesMap: Map<any, FilterConfig[]> = new Map<any, FilterConfig[]>();\r\n  /**\r\n   * Collection of {@link FilterConfig} settings that matches configuration for all objects that were registered in current service instance via {@link registerFilterTarget} method.\r\n   *\r\n   * This collection is also filled up with configurations of passed `target objects` base classes since config applicability is determined by `instanceof` check.\r\n   *\r\n   * This collection is \"lazy\" and will be filled up on first call of {@link resetValues}, {@link applyParams} or {@link getRequestState} method.\r\n   */\r\n  public readonly appliedFiltersMap: Map<object, FilterConfig[]> = new Map<object, FilterConfig[]>();\r\n  /**\r\n   * @param target `target object` that will be registered with {@link registerFilterTarget} method.\r\n   */\r\n  /**\r\n   * Used to register type property as `target property` with specified filter config for later usage with {@link FiltersService}.\r\n   *\r\n   * This method is called by {@link filter} annotation, for example.\r\n   * @param targetType type definition that contains specified property declaration.\r\n   * @param propertyConfig configuration for property as a filter.\r\n   */\r\n  public static registerFilterConfig(targetType: object, propertyConfig: FilterConfig): void {\r\n    const typeConfigs = RTFiltersService.filterPropertiesMap.has(targetType)\r\n      ? RTFiltersService.filterPropertiesMap.get(targetType)\r\n      : new Array<FilterConfig>();\r\n    typeConfigs.push(propertyConfig);\r\n    RTFiltersService.filterPropertiesMap.set(targetType, typeConfigs);\r\n  }\r\n  /**\r\n   * Used to build resulted value of `target property` based on specified {@link FilterConfig}.\r\n   *\r\n   * This method is used by {@link getRequestState} and also calls oneself for the case of array values.\r\n   *\r\n   *\r\n   * In addition to {@link FilterConfig} configuration, this method checks if `target property` has method `toRequest()`. If so this method will be used to get serialized value.\r\n   *\r\n   * This convention has sense in several scenarios:\r\n   *  - Serialization of complex object can be performed by it's own method which was declared once instead of copy-paste it in {@link FilterConfig.serializeFormatter} declarations.\r\n   *  - Very tricky but sometimes useful usage of this convention is to declare `toRequest` in `Date` prototype.\r\n   *\r\n   * This gives ability to easily send `Date` objects to the server in appropriate format which server can apply or, for example, always send UTC-dates.\r\n   *\r\n   * But be accurate with this approach. There's a lot of problems with extending of embedded types.\r\n   *\r\n   * @param target `target` object which holds specified `target property`. Used as `this` scope for {@link FilterConfig.serializeFormatter} method.\r\n   * @param value raw value of `target` property.\r\n   * @param config filter configuration for `target` property.\r\n   */\r\n  private static buildFilterValue(target: object, value: any, config: FilterConfig): object {\r\n    let result = value;\r\n    if (config && config.serializeFormatter) {\r\n      return config.serializeFormatter.call(target, result);\r\n    }\r\n\r\n    result = config && config.emptyIsNull ? result || null : result;\r\n    result = config && config.coerce ? coerceValue(result) : result;\r\n    if (result && result.toRequest) {\r\n      return result.toRequest();\r\n    }\r\n    if (Array.isArray(result)) {\r\n      const temp = [];\r\n      for (let i = 0; i < result.length; i++) {\r\n        temp[i] = RTFiltersService.buildFilterValue(target, result[i], null);\r\n      }\r\n      return temp;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Performs service destroy.\r\n   */\r\n  public destroy(): void {\r\n    this.appliedFiltersMap.clear();\r\n  }\r\n  /**\r\n   * Goes through all `target properties` of all `target objects` and sets their values to configured default.\r\n   *\r\n   * Default value will be determined as:\r\n   *  - If value for {@link FilterConfig.defaultValue} is specified it will be applied.\r\n   *  - Otherwise this service writes to {@link FilterConfig.defaultValue} value of `target property` at the moment of first call of\r\n   * {@link resetValues}, {@link applyParams} or {@link getRequestState}.\r\n   *\r\n   * This method performs next actions:\r\n   *  - If value specified as {@link FilterConfig.defaultValue} is function it will be called with `target object` as `this` scope. If specified value is not a function it will be used by itself.\r\n   *  - Result of previous step will be cloned by {@link cloneLiteral} function to avoid possible reference types problems.\r\n   *  - If {@link FilterConfig.parseFormatter} method is specified it will be called with previous step result as parameter.\r\n   *  - Result of previous steps is applied as value to `target property`.\r\n   */\r\n  public resetValues(): void {\r\n    this.appliedFiltersMap.forEach((targetConfig: FilterConfig[], target: { [id: string]: any }) => {\r\n      for (const config of targetConfig) {\r\n        const defaultValue = typeof config.defaultValue === 'function' ? (config.defaultValue as () => any).call(target) : config.defaultValue;\r\n        const clonedObject = cloneAsLiteral({ defaultValue });\r\n        this.setPropertyValue(\r\n          target,\r\n          config,\r\n          config.parseFormatter ? config.parseFormatter.call(target, clonedObject.defaultValue) : clonedObject.defaultValue\r\n        );\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * Goes through all `target properties` of all `target objects` and tries to find property within passed object which name is equal\r\n   * to configured {@link FilterConfig.parameterName}.\r\n   *\r\n   * If match is found, value of the property from passed object is applied to `target property` in accordance with\r\n   * {@link FilterConfig.ignoreOnAutoMap}, {@link FilterConfig.emptyIsNull}, {@link FilterConfig.coerce}, {@link FilterConfig.parseFormatter}.\r\n   * @param params - object with values to apply.\r\n   */\r\n  public applyParams(params: { [id: string]: any }): void {\r\n    this.appliedFiltersMap.forEach((targetConfig: FilterConfig[], target: { [id: string]: any }) => {\r\n      for (const config of targetConfig) {\r\n        if (params && Object.prototype.hasOwnProperty.call(params, config.parameterName) && false === config.ignoreOnAutoMap) {\r\n          let proposedVal = config.emptyIsNull ? params[config.parameterName] || null : params[config.parameterName];\r\n          proposedVal = config.coerce ? coerceValue(proposedVal) : proposedVal;\r\n          this.setPropertyValue(target, config, config.parseFormatter ? config.parseFormatter.call(target, proposedVal, params) : proposedVal);\r\n        }\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * Goes through all `target properties` of all `target objects` and applies their values to one resulted object literal.\r\n   *\r\n   * Typical usage of this method is building request to send it to the server.\r\n   *\r\n   * Names of properties in result object depends on {@link FilterConfig.parameterName}. Final values would be constructed by {@link buildFilterValue} method.\r\n   * @param filterFn - optional function to filter applied values.\r\n   * @returns resulted object literal.\r\n   */\r\n  public getRequestState(filterFn?: (config: FilterConfig, proposedValue: any, targetObject: object) => boolean): any {\r\n    const result: { [id: string]: any } = {};\r\n    this.appliedFiltersMap.forEach((targetConfig: FilterConfig[], target: { [id: string]: any }) => {\r\n      for (let config of targetConfig) {\r\n        config = { ...config };\r\n        const proposedVal = this.getPropertyValue(target, config);\r\n        if (filterFn ? filterFn(config, proposedVal, target) : true) {\r\n          const resultValue = RTFiltersService.buildFilterValue(target, proposedVal, config);\r\n          if (!config.omitIfNullOrUndefined || (resultValue !== null && typeof resultValue !== 'undefined')) {\r\n            result[config.parameterName] = resultValue;\r\n          }\r\n        }\r\n      }\r\n    });\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Registers passed object as `target object` for current service instance.\r\n   *\r\n   * {@link getRequestState} method will compose result from objects that were registered by this method.\r\n   *\r\n   * {@link applyParams} and {@link resetValues} methods processes registered objects that were registered by this method.\r\n   * @param targets object(s) to register as `target object`.\r\n   */\r\n  public registerFilterTarget(...targets: object[]): void {\r\n    targets.forEach((target: object) => {\r\n      if (target === null || target === undefined) {\r\n        return;\r\n      }\r\n      this.appliedFiltersMap.set(target, null);\r\n      this.buildFilterTargetMap(target);\r\n    });\r\n  }\r\n  /**\r\n   * Removes passed object from `target objects` collection for current service instance.\r\n   *\r\n   * This means that {@link getRequestState}, {@link applyParams} and {@link resetValues} methods stops to process this objects.\r\n   * @param targets object(s) to remove from collection of `target object`.\r\n   */\r\n  public removeFilterTarget(...targets: object[]): void {\r\n    targets.forEach((target: object) => {\r\n      this.appliedFiltersMap.delete(target);\r\n    });\r\n  }\r\n  /**\r\n   * Builds map of settings for passed `target` object.\r\n   */\r\n  private buildFilterTargetMap(target: { [id: string]: any }): void {\r\n    let targetConfig = new Array<FilterConfig>();\r\n    RTFiltersService.filterPropertiesMap.forEach((typeConfig: FilterConfig[], type: any) => {\r\n      if (target instanceof type) {\r\n        targetConfig = targetConfig.concat(typeConfig);\r\n        for (const config of targetConfig) {\r\n          if (typeof config.defaultValue === 'undefined') {\r\n            config.defaultValue = cloneAsLiteral({\r\n              defaultValue: this.getPropertyValue(target, config)\r\n            }).defaultValue;\r\n          }\r\n        }\r\n      }\r\n    });\r\n    if (targetConfig.length > 0) {\r\n      this.appliedFiltersMap.set(target, targetConfig);\r\n    } else {\r\n      this.appliedFiltersMap.delete(target);\r\n    }\r\n  }\r\n  private getPropertyValue(target: { [id: string]: any }, config: FilterConfig) {\r\n    if (target[config.propertyName] instanceof BehaviorSubject) {\r\n      return (target[config.propertyName] as BehaviorSubject<any>).getValue();\r\n    }\r\n    // duck type reactive form control\r\n    if (!!target[config.propertyName] && !!target[config.propertyName].setValue && !!target[config.propertyName].status) {\r\n      return target[config.propertyName].value;\r\n    }\r\n    return target[config.propertyName];\r\n  }\r\n  private setPropertyValue(target: { [id: string]: any }, config: FilterConfig, value: any) {\r\n    if (!!target[config.propertyName] && target[config.propertyName] instanceof Subject) {\r\n      (target[config.propertyName] as Subject<any>).next(value);\r\n      return;\r\n    }\r\n    // duck type reactive form control\r\n    if (!!target[config.propertyName] && target[config.propertyName].setValue) {\r\n      target[config.propertyName].setValue(value);\r\n      return;\r\n    }\r\n    target[config.propertyName] = value;\r\n  }\r\n}\r\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { RTFiltersService } from './filters.service';\r\n@Directive({\r\n    selector: '[rtRegisterAsFilter]'\r\n})\r\nexport class RegisterAsFilterDirective implements OnInit, OnDestroy {\r\n    @Input('rtRegisterAsFilter') public filterTarget: any;\r\n    constructor(public filtersService: RTFiltersService) {}\r\n    public ngOnInit(): void {\r\n        this.filtersService.registerFilterTarget(this.filterTarget);\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.filtersService.removeFilterTarget(this.filterTarget);\r\n    }\r\n}\r\n","import { RTFiltersService } from './filters.service';\r\nimport { FilterConfig } from '../core/filter-config';\r\nimport { cloneAsLiteral } from '../utilities';\r\n\r\n/**\r\n * Object literal used by {@link getDefaultFilterConfig} function to build filter configuration.\r\n * This object can be used to change default values of filter configs globally.\r\n * By default it has next values:\r\n * ```Javascript\r\n * {\r\n *        coerce: true,\r\n *        defaultValue: undefined,\r\n *        emptyIsNull: false,\r\n *        ignoreOnAutoMap: false,\r\n *        omitIfNullOrUndefined: false,\r\n *        parameterName: <value of 'propertyName' parameter>,\r\n *        parseFormatter: undefined,\r\n *        propertyName: <value of 'propertyName' parameter>,\r\n *        serializeFormatter: undefined\r\n * }\r\n * ```\r\n */\r\nexport const DefaultFilterConfig = {\r\n  coerce: true,\r\n  defaultValue: undefined,\r\n  emptyIsNull: false,\r\n  ignoreOnAutoMap: false,\r\n  omitIfNullOrUndefined: false,\r\n  parseFormatter: undefined,\r\n  serializeFormatter: undefined\r\n} as FilterConfig;\r\n\r\n/**\r\n * Returns filter configuration based on {@link DefaultFilterConfig} values with applied `parameterName` and `propertyName` properties values.\r\n * @param propertyName name of the property in `target type`, for which configuration is created. This value will be used to set {@link FilterConfig.propertyName} and {@link FilterConfig.parameterName} values.\r\n * @see {@link FilterConfig}\r\n */\r\nexport function getDefaultFilterConfig(propertyName: string): FilterConfig {\r\n  return {\r\n    parameterName: propertyName,\r\n    propertyName,\r\n    ...cloneAsLiteral(DefaultFilterConfig)\r\n  } as FilterConfig;\r\n}\r\n/**\r\n * Annotation that can be used to configure type property as filter to use with {@link FiltersService}\r\n * @param targetOrNameOrConfig\r\n *  - if annotation is applied without any parameters then result of {@link getDefaultFilterConfig} function will be used. Value of {@link FilterConfig.parameterName} property will be equal to annotated property name.\r\n *  - if annotation is applied with string parameter then result of {@link getDefaultFilterConfig} function will be used. Value of {@link FilterConfig.parameterName} property will be equal to applied parameter value.\r\n *  - if annotation is applied with object as parameter then result of {@link getDefaultFilterConfig} will be used and  all properties which were specified in passed object would be applied to resulting configuration via Object.assign.\r\n * @param key specified by TypeScript automatically.\r\n * @see {@link FilterConfig}\r\n */\r\nexport function filter(targetOrNameOrConfig?: string | FilterConfig, key?: string): any {\r\n  const decorateWithConfig = (target: object, key2: string): void => {\r\n    const config = getDefaultFilterConfig(key2);\r\n    if (typeof targetOrNameOrConfig === 'string') {\r\n      config.parameterName = targetOrNameOrConfig;\r\n    } else {\r\n      Object.assign(config, targetOrNameOrConfig);\r\n    }\r\n    RTFiltersService.registerFilterConfig(target.constructor, config);\r\n  };\r\n\r\n  if (key) {\r\n    const targetTemp = targetOrNameOrConfig;\r\n    // tslint:disable-next-line:no-parameter-reassignment\r\n    targetOrNameOrConfig = null;\r\n    decorateWithConfig(targetTemp as object, key);\r\n    return;\r\n  }\r\n  return decorateWithConfig;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RegisterAsFilterDirective } from './register-as-filter.directive';\r\n\r\n@NgModule({\r\n    declarations: [RegisterAsFilterDirective],\r\n    exports: [RegisterAsFilterDirective],\r\n    imports: [CommonModule]\r\n})\r\nexport class RTFiltersModule {}\r\nexport { RegisterAsFilterDirective } from './register-as-filter.directive';\r\nexport { RTFiltersService } from './filters.service';\r\nexport { filter, DefaultFilterConfig } from './filter.annotation';\r\n","import { filter } from '../../filters/filter.annotation';\r\nimport { SortDirection, SortDirectionStr, SortParameter } from '../../core/sort-parameter';\r\nimport { FilterConfig } from '../../core/filter-config';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Provides sorting functionality.\r\n * @note This type is configured to use with {@link FiltersService}.\r\n */\r\n@Injectable()\r\nexport class RTSortingsService {\r\n    /**\r\n     * Sortings that were selected by the user and must be applied on next request of data.\r\n     *\r\n     * @note This property is ready to use with {@link FiltersService} since it has {@link filter} annotation.\r\n     */\r\n    @filter({\r\n        defaultValue(this: RTSortingsService): SortParameter[] {\r\n            return this.cloneDefaultSortings();\r\n        },\r\n        parameterName: 'sortings',\r\n        parseFormatter(rawValue: any): object[] {\r\n            return Array.isArray(rawValue)\r\n                ? rawValue.map((sort: SortParameter) => ({\r\n                      direction: sort.direction * 1,\r\n                      fieldName: sort.fieldName\r\n                  }))\r\n                : [];\r\n        },\r\n        serializeFormatter(this: RTSortingsService): object {\r\n            return this.sortings.map((sort: SortParameter) => ({\r\n                direction: sort.direction,\r\n                fieldName: sort.fieldName\r\n            }));\r\n        }\r\n    } as FilterConfig)\r\n    public sortings: SortParameter[] = new Array<SortParameter>();\r\n    private defaultSortingsInternal: SortParameter[] = new Array<SortParameter>();\r\n\r\n    /**\r\n     * Default sortings that will be used by service.\r\n     */\r\n    public get defaultSortings(): SortParameter[] {\r\n        return this.defaultSortingsInternal;\r\n    }\r\n\r\n    /**\r\n     * If called when {@link sortings} is empty then applied value will be copied to {@link sortings} immediately.\r\n     */\r\n    public set defaultSortings(value: SortParameter[]) {\r\n        this.defaultSortingsInternal = value || [];\r\n        if (this.sortings.length === 0) {\r\n            this.sortings = this.cloneDefaultSortings();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets {@link sortings} according to specified parameters.\r\n     * @param fieldName name of the field by which sorting must be executed on server. This value will be used as {@link SortParameter.fieldName}.\r\n     *\r\n     * In case when sorting with the same field name is already specified, direction of this sorting will be toggled to reversed value and this sorting will be pushed to the end of {@link sortings} array.\r\n     * So it will be applied last.\r\n     * @param savePrevious `true` to keep previously applied sortings in {@link sortings} array.\r\n     *\r\n     * @param startDirectionStr - sort direction\r\n     */\r\n    public setSort(fieldName: string, savePrevious: boolean, startDirectionStr: SortDirectionStr = 'Asc'): void {\r\n        const startDirection: SortDirection = SortDirection[startDirectionStr] !== undefined ? SortDirection[startDirectionStr] : SortDirection.Asc;\r\n        let newSort = { direction: startDirection, fieldName };\r\n        for (let i = 0; i < this.sortings.length; i++) {\r\n            if (this.sortings[i].fieldName === fieldName) {\r\n                const existedSort = this.sortings.splice(i, 1)[0];\r\n                newSort = {\r\n                    direction: existedSort.direction,\r\n                    fieldName: existedSort.fieldName\r\n                };\r\n                newSort.direction = newSort.direction === SortDirection.Asc ? SortDirection.Desc : SortDirection.Asc;\r\n                break;\r\n            }\r\n        }\r\n        if (savePrevious) {\r\n            this.sortings.push(newSort);\r\n        } else {\r\n            this.sortings.length = 0;\r\n            this.sortings.push(newSort);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Removes sort with specified field name  from {@link sortings} array.\r\n     * @param fieldName name of the sort to remove.\r\n     */\r\n    public removeSort(fieldName: string): void {\r\n        for (let i = 0; i < this.sortings.length; i++) {\r\n            if (this.sortings[i].fieldName === fieldName) {\r\n                this.sortings.splice(i, 1);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Removes all sortings from {@link sortings} array.\r\n     */\r\n    public removeAllSortings(): void {\r\n        this.sortings.length = 0;\r\n    }\r\n\r\n    /**\r\n     * Performs service destroy.\r\n     */\r\n    public destroy(): void {\r\n        this.defaultSortingsInternal.length = 0;\r\n        this.sortings.length = 0;\r\n    }\r\n\r\n    /**\r\n     * Internal method for default sortings cloning.\r\n     * This method is used as {@link FilterConfig.defaultValue} as well as for copying to {@link sortings} when {@link defaultSortings} setter is used and {@link sortings} is empty.\r\n     */\r\n    private cloneDefaultSortings(): SortParameter[] {\r\n        return this.defaultSortingsInternal.map((s: SortParameter) => ({\r\n            direction: s.direction,\r\n            fieldName: s.fieldName\r\n        }));\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n// tslint:disable:max-classes-per-file\r\n\r\n/**\r\n * Contract to implement abstracted subscription proxy which hides any details of underlying subscription\r\n */\r\nexport interface SubscriptionProxy {\r\n    /**\r\n     * Subscribes to passed object\r\n     * @param target object to subscribe\r\n     * @param completeAction action to call on underlying subscription successful completion\r\n     * @param errorAction action to call on underlying subscription error\r\n     */\r\n\r\n    attach(target: any, completeAction: any, errorAction: any): any;\r\n\r\n    /**\r\n     * Detaches from underlying subscription\r\n     */\r\n    detach(subscription: any): void;\r\n}\r\n\r\n/**\r\n * Implementation of {@link SubscriptionProxy} to work with any objects with `subscribe/unsubscribe` contracts. This contract is suitable for Observable, for example.\r\n */\r\nexport class PushBasedSubscriptionProxy implements SubscriptionProxy {\r\n    /**\r\n     * Returns `true` if this proxy type can subscribe to passed object. `false` otherwise.\r\n     */\r\n    public static isAcceptable(target: any): boolean {\r\n        return !!target.subscribe;\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public attach(target: any, completeAction: any, errorAction?: (error: any) => any): any {\r\n        return target.subscribe({ error: errorAction, next: completeAction });\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public detach(subscription: any): void {\r\n        subscription.unsubscribe();\r\n    }\r\n}\r\n\r\n/**\r\n * Implementation of {@link SubscriptionProxy} which works with Promise and adds ability to unsubscribe from it.\r\n */\r\nexport class PromiseSubscriptionProxy implements SubscriptionProxy {\r\n    private isAlive = true;\r\n    /**\r\n     * Returns `true` if this proxy type can subscribe to passed object. `false` otherwise.\r\n     */\r\n    public static isAcceptable(target: any): boolean {\r\n        return target instanceof Promise;\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public attach(target: Promise<any>, completeAction: (value: any) => any, errorAction?: (error: any) => any): any {\r\n        return target.then(\r\n            (value: any) => {\r\n                if (this.isAlive) {\r\n                    completeAction(value);\r\n                }\r\n            },\r\n            (error: any) => {\r\n                if (this.isAlive) {\r\n                    errorAction(error);\r\n                }\r\n            }\r\n        );\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public detach(subscription: any): void {\r\n        this.isAlive = false;\r\n    }\r\n}\r\n\r\n/**\r\n * Service to manage async subscriptions which acts as mediator to {@link SubscriptionProxy} contract implementations.\r\n */\r\n@Injectable()\r\nexport class AsyncSubscriber {\r\n    private proxy: SubscriptionProxy = null;\r\n    private lastTarget: any = null;\r\n    private subscription: any = null;\r\n\r\n    /**\r\n     * @see {@link SubscriptionProxy.attach}\r\n     */\r\n    public attach(target: any, completeAction: (value: any) => any, errorAction?: (error: any) => any): void {\r\n        if (this.lastTarget !== null) {\r\n            this.destroy();\r\n        }\r\n        this.lastTarget = target;\r\n        this.proxy = this.getProxy(target);\r\n        this.subscription = this.proxy.attach(target, completeAction, errorAction);\r\n    }\r\n    /**\r\n     * Detaches from underlying subscription and destroys all internal objects.\r\n     */\r\n    public destroy(): void {\r\n        if (this.proxy) {\r\n            this.proxy.detach(this.subscription);\r\n        }\r\n        this.proxy = null;\r\n        this.lastTarget = null;\r\n        this.subscription = null;\r\n    }\r\n    /**\r\n     * @see {@link SubscriptionProxy.detach}\r\n     */\r\n    public detach(): void {\r\n        if (this.proxy) {\r\n            this.proxy.detach(this.subscription);\r\n        }\r\n    }\r\n    private getProxy(target: any): SubscriptionProxy {\r\n        if (PromiseSubscriptionProxy.isAcceptable(target)) {\r\n            return new PromiseSubscriptionProxy();\r\n        }\r\n        if (PushBasedSubscriptionProxy.isAcceptable(target)) {\r\n            return new PushBasedSubscriptionProxy();\r\n        }\r\n        throw new Error('Passed object is not subscribable');\r\n    }\r\n}\r\n","import { Pager } from '../../core/pager';\r\nimport { ListResponse } from '../../core/list-response';\r\n\r\n/**\r\n * Implements {@link Pager} contract and represents list without any paging mechanics.\r\n * @note This type is configured to use with {@link FiltersService}.\r\n */\r\nexport class NullObjectPager implements Pager {\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public appendedOnLoad = false;\r\n\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public totalCount = 0;\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public loadedCount = 0;\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public processResponse(response: ListResponse<any> | any[]): void {\r\n        let alignedResponse: ListResponse<any>;\r\n        if (Array.isArray(response)) {\r\n            alignedResponse = {\r\n                items: response,\r\n                loadedCount: response.length,\r\n                totalCount: response.length\r\n            } as ListResponse<any>;\r\n        } else {\r\n            alignedResponse = response;\r\n        }\r\n\r\n        this.loadedCount = alignedResponse.loadedCount || (alignedResponse.items && alignedResponse.items.length ? alignedResponse.items.length : 0);\r\n        this.totalCount = alignedResponse.totalCount || 0;\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public reset(): void {\r\n        this.totalCount = 0;\r\n        this.loadedCount = 0;\r\n    }\r\n}\r\n","import { RTFiltersService } from '../../filters/filters.service';\r\n\r\n/**\r\n * Base contract for state management services.\r\n */\r\nexport abstract class RTStateService {\r\n    /**\r\n     * This method must get required state from passed filterService instance and persist it in any way.\r\n     * @param filtersService service to request state.\r\n     */\r\n    public abstract persistState(filtersService: RTFiltersService): void;\r\n    /**\r\n     * This method will be called during {@link RTList} initialization and must return settings saved previously.\r\n     */\r\n    public abstract getState(): any;\r\n}\r\n","import { EventEmitter, Inject, Injectable, InjectionToken, Optional, SkipSelf } from '@angular/core';\r\nimport { Observable, BehaviorSubject } from 'rxjs';\r\nimport { RTFiltersService } from '../../filters/filters.service';\r\nimport { destroyAll } from '../../utilities';\r\nimport { RTStateService } from './state.service';\r\nimport { RTSortingsService } from './sortings.service';\r\nimport { OperationStatus } from '../../core/operation-status';\r\nimport { ListResponse } from '../../core/list-response';\r\nimport { AsyncSubscriber } from './async-subscriber';\r\nimport { NullObjectPager } from './null-object-pager';\r\nimport { Pager } from '../../core/pager';\r\nimport { FilterConfig } from '../../core/filter-config';\r\nimport { map } from 'rxjs/operators';\r\nexport const RTFilterTarget = new InjectionToken<any>('RTFilterTarget');\r\n\r\nexport class OperationStatusStream {\r\n  public status$: Observable<OperationStatus>;\r\n}\r\n\r\n@Injectable()\r\nexport class RTList {\r\n  /**\r\n   * Global settings of list..\r\n   *\r\n   * These settings are static and their values are copied to the properties of the same name for each instance of {@link RTList} type.\r\n   *\r\n   * So, changing of this settings will affect all instances of {@link RTList} type that will be created after such changes.\r\n   * If you want to change settings of concrete object you can use it the same name properties.\r\n   */\r\n  public static settings = {\r\n    /**\r\n     * @see {@link RTList.keepRecordsOnLoad}\r\n     */\r\n    keepRecordsOnLoad: false\r\n  };\r\n  public loadStarted: EventEmitter<void> = new EventEmitter<void>();\r\n  public loadSucceed: EventEmitter<ListResponse<any> | any[]> = new EventEmitter<ListResponse<any> | any[]>();\r\n  public loadFailed: EventEmitter<any> = new EventEmitter<any>();\r\n  private filterTargets: object[] = [];\r\n  constructor(\r\n    private asyncSubscriber: AsyncSubscriber,\r\n    @Optional() stateServices: RTStateService, // | RTStateService[],\r\n    @SkipSelf()\r\n    @Optional()\r\n    @Inject(RTFilterTarget)\r\n    filterTargets: any,\r\n    private sortingsService: RTSortingsService,\r\n    private filtersService: RTFiltersService\r\n  ) {\r\n    if (stateServices != null) {\r\n      if (Array.isArray(stateServices)) {\r\n        this.stateServices.push(...stateServices);\r\n      } else {\r\n        this.stateServices.push(stateServices);\r\n      }\r\n    }\r\n    this.pager = new NullObjectPager();\r\n    if (filterTargets != null) {\r\n      if (Array.isArray(filterTargets)) {\r\n        this.filterTargets.push(...filterTargets);\r\n      } else {\r\n        this.filterTargets.push(filterTargets);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Specifies that list must destroy previously loaded records immediately or keep them until data request is completed.\r\n   */\r\n  public keepRecordsOnLoad: boolean = RTList.settings.keepRecordsOnLoad;\r\n  /**\r\n   * Can be used with `Observable` data sourceto specify that list must keep previously loaded records or destroy them when new value published\r\n   */\r\n  public appendStreamedData: boolean | null = null;\r\n  /**\r\n   * Method for getting data. This parameter is required and its configuration is necessary.\r\n   *\r\n   * This method get one parameter with the settings of the request implementing {@link ListRequest} contract for the simple lists and {@link PagedListRequest} one for the paged lists.\r\n   * The return value of this method should be any subscribable object which can be handled by {@link AsyncSubscriber}.\r\n   * For the simple lists the response should contain array with the records. As for the paged ones, it should implement {@link ListResponse} contract.\r\n   */\r\n  public fetchMethod: (requestParams: any) => any;\r\n  /**\r\n   * Array of elements transferred in the {@link ListResponse.items} property.\r\n   */\r\n  public get items(): any[] {\r\n    return (this.items$ as BehaviorSubject<any[]>).getValue();\r\n  }\r\n  /**\r\n   * Array of registered {@link RTStateService} instances.\r\n   */\r\n  public stateServices: RTStateService[] = new Array<RTStateService>();\r\n  /**\r\n   * Async implementation of @see RTList.status\r\n   */\r\n  public status$: Observable<OperationStatus> = new BehaviorSubject(OperationStatus.Initial);\r\n  /**\r\n   * Async implementation of @see RTList.destroyed\r\n   */\r\n  public destroyed$: Observable<boolean> = new BehaviorSubject(false);\r\n  /**\r\n   * Async implementation of @see RTList.inited\r\n   */\r\n  public inited$: Observable<boolean> = new BehaviorSubject(false);\r\n  /**\r\n   * Async implementation of @see RTList.items\r\n   */\r\n  public items$: Observable<any[]> = new BehaviorSubject([]);\r\n  /**\r\n   * Async implementation of @see RTList.busy\r\n   */\r\n  public busy$: Observable<boolean> = this.status$.pipe(map(status => status === OperationStatus.Progress));\r\n  /**\r\n   * Async implementation of @see RTList.ready\r\n   */\r\n  public ready$: Observable<boolean> = this.status$.pipe(map(status => status !== OperationStatus.Progress));\r\n\r\n  private pagerInternal: Pager;\r\n  /**\r\n   * Configured {@link Pager} service.\r\n   */\r\n  public get pager(): Pager {\r\n    return this.pagerInternal;\r\n  }\r\n  public set pager(value: Pager) {\r\n    this.filtersService.removeFilterTarget(this.pagerInternal);\r\n    this.pagerInternal = value;\r\n    this.filtersService.registerFilterTarget(this.pagerInternal);\r\n  }\r\n  /**\r\n   * True if the service was already destroyed via {@link destroy} call.\r\n   */\r\n  public get destroyed(): boolean {\r\n    return (this.destroyed$ as BehaviorSubject<boolean>).getValue();\r\n  }\r\n  /**\r\n   * True if the service was already initialized via {@link init} call.\r\n   */\r\n  public get inited(): boolean {\r\n    return (this.inited$ as BehaviorSubject<boolean>).getValue();\r\n  }\r\n  /**\r\n   * Current execution status of the list.\r\n   */\r\n  public get status(): OperationStatus {\r\n    return (this.status$ as BehaviorSubject<OperationStatus>).getValue();\r\n  }\r\n  /**\r\n   * returns `true`, if there is a data request executed at the moment (i.e. {@link state} is equal to {@link ProgressState.Progress})\r\n   */\r\n  public get busy(): boolean {\r\n    return this.status === OperationStatus.Progress;\r\n  }\r\n  /**\r\n   * returns `true`, if there is no data request executed at the moment (i.e. {@link state} is NOT equal to {@link ProgressState.Progress})\r\n   */\r\n  public get ready(): boolean {\r\n    return this.status !== OperationStatus.Progress;\r\n  }\r\n  /**\r\n   * Performs initialization logic of the service. This method must be called before first use of the service.\r\n   */\r\n  public init(): void {\r\n    if (this.inited) {\r\n      return;\r\n    }\r\n    this.filtersService.registerFilterTarget(...this.filterTargets);\r\n    this.filtersService.registerFilterTarget(this.pager, this.sortingsService);\r\n    const restoredState = {};\r\n    Object.assign(restoredState, ...this.stateServices.map((service: RTStateService) => service.getState() || {}));\r\n    this.filtersService.applyParams(restoredState);\r\n    (this.inited$ as BehaviorSubject<boolean>).next(true);\r\n  }\r\n  /**\r\n   * Performs destroy logic of the list itself and all of the inner services.\r\n   */\r\n  public destroy(): void {\r\n    this.asyncSubscriber.destroy();\r\n    this.filtersService.destroy();\r\n    this.sortingsService.destroy();\r\n    this.clearData();\r\n    (this.destroyed$ as BehaviorSubject<boolean>).next(true);\r\n  }\r\n  /**\r\n   * Registers passed object(s) as state service to manage the list state.\r\n   */\r\n  public registerStateService(...services: RTStateService[]): void {\r\n    services.forEach((service: RTStateService) => {\r\n      this.stateServices.push(service);\r\n    });\r\n  }\r\n  /**\r\n   * Removes passed object(s) from state services collection of the list.\r\n   */\r\n  public removeStateService(...services: RTStateService[]): void {\r\n    services.forEach((service: RTStateService) => {\r\n      const index = this.stateServices.findIndex((s: RTStateService) => s === service);\r\n      if (index !== -1) {\r\n        this.stateServices.splice(index, 1);\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * Registers passed object(s) as filter targets in underlying {@link FiltersService} to include their configured properties as parameters to the data request.\r\n   * @see {@link FiltersService.registerFilterTarget}\r\n   */\r\n  public registerFilterTarget(...targets: object[]): void {\r\n    this.filtersService.registerFilterTarget(...targets);\r\n  }\r\n  /**\r\n   * @see {@link FiltersService.removeFilterTarget}\r\n   */\r\n  public removeFilterTarget(...targets: object[]): void {\r\n    this.filtersService.removeFilterTarget(...targets);\r\n  }\r\n  /**\r\n   * @see {@link FiltersService.getRequestState}\r\n   */\r\n  public getRequestState(filterFn?: (config: FilterConfig, proposedValue: any, targetObject: object) => boolean): any {\r\n    return this.filtersService.getRequestState(filterFn);\r\n  }\r\n  /**\r\n   * Resets the list parameters (sortings, paging, filters) to their default values.\r\n   */\r\n  public resetSettings(): void {\r\n    this.asyncSubscriber.detach();\r\n    this.filtersService.resetValues();\r\n    this.pager.reset();\r\n    this.clearData();\r\n    (this.status$ as BehaviorSubject<OperationStatus>).next(OperationStatus.Initial);\r\n  }\r\n  /**\r\n   * Cancels the request executed at the moment.\r\n   */\r\n  public cancelRequests(): void {\r\n    if (this.busy || this.appendStreamedData !== null) {\r\n      this.asyncSubscriber.detach();\r\n      (this.status$ as BehaviorSubject<OperationStatus>).next(OperationStatus.Cancelled);\r\n      this.clearData();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Clears {@link items} array. Calls {@link destroyAll} method for {@link items} array to perform optional destroy logic of the elements.\r\n   * {@see destroyAll}\r\n   */\r\n  public clearData(): void {\r\n    destroyAll(this.items);\r\n    (this.items$ as BehaviorSubject<any[]>).next([]);\r\n  }\r\n\r\n  /**\r\n   * Performs data loading by calling specified {@link fetchMethod} delegate.\r\n   * @return result of {@link fetchMethod} execution.\r\n   */\r\n  public loadData(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n    if (this.busy) {\r\n      return null;\r\n    }\r\n    this.loadStarted.emit();\r\n    const subscribable = this.beginRequest();\r\n    this.tryCleanItemsOnLoad(false);\r\n    this.asyncSubscriber.attach(subscribable, this.loadDataSuccessCallback, this.loadDataFailCallback);\r\n    this.stateServices.forEach((service: RTStateService) => {\r\n      service.persistState(this.filtersService);\r\n    });\r\n    return subscribable;\r\n  }\r\n  /**\r\n   * Resets paging parameters and performs data loading by calling {@link loadData} if list not in {@link OperationStatus.Progress} state.\r\n   * @return result of {@link fetchMethod} if it was called. `null` otherwise.\r\n   */\r\n  public reloadData(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n    if (this.busy) {\r\n      return null;\r\n    }\r\n    this.loadStarted.emit();\r\n    this.pager.reset();\r\n    const subscribable = this.beginRequest();\r\n    this.tryCleanItemsOnReload(false);\r\n    this.asyncSubscriber.attach(subscribable, this.reloadDataSuccessCallback, this.reloadDataFailCallback);\r\n    this.stateServices.forEach((service: RTStateService) => {\r\n      service.persistState(this.filtersService);\r\n    });\r\n    return subscribable;\r\n  }\r\n  /**\r\n   * Callback which is executed if {@link fetchMethod} execution finished successfully.\r\n   */\r\n  public loadSuccessCallback(response: ListResponse<any> | any[]): ListResponse<any> | any[] {\r\n    const items = Array.isArray(response) ? response : response.items;\r\n    (this.items$ as BehaviorSubject<any[]>).next(this.items.concat(items));\r\n    this.pager.processResponse(response);\r\n    // In case when filter changed from last request and there's no data now\r\n    // Don't do this for flat responses since we don't know real count items\r\n    if (!Array.isArray(response) && this.pager.totalCount === 0) {\r\n      this.clearData();\r\n      this.pager.reset();\r\n    }\r\n    (this.status$ as BehaviorSubject<OperationStatus>).next(\r\n      this.pager.totalCount === 0 && this.items.length === 0 ? OperationStatus.NoData : OperationStatus.Done\r\n    );\r\n\r\n    this.loadSucceed.emit(response);\r\n    return response;\r\n  }\r\n  /**\r\n   * Callback which is executed if {@link fetchMethod} execution finished with error.\r\n   */\r\n  public loadFailCallback(): void {\r\n    this.tryCleanItemsOnLoad(true);\r\n    (this.status$ as BehaviorSubject<OperationStatus>).next(OperationStatus.Fail);\r\n    this.loadFailed.emit();\r\n  }\r\n\r\n  private loadDataSuccessCallback = (response: ListResponse<any> | any[]): ListResponse<any> | any[] => {\r\n    if (this.tryInterceptStatusResponse(response)) {\r\n      return response;\r\n    }\r\n    this.tryCleanItemsOnLoad(true);\r\n    return this.loadSuccessCallback(response);\r\n  };\r\n  private reloadDataSuccessCallback = (response: ListResponse<any> | any[]): ListResponse<any> | any[] => {\r\n    if (this.tryInterceptStatusResponse(response)) {\r\n      return response;\r\n    }\r\n    this.tryCleanItemsOnReload(true);\r\n    return this.loadSuccessCallback(response);\r\n  };\r\n  private loadDataFailCallback = (): void => {\r\n    this.tryCleanItemsOnLoad(true);\r\n    this.loadFailCallback();\r\n  };\r\n  private tryInterceptStatusResponse(response: any): boolean {\r\n    if (this.responseHasStatus(response)) {\r\n      switch (response.status) {\r\n        case OperationStatus.Fail:\r\n          this.reloadDataFailCallback();\r\n          return true;\r\n        case OperationStatus.Cancelled:\r\n          this.cancelRequests();\r\n          return true;\r\n        case OperationStatus.Progress:\r\n          return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  private reloadDataFailCallback = (): void => {\r\n    this.tryCleanItemsOnReload(true);\r\n    this.loadFailCallback();\r\n  };\r\n  private tryCleanItemsOnLoad(requestCompleted: boolean): void {\r\n    if (this.keepRecordsOnLoad === requestCompleted && this.pager.appendedOnLoad === false) {\r\n      this.clearData();\r\n    }\r\n    if (requestCompleted && this.appendStreamedData === false) {\r\n      this.clearData();\r\n    }\r\n  }\r\n  private tryCleanItemsOnReload(requestCompleted: boolean): void {\r\n    if (this.keepRecordsOnLoad === requestCompleted) {\r\n      this.clearData();\r\n    }\r\n    if (requestCompleted && this.appendStreamedData === false) {\r\n      this.clearData();\r\n    }\r\n  }\r\n  private beginRequest(): any {\r\n    (this.status$ as BehaviorSubject<OperationStatus>).next(OperationStatus.Progress);\r\n    const requestState = this.filtersService.getRequestState();\r\n    return this.fetchMethod(requestState);\r\n  }\r\n  private responseHasStatus(response: ListResponse<any> | any[]): boolean {\r\n    return (response as ListResponse<any>).status !== null && typeof (response as ListResponse<any>).status !== 'undefined';\r\n  }\r\n}\r\n\r\nexport const LIST_PROVIDERS: any[] = [AsyncSubscriber, RTList, RTFiltersService, RTSortingsService, { provide: OperationStatusStream, useExisting: RTList }];\r\n","import { AfterViewInit, Directive, EventEmitter, Input, OnChanges, OnDestroy, Output, Self, SimpleChange } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { LIST_PROVIDERS, RTList } from './providers/list';\r\nimport { ListResponse } from '../core/list-response';\r\nimport { SortParameter } from '../core/sort-parameter';\r\nimport { ListRequest } from '../core/list-request';\r\nimport { RTSortingsService } from './providers/sortings.service';\r\n\r\n@Directive({\r\n    exportAs: 'rtList',\r\n    providers: [LIST_PROVIDERS],\r\n    selector: '[rtList]'\r\n})\r\nexport class ListDirective implements OnChanges, OnDestroy, AfterViewInit {\r\n    @Output()\r\n    public readonly listInit: EventEmitter<RTList> = new EventEmitter<RTList>(false);\r\n    @Output()\r\n    public readonly afterListInit: EventEmitter<RTList> = new EventEmitter<RTList>(false);\r\n    @Output()\r\n    public readonly loadSucceed: EventEmitter<ListResponse<any> | any[]> = new EventEmitter<ListResponse<any> | any[]>();\r\n    @Output()\r\n    public readonly loadFailed: EventEmitter<any> = new EventEmitter<any>();\r\n    @Output()\r\n    public readonly loadStarted: EventEmitter<void> = new EventEmitter<void>();\r\n    @Input()\r\n    public defaultSortings: SortParameter[];\r\n    @Input()\r\n    public loadOnInit = true;\r\n    @Input()\r\n    public keepRecordsOnLoad = false;\r\n    @Input()\r\n    public appendStreamedData = null;\r\n    public items$: Observable<any[]>;\r\n    public busy$: Observable<boolean>;\r\n    public ready$: Observable<boolean>;\r\n    @Input('rtList')\r\n    public set fetchMethod(\r\n        value: (requestParams: ListRequest) => Promise<ListResponse<any>> | Observable<ListResponse<any>> | EventEmitter<ListResponse<any>>\r\n    ) {\r\n        this.listService.fetchMethod = value;\r\n    }\r\n\r\n    private successSubscription: Subscription;\r\n    private failSubscription: Subscription;\r\n    private loadStartedSubscription: Subscription;\r\n\r\n    constructor(@Self() public listService: RTList, @Self() public sortingsService: RTSortingsService) {\r\n        this.successSubscription = listService.loadSucceed.subscribe((response: ListResponse<any> | any[]) => {\r\n            this.loadSucceed.emit(response);\r\n        });\r\n        this.failSubscription = listService.loadFailed.subscribe(() => {\r\n            this.loadFailed.emit();\r\n        });\r\n        this.loadStartedSubscription = listService.loadStarted.subscribe(() => {\r\n            this.loadStarted.emit();\r\n        });\r\n        this.items$ = this.listService.items$;\r\n        this.busy$ = this.listService.busy$;\r\n        this.ready$ = this.listService.ready$;\r\n    }\r\n    public ngAfterViewInit(): void {\r\n        // We call init in ngAfterViewInit to:\r\n        // 1. allow all child controls to be applied to markup and regiter themself in filtersService\r\n        // 2. give ability to all child controls to apply their default values\r\n        // 3. overwrite theese default values by values passed via persistence services\r\n        // 4. execute all ngAfterViewInit for custom services registration (setTimeout)\r\n        setTimeout(() => {\r\n            this.listInit.emit(this.listService);\r\n            this.listService.init();\r\n            this.afterListInit.emit(this.listService);\r\n            if (this.loadOnInit) {\r\n                this.listService.loadData();\r\n            }\r\n        }, 0);\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.listService.destroy();\r\n        this.successSubscription.unsubscribe();\r\n        this.failSubscription.unsubscribe();\r\n        this.loadStartedSubscription.unsubscribe();\r\n    }\r\n    public ngOnChanges(changes: { keepRecordsOnLoad?: SimpleChange; defaultSortings?: SimpleChange; appendStreamedData?: SimpleChange }): void {\r\n        if (changes.defaultSortings) {\r\n            this.sortingsService.defaultSortings = changes.defaultSortings.currentValue;\r\n        }\r\n        if (changes.keepRecordsOnLoad) {\r\n            this.listService.keepRecordsOnLoad = changes.keepRecordsOnLoad.currentValue;\r\n        }\r\n        if (changes.appendStreamedData) {\r\n            this.listService.appendStreamedData = changes.appendStreamedData.currentValue;\r\n        }\r\n    }\r\n    public reloadData(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        return this.listService.reloadData();\r\n    }\r\n    public loadData(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        return this.listService.loadData();\r\n    }\r\n    public resetSettings(): void {\r\n        this.listService.resetSettings();\r\n    }\r\n    public cancelRequests(): void {\r\n        this.listService.cancelRequests();\r\n    }\r\n    public get items(): any[] {\r\n        return this.listService.items;\r\n    }\r\n    public get busy(): boolean {\r\n        return this.listService.busy;\r\n    }\r\n    public get ready(): boolean {\r\n        return this.listService.ready;\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { OperationStatusStream } from '../providers/list';\r\nimport { OperationStatus } from '../../core/operation-status';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'rt-status-done',\r\n    template: `\r\n        <ng-content *ngIf=\"(isVisible$ | async)\"></ng-content>\r\n    `\r\n})\r\nexport class StatusDoneComponent {\r\n    public isVisible$: Observable<boolean>;\r\n    constructor(trackedStatusObject: OperationStatusStream) {\r\n        this.isVisible$ = trackedStatusObject.status$.pipe(map(status => status === OperationStatus.Done));\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { OperationStatusStream } from '../providers/list';\r\nimport { OperationStatus } from '../../core/operation-status';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'rt-status-failed',\r\n    template: `\r\n        <ng-content *ngIf=\"(isVisible$ | async)\"></ng-content>\r\n    `\r\n})\r\nexport class StatusFailedComponent {\r\n    public isVisible$: Observable<boolean>;\r\n    constructor(trackedStatusObject: OperationStatusStream) {\r\n        this.isVisible$ = trackedStatusObject.status$.pipe(map(status => status === OperationStatus.Fail));\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { OperationStatusStream } from '../providers/list';\r\nimport { OperationStatus } from '../../core/operation-status';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'rt-status-progress',\r\n    template: `\r\n        <ng-content *ngIf=\"(isVisible$ | async)\"></ng-content>\r\n    `\r\n})\r\nexport class StatusInProgressComponent {\r\n    public isVisible$: Observable<boolean>;\r\n    constructor(trackedStatusObject: OperationStatusStream) {\r\n        this.isVisible$ = trackedStatusObject.status$.pipe(map(status => status === OperationStatus.Progress));\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { OperationStatusStream } from '../providers/list';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { OperationStatus } from '../../core/operation-status';\r\n\r\n@Component({\r\n    selector: 'rt-status-initial',\r\n    template: `\r\n        <ng-content *ngIf=\"(isVisible$ | async)\"></ng-content>\r\n    `\r\n})\r\nexport class StatusInitialComponent {\r\n    public isVisible$: Observable<boolean>;\r\n    constructor(trackedStatusObject: OperationStatusStream) {\r\n        this.isVisible$ = trackedStatusObject.status$.pipe(map(status => status === OperationStatus.Initial));\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { OperationStatusStream } from '../providers/list';\r\nimport { Observable } from 'rxjs';\r\nimport { OperationStatus } from '../../core/operation-status';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'rt-status-no-data',\r\n    template: `\r\n        <ng-content *ngIf=\"(isVisible$ | async)\"></ng-content>\r\n    `\r\n})\r\nexport class StatusNoDataComponent {\r\n    public isVisible$: Observable<boolean>;\r\n    constructor(trackedStatusObject: OperationStatusStream) {\r\n        this.isVisible$ = trackedStatusObject.status$.pipe(map(status => status === OperationStatus.NoData));\r\n    }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { OperationStatusStream } from '../providers/list';\r\nimport { Observable } from 'rxjs';\r\nimport { OperationStatus } from '../../core/operation-status';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'rt-status-request-cancelled',\r\n    template: `\r\n        <ng-content *ngIf=\"(isVisible$ | async)\"></ng-content>\r\n    `\r\n})\r\nexport class StatusRequestCancelledComponent {\r\n    public isVisible$: Observable<boolean>;\r\n    constructor(trackedStatusObject: OperationStatusStream) {\r\n        this.isVisible$ = trackedStatusObject.status$.pipe(map(status => status === OperationStatus.Cancelled));\r\n    }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ListDirective } from './list.directive';\r\nimport { RTPagedPager } from './providers/paged-pager';\r\n\r\n@Pipe({ name: 'rtRowNumber' })\r\nexport class RowNumberPipe implements PipeTransform {\r\n    public transform(index: number, rtList: ListDirective): number {\r\n        if (index !== 0 && (!index || isNaN(index))) {\r\n            throw new Error('Invalid input value for rtRowNumber pipe. Must be a valid numeric value.');\r\n        }\r\n        if (!rtList) {\r\n            throw new Error('Invalid value provided for parameter \"rtList\" of rtRowNumber pipe . Must be \"rtList\" directive instance.');\r\n        }\r\n        if (rtList.listService.pager !== null && (rtList.listService.pager as RTPagedPager).displayFrom) {\r\n            return index + (rtList.listService.pager as RTPagedPager).displayFrom;\r\n        } else {\r\n            return index + 1;\r\n        }\r\n    }\r\n}\r\n","import {\r\n    Directive,\r\n    DoCheck,\r\n    ElementRef,\r\n    HostListener,\r\n    Input,\r\n    IterableDiffer,\r\n    IterableDiffers,\r\n    OnChanges,\r\n    OnInit,\r\n    Renderer2,\r\n    SimpleChange,\r\n    SkipSelf\r\n} from '@angular/core';\r\nimport { RTList } from './providers/list';\r\nimport { RTSortingsService } from './providers/sortings.service';\r\nimport { SortParameter, SortDirection, SortDirectionStr } from '../core/sort-parameter';\r\n\r\n@Directive({\r\n    selector: '[rtSort]'\r\n})\r\nexport class SortDirective implements DoCheck, OnInit, OnChanges {\r\n    public static settings: {\r\n        sortAscClassName: string;\r\n        sortDescClassName: string;\r\n        sortableClassName: string;\r\n    } = {\r\n        sortAscClassName: 'rt-sort-asc',\r\n        sortDescClassName: 'rt-sort-desc',\r\n        sortableClassName: 'rt-sortable'\r\n    };\r\n    @Input('rtSort') public fieldName: string;\r\n    @Input() public disableSort: false;\r\n    @Input() public startSortDirection?: SortDirectionStr;\r\n    private nativeEl: HTMLElement;\r\n    private sortingsDiffer: IterableDiffer<SortParameter>;\r\n\r\n    constructor(\r\n        @SkipSelf() private listService: RTList,\r\n        @SkipSelf() private sortingsService: RTSortingsService,\r\n        private renderer: Renderer2,\r\n        el: ElementRef,\r\n        differs: IterableDiffers\r\n    ) {\r\n        this.sortingsDiffer = differs.find([]).create(null);\r\n        this.nativeEl = el.nativeElement;\r\n    }\r\n    public ngOnInit(): void {\r\n        if (SortDirective.settings.sortableClassName) {\r\n            this.renderer.addClass(this.nativeEl, SortDirective.settings.sortableClassName);\r\n        }\r\n        this.sortingsService.sortings.some(sortParameter => {\r\n            if (sortParameter.fieldName === this.fieldName) {\r\n                this.setSortClasses(sortParameter);\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n    }\r\n    @HostListener('click', ['$event.ctrlKey'])\r\n    public clickHandler(ctrlKeyPressed: boolean): void {\r\n        if (this.listService.ready && !this.disableSort) {\r\n            this.sortingsService.setSort(this.fieldName, ctrlKeyPressed, this.startSortDirection);\r\n            this.listService.reloadData();\r\n        }\r\n    }\r\n    public ngDoCheck(): void {\r\n        const changes = this.sortingsDiffer.diff(this.sortingsService.sortings);\r\n        if (changes) {\r\n            changes.forEachRemovedItem(this.sortItemRemovedCallback);\r\n            changes.forEachAddedItem(this.sortItemAddedCallback);\r\n        }\r\n    }\r\n    public ngOnChanges(changes: { disableSort?: SimpleChange }): void {\r\n        if (changes.disableSort && changes.disableSort.currentValue) {\r\n            this.sortingsService.removeSort(this.fieldName);\r\n        }\r\n    }\r\n    private sortItemRemovedCallback = (removedItem: any): void => {\r\n        if (removedItem.item && removedItem.item.fieldName === this.fieldName) {\r\n            this.removeSortClasses();\r\n        }\r\n    };\r\n    private sortItemAddedCallback = (addedItem: any): void => {\r\n        if (addedItem.item && addedItem.item.fieldName === this.fieldName) {\r\n            this.setSortClasses(addedItem.item);\r\n        }\r\n    };\r\n    private removeSortClasses(): void {\r\n        if (SortDirective.settings.sortAscClassName) {\r\n            this.renderer.removeClass(this.nativeEl, SortDirective.settings.sortAscClassName);\r\n        }\r\n        if (SortDirective.settings.sortDescClassName) {\r\n            this.renderer.removeClass(this.nativeEl, SortDirective.settings.sortDescClassName);\r\n        }\r\n    }\r\n    private setSortClasses(sortParameter: any): void {\r\n        const direction = sortParameter.direction;\r\n        if (SortDirective.settings.sortAscClassName) {\r\n            if (direction === SortDirection.Asc) {\r\n                this.renderer.addClass(this.nativeEl, SortDirective.settings.sortAscClassName);\r\n            } else {\r\n                this.renderer.removeClass(this.nativeEl, SortDirective.settings.sortAscClassName);\r\n            }\r\n        }\r\n        if (SortDirective.settings.sortDescClassName) {\r\n            if (direction === SortDirection.Desc) {\r\n                this.renderer.addClass(this.nativeEl, SortDirective.settings.sortDescClassName);\r\n            } else {\r\n                this.renderer.removeClass(this.nativeEl, SortDirective.settings.sortDescClassName);\r\n            }\r\n        }\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Pager } from '../../core/pager';\r\nimport { filter } from '../../filters/filter.annotation';\r\nimport { FilterConfig } from '../../core/filter-config';\r\nimport { ListResponse } from '../../core/list-response';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Implements {@link Pager} contract and represents buffered list behavior.\r\n * @note This type is configured to use with {@link FiltersService}.\r\n */\r\n@Injectable()\r\nexport class RTBufferedPager implements Pager {\r\n    /**\r\n     * Global settings for properties such as default values and constraints for pager properties.\r\n     *\r\n     * These settings are static and their values are copied to the properties of the same name for each instance of {@link RTBufferedPager} type.\r\n     *\r\n     * So, changing of this settings will affect all instances of {@link RTBufferedPager} type that will be created after such changes.\r\n     * If you want to change settings of concrete object you can use it the same name properties.\r\n     */\r\n    // tslint:disable-next-line: typedef\r\n    public static settings = {\r\n        /**\r\n         * @see {@link RTBufferedPager.defaultRowCount}\r\n         */\r\n        defaultRowCount: 20,\r\n        /**\r\n         * @see {@link RTBufferedPager.maxRowCount}\r\n         */\r\n        maxRowCount: 200,\r\n        /**\r\n         * @see {@link RTBufferedPager.minRowCount}\r\n         */\r\n        minRowCount: 1\r\n    };\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public appendedOnLoad = true;\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public totalCount = 0;\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public loadedCount = 0;\r\n    /**\r\n     * This is both initial value and value which will be applied to {@link takeRowCount} property on {@link reset} method execution.\r\n     */\r\n    public defaultRowCount: number = RTBufferedPager.settings.defaultRowCount;\r\n    /**\r\n     * The smallest value that can be applied to {@link takeRowCount} property.\r\n     */\r\n    public minRowCount: number = RTBufferedPager.settings.minRowCount;\r\n    /**\r\n     * The biggest value that can be applied to {@link takeRowCount} property.\r\n     */\r\n    public maxRowCount: number = RTBufferedPager.settings.maxRowCount;\r\n    /**\r\n     * This property is applied to the server request and it specifies how many rows are already loaded and must be skipped on next request.\r\n     *\r\n     * @note This property is ready to use with {@link FiltersService} since it has {@link filter} annotation.\r\n     * @see {@link BufferedListRequest.skip}\r\n     */\r\n    @filter({\r\n        defaultValue: 0,\r\n        parameterName: 'skip',\r\n        parseFormatter(): number {\r\n            return 0;\r\n        }\r\n    } as FilterConfig)\r\n    public skip = 0;\r\n    @filter({\r\n        defaultValue(this: RTBufferedPager): number {\r\n            return this.defaultRowCount;\r\n        },\r\n        parameterName: 'take',\r\n        parseFormatter(this: RTBufferedPager, rawValue: any, allValues: any): number {\r\n            let result;\r\n            if (allValues && !isNaN(allValues.skip) && !isNaN(allValues.take)) {\r\n                result = (allValues.skip || 0) + (allValues.take || 0);\r\n            }\r\n            return result || this.defaultRowCount;\r\n        }\r\n    } as FilterConfig)\r\n    public takeRowCount$: Observable<number> = new BehaviorSubject(RTBufferedPager.settings.defaultRowCount);\r\n    private handlesFlatResponse = false;\r\n    private lastChunkRecieved: boolean = null;\r\n    /**\r\n     * This property is applied to the server request and it specifies how many rows must be loaded on next request.\r\n     * @note This property is ready to use with {@link FiltersService} since it has {@link filter} annotation.\r\n     * @see {@link BufferedListRequest.take}\r\n     */\r\n    public get takeRowCount(): number {\r\n        return (this.takeRowCount$ as BehaviorSubject<number>).getValue();\r\n    }\r\n    /**\r\n     * Executes several checks. For example, it doesn't accept values bigger than {@link maxRowCount}.\r\n     */\r\n    public set takeRowCount(value: number) {\r\n        const valueStr = (value + '').replace(/[^0-9]/g, '');\r\n        let rowCount = parseInt(valueStr, 10) ? parseInt(valueStr, 10) : this.defaultRowCount;\r\n        if (rowCount < this.minRowCount) {\r\n            rowCount = this.defaultRowCount;\r\n        }\r\n        if (rowCount > this.maxRowCount) {\r\n            rowCount = this.maxRowCount;\r\n        }\r\n        if (this.totalCount !== 0) {\r\n            if (this.skip + rowCount > this.totalCount) {\r\n                rowCount = this.totalCount - this.skip;\r\n            }\r\n        }\r\n        (this.takeRowCount$ as BehaviorSubject<number>).next(rowCount);\r\n    }\r\n    /**\r\n     * Returns `true` if it's possible to load more records (e.g. currently not all records loaded to the list).\r\n     */\r\n    public get canLoadMore(): boolean {\r\n        return this.totalCount !== 0 && this.handlesFlatResponse ? !this.lastChunkRecieved : this.skip < this.totalCount;\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public processResponse(response: ListResponse<any> | any[]): void {\r\n        let alignedResponse: ListResponse<any>;\r\n        if (Array.isArray(response)) {\r\n            this.handlesFlatResponse = true;\r\n            alignedResponse = {\r\n                items: response,\r\n                loadedCount: response.length,\r\n                totalCount: response.length\r\n            } as ListResponse<any>;\r\n        } else {\r\n            this.handlesFlatResponse = false;\r\n            alignedResponse = response;\r\n        }\r\n        this.totalCount = alignedResponse.totalCount || 0;\r\n        const lastLoadedCount = alignedResponse.loadedCount || (alignedResponse.items && alignedResponse.items.length ? alignedResponse.items.length : 0);\r\n\r\n        this.lastChunkRecieved = lastLoadedCount !== (this.takeRowCount$ as BehaviorSubject<number>).getValue();\r\n\r\n        this.skip = this.skip + lastLoadedCount;\r\n        this.loadedCount = this.skip;\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public reset(): void {\r\n        this.totalCount = 0;\r\n        this.loadedCount = 0;\r\n        this.takeRowCount = this.defaultRowCount;\r\n        this.skip = 0;\r\n    }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, SimpleChange } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { RTList } from '../providers/list';\r\nimport { RTBufferedPager } from '../providers/buffered-pager';\r\n\r\n@Component({\r\n    providers: [RTBufferedPager],\r\n    selector: 'rt-buffered-pager',\r\n    template: '<ng-content></ng-content>'\r\n})\r\nexport class BufferedPagerComponent implements OnChanges, OnInit {\r\n    @Input() public defaultRowCount: number = RTBufferedPager.settings.defaultRowCount;\r\n    @Input() public maxRowCount: number = RTBufferedPager.settings.maxRowCount;\r\n    @Input() public minRowCount: number = RTBufferedPager.settings.minRowCount;\r\n\r\n    constructor(public pager: RTBufferedPager, public listService: RTList) {\r\n        this.listService.pager = pager;\r\n    }\r\n    public ngOnInit(): void {\r\n        this.pager.takeRowCount = this.defaultRowCount * 1;\r\n    }\r\n    public ngOnChanges(changes: { defaultRowCount?: SimpleChange; maxRowCount?: SimpleChange; minRowCount?: SimpleChange }): void {\r\n        if (changes.defaultRowCount) {\r\n            this.pager.defaultRowCount = changes.defaultRowCount.currentValue * 1;\r\n        }\r\n        if (changes.maxRowCount) {\r\n            this.pager.maxRowCount = changes.maxRowCount.currentValue * 1;\r\n        }\r\n        if (changes.minRowCount) {\r\n            this.pager.minRowCount = changes.minRowCount.currentValue * 1;\r\n        }\r\n    }\r\n    public get canLoadMore(): boolean {\r\n        return this.pager.canLoadMore;\r\n    }\r\n    public loadMore(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        if (this.canLoadMore) {\r\n            return this.listService.loadData();\r\n        }\r\n        return null;\r\n    }\r\n}\r\n","import { Directive, ElementRef, Input, OnChanges, OnDestroy, Renderer2, SimpleChange } from '@angular/core';\r\nimport { RTList } from '../providers/list';\r\nimport { RTBufferedPager } from '../providers/buffered-pager';\r\n\r\n@Directive({\r\n    selector: '[rtInfinite]'\r\n})\r\nexport class InfiniteDirective implements OnDestroy, OnChanges {\r\n    @Input('rtInfinite') public targetElement: HTMLElement;\r\n    public scrollListener: any;\r\n    constructor(private elementRef: ElementRef, private bufferedPager: RTBufferedPager, private list: RTList, private renderer: Renderer2) {}\r\n    public ngOnChanges(changes: { targetElement?: SimpleChange }): void {\r\n        if (this.scrollListener) {\r\n            this.scrollListener();\r\n        }\r\n        if (changes.targetElement && changes.targetElement.currentValue) {\r\n            this.scrollListener = this.renderer.listen(this.targetElement, 'scroll', () => {\r\n                if (this.list.busy || false === this.bufferedPager.canLoadMore) {\r\n                    return;\r\n                }\r\n\r\n                const targetTop = this.targetElement.getBoundingClientRect().top;\r\n                const targetHeight = this.targetElement.clientHeight;\r\n                const elementPosition = (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect().top;\r\n                if (targetTop + targetHeight >= elementPosition) {\r\n                    this.list.loadData();\r\n                }\r\n            });\r\n        } else {\r\n            this.scrollListener = this.renderer.listen('window', 'scroll', () => {\r\n                if (this.list.busy || false === this.bufferedPager.canLoadMore) {\r\n                    return;\r\n                }\r\n                const windowHeight = document.documentElement.clientHeight;\r\n                const elementPosition = (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect().top;\r\n                if (elementPosition - windowHeight <= 0) {\r\n                    this.list.loadData();\r\n                }\r\n            });\r\n        }\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.scrollListener();\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Pager } from '../../core/pager';\r\nimport { filter } from '../../filters/filter.annotation';\r\nimport { FilterConfig } from '../../core/filter-config';\r\nimport { ListResponse } from '../../core/list-response';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Implements {@link Pager} contract and represents behavior of list with pages.\r\n * @note This type is configured to use with {@link FiltersService}.\r\n */\r\n@Injectable()\r\nexport class RTPagedPager implements Pager {\r\n    /**\r\n     * Global settings for properties such as default values and constraints for pager properties.\r\n     *\r\n     * These settings are static and their values are copied to the properties of the same name for each instance of {@link RTPagedPager} type.\r\n     *\r\n     * So, changing of this settings will affect all instances of {@link RTPagedPager} type that will be created after such changes.\r\n     * If you want to change settings of concrete object you can use it the same name properties.\r\n     */\r\n    // tslint:disable-next-line: typedef\r\n    public static settings = {\r\n        /**\r\n         * @see {@link RTPagedPager.defaultPageSize}\r\n         */\r\n        defaultPageSize: 20,\r\n        /**\r\n         * @see {@link RTPagedPager.maxPageSize}\r\n         */\r\n        maxPageSize: 200,\r\n        /**\r\n         * @see {@link RTPagedPager.minPageSize}\r\n         */\r\n        minPageSize: 1\r\n    };\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public appendedOnLoad = false;\r\n    /**\r\n     * This is both initial value and value which will be applied to {@link pageSize} property on {@link reset} method execution.\r\n     */\r\n    public defaultPageSize: number = RTPagedPager.settings.defaultPageSize;\r\n    /**\r\n     * The biggest value that can be applied to {@link pageSize} property.\r\n     */\r\n    public maxPageSize: number = RTPagedPager.settings.maxPageSize;\r\n    /**\r\n     * The smallest value that can be applied to {@link pageSize} property.\r\n     */\r\n    public minPageSize: number = RTPagedPager.settings.minPageSize;\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public totalCount = 0;\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public loadedCount = 0;\r\n\r\n    /**\r\n     * Number of record in remote data source from which data was loaded at last request.\r\n     *\r\n     * For example, it will be equal to 21 when loads second page of list with page size of 20.\r\n     */\r\n    public displayFrom = 0;\r\n    /**\r\n     * Number of record in remote data source to which data was loaded at last request.\r\n     *\r\n     * For example, it will be equal to 40 when loads second page of list with page size of 20. Or it will be equal to total count of available records if records count is less than 40.\r\n     */\r\n    public displayTo = 0;\r\n    @filter({\r\n        defaultValue: 0,\r\n        parameterName: 'skip',\r\n        parseFormatter(this: RTPagedPager, rawValue: any, allValues: any): number {\r\n            const skip = isNaN(rawValue) || !rawValue ? 0 : rawValue;\r\n            const pageSize = !allValues || isNaN(allValues.take) || !allValues.take ? this.defaultPageSize : allValues.take * 1;\r\n            return skip % pageSize === 0 ? skip / pageSize + 1 : 1;\r\n        },\r\n        serializeFormatter(this: RTPagedPager): number {\r\n            return (this.pageNumber - 1) * this.pageSize;\r\n        }\r\n    } as FilterConfig)\r\n    public pageNumber$: Observable<number> = new BehaviorSubject(1);\r\n\r\n    @filter({\r\n        defaultValue(this: RTPagedPager): number {\r\n            return this.defaultPageSize;\r\n        },\r\n        parameterName: 'take',\r\n        parseFormatter(this: RTPagedPager, rawValue: any): number {\r\n            return isNaN(rawValue) || !rawValue ? this.defaultPageSize : rawValue;\r\n        }\r\n    })\r\n    public pageSize$: Observable<number> = new BehaviorSubject(RTPagedPager.settings.defaultPageSize);\r\n\r\n    /**\r\n     * Total pages count computed as {@link totalCount} / {@link pageSize}.\r\n     * Used to check correctness of values applied to {@link pageNumber}.\r\n     */\r\n    public get pageCount(): number {\r\n        return Math.ceil(this.totalCount / (this.pageSize$ as BehaviorSubject<number>).getValue());\r\n    }\r\n    /**\r\n     * Specifies number of the page that must be loaded on next request.\r\n     *\r\n     * @note This property is ready to use with {@link FiltersService} since it has {@link filter} annotation.\r\n     * @see {@link PagedListRequest.pageNumber}\r\n     */\r\n    public get pageNumber(): number {\r\n        return (this.pageNumber$ as BehaviorSubject<number>).getValue();\r\n    }\r\n    /**\r\n     * Executes several checks. For example, it doesn't accept values bigger than {@link pageCount}.\r\n     */\r\n    public set pageNumber(value: number) {\r\n        const valueStr = (value + '').replace(/[^0-9]/g, '');\r\n        let pageNumber = parseInt(valueStr, 10) ? parseInt(valueStr, 10) : 1;\r\n        if (pageNumber > this.pageCount) {\r\n            pageNumber = this.pageCount;\r\n        }\r\n        if (pageNumber < 1) {\r\n            pageNumber = 1;\r\n        }\r\n        (this.pageNumber$ as BehaviorSubject<number>).next(pageNumber);\r\n    }\r\n    /**\r\n     * Specifies size of page that must be loaded on next request.\r\n     *\r\n     * @note This property is ready to use with {@link FiltersService} since it has {@link filter} annotation.\r\n     * @see {@link PagedListRequest.pageSize}\r\n     */\r\n    public get pageSize(): number {\r\n        return (this.pageSize$ as BehaviorSubject<number>).getValue();\r\n    }\r\n    /**\r\n     * Executes several checks. For example, it doesn't accept values bigger than {@link maxPageSize}.\r\n     */\r\n    public set pageSize(value: number) {\r\n        const valueStr = (value + '').replace(/[^0-9]/g, '');\r\n        let pageSize = parseInt(valueStr, 10) ? parseInt(valueStr, 10) : this.defaultPageSize;\r\n\r\n        if (this.totalCount !== 0) {\r\n            if (pageSize > this.totalCount) {\r\n                pageSize = this.totalCount;\r\n            }\r\n\r\n            if (this.pageNumber * pageSize > this.totalCount) {\r\n                pageSize = Math.ceil(this.totalCount / this.pageNumber);\r\n            }\r\n        }\r\n        if (pageSize > this.maxPageSize) {\r\n            pageSize = this.maxPageSize;\r\n        }\r\n        if (pageSize < this.minPageSize || pageSize === 0) {\r\n            pageSize = this.defaultPageSize;\r\n        }\r\n\r\n        (this.pageSize$ as BehaviorSubject<number>).next(pageSize);\r\n    }\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public processResponse(response: ListResponse<any> | any[]): void {\r\n        let alignedResponse: ListResponse<any>;\r\n        if (Array.isArray(response)) {\r\n            alignedResponse = {\r\n                items: response,\r\n                loadedCount: response.length,\r\n                totalCount: response.length\r\n            } as ListResponse<any>;\r\n        } else {\r\n            alignedResponse = response;\r\n        }\r\n        this.loadedCount = alignedResponse.loadedCount || (alignedResponse.items && alignedResponse.items.length ? alignedResponse.items.length : 0);\r\n        this.totalCount = alignedResponse.totalCount || 0;\r\n        const skippedCount = this.pageSize * (this.pageNumber - 1);\r\n        this.displayFrom = skippedCount + 1;\r\n        this.displayTo = this.displayFrom + this.loadedCount - 1;\r\n    }\r\n    /**\r\n     * Returns `true` if it's possible to move pager to the previous page (e.g. currently pager is not on the first page).\r\n     */\r\n    public get canMoveBackward(): boolean {\r\n        return this.pageCount !== 0 && this.pageNumber !== 1;\r\n    }\r\n    /**\r\n     * Returns `true` if it's possible to move pager to the next page (e.g. currently pager is not on the last page).\r\n     */\r\n    public get canMoveForward(): boolean {\r\n        return this.pageCount !== 0 && this.pageNumber < this.pageCount;\r\n    }\r\n    /**\r\n     * Sets {@link pageNumber} property to `1` if it's possible.\r\n     * @returns `true` if {@link pageNumber} value was changed.\r\n     */\r\n    public tryMoveToFirstPage(): boolean {\r\n        if (this.canMoveBackward) {\r\n            this.pageNumber = 1;\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Decrements {@link pageNumber} if it's possible.\r\n     * @returns `true` if {@link pageNumber} value was changed.\r\n     */\r\n    public tryMoveToPreviousPage(): boolean {\r\n        if (this.canMoveBackward) {\r\n            this.pageNumber -= 1;\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Increments {@link pageNumber} if it's possible.\r\n     * @returns `true` if {@link pageNumber} value was changed.\r\n     */\r\n    public tryMoveToNextPage(): boolean {\r\n        if (this.canMoveForward) {\r\n            this.pageNumber += 1;\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Sets {@link pageNumber} property to value of {@link pageCount} property if it's possible.\r\n     * @returns `true` if {@link pageNumber} value was changed.\r\n     */\r\n    public tryMoveToLastPage(): boolean {\r\n        if (this.canMoveForward) {\r\n            this.pageNumber = this.pageCount;\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * @inheritdoc\r\n     */\r\n    public reset(): void {\r\n        this.totalCount = 0;\r\n        this.loadedCount = 0;\r\n        this.pageNumber = 1;\r\n        this.pageSize = this.defaultPageSize;\r\n    }\r\n}\r\n","import { Directive, HostListener, OnInit, OnDestroy, ElementRef, Renderer2 } from '@angular/core';\r\nimport { RTPagedPager } from '../providers/paged-pager';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n    selector: 'input[rtPageNumber]'\r\n})\r\nexport class PageNumberDirective implements OnInit, OnDestroy {\r\n    pageNumberSubscription: Subscription;\r\n    public get value(): number {\r\n        return this.pager.pageNumber;\r\n    }\r\n    public set value(value: number) {\r\n        this.pager.pageNumber = value;\r\n    }\r\n    constructor(private pager: RTPagedPager, private elementRef: ElementRef, private renderer: Renderer2) {}\r\n\r\n    @HostListener('input', ['$event.target.value'])\r\n    public setPageSize(value: any): void {\r\n        // Return on empty values to give ability to clear input and enter new value\r\n        if (value === null || value === undefined || value === '') {\r\n            this.renderer.setProperty(this.elementRef.nativeElement, 'value', '');\r\n            return;\r\n        }\r\n        this.value = value;\r\n        this.synchronizeInputValue();\r\n    }\r\n    @HostListener('blur')\r\n    public synchronizeInputValue(): void {\r\n        this.renderer.setProperty(this.elementRef.nativeElement, 'value', this.value + '');\r\n    }\r\n    public ngOnInit(): void {\r\n        this.pageNumberSubscription = this.pager.pageNumber$.subscribe(() => {\r\n            this.synchronizeInputValue();\r\n        });\r\n        this.synchronizeInputValue();\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.pageNumberSubscription.unsubscribe();\r\n    }\r\n}\r\n","import { Directive, HostBinding, HostListener, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, Renderer2 } from '@angular/core';\r\nimport { RTPagedPager } from '../providers/paged-pager';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n    /* tslint:disable-next-line:directive-selector */\r\n    selector: 'input[rtPageSize]'\r\n})\r\nexport class PageSizeDirective implements OnInit, OnDestroy {\r\n    pageSizeSubscription: Subscription;\r\n    public get value(): number {\r\n        return this.pager.pageSize;\r\n    }\r\n    public set value(value: number) {\r\n        this.pager.pageSize = value;\r\n    }\r\n    constructor(public pager: RTPagedPager, private elementRef: ElementRef, private renderer: Renderer2) {}\r\n    @HostListener('input', ['$event.target.value'])\r\n    public setPageSize(value: any): void {\r\n        // Return on empty values to give ability to clear input before entering new value\r\n        if (value === null || value === undefined || value === '') {\r\n            this.renderer.setProperty(this.elementRef.nativeElement, 'value', '');\r\n            return;\r\n        }\r\n        this.value = value;\r\n        this.synchronizeInputValue();\r\n    }\r\n    @HostListener('blur')\r\n    public synchronizeInputValue(): void {\r\n        this.renderer.setProperty(this.elementRef.nativeElement, 'value', this.value + '');\r\n    }\r\n    public ngOnInit(): void {\r\n        this.pageSizeSubscription = this.pager.pageSize$.subscribe(() => {\r\n            this.synchronizeInputValue();\r\n        });\r\n        this.synchronizeInputValue();\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.pageSizeSubscription.unsubscribe();\r\n    }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, SimpleChange } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { RTList } from '../providers/list';\r\nimport { RTPagedPager } from '../providers/paged-pager';\r\n\r\n@Component({\r\n    providers: [RTPagedPager],\r\n    selector: 'rt-paged-pager',\r\n    template: '<ng-content></ng-content>'\r\n})\r\nexport class PagedPagerComponent implements OnChanges, OnInit {\r\n    @Input() public defaultPageSize: number = RTPagedPager.settings.defaultPageSize;\r\n    @Input() public maxPageSize: number = RTPagedPager.settings.maxPageSize;\r\n    @Input() public minPageSize: number = RTPagedPager.settings.minPageSize;\r\n\r\n    constructor(public pager: RTPagedPager, public listService: RTList) {\r\n        listService.pager = pager;\r\n    }\r\n    public ngOnInit(): void {\r\n        this.pager.pageSize = this.defaultPageSize * 1;\r\n    }\r\n    public ngOnChanges(changes: { defaultPageSize?: SimpleChange; maxPageSize?: SimpleChange; minPageSize?: SimpleChange }): void {\r\n        if (changes.defaultPageSize) {\r\n            this.pager.defaultPageSize = changes.defaultPageSize.currentValue * 1;\r\n        }\r\n        if (changes.maxPageSize) {\r\n            this.pager.maxPageSize = changes.maxPageSize.currentValue * 1;\r\n        }\r\n        if (changes.minPageSize) {\r\n            this.pager.minPageSize = changes.minPageSize.currentValue * 1;\r\n        }\r\n    }\r\n    public get canMoveForward(): boolean {\r\n        return this.pager.canMoveForward;\r\n    }\r\n    public get canMoveBackward(): boolean {\r\n        return this.pager.canMoveBackward;\r\n    }\r\n    public goToFirstPage(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        if (this.pager.tryMoveToFirstPage()) {\r\n            return this.listService.loadData();\r\n        }\r\n        return null;\r\n    }\r\n    public goToLastPage(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        if (this.pager.tryMoveToLastPage()) {\r\n            return this.listService.loadData();\r\n        }\r\n        return null;\r\n    }\r\n    public goToNextPage(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        if (this.pager.tryMoveToNextPage()) {\r\n            return this.listService.loadData();\r\n        }\r\n        return null;\r\n    }\r\n    public goToPreviousPage(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        if (this.pager.tryMoveToPreviousPage()) {\r\n            return this.listService.loadData();\r\n        }\r\n        return null;\r\n    }\r\n    public loadData(): Observable<any> | Promise<any> | EventEmitter<any> {\r\n        return this.listService.loadData();\r\n    }\r\n}\r\n","import { Directive, HostListener, OnInit, OnDestroy, Renderer2, ElementRef } from '@angular/core';\r\nimport { RTBufferedPager } from '../providers/buffered-pager';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n    selector: 'input[rtRowCount]'\r\n})\r\nexport class RowCountDirective implements OnInit, OnDestroy {\r\n    takeRowCountSubscription: Subscription;\r\n    public get value(): number {\r\n        return this.pager.takeRowCount;\r\n    }\r\n    public set value(value: number) {\r\n        this.pager.takeRowCount = value;\r\n    }\r\n    constructor(public pager: RTBufferedPager, private elementRef: ElementRef, private renderer: Renderer2) {}\r\n    @HostListener('input', ['$event.target.value'])\r\n    public setPageSize(value: any): void {\r\n        // Return on empty values to give ability to clear input and enter new value\r\n        if (value === null || value === undefined || value === '') {\r\n            this.renderer.setProperty(this.elementRef.nativeElement, 'value', '');\r\n            return;\r\n        }\r\n        this.value = value;\r\n        this.synchronizeInputValue();\r\n    }\r\n    @HostListener('blur')\r\n    public synchronizeInputValue(): void {\r\n        this.renderer.setProperty(this.elementRef.nativeElement, 'value', this.value + '');\r\n    }\r\n    public ngOnInit(): void {\r\n        this.takeRowCountSubscription = this.pager.takeRowCount$.subscribe(() => {\r\n            this.synchronizeInputValue();\r\n        });\r\n        this.synchronizeInputValue();\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.takeRowCountSubscription.unsubscribe();\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { ListDirective } from './list.directive';\r\nimport { StatusDoneComponent } from './status/status-done.component';\r\nimport { StatusFailedComponent } from './status/status-failed.component';\r\nimport { StatusInProgressComponent } from './status/status-in-progress.component';\r\nimport { StatusInitialComponent } from './status/status-initial.component';\r\nimport { StatusNoDataComponent } from './status/status-no-data.component';\r\nimport { StatusRequestCancelledComponent } from './status/status-request-cancelled.component';\r\n\r\nimport { RowNumberPipe } from './row-number.pipe';\r\nimport { SortDirective } from './sort.directive';\r\n\r\nimport { BufferedPagerComponent } from './paging/buffered-pager.component';\r\nimport { InfiniteDirective } from './paging/infinite.directive';\r\nimport { PageNumberDirective } from './paging/page-number.directive';\r\nimport { PageSizeDirective } from './paging/page-size.directive';\r\nimport { PagedPagerComponent } from './paging/paged-pager.component';\r\nimport { RowCountDirective } from './paging/row-count.directive';\r\nimport { LIST_PROVIDERS } from './providers/list';\r\nimport { RTStateService } from './providers/state.service';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        ListDirective,\r\n        StatusNoDataComponent,\r\n        StatusRequestCancelledComponent,\r\n        StatusDoneComponent,\r\n        StatusFailedComponent,\r\n        StatusInitialComponent,\r\n        StatusInProgressComponent,\r\n        RowNumberPipe,\r\n        SortDirective,\r\n        PagedPagerComponent,\r\n        PageSizeDirective,\r\n        PageNumberDirective,\r\n        BufferedPagerComponent,\r\n        InfiniteDirective,\r\n        RowCountDirective\r\n    ],\r\n    exports: [\r\n        ListDirective,\r\n        StatusNoDataComponent,\r\n        StatusRequestCancelledComponent,\r\n        StatusDoneComponent,\r\n        StatusFailedComponent,\r\n        StatusInitialComponent,\r\n        StatusInProgressComponent,\r\n        RowNumberPipe,\r\n        SortDirective,\r\n        PagedPagerComponent,\r\n        PageSizeDirective,\r\n        PageNumberDirective,\r\n        BufferedPagerComponent,\r\n        InfiniteDirective,\r\n        RowCountDirective\r\n    ],\r\n    imports: [CommonModule]\r\n})\r\nexport class RTListsModule {\r\n    public static registerStateService({\r\n        useClass,\r\n        useValue,\r\n        useExisting,\r\n        useFactory,\r\n        deps,\r\n        multi\r\n    }: {\r\n        useClass?: any;\r\n        useValue?: any;\r\n        useExisting?: any;\r\n        useFactory?: () => any;\r\n        deps?: object[];\r\n        multi?: boolean;\r\n    }): void {\r\n        LIST_PROVIDERS.push({\r\n            deps,\r\n            multi,\r\n            provide: RTStateService,\r\n            useClass,\r\n            useExisting,\r\n            useFactory,\r\n            useValue\r\n        });\r\n    }\r\n}\r\n\r\nexport { RTList, OperationStatusStream, RTFilterTarget } from './providers/list';\r\nexport { RTBufferedPager } from './providers/buffered-pager';\r\nexport { RTPagedPager } from './providers/paged-pager';\r\nexport { RTSortingsService } from './providers/sortings.service';\r\nexport { ListDirective } from './list.directive';\r\nexport { StatusNoDataComponent } from './status/status-no-data.component';\r\nexport { StatusRequestCancelledComponent } from './status/status-request-cancelled.component';\r\nexport { StatusDoneComponent } from './status/status-done.component';\r\nexport { StatusFailedComponent } from './status/status-failed.component';\r\nexport { StatusInitialComponent } from './status/status-initial.component';\r\nexport { StatusInProgressComponent } from './status/status-in-progress.component';\r\nexport { RowNumberPipe } from './row-number.pipe';\r\nexport { SortDirective } from './sort.directive';\r\nexport { PagedPagerComponent } from './paging/paged-pager.component';\r\nexport { PageSizeDirective } from './paging/page-size.directive';\r\nexport { PageNumberDirective } from './paging/page-number.directive';\r\nexport { BufferedPagerComponent } from './paging/buffered-pager.component';\r\nexport { InfiniteDirective } from './paging/infinite.directive';\r\nexport { RowCountDirective } from './paging/row-count.directive';\r\nexport { LIST_PROVIDERS } from './providers/list';\r\nexport { RTStateService } from './providers/state.service';\r\n","import { AfterContentInit, Directive, ElementRef } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[rtFocusOnRender]'\r\n})\r\nexport class FocusOnRenderDirective implements AfterContentInit {\r\n    constructor(private elementRef: ElementRef) {}\r\n    public ngAfterContentInit(): void {\r\n        // we need set timeout for the cases when element itself is rendered by *ngIf directive and we need to wait it's rendering\r\n        setTimeout(() => this.elementRef.nativeElement.focus(), 0);\r\n    }\r\n}\r\n","import { ElementRef, OnChanges, OnDestroy, Renderer2, SimpleChange, Directive, Optional } from '@angular/core';\r\n\r\n@Directive()\r\nexport abstract class EventsAttacherBaseDirective implements OnChanges, OnDestroy {\r\n    public eventNames: string | string[];\r\n    public unlisteners: any[] = [];\r\n\r\n    constructor(private elementRef: ElementRef, public renderer: Renderer2, @Optional() public eventListener: any) {}\r\n    public ngOnChanges(changes: { eventNames?: SimpleChange }): void {\r\n        if (changes.eventNames) {\r\n            this.removeEventListeners();\r\n            this.addEventListeners(this.adjustEvents(changes.eventNames.currentValue));\r\n        }\r\n    }\r\n    public ngOnDestroy(): void {\r\n        this.removeEventListeners();\r\n    }\r\n    private adjustEvents(eventsNames: string | string[]): string[] {\r\n        return eventsNames ? (Array.isArray(eventsNames) ? eventsNames : [eventsNames]) : [];\r\n    }\r\n    private removeEventListeners(): void {\r\n        this.unlisteners.forEach(listener => {\r\n            if (typeof listener === 'function') {\r\n                listener();\r\n            }\r\n        });\r\n        this.unlisteners = [];\r\n    }\r\n    private addEventListeners(eventNames: string[]): void {\r\n        if (!eventNames || !eventNames.length) {\r\n            return;\r\n        }\r\n        this.unlisteners = eventNames.map(eventName => this.renderer.listen(this.elementRef.nativeElement, eventName, this.eventListener));\r\n    }\r\n}\r\n","import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';\r\n\r\nimport { EventsAttacherBaseDirective } from './events-attacher.base';\r\n\r\n@Directive({\r\n    selector: '[rtPreventDefaults]'\r\n})\r\nexport class PreventDefaultsDirective extends EventsAttacherBaseDirective {\r\n    @Input('rtPreventDefaults') public eventNames: string[];\r\n    constructor(elementRef: ElementRef, renderer: Renderer2) {\r\n        super(elementRef, renderer, (evt: Event) => {\r\n            evt.preventDefault();\r\n        });\r\n    }\r\n}\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: '[rtSelectOnFocus]'\r\n})\r\nexport class SelectOnFocusDirective {\r\n    constructor(private elementRef: ElementRef) {}\r\n    @HostListener('focus')\r\n    public onFocus(): void {\r\n        this.elementRef.nativeElement.select([]);\r\n    }\r\n}\r\n","import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';\r\n\r\nimport { EventsAttacherBaseDirective } from './events-attacher.base';\r\n\r\n@Directive({\r\n    selector: '[rtStopEvents]'\r\n})\r\nexport class StopEventsDirective extends EventsAttacherBaseDirective {\r\n    @Input('rtStopEvents') public eventNames: string[];\r\n    constructor(elementRef: ElementRef, renderer: Renderer2) {\r\n        super(elementRef, renderer, (evt: Event) => {\r\n            evt.stopPropagation();\r\n        });\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { FocusOnRenderDirective } from './focus-on-render.directive';\r\nimport { PreventDefaultsDirective } from './prevent-defaults.directive';\r\nimport { SelectOnFocusDirective } from './select-on-focus.directive';\r\nimport { StopEventsDirective } from './stop-events.directive';\r\n\r\n@NgModule({\r\n    declarations: [FocusOnRenderDirective, SelectOnFocusDirective, StopEventsDirective, PreventDefaultsDirective],\r\n    exports: [FocusOnRenderDirective, SelectOnFocusDirective, StopEventsDirective, PreventDefaultsDirective],\r\n    imports: [CommonModule]\r\n})\r\nexport class RTMiscModule {}\r\nexport { FocusOnRenderDirective } from './focus-on-render.directive';\r\nexport { SelectOnFocusDirective } from './select-on-focus.directive';\r\nexport { StopEventsDirective } from './stop-events.directive';\r\nexport { PreventDefaultsDirective } from './prevent-defaults.directive';\r\n","import { SelectionEventsEmitter, SelectionElementEventsEmitter } from './selection-events-emitter';\r\nimport { Injectable } from '@angular/core';\r\nexport interface SelectionTuple {\r\n  index: number;\r\n  item: any;\r\n}\r\n/**\r\n * Represents possible operations with selection model.\r\n */\r\n@Injectable()\r\nexport class RTSelectionService {\r\n  public eventEmitters: SelectionElementEventsEmitter[] = new Array<SelectionElementEventsEmitter>();\r\n  public childSelectionServices: RTSelectionService[] = new Array<RTSelectionService>();\r\n  public areaEventsEmitter: SelectionEventsEmitter;\r\n  /**\r\n   * Index of last selected/deselected element in {@link items} collection.\r\n   */\r\n\r\n  public lastProcessedIndex: number;\r\n  /**\r\n   * Optional function which can be used to compare {@link items} elements.\r\n   *\r\n   * This function can be used by {@link checkSelection}.\r\n   *\r\n   * Also it's reasonable to use this function for {@link getItemIndex}.\r\n   * @param index index of element in {@link items} collection.\r\n   * @param actual element from {@link items} collection.\r\n   */\r\n  public trackByFn: (index: number, item: any) => any;\r\n  /**\r\n   * Collection of elements for selection.\r\n   */\r\n  public items: any[] = [];\r\n\r\n  /**\r\n   * Collection of {@link SelectionTuple} elements which represents currently selected items in {@link items} collection.\r\n   */\r\n  private selectionsList: SelectionTuple[] = new Array<SelectionTuple>();\r\n\r\n  constructor() {\r\n    this.trackByFn = this.trackByIdentity;\r\n  }\r\n  /**\r\n   * Performs application-defined logic for service destroy.\r\n   */\r\n  public destroy(): void {\r\n    this.areaEventsEmitter = null;\r\n    this.eventEmitters.length = 0;\r\n    this.selectionsList.length = 0;\r\n    this.lastProcessedIndex = null;\r\n    this.items = null;\r\n  }\r\n  /**\r\n   * Performs check that every selected element is actually selected.\r\n   *\r\n   */\r\n  public checkSelection(): void {\r\n    if (this.items !== null && typeof this.items !== 'undefined') {\r\n      for (let i = this.selectionsList.length - 1; i >= 0; i--) {\r\n        const tuple = this.selectionsList[i];\r\n        const trackFn = this.trackByFn || this.trackByIdentity;\r\n        if (this.isIndexAcceptable(tuple.index) && trackFn(tuple.index, this.items[tuple.index]) === trackFn(tuple.index, tuple.item)) {\r\n          tuple.item = this.items[tuple.index];\r\n          this.selectItem(tuple, true);\r\n        } else {\r\n          this.deselectItem(tuple);\r\n        }\r\n      }\r\n    } else {\r\n      this.deselectAll();\r\n    }\r\n  }\r\n  /**\r\n   * Checks that applied index is valid number and it's value is inside {@link items} boundaries.\r\n   * @param index index to check.\r\n   * @returns `true` if index is valid.\r\n   */\r\n  public isIndexAcceptable(index: number): boolean {\r\n    return index !== null && typeof index !== 'undefined' && index >= 0 && this.items && this.items.length > index;\r\n  }\r\n  /**\r\n   * Selects range of elements in {@link items} collection.\r\n   * @param fromIndex index of element from which selection range begins.\r\n   * @param toIndex index of element on which selection range ends.\r\n   */\r\n  public selectRange(fromIndex: number, toIndex: number): void {\r\n    if (toIndex < 0 || this.items.length <= toIndex || fromIndex < 0 || this.items.length <= fromIndex) {\r\n      return;\r\n    }\r\n    const startIndex = Math.min(fromIndex, toIndex);\r\n    const endIndex = Math.max(fromIndex, toIndex);\r\n    if (this.isRangeSelected(startIndex, endIndex)) {\r\n      return;\r\n    }\r\n    this.deselectAll();\r\n    const tempData = new Array<SelectionTuple>();\r\n    for (let i = startIndex; i <= endIndex; i++) {\r\n      const tuple = this.getSelectionTuple(i);\r\n      tempData.push(tuple);\r\n      this.processSelection(tuple, true);\r\n    }\r\n    this.selectionsList.splice(0, this.selectionsList.length, ...tempData);\r\n    this.lastProcessedIndex = endIndex;\r\n  }\r\n  /**\r\n   * Checks that at least one element selected in {@link items} collection.\r\n   * @returns `true` if anything is selected.\r\n   */\r\n  public hasSelections(): boolean {\r\n    return this.selectionsList.length !== 0;\r\n  }\r\n  /**\r\n   * Checks that all elements inside specified range are selected in {@link items} collection.\r\n   * @param fromIndex index of element from which check must be performed.\r\n   * @param toIndex index of element to which check must be performed.\r\n   * @returns `true` if all elements inside specified range are selected.\r\n   */\r\n  public isRangeSelected(from: number, to: number): boolean {\r\n    // nothing selected\r\n    if (this.selectionsList.length === 0) {\r\n      return false;\r\n    }\r\n    // entire list selected\r\n    if (from === 0 && to === this.items.length - 1 && this.selectionsList.length === this.items.length) {\r\n      return true;\r\n    }\r\n    const orderedIndexes = this.selectionsList.map((tuple: SelectionTuple) => tuple.index).sort();\r\n    return 1 + to - from === orderedIndexes.length && orderedIndexes[0] === from && orderedIndexes[orderedIndexes.length - 1] === to;\r\n  }\r\n  /**\r\n   * Checks that element at specified index is selected.\r\n   * @param index index of element in {@link items} collection to check.\r\n   * @returns `true` if element is selected.\r\n   */\r\n  public isIndexSelected(index: number): boolean {\r\n    if (this.selectionsList.length > 0 && this.isIndexAcceptable(index)) {\r\n      return this.selectionsList.findIndex((st: SelectionTuple) => st.index === index) !== -1;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Returns index of specified element in {@link items} collection.\r\n   * @param item element to find.\r\n   * @returns index of specified element in {@link items} collection. -1 if element not found.\r\n   * @see {@link trackByFn}\r\n   */\r\n  public getItemIndex(item: any): number {\r\n    return this.items.findIndex((value: any) => value === item);\r\n  }\r\n  /**\r\n   * Returns index of first selected element from {@link items} collection.\r\n   * @returns index of first selected element. -1 if nothing is selected.\r\n   */\r\n  public getMinSelectedIndex(): number {\r\n    let minIndex = -1;\r\n    this.selectionsList.forEach((item: SelectionTuple) => {\r\n      minIndex = minIndex === -1 || item.index < minIndex ? item.index : minIndex;\r\n    });\r\n    return minIndex;\r\n  }\r\n  /**\r\n   * Returns index of last selected element from {@link items} collection.\r\n   * @returns index of last selected element. -1 if nothing is selected.\r\n   */\r\n  public getMaxSelectedIndex(): number {\r\n    let maxIndex = -1;\r\n    this.selectionsList.forEach((item: SelectionTuple) => {\r\n      maxIndex = maxIndex === -1 || item.index > maxIndex ? item.index : maxIndex;\r\n    });\r\n    return maxIndex;\r\n  }\r\n  /**\r\n   * Selects first element in {@link items} collection.\r\n   */\r\n  public selectFirst(): void {\r\n    if (this.items.length > 0) {\r\n      this.selectItem(this.getSelectionTuple(0));\r\n    }\r\n  }\r\n  /**\r\n   * Selects last element in {@link items} collection.\r\n   */\r\n  public selectLast(): void {\r\n    if (this.items.length > 0) {\r\n      this.selectItem(this.getSelectionTuple(this.items.length - 1));\r\n    }\r\n  }\r\n  /**\r\n   * Selects element at specified index in {@link items} collection.\r\n   * @param index index of element in {@link items} collection.\r\n   * @param savePrevious `true` if previously selected elements must stay selected after current selection.\r\n   */\r\n  public selectIndex(index: number, savePrevious = false): void {\r\n    if (this.isIndexAcceptable(index)) {\r\n      this.selectItem(this.getSelectionTuple(index), savePrevious);\r\n    }\r\n  }\r\n  /**\r\n   * Deselects element at specified index in {@link items} collection.\r\n   * @param index index of element in {@link items} collection.\r\n   */\r\n  public deselectIndex(index: number): void {\r\n    if (this.isIndexAcceptable(index)) {\r\n      this.deselectItem(this.getSelectionTuple(index));\r\n    }\r\n  }\r\n  /**\r\n   * Toggles selection of element at the specified index.\r\n   * @param index index of element in {@link items} collection.\r\n   * @param savePrevious `true` if previously selected elements must stay selected after current selection.\r\n   */\r\n  public toggleSelection(index: number, savePrevious = false): void {\r\n    if (!this.isIndexAcceptable(index)) {\r\n      return;\r\n    }\r\n    const tuple = this.getSelectionTuple(index);\r\n    if (this.isIndexSelected(index) && (this.selectionsList.length === 1 || (this.selectionsList.length > 1 && savePrevious))) {\r\n      this.deselectItem(tuple);\r\n      return;\r\n    }\r\n    this.selectItem(tuple, savePrevious);\r\n  }\r\n  /**\r\n   * Returns all elements from {@link items} collection which are marked as selected.\r\n   * @returns collection of selected elements.\r\n   */\r\n  public getSelectedElements(): any[] {\r\n    return this.selectionsList.map((selectionTuple: SelectionTuple) => selectionTuple.item);\r\n  }\r\n  /**\r\n   * Returns indexes of all elements from {@link items} collection which are marked as selected.\r\n   * @returns collection of selected elements indexes in {@link items} collection.\r\n   */\r\n  public getSelectedIndexes(): number[] {\r\n    return this.selectionsList.map((selectionTuple: SelectionTuple) => selectionTuple.index);\r\n  }\r\n  /**\r\n   * Performs final processing of selection/deselection of element.\r\n   */\r\n  public processSelection(tuple: SelectionTuple, selected: boolean): void {\r\n    if (Object.prototype.hasOwnProperty.call(tuple.item, 'selected')) {\r\n      tuple.item.selected = selected;\r\n    }\r\n    const initialSelectState = this.eventEmitters[tuple.index] ? this.eventEmitters[tuple.index].selected || null : null;\r\n    if (initialSelectState === null || initialSelectState !== selected) {\r\n      if (this.eventEmitters.length > tuple.index && this.eventEmitters[tuple.index]) {\r\n        this.emitEvents(this.eventEmitters[tuple.index], selected, tuple);\r\n        this.eventEmitters[tuple.index].postProcessSelection(selected);\r\n      }\r\n      if (this.areaEventsEmitter) {\r\n        this.emitEvents(this.areaEventsEmitter, selected, tuple);\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * Default tracking function that will be used if nothing was specified for {@link trackByFn}.\r\n   * Implements comparison by reference equality of objects.\r\n   */\r\n  private trackByIdentity: (index: number, item: any) => any = (index: number, item: any) => item;\r\n\r\n  private deselectItem(selectionTuple: SelectionTuple): void {\r\n    const index = this.selectionsList.findIndex((selectedItem: SelectionTuple) => selectedItem.item === selectionTuple.item);\r\n    if (index !== -1) {\r\n      this.selectionsList.splice(index, 1);\r\n    }\r\n    this.processSelection(selectionTuple, false);\r\n    this.lastProcessedIndex = selectionTuple.index;\r\n  }\r\n  private selectItem(selectionTuple: SelectionTuple, savePrevious = false): void {\r\n    if (savePrevious) {\r\n      const index = this.selectionsList.findIndex((selectedItem: SelectionTuple) => selectedItem.item === selectionTuple.item);\r\n      if (index !== -1) {\r\n        this.selectionsList.splice(index, 1);\r\n      }\r\n      this.selectionsList.push(selectionTuple);\r\n      this.processSelection(selectionTuple, true);\r\n    } else {\r\n      const list = this.selectionsList.splice(0, this.selectionsList.length);\r\n      list.forEach((selectedItem: SelectionTuple) => {\r\n        this.processSelection(selectedItem, false);\r\n      });\r\n      this.selectionsList.push(selectionTuple);\r\n      this.processSelection(selectionTuple, true);\r\n    }\r\n    this.lastProcessedIndex = selectionTuple.index;\r\n  }\r\n  private getSelectionTuple(index: number): SelectionTuple {\r\n    return {\r\n      index,\r\n      item: this.items[index]\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Selects all elements in {@link items} collection.\r\n   */\r\n  public selectAll(recursive = true): void {\r\n    this.selectRange(0, this.items.length - 1);\r\n    // run this directly after render to give child selectionAreas ability to render\r\n    setTimeout(() => {\r\n      if (recursive && this.childSelectionServices) {\r\n        this.childSelectionServices.forEach(service => {\r\n          service.selectAll(recursive);\r\n        });\r\n      }\r\n    }, 0);\r\n  }\r\n  /**\r\n   * Deselects all elements in {@link items} collection.\r\n   */\r\n  public deselectAll(recursive = true): void {\r\n    if (recursive && this.childSelectionServices) {\r\n      this.childSelectionServices.forEach(service => {\r\n        service.deselectAll(recursive);\r\n      });\r\n    }\r\n    const list = this.selectionsList.splice(0, this.selectionsList.length);\r\n    for (const item of list) {\r\n      this.processSelection(item, false);\r\n    }\r\n    this.lastProcessedIndex = null;\r\n  }\r\n  public emitEvents(emitter: SelectionEventsEmitter, selected: boolean, tuple: SelectionTuple): void {\r\n    if (selected) {\r\n      emitter.itemSelected.emit({ index: tuple.index, item: tuple.item });\r\n    } else {\r\n      emitter.itemDeselected.emit({ index: tuple.index, item: tuple.item });\r\n    }\r\n    emitter.selectionChanged.emit({ index: tuple.index, item: tuple.item });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { RTSelectionService } from './selection.service';\r\n/**\r\n * Used by {@link SelectionEventsHelper} to determine which key was pressed on keyboard.\r\n */\r\nexport enum KeyCodes {\r\n    Tab = 9,\r\n    Enter = 13,\r\n    Shift = 16,\r\n    Ctrl = 17,\r\n    Alt = 18,\r\n    Esc = 27,\r\n    ArrowLeft = 37,\r\n    ArrowUp = 38,\r\n    ArrowRight = 39,\r\n    ArrowDown = 40,\r\n    A = 65\r\n}\r\n\r\n/**\r\n * Used by {@link SelectionEventsHelper} to determine which mouse button is pressed.\r\n */\r\nexport enum MouseButtons {\r\n    None = 0,\r\n    Left = 1,\r\n    Middle = 2,\r\n    Right = 3\r\n}\r\n/**\r\n * Helper class that can be used by application-defined UI components for handling keyboard and mouse interaction with component.\r\n *\r\n * Implements selection model that is similar to Excel or Google Sheets. Concrete handled patterns you can see in concrete methods documentation.\r\n *\r\n * This implementation doesn't use any browser specific objects such as events and doesn't use any browser API.\r\n */\r\n@Injectable()\r\nexport class RTSelectionEventsHelper {\r\n    public preventEventsDefaults = true;\r\n    public stopEventsPropagation = true;\r\n    /**\r\n     * `true` for shifting to next/previous item in list of items by `Left Arrow`/`Right Arrow` keys instead of `Arrow Up`/`Arrow Down` keys.\r\n     */\r\n    public horizontal: boolean;\r\n    /**\r\n     * `true` to make possible to pick several items in list of items (by clicking range of items with pressed `Shift` key, for example).\r\n     */\r\n    public multiple: boolean;\r\n    /**\r\n     * If `true`, then next item selection doesn't clear selection of previously selected items. The only way to clean selection is second click on previously selected element.\r\n     * This can be used to implement accordion-like behavior in application-defined UI component.\r\n     */\r\n    public toggleOnly: boolean;\r\n    /**\r\n     * Instance of {@link RTSelectionService} to perform actual selection.\r\n     */\r\n    public selectionService: RTSelectionService;\r\n\r\n    /**\r\n     * @param selectionConfig Used for declarative interaction with application-defined UI component and access to it's selection settings\r\n     * as well as {@link RTSelectionService} implementation, that was configured on it.\r\n     */\r\n    constructor(selectionService: RTSelectionService) {\r\n        this.selectionService = selectionService;\r\n        this.multiple = true;\r\n    }\r\n    /**\r\n     * Common handler for keyboard events. Depending on specified parameters calls {@link onNextKey}, {@link onPreviousKey}, {@link trySelectPreviousItem}, {@link trySelectNextItem} or {@link trySelectAll} handler.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @param keyCode - specifies code of key that was pressed. This method can handle next keys: {@link KeyCodes.ArrowUp}, {@link KeyCodes.ArrowLeft}, {@link KeyCodes.ArrowDown}, {@link KeyCodes.ArrowRight},\r\n     * {@link KeyCodes.Tab} and {@link KeyCodes.A}.\r\n     * @returns `true` if any of executed commands was applied.\r\n     */\r\n    // tslint:disable-next-line:cyclomatic-complexity\r\n    public keyboardHandler(ctrlKeyPressed: boolean, shiftKeyPressed: boolean, keyCode: KeyCodes): boolean {\r\n        switch (keyCode) {\r\n            case KeyCodes.ArrowUp:\r\n                return !this.horizontal && this.onPreviousKey(ctrlKeyPressed, shiftKeyPressed);\r\n            case KeyCodes.ArrowLeft:\r\n                return this.horizontal && this.onPreviousKey(ctrlKeyPressed, shiftKeyPressed);\r\n            case KeyCodes.ArrowDown:\r\n                return !this.horizontal && this.onNextKey(ctrlKeyPressed, shiftKeyPressed);\r\n            case KeyCodes.ArrowRight:\r\n                return this.horizontal && this.onNextKey(ctrlKeyPressed, shiftKeyPressed);\r\n            case KeyCodes.Tab:\r\n                return ctrlKeyPressed ? false : shiftKeyPressed ? this.trySelectPreviousItem(false) : this.trySelectNextItem(false);\r\n            case KeyCodes.A:\r\n                return this.trySelectAll(ctrlKeyPressed, shiftKeyPressed);\r\n            default:\r\n                return false;\r\n        }\r\n    }\r\n    /**\r\n     * Common handler for mouse events.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @param mouseButton specifies which mouse button was pressed.\r\n     * @param itemIndex index of clicked element in {@link RTSelectionService.items} collection.\r\n     * @returns `true` if any of executed commands was applied.\r\n     */\r\n    public mouseHandler(ctrlKeyPressed: boolean, shiftKeyPressed: boolean, mouseButton: MouseButtons, itemIndex: number): boolean {\r\n        const isItemSelected = this.selectionService.isIndexSelected(itemIndex);\r\n        if (isItemSelected !== false && mouseButton !== MouseButtons.Left) {\r\n            return false;\r\n        }\r\n        if (shiftKeyPressed && this.multiple) {\r\n            const minIndex = this.selectionService.getMinSelectedIndex();\r\n            this.selectionService.selectRange(minIndex === -1 ? itemIndex : minIndex, itemIndex);\r\n        } else {\r\n            const multiple = (ctrlKeyPressed || this.toggleOnly) && this.multiple;\r\n            this.selectionService.toggleSelection(itemIndex, multiple);\r\n        }\r\n        return true;\r\n    }\r\n    /**\r\n     * Tries to select all items if `Ctrl+A` combination was pressed.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed (with pressed `Shift` this command would not be applied).\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectAll(ctrlPressed: boolean, shiftPressed: boolean): boolean {\r\n        if (ctrlPressed && !shiftPressed && this.multiple) {\r\n            this.selectionService.selectAll();\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select previous item when `Arrow Up` was pressed (`Arrow Left` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     *\r\n     * If `Shift` was pressed and {@link SelectionAreaConfig.multiple} is 'true' then elements selected before stays selected.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectPreviousItem(shiftKeyPressed: boolean): boolean {\r\n        if (this.selectionService.lastProcessedIndex > 0) {\r\n            this.selectionService.selectIndex(this.selectionService.lastProcessedIndex - 1, shiftKeyPressed && this.multiple);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select next item when `Arrow Down` was pressed (`Right Arrow` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     *\r\n     * If `Shift` was pressed and {@link SelectionAreaConfig.multiple} is 'true' then elements selected before stays selected.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectNextItem(shiftKeyPressed: boolean): boolean {\r\n        if (this.selectionService.lastProcessedIndex < this.selectionService.items.length - 1) {\r\n            this.selectionService.selectIndex(this.selectionService.lastProcessedIndex + 1, shiftKeyPressed && this.multiple);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to deselect last selected element when `Shift+Arrow Up` combination pressed (`Shift+Arrow Left` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public tryDeselectLastItemInRange(shiftKeyPressed: boolean): boolean {\r\n        if (this.selectionService.lastProcessedIndex > 0 && shiftKeyPressed) {\r\n            if (this.selectionService.isIndexSelected(this.selectionService.lastProcessedIndex - 1)) {\r\n                this.selectionService.deselectIndex(this.selectionService.lastProcessedIndex);\r\n                this.selectionService.lastProcessedIndex = this.selectionService.lastProcessedIndex - 1;\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to deselect last selected element when `Shift+Arrow Down` combination pressed (`Shift+Arrow Right` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public tryDeselectLastItemInReversedRange(shiftKeyPressed: boolean): boolean {\r\n        if (this.selectionService.lastProcessedIndex < this.selectionService.items.length && shiftKeyPressed) {\r\n            if (this.selectionService.isIndexSelected(this.selectionService.lastProcessedIndex + 1)) {\r\n                this.selectionService.deselectIndex(this.selectionService.lastProcessedIndex);\r\n                this.selectionService.lastProcessedIndex = this.selectionService.lastProcessedIndex + 1;\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select element that is previous to the last processed element and last processed element was deselected.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public tryBuildRangeWithPreviousItemWhenLastItemWasDeselected(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        if (!ctrlKeyPressed && shiftKeyPressed && false === this.selectionService.isIndexSelected(this.selectionService.lastProcessedIndex)) {\r\n            this.selectionService.selectRange(this.selectionService.lastProcessedIndex, this.selectionService.lastProcessedIndex - 1);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select element that is next to the last processed element and last processed element was deselected.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public tryBuildRangeWithNextItemWhenLastItemWasDeselected(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        if (!ctrlKeyPressed && shiftKeyPressed && false === this.selectionService.isIndexSelected(this.selectionService.lastProcessedIndex)) {\r\n            this.selectionService.selectRange(this.selectionService.lastProcessedIndex, this.selectionService.lastProcessedIndex + 1);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Selects first element in {@link RTSelectionService.items} if nothing was selected before.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public tryInitialSelectionOfFirstItem(): boolean {\r\n        if (this.selectionService.lastProcessedIndex === null) {\r\n            this.selectionService.selectFirst();\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select all elements starting from last selected element up to first element in {@link RTSelectionService.items} when `Ctrl+Shift+Arrow Up` combination was pressed\r\n     * (`Ctrl+Shift+Arrow Left` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectAllItemsUpToFirst(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        if (this.selectionService.lastProcessedIndex !== null && ctrlKeyPressed && shiftKeyPressed && this.multiple) {\r\n            this.selectionService.selectRange(this.selectionService.lastProcessedIndex, 0);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select all elements starting from last selected element up to last element in {@link RTSelectionService.items} when `Ctrl+Shift+Arrow Down` combination was pressed\r\n     * (`Ctrl+Shift+Arrow Right` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectAllItemsUpToLast(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        if (this.selectionService.lastProcessedIndex !== null && ctrlKeyPressed && shiftKeyPressed && this.multiple) {\r\n            this.selectionService.selectRange(this.selectionService.lastProcessedIndex, this.selectionService.items.length - 1);\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select first element in {@link RTSelectionService.items} when `Ctrl+Arrow Up` combination was pressed (`Ctrl+Arrow Left` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed (with pressed `Shift` this command would not be applied).\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectFirstItem(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        if (ctrlKeyPressed && !shiftKeyPressed) {\r\n            this.selectionService.selectFirst();\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Tries to select last element in {@link RTSelectionService.items} when `Ctrl+Arrow Down` combination was pressed (`Ctrl+Arrow Right` if {@link SelectionAreaConfig.horizontal} is `true`).\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed (with pressed `Shift` this command would not be applied).\r\n     * @returns `true` if command was applied.\r\n     */\r\n    public trySelectLastItem(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        if (ctrlKeyPressed && !shiftKeyPressed) {\r\n            this.selectionService.selectLast();\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Common handler for `Arrow Up` key (`Arrow Left` if {@link SelectionAreaConfig.horizontal} is `true`). Calls applicable handlers one by one until any returns `true`.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if any of executed commands was applied.\r\n     */\r\n    public onPreviousKey(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        return (\r\n            this.tryInitialSelectionOfFirstItem() ||\r\n            this.trySelectFirstItem(ctrlKeyPressed, shiftKeyPressed) ||\r\n            this.trySelectAllItemsUpToFirst(ctrlKeyPressed, shiftKeyPressed) ||\r\n            this.tryBuildRangeWithPreviousItemWhenLastItemWasDeselected(ctrlKeyPressed, shiftKeyPressed) ||\r\n            this.tryDeselectLastItemInRange(shiftKeyPressed) ||\r\n            this.trySelectPreviousItem(shiftKeyPressed)\r\n        );\r\n    }\r\n    /**\r\n     * Common handler for `Arrow Down` key (`Arrow Right` if {@link SelectionAreaConfig.horizontal} is `true`). Calls applicable handlers one by one until any returns `true`.\r\n     * @param ctrlKeyPressed - `true` if `Ctrl` key was pressed.\r\n     * @param shiftKeyPressed - `true` if `Shift` key was pressed.\r\n     * @returns `true` if any of executed commands was applied.\r\n     */\r\n    public onNextKey(ctrlKeyPressed: boolean, shiftKeyPressed: boolean): boolean {\r\n        return (\r\n            this.tryInitialSelectionOfFirstItem() ||\r\n            this.trySelectLastItem(ctrlKeyPressed, shiftKeyPressed) ||\r\n            this.trySelectAllItemsUpToLast(ctrlKeyPressed, shiftKeyPressed) ||\r\n            this.tryBuildRangeWithNextItemWhenLastItemWasDeselected(ctrlKeyPressed, shiftKeyPressed) ||\r\n            this.tryDeselectLastItemInReversedRange(shiftKeyPressed) ||\r\n            this.trySelectNextItem(shiftKeyPressed)\r\n        );\r\n    }\r\n}\r\n","import {\r\n    AfterContentInit,\r\n    AfterViewInit,\r\n    Directive,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostBinding,\r\n    HostListener,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    Optional,\r\n    Output,\r\n    Self,\r\n    SimpleChange,\r\n    SkipSelf\r\n} from '@angular/core';\r\nimport { animationFrameScheduler, EMPTY, scheduled, Subject, Subscription } from 'rxjs';\r\nimport { debounce } from 'rxjs/operators';\r\n\r\nimport { SelectionEventsEmitter, RTSelectionEvent } from './providers/selection-events-emitter';\r\nimport { RTSelectionEventsHelper } from './providers/selection-events-helper';\r\nimport { RTSelectionService } from './providers/selection.service';\r\nimport { SelectableDirective } from './selectable.directive';\r\nimport { SelectionCheckboxForDirective } from './selection-checkbox-for.directive';\r\n\r\ninterface SelectableElement {\r\n    selectable: SelectableDirective | SelectionCheckboxForDirective;\r\n    element: HTMLElement;\r\n}\r\n\r\n@Directive({\r\n    exportAs: 'rtSelectionArea',\r\n    providers: [RTSelectionService, RTSelectionEventsHelper],\r\n    selector: '[rtSelectionArea]'\r\n})\r\nexport class SelectionAreaDirective implements SelectionEventsEmitter, AfterContentInit, OnChanges, OnInit, AfterViewInit, OnDestroy {\r\n    private selectableItems: SelectableElement[] = [];\r\n    private childSelectionCheckboxes: SelectableElement[] = [];\r\n    private childSelectionAreas = new Set<SelectionAreaDirective>();\r\n    private selectablesChangedSubscription: Subscription;\r\n    private selectablesChangedSubject = new Subject<(SelectableDirective | SelectionCheckboxForDirective)[]>();\r\n    private childSelectionAreasChangedSubscription: Subscription;\r\n    private childSelectionAreasChangedSubject = new Subject<Set<SelectionAreaDirective>>();\r\n\r\n    @HostBinding('tabIndex')\r\n    public tabIndex = 0;\r\n\r\n    @Input()\r\n    public set preventEventsDefaults(value: boolean) {\r\n        this.selectionEventsHelper.preventEventsDefaults = value;\r\n    }\r\n\r\n    @Input()\r\n    public set stopEventsPropagation(value: boolean) {\r\n        this.selectionEventsHelper.stopEventsPropagation = value;\r\n    }\r\n\r\n    @Input()\r\n    public set horizontal(value: boolean) {\r\n        this.selectionEventsHelper.horizontal = value;\r\n    }\r\n\r\n    @Input()\r\n    public set multiple(value: boolean) {\r\n        this.selectionEventsHelper.multiple = value;\r\n    }\r\n\r\n    @Input()\r\n    public set toggleOnly(value: boolean) {\r\n        this.selectionEventsHelper.toggleOnly = value;\r\n    }\r\n\r\n    @Input()\r\n    public autoSelectFirst = false;\r\n\r\n    @Input()\r\n    public set trackBy(value: (index: number, item: any) => any) {\r\n        if (typeof value !== 'function') {\r\n            throw new Error('trackBy parameter value must be a function');\r\n        }\r\n        this.selectionService.trackByFn = value;\r\n    }\r\n\r\n    @Output()\r\n    public readonly itemSelected: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n\r\n    @Output()\r\n    public readonly itemDeselected: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n\r\n    @Output()\r\n    public readonly selectionChanged: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n\r\n    constructor(\r\n        @SkipSelf() @Optional() private parentSelectionArea: SelectionAreaDirective,\r\n        @Self() public selectionService: RTSelectionService,\r\n        @Self() public selectionEventsHelper: RTSelectionEventsHelper) {\r\n        this.selectionService.areaEventsEmitter = this;\r\n        this.selectionEventsHelper = selectionEventsHelper;\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.selectablesChangedSubscription = this.selectablesChangedSubject.pipe(\r\n            debounce(() => scheduled(EMPTY, animationFrameScheduler))\r\n        ).subscribe(items => this.buildSelectionSource(items));\r\n\r\n        this.childSelectionAreasChangedSubscription = this.childSelectionAreasChangedSubject.pipe(\r\n            debounce(() => scheduled(EMPTY, animationFrameScheduler))\r\n        ).subscribe(items => this.buildSelectionServicesList(items));\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.parentSelectionArea?.registerChildSelectionArea(this);\r\n    }\r\n\r\n    public ngOnDestroy(): void {\r\n        this.selectionService.deselectAll();\r\n        this.selectionService.destroy();\r\n        this.parentSelectionArea?.unregisterChildSelectionArea(this);\r\n        this.selectablesChangedSubscription?.unsubscribe();\r\n        this.childSelectionAreasChangedSubscription?.unsubscribe();\r\n    }\r\n    public ngOnChanges(changes: { multiple?: SimpleChange; autoSelectFirst?: SimpleChange }): void {\r\n        if (false === this.selectionService.hasSelections() && changes.autoSelectFirst && changes.autoSelectFirst.currentValue === true) {\r\n            this.selectionService.selectIndex(0, false);\r\n        }\r\n        if (changes.multiple && changes.multiple.currentValue === false) {\r\n            const selectedIndexes = this.selectionService.getSelectedIndexes();\r\n            if (selectedIndexes.length > 1) {\r\n                selectedIndexes.splice(0, 1);\r\n                selectedIndexes.forEach(index => {\r\n                    this.selectionService.deselectIndex(index);\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    @HostListener('keydown', ['$event.ctrlKey', '$event.shiftKey', '$event.keyCode', '$event.preventDefault', '$event.stopPropagation', '$event'])\r\n    public keyDownHandler(\r\n        ctrlKeyPressed: boolean,\r\n        shiftKeyPressed: boolean,\r\n        keyCode: number,\r\n        preventDefaultFn: () => void,\r\n        stopPropagationFn: () => void,\r\n        executionContext: any\r\n    ): void {\r\n        if (this.selectionEventsHelper.keyboardHandler(ctrlKeyPressed, shiftKeyPressed, keyCode)) {\r\n            if (this.selectionEventsHelper.preventEventsDefaults && preventDefaultFn) {\r\n                preventDefaultFn.call(executionContext);\r\n            }\r\n            if (this.selectionEventsHelper.stopEventsPropagation && stopPropagationFn) {\r\n                stopPropagationFn.call(executionContext);\r\n            }\r\n        }\r\n    }\r\n    //#region callbacks for DOM descendants\r\n    public registerSelectable(selectable: SelectableDirective, elementRef: ElementRef): void {\r\n        const element = elementRef.nativeElement as HTMLElement;\r\n        let i = 0;\r\n        for (; i < this.selectableItems.length; i++) {\r\n            if (this.selectableItems[i].element.compareDocumentPosition(element) & document.DOCUMENT_POSITION_PRECEDING) {\r\n                this.selectableItems.splice(i, 0, { element, selectable });\r\n                break;\r\n            }\r\n        }\r\n        if (i === this.selectableItems.length) {\r\n            this.selectableItems.push({element, selectable});\r\n        }\r\n        this.selectablesChangedSubject.next(this.selectableItems.map(x => x.selectable));\r\n    }\r\n    public unregisterSelectable(selectable: SelectableDirective): void {\r\n        const idx = this.selectableItems.findIndex(x => x.selectable === selectable);\r\n        if (idx >= 0) {\r\n            this.selectableItems.splice(idx, 1);\r\n        }\r\n        this.selectablesChangedSubject.next(this.selectableItems.map(x => x.selectable));\r\n    }\r\n\r\n    public registerSelectionCheckbox(checkbox: SelectionCheckboxForDirective, elementRef: ElementRef): void {\r\n        const element = elementRef.nativeElement as HTMLElement;\r\n        let i = 0;\r\n        for (; i < this.childSelectionCheckboxes.length; i++) {\r\n            if (this.childSelectionCheckboxes[i].element.compareDocumentPosition(element) & document.DOCUMENT_POSITION_PRECEDING) {\r\n                this.childSelectionCheckboxes.splice(i, 0, { element, selectable: checkbox });\r\n                break;\r\n            }\r\n        }\r\n        if (i === this.childSelectionCheckboxes.length) {\r\n            this.childSelectionCheckboxes.push({element, selectable: checkbox});\r\n        }\r\n        this.selectablesChangedSubject.next(this.childSelectionCheckboxes.map(x => x.selectable));\r\n    }\r\n    public unregisterSelectionCheckbox(checkbox: SelectionCheckboxForDirective): void {\r\n        const idx = this.childSelectionCheckboxes.findIndex(x => x.selectable === checkbox);\r\n        if (idx >= 0) {\r\n            this.childSelectionCheckboxes.splice(idx, 1);\r\n        }\r\n        this.selectablesChangedSubject.next(this.childSelectionCheckboxes.map(x => x.selectable));\r\n    }\r\n\r\n    public registerChildSelectionArea(selectionArea: SelectionAreaDirective): void {\r\n        if (!this.childSelectionAreas.has(selectionArea)) {\r\n            this.childSelectionAreas.add(selectionArea);\r\n            this.childSelectionAreasChangedSubject.next(this.childSelectionAreas);\r\n        }\r\n    }\r\n    public unregisterChildSelectionArea(selectionArea: SelectionAreaDirective): void {\r\n        if (this.childSelectionAreas.has(selectionArea)) {\r\n            this.childSelectionAreas.delete(selectionArea);\r\n            this.childSelectionAreasChangedSubject.next(this.childSelectionAreas);\r\n        }\r\n    }\r\n    //#endregion\r\n\r\n    public ngAfterContentInit(): void {\r\n        if (this.selectableItems.length > 0) {\r\n            this.buildSelectionSource(this.selectableItems.map(item => item.selectable));\r\n        }\r\n        if (this.childSelectionCheckboxes.length > 0) {\r\n            this.buildSelectionSource(this.childSelectionCheckboxes.map(item => item.selectable));\r\n        }\r\n        this.buildSelectionServicesList(this.childSelectionAreas);\r\n    }\r\n\r\n    private buildSelectionSource(items: (SelectableDirective | SelectionCheckboxForDirective)[]): void {\r\n        let index = 0;\r\n        this.selectionService.eventEmitters = items.map(item => {\r\n            if (item.index !== null && item.index !== index) {\r\n                this.selectionService.deselectIndex(item.index);\r\n            }\r\n            item.index = index++;\r\n            return item;\r\n        });\r\n\r\n        this.selectionService.items = items.map(item => item.item);\r\n        if (this.selectionService.items.length > 0) {\r\n            setTimeout(() => {\r\n                // since we've modify collection on first render,\r\n                // to prevent error 'Expression has changed after it was checked' we've do selection after render\r\n                if (this.selectionService.items.length > 0) {\r\n                    this.selectionService.checkSelection();\r\n                    // repeats first element selection since checking can deselect all elements\r\n                    if (false === this.selectionService.hasSelections() && this.autoSelectFirst) {\r\n                        this.selectionService.selectIndex(0, false);\r\n                    }\r\n                }\r\n            }, 0);\r\n        }\r\n    }\r\n    private buildSelectionServicesList(items: Set<SelectionAreaDirective>): void {\r\n        this.selectionService.childSelectionServices = Array.from(items)\r\n            .filter(area => area !== this)\r\n            .map(area => area.selectionService);\r\n    }\r\n}\r\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Optional, Output, Renderer2, SkipSelf } from '@angular/core';\r\nimport { RTSelectionEventsHelper } from './providers/selection-events-helper';\r\nimport { RTSelectionEvent, SelectionElementEventsEmitter } from './providers/selection-events-emitter';\r\nimport { SelectionAreaDirective } from './selection-area.directive';\r\n\r\n@Directive({\r\n    exportAs: 'rtSelectable',\r\n    selector: '[rtSelectable]'\r\n})\r\nexport class SelectableDirective implements SelectionElementEventsEmitter, AfterViewInit, OnDestroy {\r\n    public static settings: { selectedClassName: string } = {\r\n        selectedClassName: 'rt-selected'\r\n    };\r\n    public index: number = null;\r\n    @Input('rtSelectable') public item: any = null;\r\n    @Output() public readonly selectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n    @Output() public readonly itemSelected: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n    @Output() public readonly itemDeselected: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n    @Output() public readonly selectionChanged: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n    private selectedInternal = false;\r\n    constructor(\r\n        @Optional() private selectionArea: SelectionAreaDirective,\r\n        @SkipSelf()\r\n        public selectionEventsHelper: RTSelectionEventsHelper,\r\n        private renderer: Renderer2,\r\n        private el: ElementRef\r\n    ) {}\r\n\r\n    @Input()\r\n    public get selected(): boolean {\r\n        return this.selectedInternal;\r\n    }\r\n    public set selected(selected: boolean) {\r\n        if (selected) {\r\n            this.selectionEventsHelper.selectionService.selectIndex(this.index, this.selectionEventsHelper.multiple);\r\n        } else {\r\n            this.selectionEventsHelper.selectionService.deselectIndex(this.index);\r\n        }\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        this.selectionArea?.registerSelectable(this, this.el);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.selectionArea?.unregisterSelectable(this);\r\n    }\r\n\r\n    @HostListener('mouseup', ['$event.ctrlKey', '$event.shiftKey', '$event.which', '$event.preventDefault', '$event.stopPropagation', '$event'])\r\n    public mouseUpHandler(\r\n        ctrlKeyPressed: boolean,\r\n        shiftKeyPressed: boolean,\r\n        mouseButton: number,\r\n        preventDefaultFn: () => void,\r\n        stopPropagationFn: () => void,\r\n        executionContext: any\r\n    ): void {\r\n        if (this.selectionEventsHelper.mouseHandler(ctrlKeyPressed, shiftKeyPressed, mouseButton, this.index)) {\r\n            this.clearWindowSelection();\r\n            if (this.selectionEventsHelper.preventEventsDefaults && preventDefaultFn) {\r\n                preventDefaultFn.call(executionContext);\r\n            }\r\n            if (this.selectionEventsHelper.stopEventsPropagation && stopPropagationFn) {\r\n                stopPropagationFn.call(executionContext);\r\n            }\r\n        }\r\n    }\r\n    public postProcessSelection(selected: boolean): void {\r\n        if (selected === this.selected) {\r\n            return;\r\n        }\r\n        this.selectedInternal = selected;\r\n        this.selectedChange.emit(this.selectedInternal);\r\n        if (SelectableDirective.settings.selectedClassName) {\r\n            if (this.selected) {\r\n                this.renderer.addClass(this.el.nativeElement, SelectableDirective.settings.selectedClassName);\r\n            } else {\r\n                this.renderer.removeClass(this.el.nativeElement, SelectableDirective.settings.selectedClassName);\r\n            }\r\n        }\r\n    }\r\n    public clearWindowSelection(): void {\r\n        try {\r\n            window.getSelection().removeAllRanges();\r\n        } catch (e) {\r\n            // do nothing\r\n        }\r\n    }\r\n}\r\n","import { AfterViewInit, Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, Optional, Output, SkipSelf } from '@angular/core';\r\nimport { RTSelectionEventsHelper } from './providers/selection-events-helper';\r\nimport { RTSelectionService } from './providers/selection.service';\r\nimport { RTSelectionEvent, SelectionElementEventsEmitter } from './providers/selection-events-emitter';\r\nimport { SelectionAreaDirective } from './selection-area.directive';\r\n\r\n@Directive({\r\n    exportAs: 'rtSelectionCheckboxFor',\r\n    /* tslint:disable-next-line:directive-selector */\r\n    selector: 'input[rtSelectionCheckboxFor]'\r\n})\r\nexport class SelectionCheckboxForDirective implements SelectionElementEventsEmitter, AfterViewInit, OnDestroy {\r\n    public index: number = null;\r\n    // tslint:disable-next-line: no-input-rename\r\n    @Input('rtSelectionCheckboxFor') public item: any = null;\r\n    @Input()\r\n    public get selected(): boolean {\r\n        return this.selectedInternal;\r\n    }\r\n    public set selected(selected: boolean) {\r\n        if (selected) {\r\n            this.selectionService.selectIndex(this.index, this.selectionEventsHelper.multiple);\r\n        } else {\r\n            this.selectionService.deselectIndex(this.index);\r\n        }\r\n    }\r\n    @Output()\r\n    public readonly selectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n    @Output()\r\n    public readonly itemSelected: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n    @Output()\r\n    public readonly itemDeselected: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n    @Output()\r\n    public readonly selectionChanged: EventEmitter<RTSelectionEvent> = new EventEmitter<RTSelectionEvent>();\r\n    private selectedInternal = false;\r\n\r\n    constructor(\r\n        private elementRef: ElementRef,\r\n        @Optional() private selectionArea: SelectionAreaDirective,\r\n        @SkipSelf() public selectionEventsHelper: RTSelectionEventsHelper,\r\n        @SkipSelf() private selectionService: RTSelectionService\r\n    ) {}\r\n\r\n    ngAfterViewInit() {\r\n        this.selectionArea?.registerSelectionCheckbox(this, this.elementRef);\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.selectionArea?.unregisterSelectionCheckbox(this);\r\n    }\r\n\r\n    @HostBinding('checked')\r\n    public get isChecked(): boolean {\r\n        return this.selectionService.isIndexSelected(this.index);\r\n    }\r\n    @HostListener('change', ['$event.target.checked'])\r\n    public changeHandler(isChecked: boolean): void {\r\n        if (isChecked) {\r\n            this.selectionService.selectIndex(this.index, this.selectionEventsHelper.multiple);\r\n        } else {\r\n            this.selectionService.deselectIndex(this.index);\r\n        }\r\n    }\r\n    public postProcessSelection(selected: boolean): void {\r\n        if (selected === this.selected) {\r\n            return;\r\n        }\r\n        this.selectedInternal = selected;\r\n        this.selectedChange.emit(this.selectedInternal);\r\n    }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { SelectableDirective } from './selectable.directive';\r\nimport { SelectionAreaDirective } from './selection-area.directive';\r\nimport { SelectionCheckboxForDirective } from './selection-checkbox-for.directive';\r\n\r\n@NgModule({\r\n    declarations: [SelectableDirective, SelectionAreaDirective, SelectionCheckboxForDirective],\r\n    exports: [SelectableDirective, SelectionAreaDirective, SelectionCheckboxForDirective],\r\n    imports: [CommonModule]\r\n})\r\nexport class RTSelectionModule {}\r\n\r\nexport { RTSelectionService } from './providers/selection.service';\r\nexport { SelectionElementEventsEmitter, SelectionEventsEmitter, RTSelectionEvent } from './providers/selection-events-emitter';\r\nexport { RTSelectionEventsHelper } from './providers/selection-events-helper';\r\nexport { SelectableDirective } from './selectable.directive';\r\nexport { SelectionAreaDirective } from './selection-area.directive';\r\nexport { SelectionCheckboxForDirective } from './selection-checkbox-for.directive';\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { RTFiltersModule } from './filters/filters.module';\r\nimport { RTListsModule } from './lists/lists.module';\r\nimport { RTMiscModule } from './misc/misc.module';\r\nimport { RTSelectionModule } from './selection/selection.module';\r\n\r\n@NgModule({\r\n    exports: [RTListsModule, RTSelectionModule, RTMiscModule, RTFiltersModule],\r\n    imports: [RTListsModule, RTSelectionModule, RTMiscModule, RTFiltersModule]\r\n})\r\nexport class RTModule {\r\n    public static registerStateService({\r\n        useClass,\r\n        useValue,\r\n        useExisting,\r\n        useFactory,\r\n        deps,\r\n        multi\r\n    }: {\r\n        useClass?: any;\r\n        useValue?: any;\r\n        useExisting?: any;\r\n        useFactory?: () => any;\r\n        deps?: object[];\r\n        multi?: boolean;\r\n    }): void {\r\n        RTListsModule.registerStateService({\r\n            useClass,\r\n            useValue,\r\n            useExisting,\r\n            useFactory,\r\n            deps,\r\n            multi\r\n        });\r\n    }\r\n}\r\n","/*\r\n * Public API Surface of right-angled\r\n */\r\nexport * from './lib/core/filter-config';\r\nexport * from './lib/core/list-request';\r\nexport * from './lib/core/list-response';\r\nexport * from './lib/core/operation-status';\r\nexport * from './lib/core/paged-list-request';\r\nexport * from './lib/core/pager';\r\nexport * from './lib/core/sort-parameter';\r\nexport * from './lib/utilities';\r\n\r\nexport * from './lib/right-angled.module';\r\nexport * from './lib/misc/misc.module';\r\nexport * from './lib/filters/filters.module';\r\nexport * from './lib/selection/selection.module';\r\nexport * from './lib/lists/lists.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.RTFiltersService","i3.RTSortingsService","i4.RTFiltersService","i1.RTList","i2.RTSortingsService","i1.OperationStatusStream","i1.RTBufferedPager","i2.RTList","i1.RTPagedPager","i1.RTSelectionService","i2.RTSelectionEventsHelper","i1.SelectionAreaDirective","i3.RTSelectionService"],"mappings":"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"}