@tetacom/ng-components 1.0.26 → 1.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/directive/click-outside/click-outside.directive.d.ts +3 -2
- package/esm2020/component/chart-3d/chart3d/chart3d.component.mjs +4 -4
- package/esm2020/component/file-upload/file-item/file-item.component.mjs +4 -4
- package/esm2020/component/table/default/numeric-cell/numeric-cell.component.mjs +2 -1
- package/esm2020/component/table/default/string-cell/string-cell.component.mjs +3 -2
- package/esm2020/directive/click-outside/click-outside.directive.mjs +12 -5
- package/fesm2015/tetacom-ng-components.mjs +20 -10
- package/fesm2015/tetacom-ng-components.mjs.map +1 -1
- package/fesm2020/tetacom-ng-components.mjs +18 -9
- package/fesm2020/tetacom-ng-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tetacom-ng-components.mjs","sources":["../../src/component/accordion/accordion/accordion.component.ts","../../src/component/accordion/accordion/accordion.component.html","../../src/component/accordion/accordion-content.directive.ts","../../src/component/accordion/accordion-item/accordion-item.component.ts","../../src/component/accordion/accordion-item/accordion-item.component.html","../../src/common/enum/teta-size.enum.ts","../../src/component/icon/icon/icon.component.ts","../../src/component/icon/icon/icon.component.html","../../src/component/accordion/accordion-head/accordion-head.component.ts","../../src/component/accordion/accordion-head/accordion-head.component.html","../../src/component/icon/icon.service.ts","../../src/component/icon/icon-sprite.directive.ts","../../src/component/icon/icon.module.ts","../../src/component/accordion/accordion.module.ts","../../src/component/button/button/button.component.ts","../../src/component/button/button/button.component.html","../../src/component/button/button.module.ts","../../src/component/checkbox/checkbox/checkbox.component.ts","../../src/component/checkbox/checkbox/checkbox.component.html","../../src/component/checkbox/checkbox.module.ts","../../src/component/date-picker/model/date-picker-mode.enum.ts","../../src/util/date-util.ts","../../src/component/date-picker/model/day-model.ts","../../src/component/date-picker/util/date-picker-util.ts","../../src/common/enum/align.enum.ts","../../src/common/enum/vertical-align.enum.ts","../../src/component/date-picker/model/picker-locale-model.ts","../../src/component/date-picker/service/picker-locale.service.ts","../../src/common/util/dom-util.ts","../../src/common/util/position-util.ts","../../src/component/dropdown/dropdown-head.directive.ts","../../src/component/dropdown/dropdown-content.directive.ts","../../src/component/dropdown/dropdown-base.ts","../../src/component/dropdown/dropdown/dropdown.component.ts","../../src/component/dropdown/dropdown/dropdown.component.html","../../src/component/date-picker/service/picker-touch.service.ts","../../src/component/date-picker/year-select/year-select.component.ts","../../src/component/date-picker/year-select/year-select.component.html","../../src/pipe/util/number-helper.ts","../../src/pipe/prepend-zero/prepend-zero.pipe.ts","../../src/component/date-picker/month-select/month-select.component.ts","../../src/component/date-picker/month-select/month-select.component.html","../../src/component/date-picker/day-select/day-select.component.ts","../../src/component/date-picker/day-select/day-select.component.html","../../src/component/date-picker/time-part-control/time-part-control.component.ts","../../src/component/date-picker/time-part-control/time-part-control.component.html","../../src/component/date-picker/date-picker/date-picker.component.ts","../../src/component/date-picker/date-picker/date-picker.component.html","../../src/component/date-picker/month-picker/month-picker.component.ts","../../src/component/date-picker/month-picker/month-picker.component.html","../../src/component/dropdown/dropdown.directive.ts","../../src/component/dropdown/dropdown.module.ts","../../src/directive/click-outside/click-outside.directive.ts","../../src/directive/click-outside/click-outside.module.ts","../../src/pipe/prepend-zero/prepend-zero.module.ts","../../src/directive/only-number/only-number.directive.ts","../../src/directive/only-number/only-number.module.ts","../../src/component/date-picker/date-picker.module.ts","../../src/component/date-picker/model/date-period.ts","../../src/component/delimiter/delimiter/delimiter.component.ts","../../src/component/delimiter/delimiter/delimiter.component.html","../../src/component/delimiter/delimiter.module.ts","../../src/common/util/array-util.ts","../../src/component/dynamic-component/popup-content/popup-content.component.ts","../../src/component/dynamic-component/popup-content/popup-content.component.html","../../src/component/dynamic-component/dynamic-component.module.ts","../../src/component/expand-panel/expand-panel-content.directive.ts","../../src/component/expand-panel/expand-panel-head.directive.ts","../../src/component/toolbar/toolbar/toolbar.component.ts","../../src/component/toolbar/toolbar/toolbar.component.html","../../src/component/expand-panel/expand-panel/expand-panel.component.ts","../../src/component/expand-panel/expand-panel/expand-panel.component.html","../../src/component/toolbar/toolbar.module.ts","../../src/component/expand-panel/expand-panel.module.ts","../../src/component/file-upload/file-upload-area/file-upload-area.component.ts","../../src/component/file-upload/file-upload-area/file-upload-area.component.html","../../src/component/file-upload/file-item/file-item.component.ts","../../src/component/file-upload/file-item/file-item.component.html","../../src/component/file-upload/file-upload.module.ts","../../src/component/filter/filter-panel/filter-panel.component.ts","../../src/component/filter/filter-panel/filter-panel.component.html","../../src/component/filter/base/filter-base.ts","../../src/component/filter/contarct/numeric-filter.ts","../../src/component/filter/base/filter-component-base.ts","../../src/component/filter/contarct/numeric-filter-value.ts","../../src/component/input/input/input.component.ts","../../src/component/input/input/input.component.html","../../src/component/filter/numeric-filter/numeric-filter.component.ts","../../src/component/filter/numeric-filter/numeric-filter.component.html","../../src/component/filter/enum/string-filter-type.enum.ts","../../src/component/filter/contarct/string-filter.ts","../../src/component/filter/string-filter/string-filter.component.ts","../../src/component/filter/string-filter/string-filter.component.html","../../src/component/filter/enum/list-filter-type.enum.ts","../../src/component/filter/contarct/list-filter.ts","../../src/component/input/text-field/text-field.component.ts","../../src/component/input/text-field/text-field.component.html","../../src/component/filter/list-filter/list-filter.component.ts","../../src/component/filter/list-filter/list-filter.component.html","../../src/component/filter/contarct/date-filter-value.ts","../../src/component/filter/contarct/date-filter.ts","../../src/component/filter/date-filter/date-filter.component.ts","../../src/component/filter/date-filter/date-filter.component.html","../../src/component/filter/enum/filter-type.enum.ts","../../src/component/filter/contarct/boolean-filter.ts","../../src/component/radio/radio/radio.component.ts","../../src/component/radio/radio/radio.component.html","../../src/component/radio/radio-button/radio-button.component.ts","../../src/component/radio/radio-button/radio-button.component.html","../../src/component/filter/boolean-filter/boolean-filter.component.ts","../../src/component/filter/boolean-filter/boolean-filter.component.html","../../src/component/filter/contarct/filter-component-map.ts","../../src/component/filter/filter-host/filter-host.component.ts","../../src/component/select/select-option.directive.ts","../../src/component/select/select-value.directive.ts","../../src/directive/highlight/highlight.directive.ts","../../src/component/select/select/select.component.ts","../../src/component/select/select/select.component.html","../../src/directive/highlight/highlight.module.ts","../../src/component/input/form-group-title/form-group-title.component.ts","../../src/component/input/form-group-title/form-group-title.component.html","../../src/component/input/input.module.ts","../../src/component/select/select.module.ts","../../src/component/radio/radio.module.ts","../../src/component/filter/filter.module.ts","../../src/component/filter/contarct/filter-item.ts","../../src/component/filter/contarct/sort-param.ts","../../src/component/filter/contarct/filter-state.ts","../../src/component/message/message.service.ts","../../src/component/message/message/message.component.ts","../../src/component/message/message/message.component.html","../../src/component/message/message-host/message-host.component.ts","../../src/component/message/message-host/message-host.component.html","../../src/component/message/message.module.ts","../../src/component/message/model/message.ts","../../src/component/modal/model/modal-close-reason.enum.ts","../../src/component/modal/modal-container/modal-container.component.ts","../../src/component/modal/modal-container/modal-container.component.html","../../src/component/modal/model/current-modal.ts","../../src/common/contract/dynamic-data.ts","../../src/component/modal/dialog/dialog.component.ts","../../src/component/modal/dialog/dialog.component.html","../../src/component/modal/modal.module.ts","../../src/component/modal/model/modal-instance.ts","../../src/common/contract/teta-content-ref.ts","../../src/common/service/dynamic-component.service.ts","../../src/component/modal/modal.service.ts","../../src/component/modal/dialog.service.ts","../../src/component/pager/pager/pager.component.ts","../../src/component/pager/pager/pager.component.html","../../src/component/pager/pager.module.ts","../../src/component/pager/model/pager-state.ts","../../src/component/pager/util/pager-util.ts","../../src/component/panel/panel/panel.component.ts","../../src/component/panel/panel/panel.component.html","../../src/component/panel/panel.module.ts","../../src/component/progress-bar/progress-bar/progress-bar.component.ts","../../src/component/progress-bar/progress-bar/progress-bar.component.html","../../src/component/progress-bar/progress-bar.module.ts","../../src/util/forms-util.ts","../../src/component/toggle/toggle/toggle.component.ts","../../src/component/toggle/toggle/toggle.component.html","../../src/directive/dynamic-content-base.directive.ts","../../src/directive/hint/hint.directive.ts","../../src/component/property-grid/property-grid/property-grid-item/property-grid-item.component.ts","../../src/component/property-grid/property-grid/property-grid-item/property-grid-item.component.html","../../src/component/property-grid/property-grid/property-grid-group/property-grid-group.component.ts","../../src/component/property-grid/property-grid/property-grid-group/property-grid-group.component.html","../../src/component/property-grid/property-grid/property-grid.component.ts","../../src/component/property-grid/property-grid/property-grid.component.html","../../src/component/property-grid/default/numeric-item-default/numeric-item-default.component.ts","../../src/component/property-grid/default/numeric-item-default/numeric-item-default.component.html","../../src/component/property-grid/default/date-item-default/date-item-default.component.ts","../../src/component/property-grid/default/date-item-default/date-item-default.component.html","../../src/component/property-grid/default/list-item-default/list-item-default.component.ts","../../src/component/property-grid/default/list-item-default/list-item-default.component.html","../../src/component/property-grid/default/string-item-default/string-item-default.component.ts","../../src/component/property-grid/default/string-item-default/string-item-default.component.html","../../src/pipe/number-pipe/number.pipe.ts","../../src/pipe/number-pipe/number-pipe.module.ts","../../src/component/toggle/toggle.module.ts","../../src/directive/hint/hint.module.ts","../../src/component/property-grid/property-grid.module.ts","../../src/component/sidebar/sidebar-position.enum.ts","../../src/component/sidebar/sidebar/sidebar.component.ts","../../src/component/sidebar/sidebar/sidebar.component.html","../../src/component/sidebar/sidebar.module.ts","../../src/component/switch/switch.service.ts","../../src/component/switch/switch/switch.component.ts","../../src/component/switch/switch/switch.component.html","../../src/component/switch/switch-button/switch-button.component.ts","../../src/component/switch/switch-button/switch-button.component.html","../../src/component/switch/switch.module.ts","../../src/component/table/contract/table-row.ts","../../src/component/table/contract/table-column.ts","../../src/component/table/contract/column-reorder-event.ts","../../src/component/table/util/state-util.ts","../../src/component/table/enum/select-type.enum.ts","../../src/component/table/contract/table-column-store.ts","../../src/component/table/service/table.service.ts","../../src/component/table/base/group-row-component-base.ts","../../src/component/table/default/group-row/group-row.component.ts","../../src/component/table/default/group-row/group-row.component.html","../../src/component/table/enum/edit-type.enum.ts","../../src/component/table/enum/edit-event.enum.ts","../../src/component/table/contract/table-context-menu-config.ts","../../src/component/table/util/table-util.ts","../../src/component/table/selection-head-cell/selection-head-cell.component.ts","../../src/component/table/selection-head-cell/selection-head-cell.component.html","../../src/component/table/contract/column-resize-event.ts","../../src/component/table/contract/sort-event.ts","../../src/component/table/base/head-cell-component-base.ts","../../src/component/table/default/default-head-cell/default-head-cell.component.ts","../../src/component/table/default/default-head-cell/default-head-cell.component.html","../../src/component/table/head-cell-host/head-cell-host.component.ts","../../src/component/tabs/tab-content.directive.ts","../../src/component/tabs/tab-title.directive.ts","../../src/component/tabs/tab/tab.component.ts","../../src/component/tabs/tabs/tabs.component.ts","../../src/component/tabs/tabs/tabs.component.html","../../src/component/tree/tree.service.ts","../../src/directive/teta-template/teta-template.directive.ts","../../src/component/tree/tree-item/tree-item.component.ts","../../src/component/tree/tree-item/tree-item.component.html","../../src/component/tree/tree/tree.component.ts","../../src/component/tree/tree/tree.component.html","../../src/component/tree/tree-item-toggle/tree-item-toggle.component.ts","../../src/component/tree/tree-item-toggle/tree-item-toggle.component.html","../../src/component/table/head-cell-dropdown/head-cell-dropdown.component.ts","../../src/component/table/head-cell-dropdown/head-cell-dropdown.component.html","../../src/directive/resize-drag/resize-drag.directive.ts","../../src/component/table/head-cell/head-cell.component.ts","../../src/component/table/head-cell/head-cell.component.html","../../src/component/table/table-head-group/table-head-group.component.ts","../../src/component/table/table-head-group/table-head-group.component.html","../../src/component/table/table-head/table-head.component.ts","../../src/component/table/table-head/table-head.component.html","../../src/component/table/enum/aggregation-type.enum.ts","../../src/component/table/selection-cell/selection-cell.component.ts","../../src/component/table/selection-cell/selection-cell.component.html","../../src/component/table/base/cell-component-base.ts","../../src/component/table/default/numeric-cell/numeric-cell.component.ts","../../src/component/table/default/numeric-cell/numeric-cell.component.html","../../src/component/table/default/date-cell/date-cell.component.ts","../../src/component/table/default/date-cell/date-cell.component.html","../../src/component/table/default/list-cell/list-cell.component.ts","../../src/component/table/default/list-cell/list-cell.component.html","../../src/component/table/default/string-cell/string-cell.component.ts","../../src/component/table/default/string-cell/string-cell.component.html","../../src/component/table/default/boolean-cell/boolean-cell.component.ts","../../src/component/table/default/boolean-cell/boolean-cell.component.html","../../src/component/table/contract/cell-components-map.ts","../../src/component/table/cell-host/cell-host.component.ts","../../src/component/table/cell/cell.component.ts","../../src/component/table/cell/cell.component.html","../../src/component/table/table-body/table-body.component.ts","../../src/component/table/table-body/table-body.component.html","../../src/component/table/table/table.component.ts","../../src/component/table/table/table.component.html","../../src/component/tabs/tabs.module.ts","../../src/directive/teta-template/teta-template.module.ts","../../src/component/tree/tree.module.ts","../../src/component/table/default/date-time-cell/date-time-cell.component.ts","../../src/component/table/default/date-time-cell/date-time-cell.component.html","../../src/directive/resize-drag/resize-drag.module.ts","../../src/component/table/table.module.ts","../../src/component/table/base/detail-component-base.ts","../../src/component/theme-switch/theme-switch.service.ts","../../src/component/theme-switch/theme-switch/theme-switch.component.ts","../../src/component/theme-switch/theme-switch/theme-switch.component.html","../../src/component/theme-switch/theme-switch.module.ts","../../src/component/chart/model/enum/scale.ts","../../src/component/chart/model/enum/series-type.ts","../../src/component/chart/drawer/area-drawer.ts","../../src/component/chart/drawer/bar-drawer.ts","../../src/component/chart/model/enum/dispatch-type.ts","../../src/component/chart/model/enum/drag-point-type.ts","../../src/component/chart/drawer/line-drawer.ts","../../src/component/chart/drawer/pie-drawer.ts","../../src/component/chart/drawer/spline-drawer.ts","../../src/component/chart/drawer/scatter-drawer.ts","../../src/component/chart/drawer/contour-drawer.ts","../../src/component/chart/drawer/default-drawer-mapping.ts","../../src/component/chart/model/enum/legend-type.ts","../../src/component/chart/legend-drawer/swatch-drawer.ts","../../src/component/chart/legend-drawer/gradient-drawer.ts","../../src/component/chart/legend-drawer/default-drawer-legend-mapping.ts","../../src/component/chart/model/enum/axis-type.ts","../../src/component/chart/core/axis-creator.ts","../../src/component/chart/model/enum/scale-type.ts","../../src/component/chart/model/enum/zoom-type.ts","../../src/component/chart/core/chart.ts","../../src/component/chart/chart/chart.component.ts","../../src/component/chart/chart/chart.component.html","../../src/component/chart/chart.module.ts","../../src/component/chart/model/axis-options.ts","../../src/component/chart/model/series.ts","../../src/component/chart/model/tooltip-options.ts","../../src/component/chart/model/chart-bounds.ts","../../src/component/chart/model/chart-options.ts","../../src/component/chart/model/annotation.ts","../../src/component/chart/model/plot-line.ts","../../src/component/chart/model/plot-band.ts","../../src/component/chart-3d/chart3d/chart3d.component.ts","../../src/component/chart-3d/chart3d/chart3d.component.html","../../src/component/chart-3d/chart-3d.module.ts","../../src/component/chart-3d/model/chart-3d-options.ts","../../src/component/public-api.ts","../../src/common/service/click.service.ts","../../src/directive/context-menu/context-menu.directive.ts","../../src/directive/context-menu/context-menu.module.ts","../../src/directive/disable-control/disable-control.directive.ts","../../src/directive/disable-control/disable-control.module.ts","../../src/directive/drag-sort/drag-sort-container.directive.ts","../../src/directive/drag-sort/drag-sort-item.directive.ts","../../src/directive/drag-sort/drag-sort.module.ts","../../src/directive/loader/loader.directive.ts","../../src/directive/loader/loader.module.ts","../../src/component/resize-panel/resize-panel/resize-panel.component.ts","../../src/component/resize-panel/resize-panel/resize-panel.component.html","../../src/component/resize-panel/resize-panel.module.ts","../../src/directive/tooltip/tooltip.directive.ts","../../src/directive/tooltip/tooltip.module.ts","../../src/directive/no-autofill/no-autofill.directive.ts","../../src/directive/no-autofill/no-autofill.module.ts","../../src/common/service/overlay-container.service.ts","../../src/util/string-util.ts","../../src/public-api.ts","../../src/tetacom-ng-components.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-accordion',\n templateUrl: './accordion.component.html',\n styleUrls: ['./accordion.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionComponent implements OnInit {\n @HostBinding('class.accordion') private readonly accordionClassName = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaAccordionContent]'\n})\nexport class AccordionContentDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n HostBinding,\n Inject,\n Input,\n OnInit,\n Optional,\n} from '@angular/core';\nimport { AccordionContentDirective } from '../accordion-content.directive';\nimport { AccordionComponent } from '../accordion/accordion.component';\n\n@Component({\n selector: 'teta-accordion-item',\n templateUrl: './accordion-item.component.html',\n styleUrls: ['./accordion-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItemComponent implements OnInit {\n @ContentChild(AccordionContentDirective, { static: false })\n content: AccordionContentDirective;\n\n @HostBinding('class.accordion-item_active')\n @Input()\n open: boolean;\n @Input() disabled: boolean;\n\n @HostBinding('class.accordion-item') private readonly accordionItemClass =\n true;\n\n private readonly accordion$: AccordionComponent;\n\n constructor(\n @Optional() @Inject(AccordionComponent) accordion: AccordionComponent,\n private cdr$: ChangeDetectorRef\n ) {\n this.accordion$ = accordion;\n }\n\n toggle() {\n this.open = !this.open;\n this.cdr$.detectChanges();\n }\n\n ngOnInit() {}\n}\n","<ng-content select=\"teta-accordion-head\"></ng-content>\n<div class=\"accordion-content\" *ngIf=\"open\">\n <ng-container *ngTemplateOutlet=\"content.template\"></ng-container>\n</div>\n","export enum TetaSize {\n XS,\n S,\n M,\n L,\n XL\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { TetaSize } from '../../../common/enum/teta-size.enum';\n\n@Component({\n selector: 'teta-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent implements OnInit {\n @Input() name: string;\n @Input() size: TetaSize = TetaSize.M;\n @Input() palette: string;\n\n @Input() class;\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'icon'];\n if (this.palette) {\n result.push(`icon-${this.palette}`);\n }\n return result.join(' ');\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n\n getName(): string {\n return `#${this.name}`;\n }\n}\n","<svg class=\"icon__image\">\n <use [attr.xlink:href]=\"getName()\"></use>\n</svg>\n","import {\n ChangeDetectionStrategy,\n Component,\n Host,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnInit,\n} from '@angular/core';\nimport { AccordionItemComponent } from '../accordion-item/accordion-item.component';\n\n@Component({\n selector: 'teta-accordion-head',\n templateUrl: './accordion-head.component.html',\n styleUrls: ['./accordion-head.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionHeadComponent implements OnInit {\n @HostBinding('class.accordion-head') private readonly accordionHeadClass =\n true;\n\n @Input() showToggle = true;\n\n private readonly accordionItem$: AccordionItemComponent;\n\n constructor(\n @Host()\n @Inject(AccordionItemComponent)\n accordionItem: AccordionItemComponent\n ) {\n this.accordionItem$ = accordionItem;\n }\n\n @HostListener('click')\n toggle(): void {\n if (this.disabled) {\n return;\n }\n this.accordionItem$.toggle();\n }\n\n @HostBinding('class.accordion-head_open')\n get open(): boolean {\n return this.accordionItem$.open;\n }\n\n @HostBinding('class.accordion-head_disabled')\n get disabled(): boolean {\n return this.accordionItem$.disabled;\n }\n\n ngOnInit() {}\n}\n","<ng-content></ng-content>\n<div *ngIf=\"showToggle\" class=\"accordion-toggle\">\n <teta-icon [name]=\"open ? 'arrowUpKey' : 'arrowDownKey'\"\n [palette]=\"'text'\"></teta-icon>\n</div>\n\n","import {Inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {HttpBackend, HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IconService {\n private static _loaded: string[] = [];\n private static _pending: string[] = [];\n private _renderer: Renderer2;\n\n constructor(@Inject(DOCUMENT) protected _document: any,\n private _rendererFactory: RendererFactory2,\n private _httpBackend: HttpBackend,\n private _http: HttpClient) {\n this._renderer = this._rendererFactory.createRenderer(null, null);\n }\n\n addSprite(url: string, bypassInterceptors: boolean = true) {\n if (IconService._loaded.indexOf(url) < 0 && IconService._pending.indexOf(url) < 0) {\n IconService._pending.push(url);\n this.getSVG(url, bypassInterceptors).subscribe(svg => {\n IconService._pending = IconService._pending.filter(_ => _ !== url);\n IconService._loaded.push(url);\n this._renderer.insertBefore(this._document.body, svg, this._document.body.firstChild);\n });\n }\n }\n\n private getSVG(url: string, bypassInterceptors: boolean = true): Observable<SVGElement> {\n const http = bypassInterceptors ? new HttpClient(this._httpBackend) : this._http;\n return http.get(url, {responseType: 'text'})\n .pipe(\n map((svgText: string) => {\n const svgEl = this.svgElementFromString(svgText);\n return this.cloneSVG(svgEl);\n })\n );\n }\n\n private svgElementFromString(str: string): SVGElement | never {\n const div = this._renderer.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg') as SVGElement;\n if (!svg) {\n throw new Error('No SVG found in loaded contents');\n }\n return svg;\n }\n\n private cloneSVG(svg: SVGElement): SVGElement {\n return svg.cloneNode(true) as SVGElement;\n }\n}\n","import {Directive, Input, OnInit} from '@angular/core';\nimport {IconService} from './icon.service';\n\n@Directive({\n selector: '[tetaIconSprite]'\n})\nexport class IconSpriteDirective implements OnInit {\n @Input() tetaIconSprite: string | string[];\n @Input() bypassInterceptors = true;\n\n constructor(private _iconService: IconService) {\n }\n\n ngOnInit(): void {\n if (typeof this.tetaIconSprite === 'string') {\n this._iconService.addSprite(this.tetaIconSprite, this.bypassInterceptors);\n }\n if (this.tetaIconSprite instanceof Array && this.tetaIconSprite?.length) {\n this.tetaIconSprite.forEach((sprite: string) => {\n this._iconService.addSprite(sprite, this.bypassInterceptors);\n });\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {IconComponent} from './icon/icon.component';\nimport {IconSpriteDirective} from './icon-sprite.directive';\nimport {HttpClientModule} from '@angular/common/http';\n\n\n@NgModule({\n declarations: [\n IconComponent,\n IconSpriteDirective\n ],\n exports: [\n IconComponent,\n IconSpriteDirective\n ],\n imports: [\n CommonModule,\n HttpClientModule\n ]\n})\nexport class IconModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AccordionComponent} from './accordion/accordion.component';\nimport {AccordionHeadComponent} from './accordion-head/accordion-head.component';\nimport {AccordionContentDirective} from './accordion-content.directive';\nimport {IconModule} from '../icon/icon.module';\nimport {AccordionItemComponent} from './accordion-item/accordion-item.component';\n\n@NgModule({\n declarations: [AccordionComponent, AccordionHeadComponent, AccordionContentDirective, AccordionItemComponent],\n exports: [AccordionComponent, AccordionHeadComponent, AccordionContentDirective, AccordionItemComponent],\n imports: [\n CommonModule,\n IconModule\n ]\n})\nexport class AccordionModule {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\nexport type ButtonViewType = 'primary' | 'outline' | 'ghost';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[teta-button], teta-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent implements OnInit {\n @Input() palette: string;\n @Input() class;\n @Input() view: ButtonViewType = 'primary';\n @Input() square = false;\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'button'];\n if (this.palette) {\n result.push(`button-${this.palette}`);\n }\n if (this.view) {\n result.push(`button_${this.view}`);\n }\n if (this.square) {\n result.push(`button-square`);\n }\n return result.join(' ');\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonComponent} from './button/button.component';\n\n\n@NgModule({\n declarations: [ButtonComponent],\n imports: [\n CommonModule\n ],\n exports: [\n ButtonComponent\n ]\n})\nexport class ButtonModule {\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const CHECKBOX_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [CHECKBOX_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent implements ControlValueAccessor, OnInit {\n @HostBinding('attr.tabindex') tabindex = 0;\n\n @Input() class;\n\n @HostBinding('class')\n private get getClass() {\n const result = [this.class, 'checkbox'];\n if (this.palette) {\n result.push(`checkbox-${this.palette}`);\n }\n return result.join(' ');\n }\n\n @Input() palette = 'primary';\n @Input() noLabel: boolean;\n\n /**\n * компонент неактивен\n */\n @HostBinding('class.checkbox_disabled')\n @Input()\n disabled: boolean;\n /**\n * true/false или list\n */\n @Input() value: any;\n /**\n * true/false или list\n */\n @Input() binary: boolean;\n\n @Input() allowNull: boolean;\n\n checked: boolean;\n\n /**\n * Значение\n */\n private model$: any = null;\n\n get model(): any {\n return this.model$;\n }\n\n set model(v: any) {\n if (v !== this.model$) {\n this.model$ = v;\n this.onChange(v);\n }\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n @HostListener('click')\n changeValue() {\n if (this.disabled) {\n return;\n }\n if (this.binary) {\n this.model = !this.model;\n } else {\n if (!this.isChecked()) {\n this.addValue();\n } else {\n this.removeValue();\n }\n }\n this.checked = this.isChecked();\n }\n\n writeValue(model: any) {\n if (this.binary) {\n this.model$ = model;\n } else {\n if (model && model instanceof Array) {\n this.model$ = model;\n } else {\n this.model$ = [];\n }\n }\n this.checked = this.isChecked();\n this.cdr.detectChanges();\n }\n\n isChecked(): boolean {\n if (this.binary) {\n return this.allowNull ? this.model : !!this.model;\n } else {\n return this.model && this.model.indexOf(this.value) >= 0;\n }\n }\n\n removeValue() {\n this.model = this.model.filter((val: any) => val !== this.value);\n }\n\n addValue() {\n if (this.model) {\n this.model = [...this.model, this.value];\n } else {\n this.model = [this.value];\n }\n }\n\n ngOnInit() {}\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.detectChanges();\n }\n}\n","<div class=\"checkbox__tick\">\n <teta-icon [name]=\"checked ? 'tick' : checked === false ? '' : 'minus'\"></teta-icon>\n</div>\n<span class=\"font-body-3 margin-left-1\" *ngIf=\"!noLabel\">\n <ng-content></ng-content>\n</span>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CheckboxComponent} from './checkbox/checkbox.component';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [CheckboxComponent],\n imports: [\n CommonModule,\n IconModule\n ],\n exports: [\n CheckboxComponent\n ]\n})\nexport class CheckboxModule {\n}\n","export enum DatePickerMode {\n date,\n month,\n year\n}\n","export class DateUtil {\n /**\n * Вычесть n-дней\n */\n\n public static subtractDays(date: Date, days = 0): Date | null {\n if (date && date instanceof Date) {\n const dt = new Date(date.getTime());\n\n dt.setDate(dt.getDate() - days);\n return dt;\n }\n\n return null;\n }\n\n /**\n * Добавить n-дней\n */\n\n public static addDays(date: Date, days = 0): Date | null {\n if (date && date instanceof Date) {\n const dt = new Date(date.getTime());\n\n dt.setDate(dt.getDate() + days);\n return dt;\n }\n\n return null;\n }\n\n /**\n * Получить дату из строки\n */\n public static parseString(dat: string): Date | null {\n if (!dat || dat.length < 1) {\n return null;\n }\n\n const parts = dat.split(' ');\n const dtPart = parts[0].split('.');\n const tPart = parts[1]?.split(':') ?? ['0', '0', '0'];\n const parsedDate = new Date(\n parseInt(dtPart[2], 10),\n parseInt(dtPart[1], 10) - 1,\n parseInt(dtPart[0], 10),\n parseInt(tPart[0], 10),\n parseInt(tPart[1], 10),\n parseInt(tPart[2], 10)\n );\n if (isNaN(parsedDate.getTime())) {\n return null;\n }\n return parsedDate;\n }\n\n /**\n * Привести дату к строке\n */\n public static toString(dat: Date): string {\n if (!dat || !(dat instanceof Date)) {\n return '';\n }\n const month = dat.getMonth() + 1;\n const monthString = month < 10 ? '0' + month.toString() : month.toString();\n return `${dat.getDate().toString()}.${monthString}.${dat\n .getFullYear()\n .toString()} ${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()}`;\n }\n\n /**\n * Подготовка даты к отправке на сервер, чтобы небыло смещения часов\n */\n public static convertUTC2DateLocal(date?: Date): Date | null {\n if (date && date instanceof Date) {\n const timezoneOffsetMs: number =\n new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n ).getTimezoneOffset() * 60000;\n return new Date(date.getTime() - timezoneOffsetMs);\n }\n return null;\n }\n\n /**\n * Подготовка даты к отправке на сервер, чтобы небыло смещения часов\n */\n public static convertDateLocal2UTC(date?: Date): Date | null {\n if (date && date instanceof Date) {\n const timezoneOffsetMs: number =\n new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n ).getTimezoneOffset() * 60000;\n return date == null ? null : new Date(date.getTime() + timezoneOffsetMs);\n }\n return null;\n }\n\n public static convertDateStringsToDates(input: any): any {\n const regexIso8601 =\n /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n if (typeof input === 'string' && regexIso8601.test(input)) {\n return DateUtil.convertStringToLocalDate(input);\n }\n if (typeof input !== 'object' || !input) {\n return input;\n }\n let res: any | any[];\n if (input instanceof Array) {\n res = [];\n } else {\n res = {};\n }\n return DateUtil.fillConvertDateStringsToDates(res, input);\n }\n\n public static convertDates(input: any | any[]): any | any[] {\n if (typeof input !== 'object' || !input) {\n return input;\n }\n if (input instanceof Date) {\n return DateUtil.convertUTC2DateLocal(input);\n }\n let res: any | any[];\n if (input instanceof Array) {\n res = [];\n } else {\n res = {};\n }\n return DateUtil.fillConvertDates(res, input);\n }\n\n public static getMonthDaysCount(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n }\n\n // Возвращает список месяцев между двумя датами\n public static getRangeOfMonths(start: Date, end: Date): Date[] {\n if (start > end || !start || !end) {\n return null;\n }\n const resDates: Date[] = [];\n let i = 0;\n let dateTmp = new Date(start.getFullYear(), start.getMonth() + i, 1);\n while (end >= dateTmp) {\n resDates.push(dateTmp);\n i++;\n dateTmp = new Date(start.getFullYear(), start.getMonth() + i, 1);\n }\n return resDates;\n }\n\n public static truncateToMonth(date: Date): Date {\n const res = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0);\n return res;\n }\n\n public static truncateToDay(date: Date): Date {\n const res = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n 0,\n 0,\n 0\n );\n return res;\n }\n\n public static truncateToHour(date: Date): Date {\n const res = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n 0,\n 0\n );\n return res;\n }\n\n public static toISOString(date: number): string {\n return (\n new Date(date - new Date().getTimezoneOffset() * 60000)\n .toISOString()\n .slice(0, -5) + 'Z'\n );\n }\n\n public static isValidDate(date: any): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n private static fillConvertDates(result: any, input: any): any {\n for (const key in input) {\n if (!input.hasOwnProperty || !input.hasOwnProperty(key)) {\n continue;\n }\n if (input.hasOwnProperty(key)) {\n let value = input[key];\n if (value instanceof Date) {\n if (value !== null && value !== undefined) {\n value = DateUtil.convertUTC2DateLocal(value);\n }\n result[key] = value;\n } else if (typeof value === 'object') {\n result[key] = DateUtil.convertDates(value);\n } else {\n result[key] = value;\n }\n }\n }\n return result;\n }\n\n private static fillConvertDateStringsToDates(result: any, input: any): any {\n const regexIso8601 =\n /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z?)?$/i;\n for (const key in input) {\n if (!input.hasOwnProperty(key)) {\n continue;\n }\n const value = input[key];\n if (typeof value === 'string' && regexIso8601.test(value)) {\n result[key] = DateUtil.convertStringToLocalDate(value);\n } else if (typeof value === 'object') {\n result[key] = DateUtil.convertDateStringsToDates(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n\n private static convertStringToLocalDate(dateString: string): Date | null {\n const milliseconds = Date.parse(dateString);\n if (!isNaN(milliseconds)) {\n const dt = new Date(milliseconds);\n return DateUtil.convertDateLocal2UTC(dt);\n }\n return null;\n }\n}\n","export class DayModel {\n disabled: boolean;\n isCurrentMonth: boolean;\n today: boolean;\n selected: boolean;\n date: Date;\n weekend: boolean;\n\n public constructor(options?: {\n disabled?: boolean;\n isCurrentMonth?: boolean;\n today?: boolean;\n selected?: boolean;\n date: Date;\n weekend?: boolean;\n }) {\n if (options) {\n this.disabled = options.disabled;\n this.isCurrentMonth = options.isCurrentMonth;\n this.today = options.today;\n this.selected = options.selected;\n this.date = options.date;\n this.weekend = options.weekend;\n }\n }\n}\n","import { DatePeriod } from '../model/date-period';\nimport { DayModel } from '../model/day-model';\n\nexport class DatePickerUtil {\n static getFirstDay(\n month: number,\n year: number,\n firstDayOfWeek: number\n ): Date {\n const lastDay = new Date(year, month, 0);\n const lastDayIndex =\n lastDay.getDay() >= firstDayOfWeek\n ? lastDay.getDay() - firstDayOfWeek\n : lastDay.getDay() + 7 - firstDayOfWeek;\n return new Date(year, month - 1, lastDay.getDate() - lastDayIndex);\n }\n\n static getPickerDays(\n date: Date,\n firstDayOfWeek: number,\n minDate: Date,\n maxDate: Date,\n disabledDates: Date[],\n disabledDays: number[],\n disabledPeriods: DatePeriod[]\n ): DayModel[] {\n const days = [];\n const firstDay = DatePickerUtil.getFirstDay(\n date.getMonth(),\n date.getFullYear(),\n firstDayOfWeek\n );\n for (let i = 0; i < 6 * 7; i++) {\n const dat = new Date(firstDay);\n dat.setDate(dat.getDate() + i);\n days.push(\n new DayModel({\n date: dat,\n disabled: DatePickerUtil.isDateInvalid(\n dat,\n minDate,\n maxDate,\n disabledDates,\n disabledDays,\n disabledPeriods\n ),\n today: DatePickerUtil.isToday(dat),\n isCurrentMonth: dat.getMonth() === date.getMonth(),\n selected:\n dat.getFullYear() === date.getFullYear() &&\n dat.getMonth() === date.getMonth() &&\n dat.getDate() === date.getDate(),\n weekend: dat.getDay() === 0 || dat.getDay() === 6,\n })\n );\n }\n return days;\n }\n\n static isDateInvalid(\n dat: Date,\n minDate: Date,\n maxDate: Date,\n disabledDates: Date[],\n disabledDays: number[],\n disabledPeriods: DatePeriod[]\n ): boolean {\n return (\n DatePickerUtil.isDayDisabled(dat, disabledDays) ||\n DatePickerUtil.isDateDisabled(dat, disabledDates) ||\n DatePickerUtil.isDateInDisabledPeriod(dat, disabledPeriods) ||\n DatePickerUtil.isMaxInvalid(dat, maxDate) ||\n DatePickerUtil.isMinInvalid(dat, minDate)\n );\n }\n\n static isDayDisabled(dat: Date, disabledDays: number[]): boolean {\n if (\n dat === null ||\n dat === undefined ||\n disabledDays === null ||\n disabledDays === undefined ||\n disabledDays.length < 1\n ) {\n return false;\n }\n return disabledDays.indexOf(dat.getDay()) >= 0;\n }\n\n static isMinInvalid(dat: Date, minDate: Date): boolean {\n if (\n dat === null ||\n dat === undefined ||\n minDate === null ||\n minDate === undefined\n ) {\n return false;\n }\n return minDate.getTime() > dat.getTime();\n }\n\n static isMaxInvalid(dat: Date, maxDate: Date): boolean {\n if (\n dat === null ||\n dat === undefined ||\n maxDate === null ||\n maxDate === undefined\n ) {\n return false;\n }\n return maxDate.getTime() < dat.getTime();\n }\n\n static isDateInDisabledPeriod(\n dat: Date,\n disabledPeriods: DatePeriod[]\n ): boolean {\n if (\n dat === null ||\n dat === undefined ||\n disabledPeriods === null ||\n disabledPeriods === undefined ||\n disabledPeriods.length < 1\n ) {\n return false;\n }\n return disabledPeriods.some(\n (d: DatePeriod) =>\n d !== null &&\n d !== undefined &&\n d.start !== null &&\n d.start !== undefined &&\n d.end !== null &&\n d.end !== undefined &&\n d.start.getTime() <= dat.getTime() &&\n d.end.getTime() >= dat.getTime()\n );\n }\n\n static isDateDisabled(dat: Date, disabledDates: Date[]): boolean {\n if (\n disabledDates === null ||\n disabledDates === undefined ||\n disabledDates.length < 1 ||\n dat === null ||\n dat === undefined\n ) {\n return false;\n }\n return disabledDates.some(\n (d: Date) =>\n d !== null &&\n d !== undefined &&\n d.getFullYear() === dat.getFullYear() &&\n d.getMonth() === dat.getMonth() &&\n d.getDate() === dat.getDate()\n );\n }\n\n static isToday(dat: Date): boolean {\n if (dat === null || dat === undefined) {\n return false;\n }\n const today = new Date();\n return (\n dat.getFullYear() === today.getFullYear() &&\n dat.getMonth() === today.getMonth() &&\n dat.getDate() === today.getDate()\n );\n }\n\n static scrollMonth(delta: number, date: Date) {\n const res = new Date(date);\n let month = date.getMonth();\n let year = date.getFullYear();\n if (delta > 0) {\n if (month === 11) {\n month = 0;\n year++;\n } else {\n month++;\n }\n } else {\n if (month === 0) {\n month = 11;\n year--;\n } else {\n month--;\n }\n }\n res.setFullYear(year, month);\n return res;\n }\n\n static scrollYear(delta: number, date: Date) {\n const res = new Date(date);\n let year = date.getFullYear();\n if (delta > 0) {\n year++;\n } else {\n year--;\n }\n res.setFullYear(year);\n return res;\n }\n\n // static isSelected(date: Date, selectedDate: Date): boolean {\n // if (date === null || date === undefined || selectedDate === null || selectedDate === undefined) {\n // return false;\n // }\n // return date.getFullYear() === selectedDate.getFullYear()\n // && date.getMonth() === selectedDate.getMonth()\n // && date.getDate() === selectedDate.getDate();\n // }\n\n // static nextMonth(date: Date): Date {\n // const dt = new Date(date);\n // dt.setMonth(dt.getMonth() + 1);\n // return dt;\n // }\n\n // static prevMonth(date: Date): Date {\n // const dt = new Date(date);\n // dt.setMonth(dt.getMonth() - 1);\n // return dt;\n // }\n}\n","export enum Align {\n left,\n right,\n center,\n auto,\n fitWidth,\n minWidth,\n}\n","export enum VerticalAlign {\n top,\n bottom,\n center,\n auto\n}\n","export class PickerLocaleModel {\n dayNames: string[];\n dayNamesShort: string[];\n dayNamesMin: string[];\n monthNames: string[];\n monthNamesShort: string[];\n today: string;\n\n public constructor(options?: {\n dayNames: string[];\n dayNamesShort: string[];\n dayNamesMin: string[];\n monthNames: string[];\n monthNamesShort: string[];\n today: string;\n }) {\n if (options) {\n this.dayNames = options.dayNames;\n this.dayNamesShort = options.dayNamesShort;\n this.dayNamesMin = options.dayNamesMin;\n this.monthNames = options.monthNames;\n this.monthNamesShort = options.monthNamesShort;\n this.today = options.today;\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PickerLocaleModel} from '../model/picker-locale-model';\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PickerLocaleService {\n private _defaults = new PickerLocaleModel({\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n today: 'Today'\n });\n\n public locale: BehaviorSubject<PickerLocaleModel> = new BehaviorSubject<PickerLocaleModel>(this._defaults);\n\n public setLocale(locale: PickerLocaleModel) {\n this.locale.next(locale);\n }\n\n constructor() {\n }\n}\n","export class DomUtil {\n public static clickedInside(target: HTMLElement, event: MouseEvent): boolean {\n return event.composedPath().indexOf(target) >= 0;\n }\n\n public static findTransformedParent(node: HTMLElement) {\n while (node !== null && node.tagName !== 'BODY') {\n const style = getComputedStyle(node);\n if (style.transform !== 'none') {\n return node;\n }\n node = node.parentNode as HTMLElement;\n }\n return null;\n }\n}\n","import {IRect} from '../contract/i-rect';\nimport {Align} from '../enum/align.enum';\nimport {VerticalAlign} from '../enum/vertical-align.enum';\n\nexport class PositionUtil {\n public static getPosition(\n containerPosition: IRect,\n elementPosition: IRect,\n align: Align,\n verticalAlign: VerticalAlign,\n margin: number = 0,\n verticalMargin: number = 0,\n transformedParentRect: IRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }\n ): IRect {\n const rect: IRect = {};\n const elementWidth = elementPosition.right - elementPosition.left;\n const elementHeight = elementPosition.bottom - elementPosition.top;\n const containerWidth = containerPosition.right - containerPosition.left;\n const containerHeight = containerPosition.bottom - containerPosition.top;\n if (align === Align.left) {\n rect.left = containerPosition.left + margin;\n }\n if (align === Align.right) {\n rect.left = containerPosition.right - elementWidth - margin;\n }\n if (align === Align.center) {\n rect.left =\n (containerPosition.left + containerPosition.right) / 2 -\n elementWidth / 2;\n }\n if (align === Align.fitWidth) {\n rect.left = containerPosition.left + margin;\n rect.right = window.innerWidth - containerPosition.right + margin;\n }\n\n if (align === Align.minWidth) {\n rect.left = containerPosition.left + margin;\n rect.minWidth = containerWidth;\n }\n\n if (verticalAlign === VerticalAlign.auto) {\n if (\n containerPosition.bottom +\n (elementPosition.bottom - elementPosition.top) <=\n window.innerHeight\n ) {\n verticalAlign = VerticalAlign.bottom;\n } else {\n verticalAlign = VerticalAlign.top;\n }\n }\n if (verticalAlign === VerticalAlign.top) {\n rect.top = containerPosition.top - elementHeight - verticalMargin;\n }\n if (verticalAlign === VerticalAlign.bottom) {\n rect.top = containerPosition.bottom + verticalMargin;\n }\n if (verticalAlign === VerticalAlign.center) {\n rect.top =\n (containerPosition.top + containerPosition.bottom) / 2 -\n elementHeight / 2;\n }\n\n if (rect.left < 0) {\n rect.left = 0;\n }\n if (rect.top + elementHeight > window.innerHeight || rect.bottom < 0) {\n rect.bottom = 0;\n }\n if (rect.top < 0) {\n rect.top = 0;\n }\n if (verticalAlign === VerticalAlign.bottom || verticalAlign === VerticalAlign.center) {\n rect.maxHeight = window.innerHeight - rect.top;\n }\n if (verticalAlign === VerticalAlign.top) {\n rect.maxHeight = containerPosition.top;\n }\n rect.left = rect.left - transformedParentRect.left;\n rect.right = rect.right - transformedParentRect.left;\n rect.top = rect.top - transformedParentRect.top;\n rect.bottom = rect.bottom ? rect.bottom - transformedParentRect.bottom : rect.bottom;\n return rect;\n }\n\n public static setElementPosition(element: HTMLElement, rect: IRect): void {\n element.style.left = rect.left != null ? `${rect.left}px` : '';\n element.style.right = rect.right != null ? `${rect.right}px` : '';\n element.style.top = rect.top != null ? `${rect.top}px` : '';\n element.style.bottom = rect.bottom != null ? `${rect.bottom}px` : '';\n element.style.maxHeight =\n rect.maxHeight != null ? `${rect.maxHeight}px` : '';\n element.style.minWidth = rect.minWidth != null ? `${rect.minWidth}px` : '';\n }\n\n public static getMaxHeight(position: IRect): number | null {\n let maxHeight = null;\n maxHeight = 1;\n return maxHeight;\n }\n\n public static getMaxWidth(position: IRect): number | null {\n let maxWidth = null;\n maxWidth = 1;\n return maxWidth;\n }\n}\n","import {Directive, Optional, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaDropdownHead]'\n})\nexport class DropdownHeadDirective {\n constructor(@Optional() public template: TemplateRef<any>) {\n }\n}\n","import {Directive, ElementRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaDropdownContent]'\n})\nexport class DropdownContentDirective {\n nativeElement: HTMLElement;\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {\n this.nativeElement = _elementRef.nativeElement;\n }\n}\n","import {\n ChangeDetectorRef,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\nimport {DomUtil} from '../../common/util/dom-util';\nimport {PositionUtil} from '../../common/util/position-util';\nimport {Align} from '../../common/enum/align.enum';\nimport {VerticalAlign} from '../../common/enum/vertical-align.enum';\nimport {DropdownHeadDirective} from './dropdown-head.directive';\nimport {DropdownContentDirective} from './dropdown-content.directive';\nimport {AutoCloseIgnoreCase} from '../../common/contract/auto-close-ignore-case';\nimport {IRect} from '../../common/contract/i-rect';\nimport {takeWhile, throttleTime} from 'rxjs/operators';\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class DropdownBase {\n @Input() align: Align = Align.left;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Input() appendToBody: boolean;\n @Input() disabled: boolean;\n @Input() shadow = true;\n @Input() className: string | string[];\n\n @Input()\n set open(val: boolean) {\n if (val != null && val !== this._open && !this.disabled) {\n if (val) {\n this.openDropdown();\n } else {\n this.closeDropdown();\n }\n }\n }\n\n get open(): boolean {\n return this._open;\n }\n\n get container() {\n return this.appendToBody\n ? this._document.body\n : this._elementRef.nativeElement;\n }\n\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Input() autoClose = true;\n @Input() autoCloseIgnore: Array<AutoCloseIgnoreCase> = ['inside'];\n\n @ContentChild(DropdownHeadDirective, {\n static: false,\n read: ElementRef,\n })\n protected _head: ElementRef;\n\n @ContentChild(DropdownContentDirective, {static: false})\n protected _content: DropdownContentDirective;\n\n protected _body: HTMLElement | null = null;\n protected _open = false;\n protected _alive = true;\n\n constructor(\n protected _cdr: ChangeDetectorRef,\n protected _document: any,\n protected _elementRef: ElementRef<HTMLElement>,\n protected _zone: NgZone,\n protected _renderer: Renderer2\n ) {\n this._zone.onStable\n .pipe(\n takeWhile((_) => this._alive),\n throttleTime(10, undefined, {trailing: true})\n )\n .subscribe((_) => {\n if (this._head?.nativeElement && this._body) {\n setTimeout(() => {\n if (this._head?.nativeElement && this._body) {\n this.setPosition(this._head.nativeElement, this._body);\n }\n });\n }\n });\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent): void {\n if (this.open) {\n if (!DomUtil.clickedInside(this._body, event)) {\n this.closeDropdown();\n }\n } else {\n if (DomUtil.clickedInside(this._head.nativeElement, event)) {\n this.openDropdown();\n }\n }\n }\n\n @HostListener('document:click', ['$event']) documentClick(\n event: MouseEvent\n ): void {\n if (\n !this.open ||\n !this.autoClose ||\n event.detail === 0 ||\n DomUtil.clickedInside(this._head.nativeElement, event) ||\n DomUtil.clickedInside(this._body, event)\n ) {\n return;\n }\n if (DomUtil.clickedInside(this._body, event)) {\n if (this.autoCloseIgnore.indexOf('inside') < 0) {\n this.closeDropdown();\n }\n } else {\n if (this.autoCloseIgnore.indexOf('outside') < 0) {\n this.closeDropdown();\n }\n }\n }\n\n @HostListener('window:keyup', ['$event']) keyUp(event: KeyboardEvent): void {\n if (\n !this.open ||\n !this.autoClose ||\n ['esc', 'enter'].every(\n (_: 'esc' | 'enter') => this.autoCloseIgnore.indexOf(_) >= 0\n )\n ) {\n return;\n }\n if (\n (event.code === 'Escape' && this.autoCloseIgnore.indexOf('esc') < 0) ||\n (event.code === 'Enter' && this.autoCloseIgnore.indexOf('enter') < 0)\n ) {\n this.closeDropdown();\n }\n }\n\n protected closeDropdown(): void {\n if (this.open && this._body && this.container.contains(this._body)) {\n this._renderer.removeChild(this.container, this._body);\n this._open = false;\n this._body = null;\n this.openChange.emit(this.open);\n }\n }\n\n private openDropdown(): void {\n if (this._open || !this._content || this.disabled) {\n return;\n }\n this._open = true;\n this.openChange.emit(this.open);\n const renderer = this._renderer;\n const content = this._content.nativeElement;\n const container = (this._body =\n this._body || renderer.createElement('div'));\n renderer.addClass(container, 'dropdown');\n if (this.className != null) {\n if (this.className instanceof Array && this.className.length > 0) {\n this.className.forEach((_) => {\n renderer.addClass(container, _);\n });\n }\n if (typeof this.className === 'string') {\n renderer.addClass(container, this.className);\n }\n }\n\n renderer.appendChild(container, content);\n renderer.appendChild(this.container, container);\n\n this.setPosition(this._head.nativeElement, this._body);\n }\n\n private setPosition(container: HTMLElement, target: HTMLElement): void {\n const containerPosition = container.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const rect: IRect = {\n bottom: containerPosition.bottom,\n top: containerPosition.top,\n left: containerPosition.left,\n right: containerPosition.right,\n };\n\n const targetRect: IRect = {\n bottom: targetPosition.bottom,\n top: targetPosition.top,\n left: targetPosition.left,\n right: targetPosition.right,\n };\n\n const targetTransformedParent = DomUtil.findTransformedParent(target);\n let parentPosition = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n if (targetTransformedParent) {\n parentPosition = targetTransformedParent.getBoundingClientRect();\n }\n\n const position = PositionUtil.getPosition(\n rect,\n targetRect,\n this.align,\n this.verticalAlign,\n 0,\n 0,\n parentPosition\n );\n\n PositionUtil.setElementPosition(target, position);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DropdownBase } from '../dropdown-base';\n\n@Component({\n selector: 'teta-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownComponent\n extends DropdownBase\n implements OnInit, OnDestroy\n{\n constructor(\n protected override _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) protected override _document: any,\n protected override _elementRef: ElementRef<HTMLElement>,\n protected override _zone: NgZone,\n protected override _renderer: Renderer2\n ) {\n super(_cdr, _document, _elementRef, _zone, _renderer);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.closeDropdown();\n this._alive = false;\n }\n}\n","<ng-content select=\"[tetaDropdownHead]\"></ng-content>\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { bufferCount, tap, throttleTime } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PickerTouchService {\n step: Observable<number>;\n\n private touchMove: Observable<TouchEvent>;\n private touchMove$: Subject<TouchEvent> = new Subject<TouchEvent>();\n private step$: Subject<number> = new Subject<number>();\n\n constructor() {\n this.touchMove = this.touchMove$.asObservable();\n this.step = this.step$.asObservable();\n\n this.touchMove\n .pipe(\n throttleTime(25),\n bufferCount(2),\n tap((touches: [TouchEvent, TouchEvent]) => {\n const [start, end] = touches.map((_) => _.changedTouches?.item(0));\n const deltaY = start?.clientY - end?.clientY;\n if (deltaY !== 0) {\n const step = deltaY > 0 ? 1 : -1;\n this.step$.next(step);\n }\n })\n )\n .subscribe();\n }\n\n onTouchMove(event: TouchEvent) {\n this.touchMove$.next(event);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { takeWhile, tap } from 'rxjs/operators';\nimport { PickerTouchService } from '../service/picker-touch.service';\n\n@Component({\n selector: 'teta-year-select',\n templateUrl: './year-select.component.html',\n styleUrls: ['./year-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YearSelectComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() currentYear: number;\n @Input() today: Date;\n @Input() size = 8;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() allowableRange: number[] = [1900, 2100];\n @Output() yearSelected = new EventEmitter<number>();\n @Output() yearApplied = new EventEmitter<number>();\n\n minYearDate: Date;\n maxYearDate: Date;\n years: number[];\n minYearList: number[];\n maxYearList: number[];\n decreaseInterval: number;\n increaseInterval: number;\n private _alive = true;\n\n constructor(\n private _cdr: ChangeDetectorRef,\n private _pickerTouchService: PickerTouchService,\n private _elementRef: ElementRef\n ) {}\n\n ngOnInit() {\n const [minRange, maxRange] = this.allowableRange;\n this.minYearDate = new Date(minRange, 0, 1);\n this.maxYearDate = new Date(maxRange, 11, 31);\n this.initMinYearList();\n this.initMaxYearList();\n this.initYearSelector(this.currentYear);\n }\n\n ngAfterViewInit() {\n const touchMove$ = fromEvent(\n this._elementRef.nativeElement.parentElement,\n 'touchmove'\n );\n\n touchMove$\n .pipe(\n takeWhile((_) => this._alive),\n tap((e: TouchEvent) => {\n this._pickerTouchService.onTouchMove(e);\n })\n )\n .subscribe();\n\n this._pickerTouchService.step\n .pipe(\n takeWhile((_) => this._alive),\n tap((_) => {\n this.shiftYearSelector(_);\n this._cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n window.clearInterval(this.decreaseInterval);\n window.clearInterval(this.increaseInterval);\n this._alive = false;\n }\n\n scrollYearSelector = (e: WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const step = e.deltaY > 0 ? 1 : -1;\n this.shiftYearSelector(step);\n };\n\n setYear = (e: any, year: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isYearDisabled(year)) {\n this.yearSelected.emit(year);\n }\n };\n\n applyYear = (e: any, year: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isYearDisabled(year)) {\n this.yearApplied.emit(year);\n }\n };\n\n initYearSelector = (year: number) => {\n if (!year) {\n year = this.today.getFullYear();\n }\n this.years = [year];\n let direction = false;\n for (let i = 1; i < this.size; i++) {\n if (direction) {\n this.years.unshift(this.years[0] - 1);\n } else {\n this.years.push(this.years[this.years.length - 1] + 1);\n }\n direction = !direction;\n }\n this.checkRanges();\n };\n\n initMinYearList = () => {\n this.minYearList = [this.minYearDate.getFullYear()];\n for (let i = 1; i < this.size; i++) {\n this.minYearList.push(this.minYearList[this.minYearList.length - 1] + 1);\n }\n };\n\n initMaxYearList = () => {\n this.maxYearList = [this.maxYearDate.getFullYear()];\n for (let i = 1; i < this.size; i++) {\n this.maxYearList.unshift(this.maxYearList[0] - 1);\n }\n };\n\n checkRanges = () => {\n if (\n this.years.some((year) => {\n const dat = new Date(year, 0, 1);\n return this.isMinYear(dat);\n })\n ) {\n this.years = this.minYearList;\n }\n if (\n this.years.some((year) => {\n const dat = new Date(year, 0, 1);\n return this.isMaxYear(dat);\n })\n ) {\n this.years = this.maxYearList;\n }\n };\n\n shiftYearSelector = (step: number = 0) => {\n this.years = this.years.map((year) => year + step);\n this.checkRanges();\n };\n\n decreaseYearSelector = (step: number = 3) => {\n const dat = new Date(this.years[0] - step, 0, 1);\n if (this.isMinYear(dat)) {\n this.years = this.minYearList;\n return;\n }\n\n this.years = this.years.map((year) => year - step);\n };\n\n increaseYearSelector = (step: number = 3) => {\n const dat = new Date(this.years[this.years.length - 1] + step, 0, 1);\n if (this.isMaxYear(dat)) {\n this.years = this.maxYearList;\n return;\n }\n this.years = this.years.map((year) => year + step);\n };\n\n // stopLongDecrease = () => {\n // window.clearInterval(this.decreaseInterval);\n // };\n //\n // stopLongIncrease = () => {\n // window.clearInterval(this.increaseInterval);\n // };\n\n isMinYear = (dat: Date): boolean => {\n if (!this.minYearDate || !(this.minYearDate instanceof Date) || !dat) {\n return false;\n }\n return this.minYearDate.getFullYear() > dat.getFullYear();\n };\n\n isMaxYear = (dat: Date): boolean => {\n if (!this.maxYearDate || !(this.maxYearDate instanceof Date) || !dat) {\n return false;\n }\n return this.maxYearDate.getFullYear() < dat.getFullYear();\n };\n\n isYearDisabled = (year: number) => {\n if (year) {\n const dat = new Date(year, 0, 1);\n return this.isMaxInvalid(dat) || this.isMinInvalid(dat);\n }\n return false;\n };\n\n isMinInvalid = (dat: Date): boolean => {\n if (!this.minDate || !(this.minDate instanceof Date) || !dat) {\n return false;\n }\n return this.minDate.getFullYear() > dat.getFullYear();\n };\n\n isMaxInvalid = (dat: Date): boolean => {\n if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {\n return false;\n }\n return this.maxDate.getFullYear() < dat.getFullYear();\n };\n}\n","<div class=\"list row_auto margin-top-2\"\n (wheel)=\"scrollYearSelector($event);\">\n <div class=\"list-item list-item_interactive\"\n [class.list-item_active]=\"year === currentYear\"\n [class.list-item_disabled]=\"isYearDisabled(year)\"\n (click)=\"setYear($event, year)\"\n (dblclick)=\"applyYear($event, year)\"\n *ngFor=\"let year of years\">\n {{year}}\n </div>\n</div>\n","export const getPrecision = (a: number) => {\n if (!isFinite(a)) {\n return 0;\n }\n let e = 1;\n let p = 0;\n while (Math.round(a * e) / e !== a) {\n e *= 10;\n p++;\n }\n return p;\n};\n\nexport const formatNumber = (\n value: any,\n decimalLength: number,\n chunkDelimiter: string,\n decimalDelimiter: string,\n chunkLength: number\n) => {\n const abs = Math.abs(value);\n if (0 < abs && 1 > abs) {\n const firstDigitIndex = Math.floor(Math.abs(Math.log10(abs)));\n decimalLength += firstDigitIndex;\n }\n const precision = Math.min(getPrecision(value), Math.floor(decimalLength));\n const result =\n '\\\\d(?=(\\\\d{' + chunkLength + '})+' + (precision > 0 ? '\\\\D' : '$') + ')';\n const num = value.toFixed(precision);\n return (decimalDelimiter ? num.replace('.', decimalDelimiter) : num).replace(\n new RegExp(result, 'g'),\n '$&' + chunkDelimiter\n );\n};\n\nexport const prependZero = (input: number, length: number) =>\n ('0'.repeat(length) + input).slice(-length);\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {prependZero} from '../util/number-helper';\n\n@Pipe({\n name: 'tetaPrependZero'\n})\nexport class PrependZeroPipe implements PipeTransform {\n transform(value: number, length: number): string {\n if (value === null || value === undefined) {\n return '';\n }\n value /= 1;\n return prependZero(value, length);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { PickerLocaleModel } from '../model/picker-locale-model';\nimport { fromEvent, merge } from 'rxjs';\nimport { takeWhile, tap } from 'rxjs/operators';\nimport { PickerTouchService } from '../service/picker-touch.service';\n\n@Component({\n selector: 'teta-month-select',\n templateUrl: './month-select.component.html',\n styleUrls: ['./month-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MonthSelectComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() locale: PickerLocaleModel;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() size = 8;\n @Output() monthSelected = new EventEmitter<number>();\n @Output() monthApplied = new EventEmitter<number>();\n\n _currentMonth: number;\n\n @Input()\n set currentMonth(val: number) {\n this._currentMonth = val;\n this.makeMonths();\n }\n\n get currentMonth(): number {\n return this._currentMonth;\n }\n\n _currentYear: number;\n\n @Input()\n set currentYear(val: number) {\n this._currentYear = val;\n }\n\n get currentYear(): number {\n return this._currentYear;\n }\n\n today: Date;\n months: number[] = [];\n shift = 0;\n\n private _alive = true;\n\n private get _displayDate(): Date {\n let month = 0;\n let year = 0;\n if (\n this.currentMonth !== null &&\n this.currentMonth !== undefined &&\n this.currentMonth >= 0 &&\n this.currentMonth <= 11\n ) {\n month = this.currentMonth;\n }\n if (this.currentYear !== null && this.currentYear !== undefined) {\n year = this.currentYear;\n }\n return new Date(year, month, 1);\n }\n\n constructor(\n private _elementRef: ElementRef,\n private _cdr: ChangeDetectorRef,\n private _pickerTouchService: PickerTouchService\n ) {\n this.today = new Date();\n this.today.setHours(0, 0, 0, 0);\n }\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n const touchMove$ = fromEvent(\n this._elementRef.nativeElement.parentElement,\n 'touchmove'\n );\n\n touchMove$\n .pipe(\n takeWhile((_) => this._alive),\n tap((e: TouchEvent) => {\n if (e.type === 'touchmove') {\n this._pickerTouchService.onTouchMove(e);\n }\n })\n )\n .subscribe();\n\n this._pickerTouchService.step\n .pipe(\n takeWhile((_) => this._alive),\n tap((_) => {\n this.shiftMonthSelector(_);\n this._cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n scrollMonthSelector = (e: WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const step = e.deltaY > 0 ? 1 : -1;\n this.shiftMonthSelector(step);\n };\n\n shiftMonthSelector = (step: number = 0) => {\n this.shift += step;\n this.makeMonths();\n };\n\n setMonth = (e: any, month: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isMonthDisabled(month)) {\n this.shift = 0;\n this.monthSelected.emit(month);\n }\n };\n\n applyMonth = (e: any, month: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isMonthDisabled(month)) {\n this.monthApplied.emit(month);\n }\n };\n\n isMonthDisabled = (month: number) => {\n if (!month && !this.currentYear) {\n const dat = new Date(this.currentYear, month, 1);\n return this.isMaxInvalid(dat) || this.isMinInvalid(dat);\n }\n return false;\n };\n\n isMinInvalid = (dat: Date): boolean => {\n if (!this.minDate || !(this.minDate instanceof Date) || !dat) {\n return false;\n }\n const min = new Date(\n this.minDate.getFullYear(),\n this.minDate.getMonth(),\n 1\n );\n return min.getTime() > dat.getTime();\n };\n\n isMaxInvalid = (dat: Date): boolean => {\n if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {\n return false;\n }\n const max = new Date(\n this.maxDate.getFullYear(),\n this.maxDate.getMonth(),\n 1\n );\n return max.getTime() < dat.getTime();\n };\n\n private makeMonths() {\n const start = this._displayDate;\n this.months = [];\n start.setMonth(start.getMonth() - 3);\n for (let i = this.shift; i < this.size + this.shift; i++) {\n const dt = new Date(start.getFullYear(), start.getMonth() + i, 1);\n this.months.push(dt.getMonth());\n }\n }\n}\n","<div class=\"list row_auto margin-top-2\"\n (wheel)=\"scrollMonthSelector($event);\">\n <div *ngFor=\"let month of months\"\n class=\"list-item list-item_interactive\"\n [class.list-item_active]=\"month === _currentMonth\"\n [class.list-item_disabled]=\"isMonthDisabled(month)\"\n [class.datepicker__month__item_current]=\"month === today?.getMonth() && currentYear === today?.getFullYear()\"\n (click)=\"setMonth($event, month)\"\n (dblclick)=\"applyMonth($event, month)\">\n <span class=\"color-text-20 margin-right-2\">\n {{month + 1 | tetaPrependZero: 2}}\n </span>\n {{locale.monthNames[month]}}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DayModel } from '../model/day-model';\nimport { DatePeriod } from '../model/date-period';\nimport { PickerLocaleService } from '../service/picker-locale.service';\nimport { takeWhile, tap, withLatestFrom } from 'rxjs/operators';\nimport { PickerLocaleModel } from '../model/picker-locale-model';\nimport { DatePickerUtil } from '../util/date-picker-util';\nimport { fromEvent } from 'rxjs';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateUtil } from '../../../util/date-util';\n\nexport const DAY_SELECT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DaySelectComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-day-select',\n templateUrl: './day-select.component.html',\n styleUrls: ['./day-select.component.scss'],\n providers: [DAY_SELECT_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DaySelectComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n @Input() firstDayOfWeek = 1;\n @Input() disabledDates: Date[];\n @Input() disabledPeriods: DatePeriod[];\n @Input() disabledDays: number[];\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() disabled: boolean;\n\n @Output() dateSelected = new EventEmitter<Date>();\n @Output() monthSelected = new EventEmitter<number>();\n @Output() yearSelected = new EventEmitter<number>();\n\n locale: PickerLocaleModel;\n\n value: Date;\n\n _currentValue: Date;\n\n set currentValue(val: Date) {\n if (\n !this._currentValue ||\n DateUtil.truncateToDay(val)?.getTime() !==\n DateUtil.truncateToDay(this._currentValue)?.getTime()\n ) {\n this._currentValue = val;\n this.createDays();\n this.checkDays();\n } else {\n this._currentValue = val;\n }\n this._cdr.markForCheck();\n }\n\n get currentValue(): Date {\n return this._currentValue;\n }\n\n days: Array<DayModel>;\n weekDays: number[] = [];\n\n private _alive = true;\n\n constructor(\n public localeService: PickerLocaleService,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef\n ) {\n localeService.locale\n .pipe(takeWhile((_) => this._alive))\n .subscribe((locale: PickerLocaleModel) => {\n this.locale = locale;\n });\n }\n\n ngOnInit() {\n this.weekDays = this.createWeekDays();\n\n const touchStart$ = fromEvent(this._elementRef.nativeElement, 'touchstart');\n const touchEnd$ = fromEvent(this._elementRef.nativeElement, 'touchend');\n\n touchEnd$\n .pipe(\n takeWhile((_) => this._alive),\n withLatestFrom(touchStart$),\n tap((touches: [TouchEvent, TouchEvent]) => {\n const [start, end] = touches.map((_) => _.changedTouches?.item(0));\n const deltaY = end?.clientY - start?.clientY;\n if (deltaY !== 0) {\n this.scrollMonth(deltaY);\n }\n })\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n writeValue(model: Date) {\n this.value = model;\n this.currentValue = model ? model : new Date();\n this._cdr.markForCheck();\n }\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n\n applyValue(day: DayModel, event: MouseEvent) {\n this.preventEvent(event);\n if (day === null || day === undefined || day.disabled) {\n return;\n }\n this.value = day.date;\n this.currentValue = day.date;\n this.onChange(day.date);\n }\n\n setDate(day: DayModel, event: MouseEvent) {\n if (day === null || day === undefined || day.disabled) {\n return;\n }\n if (\n day.date !== null &&\n day.date !== undefined &&\n day.date instanceof Date\n ) {\n this.currentValue = day.date;\n this.dateSelected.emit(day.date);\n }\n }\n\n scrollMonth(event: WheelEvent | number) {\n const deltaY = event instanceof WheelEvent ? event.deltaY : event;\n\n if (event instanceof WheelEvent) {\n this.preventEvent(event);\n }\n this.currentValue = DatePickerUtil.scrollMonth(deltaY, this.currentValue);\n this.monthSelected.emit(this.currentValue.getMonth());\n this.yearSelected.emit(this.currentValue.getFullYear());\n this._cdr.detectChanges();\n }\n\n private createWeekDays(): number[] {\n const result = [];\n let dayIndex = this.firstDayOfWeek;\n for (let i = 0; i < 7; i++) {\n result.push(dayIndex);\n dayIndex = dayIndex === 6 ? 0 : ++dayIndex;\n }\n return result;\n }\n\n private createDays() {\n this.days = DatePickerUtil.getPickerDays(\n this.currentValue,\n this.firstDayOfWeek,\n this.minDate,\n this.maxDate,\n this.disabledDates,\n this.disabledDays,\n this.disabledPeriods\n );\n }\n\n private checkDays() {\n if (this.days) {\n this.days = this.days.map((dat: DayModel) => ({\n ...dat,\n selected:\n dat.date.getFullYear() === this.currentValue.getFullYear() &&\n dat.date.getMonth() === this.currentValue.getMonth() &&\n dat.date.getDate() === this.currentValue.getDate(),\n }));\n }\n }\n\n private preventEvent(event: any) {\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n}\n","<div class=\"datepicker-week font-caption color-text-80\">\n <div class=\"datepicker-day\"\n [class.font-caption-bold]=\"day === 0 || day === 6\"\n *ngFor=\"let day of weekDays\">\n {{locale.dayNamesMin[day]}}\n </div>\n</div>\n<div class=\"datepicker-picker color-text-90 font-body-3\"\n (wheel)=\"scrollMonth($event)\"\n>\n <div *ngFor=\"let day of days\"\n class=\"datepicker-date\"\n (click)=\"setDate(day, $event);\"\n (dblclick)=\"applyValue(day, $event);\"\n [class.datepicker-date_active]=\"day.selected\"\n [class.datepicker-date_disabled]=\"day.disabled || !day.isCurrentMonth\"\n [class.datepicker-date_weekend]=\"day.weekend\"\n [class.datepicker-date_today]=\"day.today\">\n <ng-container *ngIf=\"day !== null && day !== undefined\">\n {{day.date.getDate()}}\n </ng-container>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const TIME_PART_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimePartControlComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-time-part-control',\n templateUrl: './time-part-control.component.html',\n styleUrls: ['./time-part-control.component.scss'],\n providers: [TIME_PART_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimePartControlComponent implements OnInit, ControlValueAccessor {\n @Input() min = 0;\n @Input() max = 59;\n @Input() disabled: boolean;\n\n private _value: number;\n\n set value(value: number) {\n this._value = value;\n this.onChange(this._value);\n }\n\n get value() {\n return this._value;\n }\n\n constructor(private _cdr: ChangeDetectorRef) {}\n\n up() {\n this.value = this.value < this.max ? this.value + 1 : this.min;\n }\n\n down() {\n this.value = this.value > this.min ? this.value - 1 : this.max;\n }\n\n scroll = (e: any) => {\n const delta = e?.deltaY ?? e;\n\n if (e instanceof WheelEvent) {\n e.preventDefault();\n }\n if (delta > 0) {\n this.down();\n } else {\n this.up();\n }\n };\n\n ngOnInit() {}\n\n writeValue(model: number) {\n this._value = model;\n this._cdr.markForCheck();\n }\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n}\n","<button teta-button [square]=\"true\" (click)=\"up()\" [palette]=\"'text'\" [view]=\"'ghost'\">\n <teta-icon [name]=\"'arrowUpKey'\"></teta-icon>\n</button>\n<div (wheel)=\"scroll($event);\" class=\"row row_auto font-body-3 height-6 width-6 align-center justify-content-center\">\n {{value | tetaPrependZero: 2}}\n</div>\n<button teta-button [square]=\"true\" (click)=\"down()\" [palette]=\"'text'\" [view]=\"'ghost'\">\n <teta-icon [name]=\"'arrowDownKey'\"></teta-icon>\n</button>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {PickerLocaleService} from '../service/picker-locale.service';\nimport {takeWhile} from 'rxjs/operators';\nimport {DatePeriod} from '../model/date-period';\nimport {PickerLocaleModel} from '../model/picker-locale-model';\nimport {DatePickerMode} from '../model/date-picker-mode.enum';\nimport {DateUtil} from '../../../util/date-util';\nimport {DatePickerUtil} from '../util/date-picker-util';\nimport {Align} from '../../../common/enum/align.enum';\nimport {VerticalAlign} from '../../../common/enum/vertical-align.enum';\n\nexport const DATE_PICKER_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n providers: [DATE_PICKER_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatePickerComponent\n implements ControlValueAccessor, OnInit, OnDestroy {\n @Input() disabled: boolean;\n @Input() invalid: boolean;\n @Input() firstDayOfWeek = 1;\n @Input() disabledDates: Date[];\n @Input() disabledPeriods: DatePeriod[];\n @Input() disabledDays: number[];\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() minYearDate: Date;\n @Input() maxYearDate: Date;\n @Input() align: Align = Align.left;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.auto;\n @Input() appendToBody: boolean;\n\n @HostBinding('class.datepicker-wide')\n @Input()\n showTime = false;\n\n @Input()\n set format(val: string) {\n this._format = val;\n }\n\n get format(): string {\n if (this._format) {\n return this._format;\n }\n return this.showTime ? 'dd.MM.yyyy HH:mm:ss' : 'dd.MM.yyyy';\n }\n\n @HostBinding('class.datepicker_open') open: boolean;\n @HostBinding('class.datepicker') private readonly classDatepicker = true;\n @HostBinding('tabindex') private readonly tabindex = 0;\n\n locale: PickerLocaleModel;\n today: Date = new Date();\n\n datePickerModeEnum = DatePickerMode;\n displayMode: DatePickerMode = DatePickerMode.date;\n _format: string;\n\n _value: Date | null = null;\n _currentValue: Date;\n\n private _alive = true;\n\n get value(): Date | null {\n return this._value;\n }\n\n set value(v: Date | null) {\n if (v?.getTime() !== this._value?.getTime()) {\n this._value = v;\n this.currentValue = this._value;\n }\n }\n\n get currentValue(): Date {\n return this._currentValue;\n }\n\n set currentValue(date: Date) {\n this._currentValue = date;\n this._cdr.markForCheck();\n }\n\n get internalValue() {\n return this.currentValue ?? this.emptyDate();\n }\n\n constructor(\n public localeService: PickerLocaleService,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef\n ) {\n localeService.locale\n .pipe(takeWhile((_) => this._alive))\n .subscribe((locale: PickerLocaleModel) => {\n this.locale = locale;\n });\n }\n\n @HostListener('window:keyup', ['$event']) keyUp(event: KeyboardEvent): void {\n if (!this.open) {\n return;\n }\n if (event.code === 'Escape') {\n this.currentValue = this.value;\n this.open = false;\n }\n }\n\n writeValue(value: any) {\n this.value = value;\n this._cdr.markForCheck();\n }\n\n onChange = (_: any) => {\n };\n\n onTouched = () => {\n };\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngOnInit() {\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n applyValue(date: Date) {\n this.setDate(date);\n this.value = this.currentValue;\n this.onChange(this.value);\n this.open = false;\n }\n\n setDate = (day: Date) => {\n if (day === null || day === undefined) {\n this.currentValue = null;\n return;\n }\n const dt = this.internalValue;\n dt.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setYear = (year: number) => {\n const dt = this.internalValue;\n dt.setFullYear(year);\n this.currentValue = new Date(dt);\n this.setMode(DatePickerMode.date);\n this._cdr.markForCheck();\n };\n\n setMonth = (month: number) => {\n const dt = this.internalValue;\n dt.setMonth(month);\n this.currentValue = new Date(dt);\n this.setMode(DatePickerMode.date);\n this._cdr.markForCheck();\n };\n\n setHour = (hours: number) => {\n const dt = this.internalValue;\n dt.setHours(hours);\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setMinute = (minute: number) => {\n const dt = this.internalValue;\n dt.setMinutes(minute);\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setSecond = (seconds: number) => {\n const dt = this.internalValue;\n dt.setSeconds(seconds);\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setToday = () => {\n this.currentValue = this.emptyDate();\n this._cdr.markForCheck();\n };\n\n clearPicker = (event: MouseEvent): void => {\n this.preventEvent(event);\n this.value = null;\n this.onChange(null);\n };\n\n isDateInDisabledPeriod = (dat: Date): boolean => {\n if (!this.disabledPeriods || this.disabledPeriods.length < 1 || !dat) {\n return false;\n }\n return this.disabledPeriods.some(\n (d: DatePeriod) =>\n d &&\n d.start &&\n d.end &&\n d.start.getTime() <= dat.getTime() &&\n d.end.getTime() >= dat.getTime()\n );\n };\n\n isScrollIgnored = (): boolean =>\n this.displayMode === DatePickerMode.month ||\n this.displayMode === DatePickerMode.year;\n\n scrollMonth = (e: any) => {\n const delta = e?.deltaY ?? e;\n\n if (e instanceof WheelEvent) {\n this.preventEvent(e);\n }\n\n if (this.isScrollIgnored()) {\n return false;\n }\n this.currentValue = DatePickerUtil.scrollMonth(delta, this.internalValue);\n };\n\n scrollYear = (e: any) => {\n this.preventEvent(e);\n if (this.isScrollIgnored()) {\n return false;\n }\n this.currentValue = DatePickerUtil.scrollMonth(\n e.deltaY,\n this.internalValue\n );\n };\n\n openPicker = (show: boolean) => {\n if (this.disabled) {\n return;\n }\n if (!show) {\n this.setMode(DatePickerMode.date);\n this.applyValue(this.currentValue);\n }\n this.open = show;\n this._cdr.markForCheck();\n };\n\n closePicker = () => {\n this.openPicker(false);\n this.onTouched();\n };\n\n preventEvent = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n return false;\n };\n\n focus() {\n this._elementRef.nativeElement.focus();\n }\n\n setMode(mode: DatePickerMode) {\n let result: DatePickerMode;\n if (mode === this.displayMode || mode === DatePickerMode.date) {\n result = DatePickerMode.date;\n } else {\n result = mode;\n }\n this.displayMode = result;\n }\n\n private emptyDate() {\n return DateUtil.truncateToDay(new Date());\n }\n}\n","<teta-dropdown\n class=\"row row_auto\"\n [disabled]=\"disabled\"\n [open]=\"open\"\n [autoCloseIgnore]=\"['esc']\"\n (openChange)=\"openPicker($event)\"\n [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [appendToBody]=\"appendToBody\">\n <div tetaDropdownHead\n class=\"datepicker-head font-body-3\"\n [class.datepicker-head_disabled]=\"disabled\"\n [class.datepicker-head_invalid]=\"invalid\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-1\"></teta-icon>\n <div class=\"row_auto\">\n {{currentValue !== null && currentValue !== undefined ? (currentValue | date : format) : ''}}\n </div>\n <teta-icon [name]=\"'closeBig'\" (click)=\"clearPicker($event);\" class=\"margin-left-1\"></teta-icon>\n </div>\n <div tetaDropdownContent class=\"datepicker-body scrollable\" (click)=\"$event.preventDefault()\">\n <div class=\"padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.monthNames[internalValue?.getMonth()]}}\n </button>\n <button teta-button\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{internalValue?.getFullYear()}}\n </button>\n </div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [today]=\"today\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"internalValue?.getMonth()\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [locale]=\"locale\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n <teta-day-select\n *ngIf=\"displayMode === datePickerModeEnum.date\"\n [ngModel]=\"currentValue\"\n (ngModelChange)=\"applyValue($event)\"\n (dateSelected)=\"setDate($event)\"\n (yearSelected)=\"setYear($event)\"\n (monthSelected)=\"setMonth($event)\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [disabledDays]=\"disabledDays\"\n [disabledDates]=\"disabledDates\"\n [disabledPeriods]=\"disabledPeriods\"></teta-day-select>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"datepicker-time padding-v-1 border-top border-text-10 font-body-3 color-text-90\">\n <teta-time-part-control [max]=\"23\" [ngModel]=\"internalValue?.getHours()\"\n (ngModelChange)=\"setHour($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getMinutes()\"\n (ngModelChange)=\"setMinute($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getSeconds()\"\n (ngModelChange)=\"setSecond($event)\"></teta-time-part-control>\n </div>\n </div>\n</teta-dropdown>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PickerLocaleModel } from '../model/picker-locale-model';\nimport { PickerLocaleService } from '../service/picker-locale.service';\nimport { takeWhile } from 'rxjs/operators';\nimport { DatePickerMode } from '../model/date-picker-mode.enum';\n\nexport const MONTH_PICKER_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MonthPickerComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-month-picker',\n templateUrl: './month-picker.component.html',\n styleUrls: ['./month-picker.component.scss'],\n providers: [MONTH_PICKER_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MonthPickerComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n @Input() disabled: boolean;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() showToday = true;\n @Input() appendToBody = true;\n\n @HostBinding('class.datepicker_open') showPicker: boolean;\n @HostBinding('class.datepicker') private readonly classDatepicker = true;\n @HostBinding('tabindex') private readonly tabindex = 0;\n\n datePickerModeEnum = DatePickerMode;\n\n locale: PickerLocaleModel;\n today: Date;\n\n displayMode: DatePickerMode = DatePickerMode.month;\n\n _value: Date | null = null;\n _currentMonth: number | null;\n _currentYear: number | null;\n\n get value(): any {\n return this._value;\n }\n\n set value(v: any) {\n if (v !== this._value) {\n this._value = v;\n this.onChange(v);\n }\n }\n\n get currentMonth(): number | null {\n return this._currentMonth;\n }\n\n set currentMonth(v: number | null) {\n if (v === null || v === undefined || v < 0 || v > 11) {\n return;\n }\n if (v !== this._currentMonth) {\n this._currentMonth = v;\n }\n }\n\n get currentYear(): number | null {\n return this._currentYear;\n }\n\n set currentYear(v: number | null) {\n if (v !== this._currentYear) {\n this._currentYear = v;\n }\n }\n\n private _alive = true;\n\n constructor(\n public localeService: PickerLocaleService,\n private _cdr: ChangeDetectorRef\n ) {\n localeService.locale\n .pipe(takeWhile((_) => this._alive))\n .subscribe((locale: PickerLocaleModel) => {\n this.locale = locale;\n });\n this.setDefaults();\n }\n\n writeValue(value: any) {\n this._value = value;\n this.initPicker(value);\n }\n\n initPicker(date: Date) {\n if (!date || !(date instanceof Date)) {\n this.setDefaults();\n } else {\n this.currentMonth = date.getMonth();\n this.currentYear = date.getFullYear();\n }\n this._cdr.markForCheck();\n }\n\n setDefaults() {\n this.today = new Date();\n this.currentMonth = null;\n this.currentYear = null;\n }\n\n clearPicker() {\n this.value = null;\n }\n\n onChange = (_: any) => {};\n\n onTouched = () => {};\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngOnInit() {\n if (!this.minDate || !(this.minDate instanceof Date)) {\n this.minDate = new Date('1900-01-01T00:00:00Z');\n }\n if (!this.maxDate || !(this.maxDate instanceof Date)) {\n this.maxDate = new Date('2100-12-31T00:00:00Z');\n }\n this.initPicker(this.value);\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n isMinInvalid = (dat: Date): boolean => {\n if (!this.minDate || !(this.minDate instanceof Date) || !dat) {\n return false;\n }\n const min = new Date(\n this.minDate.getFullYear(),\n this.minDate.getMonth(),\n 1\n );\n return min.getTime() > dat.getTime();\n };\n\n isMaxInvalid = (dat: Date): boolean => {\n if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {\n return false;\n }\n const max = new Date(\n this.maxDate.getFullYear(),\n this.maxDate.getMonth(),\n 1\n );\n return max.getTime() < dat.getTime();\n };\n\n scrollMonth = (e: any) => {\n if (this.showPicker) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n if (!this._value) {\n return;\n }\n if (this.currentYear === null || this.currentYear === undefined) {\n this.currentYear = this.today.getFullYear();\n }\n if (this.currentMonth === null || this.currentMonth === undefined) {\n this.currentMonth = this.today.getMonth();\n }\n if (e.deltaY > 0) {\n if (this.currentMonth === 11) {\n this.currentMonth = 0;\n this.currentYear++;\n } else {\n this.currentMonth++;\n }\n } else {\n if (this.currentMonth === 0) {\n this.currentMonth = 11;\n this.currentYear--;\n } else {\n this.currentMonth--;\n }\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n scrollYear = (e: any) => {\n if (this.showPicker) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n if (!this._value) {\n return;\n }\n if (!this.currentYear) {\n this.currentYear = this.today.getFullYear();\n }\n if (!this.currentMonth) {\n this.currentMonth = this.today.getMonth();\n }\n if (e.deltaY > 0) {\n this.currentYear++;\n } else {\n this.currentYear--;\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n setMonth = (month: number) => {\n this.currentMonth = month;\n if (!this.currentYear) {\n this.currentYear = this.today.getFullYear();\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n setYear = (year: number) => {\n this.currentYear = year;\n if (!this.currentMonth) {\n this.currentMonth = this.today.getMonth();\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n setToday = () => {\n const today = new Date();\n this.currentYear = today.getFullYear();\n this.currentMonth = today.getMonth();\n this.value = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n this.showPicker = false;\n };\n\n setMode(mode: DatePickerMode) {\n let result: DatePickerMode;\n if (mode === this.displayMode || mode === DatePickerMode.month) {\n result = DatePickerMode.month;\n } else {\n result = mode;\n }\n this.displayMode = result;\n }\n}\n","<teta-dropdown\n class=\"row row_auto\"\n [appendToBody]=\"appendToBody\"\n [(open)]=\"showPicker\"\n [disabled]=\"disabled\">\n <div tetaDropdownHead\n (wheel)=\"scrollMonth($event)\"\n class=\"datepicker-head font-body-3\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-2\"></teta-icon>\n <div class=\"row_auto\">\n <ng-container *ngIf=\"_value !==null && _value!==undefined\">\n {{locale.monthNames[_value.getMonth()]}} {{_value.getFullYear()}}\n </ng-container>\n </div>\n <teta-icon [name]=\"'closeBig'\" (click)=\"clearPicker()\" class=\"margin-left-2\"></teta-icon>\n </div>\n <div tetaDropdownContent class=\"datepicker-body scrollable padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.monthNames[_currentMonth || today.getMonth()]}}\n </button>\n <button teta-button\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{_currentYear || today.getFullYear()}}\n </button>\n </div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"_currentYear\"\n [today]=\"today\"\n [size]=\"8\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"_currentMonth\"\n [locale]=\"locale\"\n [currentYear]=\"_currentYear\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n </div>\n </div>\n</teta-dropdown>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Inject,\n NgZone, OnDestroy,\n OnInit,\n Renderer2\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {DropdownBase} from './dropdown-base';\n\n@Directive({\n selector: '[tetaDropdown]'\n})\nexport class DropdownDirective extends DropdownBase implements OnInit, OnDestroy, AfterViewInit {\n constructor(protected override _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) protected override _document: any,\n protected override _elementRef: ElementRef<HTMLElement>,\n protected override _zone: NgZone,\n protected override _renderer: Renderer2) {\n super(_cdr, _document, _elementRef, _zone, _renderer);\n }\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n this._alive = false;\n }\n\n ngAfterViewInit(): void {\n if (this._content) {\n this._renderer.removeChild(this._content.nativeElement.parentNode, this._content.nativeElement);\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DropdownComponent} from './dropdown/dropdown.component';\nimport {DropdownHeadDirective} from './dropdown-head.directive';\nimport {DropdownContentDirective} from './dropdown-content.directive';\nimport {DropdownDirective} from './dropdown.directive';\n\n@NgModule({\n declarations: [\n DropdownComponent,\n DropdownHeadDirective,\n DropdownContentDirective,\n DropdownDirective\n ],\n exports: [\n DropdownComponent,\n DropdownHeadDirective,\n DropdownContentDirective,\n DropdownDirective\n ],\n imports: [\n CommonModule\n ]\n})\nexport class DropdownModule {\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { DomUtil } from '../../common/util/dom-util';\n\n@Directive({\n selector: '[tetaClickOutside]',\n})\nexport class ClickOutsideDirective implements OnDestroy {\n @Output() clickOutside = new EventEmitter<MouseEvent>();\n @Input() rightClick = false;\n\n private _handleEvents = false;\n\n @Input()\n set tetaClickOutside(val: boolean) {\n this._handleEvents = val;\n if (this._handleEvents) {\n this.addListener(this.rightClick);\n } else {\n this.removeListener();\n }\n }\n\n get tetaClickOutside(): boolean {\n return this._handleEvents;\n }\n\n constructor(private _elementRef: ElementRef) {}\n\n ngOnDestroy(): void {\n this.removeListener();\n }\n\n private addListener(handleRightClick: boolean): void {\n window.addEventListener('click', this.listener);\n if (handleRightClick) {\n window.addEventListener('contextmenu', this.listener);\n }\n }\n\n private removeListener(): void {\n window.removeEventListener('click', this.listener);\n window.removeEventListener('contextmenu', this.listener);\n }\n\n private listener = (click: MouseEvent) => {\n if (!this._handleEvents) {\n return;\n }\n const clickedInside = DomUtil.clickedInside(\n this._elementRef.nativeElement,\n click\n );\n if (!clickedInside) {\n this.clickOutside.emit(click);\n }\n };\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ClickOutsideDirective} from './click-outside.directive';\n\n@NgModule({\n declarations: [ClickOutsideDirective],\n exports: [ClickOutsideDirective],\n imports: [\n CommonModule\n ]\n})\nexport class ClickOutsideModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PrependZeroPipe } from './prepend-zero.pipe';\n\n@NgModule({\n declarations: [PrependZeroPipe],\n exports: [PrependZeroPipe],\n imports: [CommonModule],\n})\nexport class PrependZeroModule {}\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[tetaOnlyNumber]',\n})\nexport class OnlyNumberDirective {\n @Input() tetaOnlyNumber = true;\n @Input() allowDecimals = true;\n @Input() allowSign = true;\n @Input() decimalSeparator = '.';\n @Input() commaSeparator = ',';\n\n private _previousValue = '';\n\n private _integerUnsigned = '^[0-9]*$';\n private _integerSigned = '^-?[0-9]+$';\n private _decimalUnsigned = '^[0-9]+(.[0-9]+)?$';\n private _decimalSigned = '^-?[0-9]+(.[0-9]+)?$';\n\n private readonly _minusSign: string = '-';\n\n constructor(private _elementRef: ElementRef, private _control: NgControl) {\n }\n\n @HostListener('change', ['$event']) onChange(e: any) {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n this.validateValue(this._elementRef.nativeElement.value);\n }\n\n @HostListener('paste', ['$event']) onPaste(e: any) {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n this.validateValue(e.clipboardData.getData('text/plain'));\n e.preventDefault();\n }\n\n @HostListener('keydown', ['$event']) onKeyDown(e: KeyboardEvent) {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n const cursorPosition: number =\n (e.target as HTMLInputElement).selectionStart ?? 0;\n const originalValue: string = (e.target as HTMLInputElement).value;\n const controlOrCommand = e.ctrlKey === true || e.metaKey === true;\n const signExists = originalValue.includes('-');\n const separatorExists =\n originalValue.includes(this.decimalSeparator) ||\n originalValue.includes(this.commaSeparator);\n\n const allowedKeys = [\n 'Backspace',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n 'Escape',\n 'Tab',\n 'Home',\n 'End',\n ];\n\n const separatorIsCloseToSign = signExists && cursorPosition <= 1;\n if (this.allowDecimals && !separatorIsCloseToSign && !separatorExists) {\n // if (this.decimalSeparator === '.') {\n allowedKeys.push('.');\n // } else {\n // allowedKeys.push(',');\n // }\n }\n\n const firstCharacterIsSeparator =\n originalValue.charAt(0) !== this.decimalSeparator;\n if (\n this.allowSign &&\n !signExists &&\n firstCharacterIsSeparator &&\n cursorPosition === 0\n ) {\n allowedKeys.push('-');\n }\n\n if (\n allowedKeys.indexOf(e.key) !== -1 ||\n (e.code === 'KeyA' && controlOrCommand) ||\n (e.code === 'KeyC' && controlOrCommand) ||\n (e.code === 'KeyV' && controlOrCommand) ||\n (e.code === 'KeyZ' && controlOrCommand) ||\n (e.code === 'KeyX' && controlOrCommand)\n ) {\n return;\n }\n this._previousValue = originalValue;\n\n const isNumber = new RegExp(this._integerUnsigned).test(e.key);\n if (isNumber) {\n return;\n } else {\n if (e.key === ',' && originalValue.indexOf('.') < 0) {\n this._elementRef.nativeElement.value = originalValue + '.';\n }\n e.preventDefault();\n }\n }\n\n validateValue(value: string): void {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n value = value.replace(',', '.').trim();\n let regex: string = this._integerUnsigned;\n if (!this.allowDecimals && !this.allowSign) {\n regex = this._integerUnsigned;\n }\n if (!this.allowDecimals && this.allowSign) {\n regex = this._integerSigned;\n }\n if (this.allowDecimals && !this.allowSign) {\n regex = this._decimalUnsigned;\n }\n if (this.allowDecimals && this.allowSign) {\n regex = this._decimalSigned;\n }\n\n let firstCharacter = value.charAt(0);\n if (firstCharacter === this.decimalSeparator) {\n value = 0 + value;\n }\n\n const lastCharacter = value.charAt(value.length - 1);\n if (lastCharacter === this.decimalSeparator) {\n value = value + 0;\n }\n\n let signedValue = false;\n if (firstCharacter === this._minusSign) {\n signedValue = true;\n value = value.substring(1);\n firstCharacter = value.charAt(0);\n }\n let secondChar = value.charAt(1);\n while (\n firstCharacter === '0' &&\n secondChar !== '' &&\n secondChar !== this.decimalSeparator\n ) {\n value = value.substring(1);\n firstCharacter = value.charAt(0);\n secondChar = value.charAt(1);\n }\n if (signedValue === true) {\n value = this._minusSign + value;\n }\n\n const valueParts = value.split(this.decimalSeparator);\n const naturalPart = valueParts?.[0];\n let decimalPart = valueParts?.[1];\n\n if (decimalPart != null && /^0+$/.test(decimalPart)) {\n decimalPart = '0';\n value = naturalPart + '.' + decimalPart;\n }\n if (value === '-0') {\n value = '0';\n }\n if (value === '-0.0') {\n value = '0.0';\n }\n const valid: boolean = new RegExp(regex).test(value.toString());\n this._control.control.setValue(valid ? value : this._previousValue ?? 0);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OnlyNumberDirective } from './only-number.directive';\n\n@NgModule({\n declarations: [OnlyNumberDirective],\n exports: [OnlyNumberDirective],\n imports: [CommonModule],\n})\nexport class OnlyNumberModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { MonthPickerComponent } from './month-picker/month-picker.component';\nimport { DropdownModule } from '../dropdown/dropdown.module';\nimport { ClickOutsideModule } from '../../directive/click-outside/click-outside.module';\nimport { IconModule } from '../icon/icon.module';\nimport { DaySelectComponent } from './day-select/day-select.component';\nimport { YearSelectComponent } from './year-select/year-select.component';\nimport { MonthSelectComponent } from './month-select/month-select.component';\nimport { PrependZeroModule } from '../../pipe/prepend-zero/prepend-zero.module';\nimport { ButtonModule } from '../button/button.module';\nimport { OnlyNumberModule } from '../../directive/only-number/only-number.module';\nimport { FormsModule } from '@angular/forms';\nimport { TimePartControlComponent } from './time-part-control/time-part-control.component';\n\n@NgModule({\n declarations: [\n DatePickerComponent,\n MonthPickerComponent,\n DaySelectComponent,\n YearSelectComponent,\n MonthSelectComponent,\n TimePartControlComponent,\n ],\n exports: [DatePickerComponent, MonthPickerComponent],\n imports: [\n CommonModule,\n DropdownModule,\n ClickOutsideModule,\n FormsModule,\n IconModule,\n PrependZeroModule,\n ButtonModule,\n OnlyNumberModule,\n ],\n})\nexport class DatePickerModule {}\n","export class DatePeriod {\n start: Date;\n end: Date;\n\n constructor(start: Date, end: Date) {\n this.start = start;\n this.end = end;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-delimiter',\n templateUrl: './delimiter.component.html',\n styleUrls: ['./delimiter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DelimiterComponent implements OnInit {\n @Input() direction: 'vertical' | 'horizontal' = 'vertical';\n @Input() palette = 'text';\n @Input() height = 32;\n @Input() verticalMargin = 4;\n @Input() horizontalMargin = 8;\n\n @Input() class;\n\n @HostBinding('class')\n private get getClass(): string {\n return [\n this.class,\n 'delimiter',\n this.getBgColor(),\n this.direction === 'horizontal' ? 'display-flex' : 'display-inline-flex',\n ].join(' ');\n }\n\n @HostBinding('style.height')\n private get getHeight(): string {\n return this.direction === 'vertical' ? '' : '1px';\n }\n\n @HostBinding('style.width')\n private get getWidth(): string {\n return this.direction === 'horizontal' ? '' : '1px';\n }\n\n @HostBinding('style.margin')\n private get getMargin(): string {\n return this.direction === 'horizontal' ? '8px' : '0';\n }\n\n constructor() {}\n\n getBgColor() {\n return this.palette ? `bg-${this.palette}-10` : '';\n }\n\n ngOnInit(): void {}\n}\n","","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DelimiterComponent} from './delimiter/delimiter.component';\n\n@NgModule({\n declarations: [DelimiterComponent],\n exports: [DelimiterComponent],\n imports: [\n CommonModule\n ]\n})\nexport class DelimiterModule {\n}\n","export class ArrayUtil {\n public static asArray<T>(value: T | T[]): T[] {\n if (value === null || value === undefined) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n\n public static flatten(\n data: any[],\n children?: string | ((item: any) => any[]),\n onlyLeafs?: boolean\n ): any[] {\n const result: any[] = [];\n data.forEach((child) => {\n let childItems: any[];\n if (children) {\n if (typeof children === 'string') {\n childItems = child[children];\n }\n if (typeof children === 'function') {\n childItems = children(child);\n }\n } else {\n childItems = child.children;\n }\n if (\n childItems !== null &&\n childItems !== undefined &&\n childItems.length > 0\n ) {\n if (!onlyLeafs) {\n result.push(child);\n }\n result.push(...ArrayUtil.flatten(childItems, children, onlyLeafs));\n } else {\n result.push(child);\n }\n });\n return result;\n }\n\n static findRecursive(\n tree: any[],\n comparer: (iterableNode: any) => boolean,\n children: string = 'children'\n ): any {\n const found = tree.find((x) => comparer(x));\n if (found !== null && found !== undefined) {\n return found;\n }\n for (let i = 0, l = tree.length; i < l; i++) {\n const item = tree[i];\n if (item[children] && item[children].length) {\n const res = ArrayUtil.findRecursive(item[children], comparer);\n if (res !== null && res !== undefined) {\n return res;\n }\n }\n }\n return null;\n }\n\n static filterRecursive(\n array: any[],\n filter: (item: any) => boolean,\n children: string = 'children',\n keepChildren: boolean = true\n ): any {\n const result = [];\n if (array && array.length) {\n for (const item of array) {\n const resultItem = Object.assign({}, item);\n if (filter(resultItem)) {\n result.push(resultItem);\n if (!keepChildren) {\n resultItem[children] = [];\n break;\n }\n } else if (item[children] && item[children].length > 0) {\n resultItem[children] = [];\n const found = ArrayUtil.filterRecursive(\n item[children],\n filter,\n children,\n keepChildren\n );\n if (found?.length > 0) {\n resultItem[children] = found;\n result.push(resultItem);\n }\n }\n }\n }\n return result;\n }\n\n static distinct<T>(array: T[], comparator: (item: T) => any): T[] {\n const result: T[] = [];\n if (array && array.length) {\n for (const item of array) {\n const found = result.find((_) => comparator(_) === comparator(item));\n if (!found) {\n result.push(item);\n }\n }\n }\n return result;\n }\n\n static findParents(tree: any[], item: any) {\n if (tree.indexOf(item) >= 0) {\n return tree;\n }\n if (Array.isArray(tree)) {\n for (const treeNode of tree) {\n const childResult = this.findParents(treeNode.children, item);\n if (Array.isArray(childResult)) {\n return [treeNode].concat(childResult);\n }\n }\n }\n }\n\n static moveItem(list: any[], sourceIndex, targetIndex) {\n const res = [...list];\n const item = list[sourceIndex];\n if (targetIndex > sourceIndex) {\n res.splice(targetIndex, 0, item);\n res.splice(sourceIndex, 1);\n } else {\n res.splice(sourceIndex, 1);\n res.splice(targetIndex, 0, item);\n }\n return res;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ArrayUtil } from '../../../common/util/array-util';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-popup-content',\n templateUrl: './popup-content.component.html',\n styleUrls: ['./popup-content.component.scss'],\n animations: [\n trigger('dialog', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(200, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(200, style({ opacity: '0' }))]),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopupContentComponent implements OnInit, OnDestroy {\n @HostBinding('@dialog') dialog = true;\n\n @Input() className: string | string[];\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [...ArrayUtil.asArray(this.className), 'popup-content'];\n return result.join(' ');\n }\n\n constructor() {}\n\n addClass(className: string) {\n if (this.className) {\n if (typeof this.className === 'string') {\n this.className = className;\n }\n if (this.className instanceof Array) {\n this.className.push(className);\n }\n } else {\n this.className = [className];\n }\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {}\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PopupContentComponent} from './popup-content/popup-content.component';\n\n@NgModule({\n declarations: [PopupContentComponent],\n exports: [PopupContentComponent],\n imports: [\n CommonModule\n ]\n})\nexport class DynamicComponentModule {\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[tetaExpandPanelContent]',\n})\nexport class ExpandPanelContentDirective {\n constructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[tetaExpandPanelHead]',\n})\nexport class ExpandPanelHeadDirective {\n constructor(public template: TemplateRef<any>) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarComponent implements OnInit {\n @Input() palette: string;\n @Input() class;\n\n @HostBinding('class')\n private get getClass() {\n const result = [this.class, 'toolbar', 'toolbar_panel'];\n if (this.palette) {\n result.push(`toolbar-${this.palette}`);\n }\n return result.join(' ');\n }\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ExpandPanelContentDirective } from '../expand-panel-content.directive';\nimport { ExpandPanelHeadDirective } from '../expand-panel-head.directive';\n\n@Component({\n selector: 'teta-expand-panel',\n templateUrl: './expand-panel.component.html',\n styleUrls: ['./expand-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExpandPanelComponent implements OnInit {\n @ContentChild(ExpandPanelContentDirective, { static: false })\n content: ExpandPanelContentDirective;\n\n @ContentChild(ExpandPanelHeadDirective, { static: false })\n head: ExpandPanelHeadDirective;\n\n @Input() placeholder: string;\n @Input() open = true;\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Input() cookieName: string;\n @Input() direction: 'left' | 'right' = 'left';\n\n constructor() {}\n\n openPanel() {\n this.open = true;\n this.openChange.emit(true);\n this.saveCookie();\n }\n\n closePanel() {\n this.open = false;\n this.openChange.emit(false);\n this.saveCookie();\n }\n\n ngOnInit(): void {\n this.restoreCookie();\n }\n\n private saveCookie() {\n if (!this.cookieName?.length) {\n return;\n }\n localStorage.setItem(this.cookieName, JSON.stringify(this.open));\n }\n\n private restoreCookie() {\n if (!this.cookieName?.length) {\n return;\n }\n const cookie = localStorage.getItem(this.cookieName);\n this.open = cookie != null ? JSON.parse(cookie) : true;\n this.openChange.emit(this.open);\n }\n}\n","<ng-container *ngIf=\"open\">\n <teta-toolbar\n style=\"display: flex\"\n [style.justifyContent]=\"direction === 'right' ? 'space-between' : 'unset'\"\n [style.flexDirection]=\"direction === 'right' ? 'row-reverse' : 'row'\">\n <button\n teta-button\n [square]=\"true\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"closePanel()\"\n >\n <teta-icon [name]=\"direction === 'right' ? 'arrowRight' : 'arrowLeft'\"></teta-icon>\n </button>\n <span class=\"font-title-2\" style=\"display: contents\"><ng-container *ngTemplateOutlet=\"head?.template\"></ng-container></span>\n </teta-toolbar>\n <ng-container *ngTemplateOutlet=\"content?.template\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"!open\">\n <div class=\"width-10 overflow-hidden\" style=\"height: 100%;\">\n <button\n teta-button\n style=\"\n transform-origin: 0 0;\n transform: rotate(-90deg) translateX(-100%);\n margin: 8px;\n \"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"openPanel()\"\n >\n <div class=\"font-button-2 nowrap\">{{ placeholder }}</div>\n <teta-icon [name]=\"direction === 'right' ? 'arrowUp' : 'arrowDown'\"></teta-icon>\n </button>\n </div>\n</ng-container>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ToolbarComponent} from './toolbar/toolbar.component';\n\n@NgModule({\n declarations: [ToolbarComponent],\n exports: [ToolbarComponent],\n imports: [\n CommonModule\n ]\n})\nexport class ToolbarModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExpandPanelComponent } from './expand-panel/expand-panel.component';\nimport { DelimiterModule } from '../delimiter/delimiter.module';\nimport { ToolbarModule } from '../toolbar/toolbar.module';\nimport { ButtonModule } from '../button/button.module';\nimport { IconModule } from '../icon/icon.module';\nimport { ExpandPanelHeadDirective } from './expand-panel-head.directive';\nimport { ExpandPanelContentDirective } from './expand-panel-content.directive';\n\n@NgModule({\n declarations: [\n ExpandPanelComponent,\n ExpandPanelHeadDirective,\n ExpandPanelContentDirective,\n ],\n exports: [\n ExpandPanelComponent,\n ExpandPanelHeadDirective,\n ExpandPanelContentDirective,\n ],\n imports: [\n CommonModule,\n DelimiterModule,\n ToolbarModule,\n ButtonModule,\n IconModule,\n ],\n})\nexport class ExpandPanelModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-file-upload-area',\n templateUrl: './file-upload-area.component.html',\n styleUrls: ['./file-upload-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadAreaComponent implements OnInit {\n @HostBinding('class.file-upload') fileUpload = true;\n\n @HostBinding('class.file-upload_active')\n get fileUploadActive() {\n return this._asActive;\n }\n\n @Input() multiple = true;\n @Input() disabled: boolean;\n @Input() accept: string[];\n\n @Output() upload: EventEmitter<FileList> = new EventEmitter();\n\n @ViewChild('fileUpload', { static: false }) input: ElementRef;\n\n files: any;\n\n private _asActive: boolean;\n\n constructor() {}\n\n @HostListener('dragenter', ['$event']) dragEnter(event) {\n this.preventDefaults(event);\n this._asActive = true;\n }\n\n @HostListener('dragover', ['$event']) dragOver(event) {\n this.preventDefaults(event);\n this._asActive = true;\n }\n\n @HostListener('dragleave', ['$event']) dragLeave(event) {\n this.preventDefaults(event);\n this._asActive = false;\n }\n\n @HostListener('drop', ['$event']) drop(event) {\n this.upload.emit(event.dataTransfer.files);\n this.preventDefaults(event);\n }\n\n ngOnInit() {}\n\n fileChanged(event: any) {\n if (event.target && event.target.files) {\n this.upload.emit(event.target.files);\n this.input.nativeElement.value = null;\n }\n }\n\n private preventDefaults(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","<ng-content></ng-content>\n<label class=\"file-upload-label\">\n <input #fileUpload\n id=\"upload-input\"\n class=\"file-upload-input\"\n type=\"file\"\n name=\"fileUpload\"\n [attr.accept]=\"accept\"\n [attr.multiple]=\"multiple ? 'multiple' : null\"\n [disabled]=\"disabled\"\n (change)=\"fileChanged($event)\"/>\n <teta-button [palette]=\"'primary'\" type=\"button\">\n <teta-icon [name]=\"'upload'\"></teta-icon>\n Загрузить\n </teta-button>\n</label>\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-file-item',\n templateUrl: './file-item.component.html',\n styleUrls: ['./file-item.component.scss'],\n})\nexport class FileItemComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>file-item works!</p>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FileUploadAreaComponent } from './file-upload-area/file-upload-area.component';\nimport { FileItemComponent } from './file-item/file-item.component';\nimport { ButtonModule } from '../button/button.module';\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [FileUploadAreaComponent, FileItemComponent],\n exports: [FileUploadAreaComponent, FileItemComponent],\n imports: [CommonModule, ButtonModule, IconModule],\n})\nexport class FileUploadModule {}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-filter-panel',\n templateUrl: './filter-panel.component.html',\n styleUrls: ['./filter-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterPanelComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>filter-panel works!</p>\n","import {IFilter} from '../contarct/i-filter';\n\nexport class FilterBase implements IFilter {\n field: string;\n name: string;\n value: any;\n\n constructor(options?: {\n field: string;\n name: string;\n }) {\n if (options) {\n this.field = options.field;\n this.name = options.name;\n }\n }\n}\n","import {FilterBase} from '../base/filter-base';\nimport {NumericFilterValue} from './numeric-filter-value';\n\nexport class NumericFilter extends FilterBase {\n override value: NumericFilterValue;\n strict: boolean;\n\n constructor(options?: {\n value?: NumericFilterValue;\n strict?: boolean;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = options.value || this.value;\n this.strict = options.strict || false;\n }\n }\n}\n","import {FilterState} from '../contarct/filter-state';\nimport {EventEmitter} from '@angular/core';\nimport {FilterItem} from '../contarct/filter-item';\nimport {IFilter} from '../contarct/i-filter';\nimport {IIdName} from '../../../common/contract/i-id-name';\n\nexport abstract class FilterComponentBase {\n abstract column: FilterItem;\n abstract state: FilterState;\n abstract filterOptions: IIdName<any>[];\n\n abstract filterChanged: EventEmitter<IFilter>;\n}\n","export class NumericFilterValue {\n /**\n * Значение должно быть меньше чем\n */\n lessThan: number | null | undefined;\n /**\n * Значение должно быть больше чем\n */\n greaterThan: number | null | undefined;\n /**\n * Значение должно быть равно\n */\n equalsTo: number | null | undefined;\n\n constructor(options?: {\n lessThan?: number | null | undefined;\n greaterThan?: number | null | undefined;\n equalsTo?: number | null | undefined;\n }) {\n if (options) {\n this.lessThan = options.lessThan;\n this.greaterThan = options.greaterThan;\n this.equalsTo = options.equalsTo;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputComponent implements OnInit {\n @Input() label: string;\n\n @Input()\n @HostBinding('class.row')\n horizontal: boolean;\n\n @Input()\n required = false;\n\n @HostBinding('class.column')\n get column() {\n return !this.horizontal;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<div class=\"font-caption color-text-90 align-center row nowrap overflow-hidden text-overflow-ellipsis\"\n [class.row_6]=\"horizontal\"\n [class.text-field_required]=\"required\"\n *ngIf=\"label?.length > 0\">\n {{label}}\n</div>\n<div class=\"input-container\" [class.row_6]=\"horizontal\">\n <ng-content></ng-content>\n <div class=\"input-message font-error-message\">\n <ng-content select=\"message\"></ng-content>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { NumericFilter } from '../contarct/numeric-filter';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterItem } from '../contarct/filter-item';\nimport { NumericFilterValue } from '../contarct/numeric-filter-value';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-numeric-filter',\n templateUrl: './numeric-filter.component.html',\n styleUrls: ['./numeric-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumericFilterComponent\n extends FilterComponentBase\n implements OnInit\n{\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: NumericFilter;\n\n private state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n this.filter = this.getFilter();\n }\n\n private getFilter(): NumericFilter {\n let filter = this.state.numericFilters?.find(\n (f) => f.field === this.column.filterField\n );\n if (filter === null || filter === undefined) {\n filter = this.state.addNumericFilter(\n new NumericFilter({\n value: new NumericFilterValue(),\n field: this.column.filterField,\n name: this.column.name,\n strict: true,\n })\n );\n }\n return filter;\n }\n}\n","<div class=\"form-row padding-3\">\n <teta-input [label]=\"'От'\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [ngModel]=\"filter.value?.greaterThan\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"/>\n </teta-input>\n <teta-input [label]=\"'До'\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [ngModel]=\"filter.value?.lessThan\"\n (ngModelChange)=\"filter.value.lessThan=$event\"/>\n </teta-input>\n</div>\n","export enum StringFilterType {\n /**\n * Строгое совпадение\n */\n Equals = 1,\n /**\n * Начинается с указанной подстроки\n */\n StartsWith = 2,\n /**\n * Оканчивается указанной подстрокой\n */\n EndsWith = 3,\n /**\n * Содержит указанную подстроку\n */\n Contains = 4,\n}\n","import {FilterBase} from '../base/filter-base';\nimport {StringFilterType} from '../enum/string-filter-type.enum';\n\nexport class StringFilter extends FilterBase {\n override value: string;\n type: StringFilterType;\n\n\n constructor(options?: {\n value?: string;\n type?: StringFilterType;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = options.value || this.value;\n this.type = options.type || StringFilterType.Contains;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { StringFilter } from '../contarct/string-filter';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-string-filter',\n templateUrl: './string-filter.component.html',\n styleUrls: ['./string-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StringFilterComponent\n extends FilterComponentBase\n implements OnInit\n{\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: StringFilter;\n state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {}\n\n setFilter() {\n this.filterChanged.emit(this.filter);\n }\n\n private getFilter(): StringFilter {\n let filter = this.state.stringFilters.find(\n (f) => f.field === this.column.filterField\n );\n if (!filter) {\n filter = this.state.addStringFilter(\n new StringFilter({\n value: '',\n field: this.column.filterField,\n type: this.column.stringFilterType,\n name: this.column.name,\n })\n );\n }\n filter.type = this.column.stringFilterType;\n return filter;\n }\n}\n","<div class=\"padding-3\">\n <teta-input [label]=\"'Поиск'\">\n <input type=\"text\" class=\"input\" [(ngModel)]=\"filter.value\" (blur)=\"setFilter()\" />\n </teta-input>\n</div>\n\n","export enum ListFilterType {\n None,\n Excluded\n}\n","import {FilterBase} from '../base/filter-base';\nimport {ListFilterType} from '../enum/list-filter-type.enum';\n\nexport class ListFilter extends FilterBase {\n override value: any[];\n type: ListFilterType;\n\n constructor(options?: {\n value?: any[];\n type?: ListFilterType;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = options.value || this.value;\n this.type = options.type || ListFilterType.None;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n@Component({\n selector: 'teta-text-field',\n templateUrl: './text-field.component.html',\n styleUrls: ['./text-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextFieldComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextFieldComponent implements ControlValueAccessor {\n @Input() placeholder = '';\n @Input() leftIconName?: string;\n @HostBinding('class.text-field_disabled')\n @Input()\n disabled = false;\n @Input() onlyNumber = false;\n @HostBinding('class.text-field_invalid')\n @Input()\n invalid: boolean;\n @ViewChild('input', {static: false}) input: ElementRef;\n @HostBinding('attr.tabindex')\n private readonly tabindex = 0;\n @HostBinding('class.text-field')\n private readonly textField = true;\n value = '';\n\n constructor(private _cdr: ChangeDetectorRef) {\n }\n\n @HostListener('click') onFocus() {\n this.input.nativeElement.focus();\n }\n\n keyPress(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.keyCode === 13) {\n this.input.nativeElement.blur();\n }\n }\n\n emitBlur() {\n this.onTouched();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.detectChanges();\n }\n\n writeValue(input: string): void {\n this.value = input;\n this._cdr.detectChanges();\n }\n\n onChange(input: string): void {\n }\n\n onTouched(): void {\n }\n}\n","<teta-icon *ngIf=\"leftIconName\" [name]=\"leftIconName\"></teta-icon>\n<input\n #input\n [ngModel]=\"value\"\n [tetaOnlyNumber]=\"onlyNumber\"\n (ngModelChange)=\"value = $event; onChange($event);\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n (blur)=\"emitBlur()\"\n (keydown)=\"keyPress($event)\"\n autocomplete=\"off\"\n type=\"text\"\n/>\n<teta-icon\n *ngIf=\"value && !disabled\"\n class=\"close-icon\"\n [name]=\"'closeCircle'\"\n (click)=\"value = ''; onChange('');\"\n></teta-icon>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ListFilter } from '../contarct/list-filter';\nimport { ListFilterType } from '../enum/list-filter-type.enum';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-list-filter',\n templateUrl: './list-filter.component.html',\n styleUrls: ['./list-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListFilterComponent extends FilterComponentBase implements OnInit {\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: ListFilter;\n state$: FilterState;\n search = '';\n\n get visibleOptions() {\n return this.filterOptions?.filter(\n (_) => _.name?.toString().indexOf(this.search) >= 0\n );\n }\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n excluded: boolean;\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {}\n\n all() {\n if (!this.filter?.value || this.filter?.value?.length === 0) {\n return false;\n }\n const notSet = this.visibleOptions?.find(\n (_) => this.filter?.value?.indexOf(_.id) < 0\n );\n if (!notSet) {\n return true;\n }\n return null;\n }\n\n setAll(value: boolean) {\n if (value) {\n this.setFilter(this.visibleOptions?.map((_) => _.id));\n } else {\n this.setFilter([]);\n }\n }\n\n setType() {\n this.excluded = !this.excluded;\n this.filter.type = this.excluded\n ? ListFilterType.Excluded\n : ListFilterType.None;\n }\n\n setFilter(value: any[]) {\n this.filter.value = value;\n this.filterChanged.emit(this.filter);\n }\n\n private getFilter(): ListFilter {\n let filter = this.state.listFilters?.find(\n (f) => f.field === this.column.filterField\n );\n if (!filter) {\n filter = this.state.addListFilter(\n new ListFilter({\n field: this.column.filterField,\n value: [],\n type: this.column.listFilterType,\n name: this.column.name,\n })\n );\n }\n this.excluded = filter.type === ListFilterType.Excluded;\n return filter;\n }\n}\n","<div class=\"padding-2\">\n <teta-text-field [(ngModel)]=\"search\"></teta-text-field>\n</div>\n<div class=\"list padding-v-2 scrollable\">\n <div class=\"list-item\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"all()\"\n (ngModelChange)=\"setAll($event)\">Все\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item\" *ngFor=\"let option of visibleOptions\">\n <teta-checkbox [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [value]=\"option.id\"\n [binary]=\"false\">\n {{option.name}}\n </teta-checkbox>\n </div>\n</div>\n","export class DateFilterValue {\n /**\n * Значение должно быть меньше чем\n */\n lessThan: Date | undefined | null;\n /**\n * Значение должно быть больше чем\n */\n greaterThan: Date | undefined | null;\n\n constructor(options?: {\n lessThan?: Date | undefined | null;\n greaterThan?: Date | undefined | null;\n }) {\n if (options) {\n this.lessThan = (typeof options.lessThan === 'string') ? new Date(options.lessThan) : options.lessThan;\n this.greaterThan = (typeof options.greaterThan === 'string') ? new Date(options.greaterThan) : options.greaterThan;\n }\n }\n}\n","import {FilterBase} from '../base/filter-base';\nimport {DateFilterValue} from './date-filter-value';\n\nexport class DateFilter extends FilterBase {\n override value: DateFilterValue;\n\n constructor(options?: {\n value?: DateFilterValue;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = new DateFilterValue(options.value);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DateFilterValue } from '../contarct/date-filter-value';\nimport { DateFilter } from '../contarct/date-filter';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-date-filter',\n templateUrl: './date-filter.component.html',\n styleUrls: ['./date-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateFilterComponent extends FilterComponentBase implements OnInit {\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: DateFilter;\n state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n this.changeDetector.markForCheck();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n this.filter = this.getFilter();\n }\n\n private getFilter(): DateFilter {\n let filter = this.state.dateFilters.find(\n (f) => f.field === this.column.filterField\n );\n if (filter === null || filter === undefined) {\n filter = this.state.addDateFilter(\n new DateFilter({\n value: new DateFilterValue(),\n field: this.column.filterField,\n name: this.column.name,\n })\n );\n }\n return filter;\n }\n}\n","<div class=\"form-row padding-3\">\n <teta-input [label]=\"'От'\">\n <teta-date-picker style=\"width: 110px\"\n [ngModel]=\"filter.value?.greaterThan\"\n [appendToBody]=\"true\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"></teta-date-picker>\n </teta-input>\n <teta-input [label]=\"'До'\">\n <teta-date-picker style=\"width: 110px\"\n [ngModel]=\"filter.value?.lessThan\"\n [appendToBody]=\"true\"\n (ngModelChange)=\"filter.value.lessThan=$event\"></teta-date-picker>\n </teta-input>\n</div>\n","export enum FilterType {\n string,\n number,\n date,\n list,\n boolean,\n custom,\n}\n","import { FilterBase } from '../base/filter-base';\n\nexport class BooleanFilter extends FilterBase {\n override value: boolean;\n\n constructor(options?: { value?: boolean; field: string; name: string }) {\n super(options);\n if (options) {\n this.value = options.value;\n }\n }\n}\n","import {\n Component,\n OnInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Input,\n forwardRef,\n HostBinding,\n HostListener,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { RadioButtonComponent } from '../radio-button/radio-button.component';\n\ntype ButtonOrNullOrUndefined = RadioButtonComponent | undefined | null;\n\n@Component({\n selector: 'teta-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioComponent implements OnInit, ControlValueAccessor {\n @HostBinding('tabindex') tabindex = 0;\n @HostBinding('class.radio') radioClass = true;\n\n /** Менять значение при изменении выбранного */\n @Input()\n @HostBinding('class.radio_inline')\n inline: boolean;\n\n @Input() checkChangeSelected = true;\n\n @Input() set disabled(val: boolean) {\n this.disabled$ = val;\n this.buttons$.forEach((b) => (b.disabled = this.disabled));\n }\n\n get disabled() {\n return this.disabled$;\n }\n\n @Input() get value(): any {\n if (this.checkedButton$) {\n return this.checkedButton$.value;\n }\n return null;\n }\n\n set value(val: any) {\n this.writeValue(val);\n }\n\n private buttons$: RadioButtonComponent[] = [];\n private checkedButton$: ButtonOrNullOrUndefined;\n private selectedButton$: ButtonOrNullOrUndefined;\n private disabled$ = false;\n\n constructor(private _cdr: ChangeDetectorRef) {}\n\n @HostListener('focus', ['$event'])\n focusHandler(event: FocusEvent) {\n this.selectFirst();\n }\n\n @HostListener('focusout', ['$event'])\n focusoutHandler(event: FocusEvent) {\n if (this.selectedButton$) {\n this.selectedButton$.selected = false;\n this.selectedButton$ = null;\n }\n }\n\n @HostListener('keydown', ['$event'])\n keyEvent(event: KeyboardEvent) {\n const key = event.code || event.key;\n switch (key) {\n case 'Space':\n case 'Enter':\n case 'Spacebar':\n this.checkSelected();\n break;\n\n case 'ArrowUp':\n case 'Up':\n case 'ArrowLeft':\n case 'Left':\n this.selectPrevious();\n break;\n\n case 'ArrowDown':\n case 'Down':\n case 'ArrowRight':\n case 'Right':\n this.selectNext();\n break;\n default:\n return;\n }\n\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n return false;\n }\n\n ngOnInit() {}\n\n selectFirst() {\n if (!this.selectedButton$) {\n if (this.checkedButton$) {\n this.selectedButton$ = this.checkedButton$;\n this.selectedButton$.selected = true;\n return true;\n }\n\n for (const btn of this.buttons$) {\n if (!btn.disabled) {\n this.selectedButton$ = btn;\n this.selectedButton$.selected = true;\n return true;\n }\n }\n }\n return false;\n }\n _setChecked(btn: RadioButtonComponent) {\n if (this.checkedButton$) {\n this.checkedButton$.checked = false;\n }\n this.checkedButton$ = btn;\n this.checkedButton$.checked = true;\n if (this.selectedButton$) {\n this.selectedButton$.selected = false;\n }\n this.selectedButton$ = btn;\n this.selectedButton$.selected = true;\n this._onChange(this.value);\n this._cdr.markForCheck();\n }\n\n _addButton(btn: RadioButtonComponent) {\n if (this.disabled) {\n btn.disabled = this.disabled;\n }\n return this.buttons$.push(btn) - 1;\n }\n\n _removeButton(btn: RadioButtonComponent) {\n const index = this.buttons$.indexOf(btn);\n if (index > -1) {\n this.buttons$.splice(index, 1);\n }\n }\n\n /** Writes a new value to the element. */\n writeValue(obj: any): void {\n if (this.checkedButton$) {\n this.checkedButton$.checked = false;\n }\n\n this.checkedButton$ = this.buttons$.find((b) => b.value === obj);\n if (this.checkedButton$) {\n this.checkedButton$.checked = true;\n }\n this._cdr.markForCheck();\n }\n\n /** model callback вызовется когда модель измениться из ui */\n _onChange: (value: any) => void = () => {};\n\n /** Registers a callback function that should be called when the control's value changes in the UI */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n _onTouched = () => {};\n\n /** Registers a callback function that should be called when the control receives a blur event. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** This function is called by the forms API when the control status changes to or from \"DISABLED\". */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n\n private selectBtn(btn: RadioButtonComponent) {\n if (this.selectedButton$) {\n this.selectedButton$.selected = false;\n }\n this.selectedButton$ = btn;\n this.selectedButton$.selected = true;\n if (this.checkChangeSelected) {\n this.checkSelected();\n }\n this._cdr.markForCheck();\n }\n\n private selectNext() {\n if (this.selectFirst()) {\n return;\n }\n\n const length = this.buttons$.length;\n let newIndex = this.selectedButton$\n ? this.buttons$.indexOf(this.selectedButton$)\n : 0;\n let firstCycle = true;\n do {\n newIndex++;\n if (firstCycle && newIndex === length) {\n newIndex = 0;\n firstCycle = false;\n }\n const btn = this.buttons$[newIndex];\n if (btn && !btn.disabled) {\n this.selectBtn(btn);\n return;\n }\n } while (newIndex < length);\n }\n\n private selectPrevious() {\n if (this.selectFirst()) {\n return;\n }\n\n let newIndex = this.selectedButton$\n ? this.buttons$.indexOf(this.selectedButton$)\n : 0;\n let firstCycle = true;\n do {\n newIndex--;\n if (firstCycle && newIndex === -1) {\n newIndex = this.buttons$.length - 1;\n firstCycle = false;\n }\n const btn = this.buttons$[newIndex];\n if (btn && !btn.disabled) {\n this.selectBtn(btn);\n return;\n }\n } while (newIndex >= 0);\n }\n\n private checkSelected() {\n if (this.selectFirst()) {\n return;\n }\n if (this.selectedButton$) {\n this._setChecked(this.selectedButton$);\n }\n }\n}\n","<ng-content></ng-content>","import {\n Component,\n OnInit,\n Host,\n OnDestroy,\n ViewContainerRef,\n Input,\n HostListener,\n HostBinding,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { RadioComponent } from '../radio/radio.component';\n\n@Component({\n selector: 'teta-radio-button',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n // changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioButtonComponent implements OnInit, OnDestroy {\n @HostBinding('class.radio-button')\n radioButton = true;\n\n @HostBinding('class.radio-button-selected')\n selected: boolean;\n\n @Input()\n @HostBinding('class.radio-button-checked')\n checked: boolean;\n\n @Input()\n @HostBinding('class.radio-button_disabled')\n disabled: boolean;\n\n @Input() set value(val: any) {\n this._value = val;\n }\n\n get value() {\n if (this._value === undefined) {\n if (this.container.element.nativeElement instanceof HTMLElement) {\n return this.container.element.nativeElement.innerText;\n }\n }\n return this._value;\n }\n\n private _value: any;\n\n constructor(\n private container: ViewContainerRef,\n @Host() public radio: RadioComponent\n ) {}\n\n @HostListener('click')\n hostClick() {\n if (!this.disabled) {\n this.radio._setChecked(this);\n }\n }\n\n ngOnInit() {\n this.radio._addButton(this);\n }\n\n ngOnDestroy(): void {\n this.radio._removeButton(this);\n }\n}\n","<div class=\"radio-button-icon\">\n <div *ngIf=\"checked\" class=\"radio-button-small-icon\"></div>\n</div>\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterState } from '../contarct/filter-state';\nimport { BooleanFilter } from '../contarct/boolean-filter';\n\n@Component({\n selector: 'teta-boolean-filter',\n templateUrl: './boolean-filter.component.html',\n styleUrls: ['./boolean-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BooleanFilterComponent\n extends FilterComponentBase\n implements OnInit\n{\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: BooleanFilter;\n state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {}\n\n setFilter() {\n this.filterChanged.emit(this.filter);\n }\n\n private getFilter(): BooleanFilter {\n let filter = this.state.booleanFilters.find(\n (f) => f.field === this.column.filterField\n );\n if (!filter) {\n filter = this.state.addBooleanFilter(\n new BooleanFilter({\n value: null,\n field: this.column.filterField,\n name: this.column.name,\n })\n );\n }\n return filter;\n }\n}\n","<div class=\"padding-3\">\n <teta-radio [ngModel]=\"filter.value\" (ngModelChange)=\"setFilter()\">\n <teta-radio-button [value]=\"null\">null</teta-radio-button>\n <teta-radio-button [value]=\"true\">true</teta-radio-button>\n <teta-radio-button [value]=\"false\">false</teta-radio-button>\n </teta-radio>\n</div>\n","import { FilterType } from '../enum/filter-type.enum';\nimport { Type } from '@angular/core';\nimport { NumericFilterComponent } from '../numeric-filter/numeric-filter.component';\nimport { DateFilterComponent } from '../date-filter/date-filter.component';\nimport { ListFilterComponent } from '../list-filter/list-filter.component';\nimport { StringFilterComponent } from '../string-filter/string-filter.component';\nimport { FilterItem } from './filter-item';\nimport { BooleanFilterComponent } from '../boolean-filter/boolean-filter.component';\n\nconst filterComponentsMap: Map<FilterType, Type<any>> = new Map<\n FilterType,\n Type<any>\n>()\n .set(FilterType.number, NumericFilterComponent)\n .set(FilterType.date, DateFilterComponent)\n .set(FilterType.list, ListFilterComponent)\n .set(FilterType.string, StringFilterComponent)\n .set(FilterType.boolean, BooleanFilterComponent)\n .set(FilterType.custom, StringFilterComponent);\n\nexport const getFilterComponent = (item: FilterItem): Type<any> =>\n filterComponentsMap.has(item.filterType)\n ? filterComponentsMap.get(item.filterType)\n : StringFilterComponent;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef,\n} from '@angular/core';\nimport {FilterState} from '../contarct/filter-state';\nimport {FilterItem} from '../contarct/filter-item';\nimport {FilterBase} from '../base/filter-base';\nimport {FilterComponentBase} from '../base/filter-component-base';\nimport {takeWhile} from 'rxjs/operators';\nimport {getFilterComponent} from '../contarct/filter-component-map';\nimport {IIdName} from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-filter-host',\n template: '',\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterHostComponent implements OnInit, OnDestroy {\n @Input()\n set column(val: FilterItem) {\n this._column = val;\n if (this._init) {\n this._componentRef.instance.filterField = this._column;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n @Input()\n set state(val: FilterState) {\n this._state = val;\n if (this._init) {\n this._componentRef.instance.state = this._state;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n @Input()\n set filterOptions(val: IIdName<any>[]) {\n this._filterOptions = val;\n if (this._init) {\n this._componentRef.instance.filterOptions = this._filterOptions;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n @Output() filterChanged: EventEmitter<FilterBase> = new EventEmitter();\n\n private _alive = true;\n private _column: FilterItem;\n private _state: FilterState;\n private _filterOptions: IIdName<any>[];\n private _componentRef: ComponentRef<any>;\n private _init: boolean;\n\n constructor(\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n ngOnInit() {\n if (!FilterComponentBase.isPrototypeOf(this._column.filterComponent)) {\n this._column.filterComponent = getFilterComponent(this._column);\n }\n this._componentRef =\n this.viewContainerRef.createComponent<FilterComponentBase>(this._column.filterComponent);\n this._componentRef.instance.column = this._column;\n this._componentRef.instance.state = this._state;\n this._componentRef.instance.filterOptions = this._filterOptions;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n this._init = true;\n this._componentRef.instance.filterChanged\n .pipe(takeWhile((_) => this._alive))\n .subscribe((filter: FilterBase) => {\n this.filterChanged.emit(filter);\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaSelectOption]'\n})\nexport class SelectOptionDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaSelectValue]'\n})\nexport class SelectValueDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {Directive, ElementRef, Input} from '@angular/core';\n\n@Directive({\n selector: '[tetaHighlight]',\n})\nexport class HighlightDirective {\n @Input() set tetaHighlight(text: string) {\n setTimeout(() => {\n if (this._initialElement) {\n this.elementRef.nativeElement.innerHTML = this._initialElement;\n }\n if (!text) {\n return;\n }\n const pattern = /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;\n const searchWithOutRegExp = text\n .toLowerCase()\n .replace(pattern, '\\\\$&')\n .split(' ')\n .filter(t => t.length > 0)\n .join('|');\n this._initialElement = this.elementRef.nativeElement.innerHTML;\n this.recursiveReplaceNode(this.elementRef.nativeElement.childNodes, searchWithOutRegExp);\n }, 10);\n }\n\n private _initialElement = null;\n\n constructor(private elementRef: ElementRef) {\n }\n\n private recursiveReplaceNode(nodes: NodeListOf<ChildNode>, searchWithOutRegExp: string): boolean {\n let match = false;\n const cacheNodes: ChildNode[] = [];\n nodes.forEach((node: ChildNode) => {\n cacheNodes.push(node);\n });\n cacheNodes.forEach(node => {\n if (node.nodeType === 3) {\n if (node.nodeValue && node.nodeValue.search(new RegExp(searchWithOutRegExp, 'i')) > -1) {\n match = true;\n this.wrapNode(node, searchWithOutRegExp);\n }\n } else {\n match = this.recursiveReplaceNode(node.childNodes, searchWithOutRegExp) || match;\n }\n });\n\n return match;\n }\n\n private wrapNode(textNode: ChildNode, searchWithOutRegExp: string) {\n if (!textNode || !textNode.nodeValue) {\n return;\n }\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = textNode.nodeValue\n .replace(new RegExp(searchWithOutRegExp, 'gi'), match => `<mark>${match}</mark>`);\n\n const parentNode = textNode.parentNode;\n if (parentNode) {\n while (tempDiv.firstChild) {\n parentNode.insertBefore(tempDiv.firstChild, textNode);\n }\n parentNode.removeChild(textNode);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n forwardRef,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Align } from '../../../common/enum/align.enum';\nimport { VerticalAlign } from '../../../common/enum/vertical-align.enum';\nimport { AutoCloseIgnoreCase } from '../../../common/contract/auto-close-ignore-case';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SelectOptionDirective } from '../select-option.directive';\nimport { SelectValueDirective } from '../select-value.directive';\n\n@Component({\n selector: 'teta-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent implements ControlValueAccessor, OnInit {\n @HostBinding('class.select_multiple')\n @Input()\n multiple: boolean;\n @Input() options: any[];\n @Input() invalid: boolean;\n @Input() align: Align = Align.minWidth;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Input() autoClose = true;\n @Input() autoCloseIgnore: Array<AutoCloseIgnoreCase> = ['inside'];\n @Input() disabled: boolean;\n @Input() itemSize = 32;\n @Input() virtual: boolean;\n @Input() icon: string;\n @Input() placeholder: string;\n @Input() appendToBody: boolean;\n @Input() allowNull = true;\n\n @Input() valueRef: ((item: any) => any) | string;\n @Input() textRef: ((item: any) => string) | string;\n @Input() searchRef: string | ((item: any) => string);\n\n @ContentChild(SelectOptionDirective, { static: true })\n optionDirective: SelectOptionDirective;\n\n @ContentChild(SelectValueDirective, { static: true })\n valueDirective: SelectValueDirective;\n\n @HostBinding('class.select_open') open = false;\n\n @HostBinding('class.select') private readonly selectClass = true;\n @HostBinding('tabindex') private readonly tabindex = 0;\n\n @HostBinding('class.select_disabled')\n get isDisabled() {\n return this.disabled;\n }\n\n value: any | any[];\n searchText: string;\n\n get visibleOptions(): any[] {\n if (!this.searchText) {\n return this.options;\n }\n return this.options?.filter(\n (option) =>\n this.getSearchString(option)\n .toLowerCase()\n .indexOf(this.searchText.toLowerCase()) >= 0\n );\n }\n\n constructor(\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef\n ) {}\n\n clear() {\n let val: any;\n if (this.multiple === true) {\n val = [];\n } else {\n val = null;\n }\n this.value = val;\n this.onChange(this.value);\n this.open = false;\n this._cdr.markForCheck();\n this._cdr.detectChanges();\n }\n\n clickOption(option: any, event: MouseEvent): void {\n if (this.multiple === true) {\n if (!this.value?.length) {\n this.value = [];\n }\n if (this.value.indexOf(option) >= 0) {\n this.removeItem(option);\n } else {\n this.value = [...this.value, option];\n }\n this.onChange(this.value.map((_) => this.getValue(_)));\n } else {\n this.value = option;\n this.onChange(this.getValue(this.value));\n this.open = false;\n }\n this._cdr.markForCheck();\n this._cdr.detectChanges();\n }\n\n itemSelected(option: any): boolean {\n if (this.multiple) {\n return this.value?.indexOf(option) >= 0;\n } else {\n return this.value === option;\n }\n }\n\n removeItemClick(option: any, event: MouseEvent): void {\n event.stopPropagation();\n this.removeItem(option);\n this.onChange(this.value.map((_) => this.getValue(_)));\n }\n\n removeItem(option: any): void {\n this.value = this.value.filter((_) => _ !== option);\n }\n\n search(text: string): void {\n this.searchText = text;\n }\n\n getText(option: any): string {\n if (option == null) {\n return '';\n }\n switch (typeof this.textRef) {\n case 'string':\n return option[this.textRef];\n case 'function':\n return this.textRef(option);\n default:\n return option;\n }\n }\n\n getValue(option: any): any {\n switch (typeof this.valueRef) {\n case 'string':\n return option[this.valueRef];\n case 'function':\n return this.valueRef(option);\n default:\n return option;\n }\n }\n\n getSearchString(option: any): string {\n switch (typeof this.searchRef) {\n case 'string':\n return option[this.searchRef];\n case 'function':\n return this.searchRef(option);\n default:\n return '';\n }\n }\n\n focus() {\n this._elementRef.nativeElement.focus();\n }\n\n ngOnInit(): void {}\n\n writeValue(value: any | any[]): void {\n if (this.multiple) {\n this.value =\n value && this.options\n ? this.options.filter(\n (option) => value.indexOf(this.getValue(option)) > -1\n )\n : [];\n } else {\n this.value =\n this.options &&\n this.options.find((option) => this.getValue(option) === value);\n }\n this._cdr.detectChanges();\n }\n\n onChange: (value: any) => void = () => {};\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n onTouched = () => {};\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n\n private getSelectedValue() {}\n}\n","<teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n class=\"row row_auto select-head\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0) && placeholder\">\n {{placeholder}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-list scrollable row_auto\" (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search\">\n <teta-text-field [ngModel]=\"searchText\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"'Поиск'\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"clear()\"\n [class.list-item_active]=\"value==null\">\n Не выбрано\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"!virtual\">\n <div class=\"list-item list-item_interactive\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.list-item_active]=\"itemSelected(option)\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'primary'\"></teta-icon>\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n </div>\n </ng-container>\n <cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div class=\"select-list-item select-list-item_interactive\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'primary'\" class=\"margin-left-2\"></teta-icon>\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"chip\">\n <teta-icon [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n {{getText(item)}}\n </div>\n </div>\n </div>\n</teta-dropdown>\n\n<ng-template #optionDefault let-option>\n {{getText(option)}}\n</ng-template>\n<ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n <ng-container\n *ngFor=\"let item of value; let i = index\">{{getText(item) + (value.length === i + 1 ? '' : ', ') }}</ng-container>\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n</ng-template>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HighlightDirective} from './highlight.directive';\n\n@NgModule({\n declarations: [HighlightDirective],\n exports: [HighlightDirective],\n imports: [\n CommonModule\n ]\n})\nexport class HighlightModule {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-form-group-title',\n templateUrl: './form-group-title.component.html',\n styleUrls: ['./form-group-title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormGroupTitleComponent implements OnInit {\n @HostBinding('class.form-group-title') private readonly className = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<div class=\"font-overline form-group-title-text\">\n <ng-content></ng-content>\n</div>\n<div class=\"form-group-title-line\"></div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from './input/input.component';\nimport { TextFieldComponent } from './text-field/text-field.component';\nimport { IconModule } from '../icon/icon.module';\nimport { FormsModule } from '@angular/forms';\nimport { OnlyNumberModule } from '../../directive/only-number/only-number.module';\nimport { FormGroupTitleComponent } from './form-group-title/form-group-title.component';\n\n@NgModule({\n declarations: [InputComponent, TextFieldComponent, FormGroupTitleComponent],\n exports: [InputComponent, TextFieldComponent, FormGroupTitleComponent],\n imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule],\n})\nexport class InputModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SelectComponent} from './select/select.component';\nimport {DropdownModule} from '../dropdown/dropdown.module';\nimport {SelectOptionDirective} from './select-option.directive';\nimport {SelectValueDirective} from './select-value.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {FormsModule} from '@angular/forms';\nimport {IconModule} from '../icon/icon.module';\nimport {HighlightModule} from '../../directive/highlight/highlight.module';\nimport {InputModule} from '../input/input.module';\n\n@NgModule({\n declarations: [SelectComponent, SelectOptionDirective, SelectValueDirective],\n exports: [SelectComponent, SelectOptionDirective, SelectValueDirective],\n imports: [\n DropdownModule,\n CommonModule,\n ScrollingModule,\n FormsModule,\n IconModule,\n HighlightModule,\n InputModule,\n ],\n})\nexport class SelectModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RadioComponent } from './radio/radio.component';\nimport { RadioButtonComponent } from './radio-button/radio-button.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [RadioComponent, RadioButtonComponent],\n exports: [RadioComponent, RadioButtonComponent],\n imports: [CommonModule, FormsModule],\n})\nexport class RadioModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FilterPanelComponent } from './filter-panel/filter-panel.component';\nimport { NumericFilterComponent } from './numeric-filter/numeric-filter.component';\nimport { StringFilterComponent } from './string-filter/string-filter.component';\nimport { ListFilterComponent } from './list-filter/list-filter.component';\nimport { DateFilterComponent } from './date-filter/date-filter.component';\nimport { FilterHostComponent } from './filter-host/filter-host.component';\nimport { SelectModule } from '../select/select.module';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerModule } from '../date-picker/date-picker.module';\nimport { BooleanFilterComponent } from './boolean-filter/boolean-filter.component';\nimport { RadioModule } from '../radio/radio.module';\nimport { InputModule } from '../input/input.module';\nimport { CheckboxModule } from '../checkbox/checkbox.module';\n\n@NgModule({\n declarations: [\n FilterPanelComponent,\n NumericFilterComponent,\n StringFilterComponent,\n ListFilterComponent,\n DateFilterComponent,\n FilterHostComponent,\n BooleanFilterComponent,\n ],\n exports: [\n FilterPanelComponent,\n NumericFilterComponent,\n StringFilterComponent,\n ListFilterComponent,\n DateFilterComponent,\n FilterHostComponent,\n BooleanFilterComponent,\n ],\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n DatePickerModule,\n RadioModule,\n InputModule,\n CheckboxModule,\n ],\n})\nexport class FilterModule {}\n","import {FilterType} from '../enum/filter-type.enum';\nimport {StringFilterType} from '../enum/string-filter-type.enum';\nimport {ListFilterType} from '../enum/list-filter-type.enum';\n\nexport class FilterItem {\n /**\n * Порядковый номер\n */\n sortOrder: number = Number.MAX_VALUE;\n /**\n * Название столбца для заголовка таблицы\n */\n caption: string;\n /**\n * Подсказка\n */\n hint: string;\n /**\n * Название столбца в строке результатов\n */\n name: string;\n /**\n * Возможность сортировать поле\n */\n sortable = true;\n /**\n * Возможность фильтровать поле\n */\n filterable = true;\n /**\n * Поле для сортировки\n */\n sortField: string;\n /**\n * Поле для фильтрации\n */\n filterField: string;\n /**\n * Тип фильтра\n */\n filterType: FilterType | null;\n /**\n * Тип сравнения строкового фильтра\n */\n stringFilterType: StringFilterType;\n /**\n * Тип сравнения строкового фильтра\n */\n listFilterType: ListFilterType;\n /**\n * Строгое сравнение\n */\n strict: boolean;\n /**\n * Компонент для рендера фильтра\n */\n filterComponent: any;\n\n /**\n * Дочерние элементы\n */\n columns: FilterItem[];\n\n constructor(options?: {\n sortOrder?: number;\n name?: string;\n caption?: string;\n hint?: string;\n sortable?: boolean;\n sortField?: string;\n filterable?: boolean;\n filterField?: string;\n filterType?: FilterType | null;\n stringFilterType?: StringFilterType;\n listFilterType?: ListFilterType;\n strict?: boolean;\n filterComponent?: any;\n columns?: FilterItem[];\n }) {\n this.sortOrder = options?.sortOrder ?? Number.MAX_VALUE;\n this.name = options?.name ?? '';\n this.caption = options?.caption ?? this.name;\n this.hint = options?.hint ?? '';\n this.sortable = options?.sortable ?? true;\n this.filterable = options?.filterable ?? true;\n this.sortField = options?.sortField ?? this.name;\n this.filterField = options?.filterField ?? this.name;\n this.filterType = options?.filterType;\n this.stringFilterType = options?.stringFilterType ?? StringFilterType.Contains;\n this.listFilterType = options?.listFilterType ?? ListFilterType.None;\n this.strict = options?.strict ?? false;\n this.filterComponent = options?.filterComponent;\n this.columns = options?.columns?.map(_ => new FilterItem(_)) ?? [];\n }\n}\n","export class SortParam {\n /**\n * Поле сортировки\n */\n field: string;\n /**\n * Направление (true: Asc, false: Desc)\n */\n asc: boolean;\n /**\n * Порядок сортировки\n */\n order: number;\n\n /**\n * Инициализация из анонимного объекта\n */\n constructor(options?: {\n field?: string;\n asc?: boolean;\n order?: number;\n }) {\n if (options) {\n this.field = options.field || this.field;\n this.asc = options.asc || false;\n this.order = options.order || this.order;\n }\n }\n}\n","import { StringFilter } from './string-filter';\nimport { NumericFilter } from './numeric-filter';\nimport { DateFilter } from './date-filter';\nimport { ListFilter } from './list-filter';\nimport { SortParam } from './sort-param';\nimport { DateFilterValue } from './date-filter-value';\nimport { NumericFilterValue } from './numeric-filter-value';\nimport { ListFilterType } from '../enum/list-filter-type.enum';\nimport { BooleanFilter } from './boolean-filter';\n\nexport class FilterState {\n stringFilters: StringFilter[] = [];\n numericFilters: NumericFilter[] = [];\n dateFilters: DateFilter[] = [];\n listFilters: ListFilter[] = [];\n booleanFilters: BooleanFilter[] = [];\n sortParams: SortParam[] = [];\n\n constructor(options?: {\n stringFilters?: any[];\n booleanFilters?: any[];\n numericFilters?: any[];\n dateFilters?: any[];\n listFilters?: any[];\n sortParams?: any[];\n }) {\n if (options) {\n if (options.stringFilters && options.stringFilters.length) {\n this.stringFilters = options.stringFilters.map(\n (x: any) => new StringFilter(x)\n );\n }\n\n if (options.booleanFilters && options.booleanFilters.length) {\n this.booleanFilters = options.booleanFilters.map(\n (x: any) => new BooleanFilter(x)\n );\n }\n\n if (options.numericFilters && options.numericFilters.length) {\n this.numericFilters = options.numericFilters.map(\n (x: any) => new NumericFilter(x)\n );\n }\n\n if (options.dateFilters && options.dateFilters.length) {\n this.dateFilters = options.dateFilters.map(\n (x: any) => new DateFilter(x)\n );\n }\n\n if (options.listFilters && options.listFilters.length) {\n this.listFilters = options.listFilters.map(\n (x: any) => new ListFilter(x)\n );\n }\n\n if (options.sortParams && options.sortParams.length) {\n this.sortParams = options.sortParams.map((x: any) => new SortParam(x));\n }\n }\n }\n\n static restore(cookie: string): any {\n const state = localStorage.getItem(cookie) || 'null';\n return JSON.parse(state);\n }\n\n save(cookieName: string): void {\n if (cookieName) {\n localStorage.setItem(cookieName, JSON.stringify(this));\n }\n }\n\n addListFilter(value: ListFilter): ListFilter {\n if (this.listFilters === null || this.listFilters === undefined) {\n this.listFilters = [];\n }\n const filter = this.listFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.listFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addDateFilter(value: DateFilter): DateFilter {\n if (this.dateFilters === null || this.dateFilters === undefined) {\n this.dateFilters = [];\n }\n const filter = this.dateFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.dateFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addStringFilter(value: StringFilter): StringFilter {\n if (this.stringFilters === null || this.stringFilters === undefined) {\n this.stringFilters = [];\n }\n const filter = this.stringFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.stringFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addBooleanFilter(value: BooleanFilter): BooleanFilter {\n if (this.booleanFilters === null || this.booleanFilters === undefined) {\n this.booleanFilters = [];\n }\n const filter = this.booleanFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.booleanFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addNumericFilter(value: NumericFilter): NumericFilter {\n if (this.numericFilters === null || this.numericFilters === undefined) {\n this.numericFilters = [];\n }\n const filter = this.numericFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.numericFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n clear(): void {\n this.sortParams.length = 0;\n\n this.stringFilters.map((f: StringFilter) => {\n f.value = '';\n });\n this.booleanFilters.map((f: BooleanFilter) => {\n f.value = null;\n });\n this.dateFilters.map((f: DateFilter) => {\n f.value = new DateFilterValue({\n lessThan: null,\n greaterThan: null,\n });\n });\n this.numericFilters.map((f: NumericFilter) => {\n f.value = new NumericFilterValue({\n lessThan: null,\n greaterThan: null,\n equalsTo: null,\n });\n });\n this.listFilters.map((f: ListFilter) => {\n f.value = [];\n f.type = ListFilterType.None;\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {Message} from './model/message';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService {\n message: Observable<Message>;\n clear: Observable<string>;\n\n private _message = new Subject<Message>();\n private _clear = new Subject<string>();\n\n\n constructor() {\n this.message = this._message.asObservable();\n this.clear = this._clear.asObservable();\n }\n\n add(message: Message) {\n if (message) {\n this._message.next(message);\n }\n }\n\n addMultiple(messages: Message[]) {\n if (messages && messages.length) {\n messages.forEach((n) => {\n this._message.next(n);\n });\n }\n }\n\n clearMessages(name: string) {\n this._clear.next(name);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { Message } from '../model/message';\n\n@Component({\n selector: 'teta-message',\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MessageComponent implements AfterViewInit, OnDestroy {\n @Input() message: Message;\n @Input() index: number;\n @Output() closed: EventEmitter<any> = new EventEmitter();\n @Input() class;\n\n @HostBinding('class')\n private get getClass() {\n const result = ['message'];\n if (this.message.className?.length > 0) {\n result.push(...this.message.className);\n }\n if (this.message.palette) {\n result.push(`message-${this.message.palette}`);\n }\n return result.join(' ');\n }\n\n timeout: any;\n\n constructor() {}\n\n @HostListener('mouseleave')\n init() {\n if (!this.message.infinite) {\n this.timeout = setTimeout(() => {\n this.closed.emit({\n index: this.index,\n message: this.message,\n });\n }, this.message.duration);\n }\n }\n\n @HostListener('mouseenter')\n reset() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n\n closeMe(event: MouseEvent) {\n this.reset();\n\n this.closed.emit({\n index: this.index,\n message: this.message,\n });\n\n event.preventDefault();\n }\n\n ngAfterViewInit() {\n this.init();\n }\n\n ngOnDestroy() {\n this.reset();\n }\n}\n","<div class=\"row align-center justify-content-between\">\n <div class=\"font-title-3 padding-left-1\">\n {{message.title}}\n </div>\n <button teta-button\n [square]=\"true\"\n [palette]=\"message.palette\"\n [view]=\"'primary'\"\n (click)=\"closeMe($event)\">\n <teta-icon [name]=\"'closeBig'\"></teta-icon>\n </button>\n</div>\n<div class=\"font-body-3 padding-v-1\" *ngIf=\"!message.template && message.text\">\n {{message.text}}\n</div>\n<ng-container *ngIf=\"message.template\">\n <ng-container *ngTemplateOutlet=\"message.template; context: {$implicit: message}\"></ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MessageService } from '../message.service';\nimport { Message } from '../model/message';\nimport { Align } from '../../../common/enum/align.enum';\nimport { VerticalAlign } from '../../../common/enum/vertical-align.enum';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-message-host',\n templateUrl: './message-host.component.html',\n styleUrls: ['./message-host.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MessageHostComponent implements OnInit, OnDestroy {\n @Input() class;\n @Input() align: Align = Align.right;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Output() itemClose: EventEmitter<any> = new EventEmitter();\n\n messages: Message[] = [];\n private readonly _alignMap: Map<Align, string> = new Map<Align, string>()\n .set(Align.right, 'message-host_right')\n .set(Align.left, 'message-host_left')\n .set(Align.center, 'message-host_center');\n private readonly _valignMap: Map<VerticalAlign, string> = new Map<\n VerticalAlign,\n string\n >()\n .set(VerticalAlign.top, 'message-host_top')\n .set(VerticalAlign.center, 'message-host_vertical-center')\n .set(VerticalAlign.bottom, 'message-host_bottom');\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'message-host'];\n if (this._alignMap.has(this.align)) {\n result.push(this._alignMap.get(this.align));\n }\n if (this._valignMap.has(this.verticalAlign)) {\n result.push(this._valignMap.get(this.verticalAlign));\n }\n return result.join(' ');\n }\n\n private _alive = true;\n\n constructor(private _svc: MessageService, private _cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this._svc.message\n .pipe(takeWhile((_) => this._alive))\n .subscribe((messages) => {\n if (messages) {\n if (!this.messages) {\n this.messages = [];\n }\n this.messages.push(messages);\n }\n this._cdr.markForCheck();\n });\n\n this._svc.clear\n .pipe(takeWhile((_) => this._alive))\n .subscribe((x: string) => {\n if (!x) {\n this.messages = [];\n } else {\n this.messages = this.messages?.filter((_) => _.name !== x);\n }\n this._cdr.markForCheck();\n });\n }\n\n closedItem(event: any) {\n this.messages.splice(event.index, 1);\n this.itemClose.emit({\n message: event.message,\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","<teta-message\n *ngFor=\"let message of messages; let i=index\"\n (closed)=\"closedItem($event)\"\n [message]=\"message\"\n [index]=\"i\">\n</teta-message>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MessageHostComponent} from './message-host/message-host.component';\nimport {MessageComponent} from './message/message.component';\nimport {IconModule} from '../icon/icon.module';\nimport {ButtonModule} from '../button/button.module';\n\n@NgModule({\n declarations: [MessageHostComponent, MessageComponent],\n exports: [MessageHostComponent, MessageComponent],\n imports: [\n CommonModule,\n IconModule,\n ButtonModule\n ]\n})\nexport class MessageModule {\n}\n","import { TemplateRef } from '@angular/core';\n\nexport class Message {\n name: string | null | undefined;\n title: string | null | undefined;\n text: string | null | undefined;\n infinite: boolean;\n duration = 10000;\n className: string[] | null | undefined;\n palette = 'primary';\n template: TemplateRef<any>;\n\n constructor(options?: {\n name?: string;\n title: string;\n text?: string;\n infinite?: boolean;\n duration?: number;\n palette?: string;\n className?: string[];\n template?: TemplateRef<any>;\n }) {\n if (options) {\n this.name = options.name;\n this.title = options.title;\n this.text = options.text;\n this.infinite = options.infinite || false;\n this.className = options.className;\n if (options.palette) {\n this.palette = options.palette;\n }\n this.template = options.template;\n if (options.duration && options.duration > 0) {\n this.duration = options.duration;\n }\n }\n }\n}\n","export enum ModalCloseReason {\n resolve,\n exit,\n backdrop,\n esc,\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { IModalConfig } from '../model/i-modal-config';\nimport { IModalResult } from '../model/i-modal-result';\nimport { ModalCloseReason } from '../model/modal-close-reason.enum';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-modal-container',\n templateUrl: './modal-container.component.html',\n styleUrls: ['./modal-container.component.scss'],\n animations: [\n trigger('dialog', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(150, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(150, style({ opacity: '0' }))]),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalContainerComponent {\n @Input() config: IModalConfig;\n @Output() closeEvent = new EventEmitter<IModalResult>();\n\n @HostBinding('attr.tabindex') tabindex = -1;\n @HostBinding('@dialog') dialog = true;\n\n @HostBinding('class')\n get classList(): string {\n const classList = ['modal__window'];\n if (this.config) {\n if (this.config && this.config.class) {\n classList.push(...this.config.class);\n }\n if (this.config.backdrop) {\n classList.push('modal__backdrop');\n }\n }\n return classList.join(' ');\n }\n\n constructor(private elRef$: ElementRef) {}\n\n @HostListener('keyup', ['$event']) keyup(event: KeyboardEvent): void {\n if (this.config && this.config.esc && !event.defaultPrevented) {\n const key = event.key || event.keyCode;\n\n if (key === 'Escape' || key === 'Esc' || key === 27) {\n this.closeEvent.emit({\n reason: ModalCloseReason.esc,\n });\n }\n }\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent): void {\n if (\n this.config.closeOnBackdropClick === true &&\n this.elRef$.nativeElement === event.target\n ) {\n this.closeEvent.emit({\n reason: ModalCloseReason.backdrop,\n });\n }\n }\n}\n","<div class=\"modal__container\" [class.modal__container_resize]=\"config?.resizable\">\n <ng-content></ng-content>\n</div>\n","import {IModalResult} from './i-modal-result';\n\nexport class CurrentModal {\n close: (result?: IModalResult) => void;\n}\n","export class DynamicData {\n [key: string]: any;\n\n constructor(value: { [key: string]: any }) {\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n this[key] = value[key];\n }\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CurrentModal } from '../model/current-modal';\nimport { DynamicData } from '../../../common/contract/dynamic-data';\nimport { ModalCloseReason } from '../model/modal-close-reason.enum';\n\n@Component({\n selector: 'teta-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.scss'],\n})\nexport class DialogComponent implements OnInit {\n @Input() message: string;\n @Input() buttonText: string;\n @Input() buttonIcon: string;\n @Input() buttonPalette: string;\n @Input() showCancelButton: boolean;\n\n constructor(public modal: CurrentModal, private data: DynamicData) {}\n\n cancel() {\n this.modal.close({\n reason: ModalCloseReason.exit,\n });\n }\n\n ok() {\n this.modal.close({\n reason: ModalCloseReason.resolve,\n });\n }\n\n ngOnInit(): void {}\n}\n","<div class=\"padding-2 font-body-2\">\n {{message | transloco}}\n</div>\n<teta-toolbar class=\"justify-content-end\">\n <button teta-button\n *ngIf=\"showCancelButton\"\n (click)=\"cancel()\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\">\n {{'common.cancel' | transloco}}\n </button>\n\n <button teta-button\n (click)=\"ok()\"\n [square]=\"!buttonText?.length\"\n [palette]=\"buttonPalette\">\n <teta-icon *ngIf=\"buttonIcon\" [name]=\"buttonIcon\"></teta-icon>\n <ng-container *ngIf=\"buttonText?.length > 0\">{{buttonText | transloco}}</ng-container>\n </button>\n</teta-toolbar>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ModalContainerComponent } from './modal-container/modal-container.component';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { ToolbarModule } from '../toolbar/toolbar.module';\nimport { ButtonModule } from '../button/button.module';\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@ngneat/transloco';\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [ModalContainerComponent, DialogComponent],\n exports: [ModalContainerComponent, DialogComponent],\n imports: [\n CommonModule,\n ToolbarModule,\n ButtonModule,\n TranslocoModule,\n IconModule,\n ],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: { scope: 'common', alias: 'common' },\n multi: true,\n },\n ],\n})\nexport class ModalModule {}\n","import { Observable, Subject } from 'rxjs';\nimport { IModalResult } from './i-modal-result';\nimport { ComponentRef } from '@angular/core';\nimport { TetaContentRef } from '../../../common/contract/teta-content-ref';\nimport { ModalContainerComponent } from '../modal-container/modal-container.component';\n\nexport class ModalInstance {\n onClose: Observable<IModalResult>;\n private _onClose: Subject<IModalResult> = new Subject<IModalResult>();\n\n constructor(\n private _window: ComponentRef<ModalContainerComponent>,\n private _content: TetaContentRef\n ) {\n this.onClose = this._onClose.asObservable();\n if (this._window && this._window.instance) {\n this._window.instance.closeEvent.subscribe((event: IModalResult) => {\n this.close(event);\n });\n }\n }\n\n get window(): ComponentRef<ModalContainerComponent> {\n return this._window;\n }\n\n get component(): ComponentRef<any> | null {\n return this._content.componentRef ? this._content.componentRef : null;\n }\n\n close = (event?: IModalResult) => {\n this._onClose.next(event);\n this._onClose.complete();\n this.destroy();\n };\n\n private destroy(): void {\n this._window.destroy();\n\n if (this._content && this._content.viewRef) {\n this._content.viewRef.destroy();\n }\n }\n}\n","import {ComponentRef, ViewRef} from '@angular/core';\n\nexport class TetaContentRef {\n constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef<any>) {\n }\n}\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Injectable,\n Injector,\n Renderer2,\n RendererFactory2,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { TetaContentRef } from '../contract/teta-content-ref';\nimport { DynamicData } from '../contract/dynamic-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DynamicComponentService {\n private _renderer: Renderer2;\n\n constructor(\n private _componentFactoryResolver: ComponentFactoryResolver,\n private _rendererFactory: RendererFactory2,\n private _appRef: ApplicationRef\n ) {\n this._renderer = this._rendererFactory.createRenderer(null, null);\n }\n\n createComponent<T>(\n component: Type<T>,\n contentRef: TetaContentRef,\n injector: Injector,\n container: any\n ): ComponentRef<T> {\n const componentRef = this._componentFactoryResolver\n .resolveComponentFactory(component)\n .create(injector, contentRef.nodes);\n this._appRef.attachView(componentRef.hostView);\n container.appendChild(componentRef.location.nativeElement);\n return componentRef;\n }\n\n createContent(\n content: string | TemplateRef<any> | Type<any>,\n injector: Injector,\n context?: any\n ): TetaContentRef {\n if (content === null || content === undefined) {\n throw new Error('Content is undefined');\n }\n if (typeof content === 'string') {\n return this.fromString(content);\n } else if (content instanceof TemplateRef) {\n return this.fromTemplate(content, context);\n } else {\n return this.fromComponent(content, injector, context);\n }\n }\n\n destroy<T>(\n component: ComponentRef<T>,\n content: TetaContentRef,\n container: HTMLElement\n ): void {\n if (component) {\n this._appRef.detachView(component.hostView);\n component.destroy();\n }\n if (content && content.viewRef) {\n content.viewRef.destroy();\n }\n content = null;\n }\n\n getContext(\n content: string | TemplateRef<any> | Type<any>,\n context: any\n ): any {\n if (content instanceof TemplateRef) {\n return {\n $implicit: context,\n data: context,\n };\n }\n return context;\n }\n\n getInjector(data: DynamicData, parent: Injector): Injector {\n return Injector.create({\n providers: [\n {\n provide: DynamicData,\n useValue: data,\n },\n ],\n parent,\n });\n }\n\n private fromString(content: string): TetaContentRef {\n return new TetaContentRef([[this._renderer.createText(`${content}`)]]);\n }\n\n private fromTemplate(\n content: TemplateRef<any>,\n context: any\n ): TetaContentRef {\n const viewRef = content.createEmbeddedView(context);\n this._appRef.attachView(viewRef);\n return new TetaContentRef([viewRef.rootNodes], viewRef);\n }\n\n private fromComponent(\n content: any,\n injector: Injector,\n context: any\n ): TetaContentRef {\n const componentFactory =\n this._componentFactoryResolver.resolveComponentFactory<any>(content);\n const componentRef = componentFactory.create(injector);\n for (const key in context) {\n if (context.hasOwnProperty(key)) {\n componentRef.instance[key] = context[key];\n }\n }\n const componentNativeEl = componentRef.location.nativeElement;\n this._appRef.attachView(componentRef.hostView);\n return new TetaContentRef(\n [[componentNativeEl]],\n componentRef.hostView,\n componentRef\n );\n }\n}\n","import { Inject, Injectable, Injector, TemplateRef, Type } from '@angular/core';\nimport { ModalInstance } from './model/modal-instance';\nimport { Subject } from 'rxjs';\nimport { DynamicComponentService } from '../../common/service/dynamic-component.service';\nimport { ModalCloseReason } from './model/modal-close-reason.enum';\nimport { IModalConfig } from './model/i-modal-config';\nimport { CurrentModal } from './model/current-modal';\nimport { DynamicData } from '../../common/contract/dynamic-data';\nimport { ModalContainerComponent } from './modal-container/modal-container.component';\nimport { IModalResult } from './model/i-modal-result';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n private _stack: ModalInstance[] = [];\n private _modalChanged = new Subject<void>();\n private readonly _container: any;\n\n constructor(\n @Inject(DOCUMENT)\n private _document: any,\n private _injector: Injector,\n private _factory: DynamicComponentService\n ) {\n this._container = this._document.body;\n\n this._modalChanged.subscribe(() => {\n if (this._stack && this._stack.length > 0) {\n this.focus(this._stack[this._stack.length - 1]);\n }\n });\n }\n\n closeAll(): void {\n if (this._stack && this._stack.length > 0) {\n this._stack.forEach((instance: ModalInstance) => {\n instance.close({\n reason: ModalCloseReason.exit,\n });\n });\n }\n }\n\n create(\n content: string | TemplateRef<any> | Type<any>,\n data?: any,\n config?: IModalConfig,\n injector?: Injector\n ): ModalInstance {\n if (content === null || content === undefined) {\n throw new Error('Specify template or component to render');\n }\n if (config === null || config === undefined) {\n config = Object.assign(\n {\n backdrop: true,\n class: [],\n esc: true,\n },\n config\n );\n }\n if (injector === null || injector === undefined) {\n injector = this._injector;\n }\n const currentModal = new CurrentModal();\n const modalData = new DynamicData(data);\n\n injector = this.getInjector(currentModal, modalData, injector);\n const contentInstance = this._factory.createContent(\n content,\n injector,\n this.getContext(content, modalData, currentModal)\n );\n const window = this._factory.createComponent(\n ModalContainerComponent,\n contentInstance,\n injector,\n this._container\n );\n window.instance.config = config;\n\n const instance = new ModalInstance(window, contentInstance);\n currentModal.close = instance.close;\n this.register(instance);\n return instance;\n }\n\n private getContext(\n content: string | TemplateRef<any> | Type<any>,\n context: any,\n currentModal: CurrentModal\n ): any {\n if (content instanceof TemplateRef) {\n return {\n $implicit: {\n modal: currentModal,\n data: context,\n },\n modal: currentModal,\n data: context,\n close: (result: IModalResult): void => {\n currentModal.close(result);\n },\n };\n }\n return context;\n }\n\n private getInjector(\n currentModal: CurrentModal,\n data: DynamicData,\n parent: Injector\n ): Injector {\n return Injector.create({\n providers: [\n {\n provide: CurrentModal,\n useValue: currentModal,\n },\n {\n provide: DynamicData,\n useValue: data,\n },\n ],\n parent,\n });\n }\n\n private register(instance: ModalInstance): void {\n this._stack.push(instance);\n this._modalChanged.next();\n instance.onClose.subscribe(() => this.unregister(instance));\n }\n\n private unregister = (instance: ModalInstance) => {\n const index = this._stack.indexOf(instance);\n if (index > -1) {\n this._stack.splice(index, 1);\n this._modalChanged.next();\n }\n };\n\n private focus(instance: ModalInstance): void {\n if (instance && instance.window && instance.window.location.nativeElement) {\n setTimeout(() => {\n instance.window.location.nativeElement.focus();\n }, 0);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from './modal.service';\nimport { Observable } from 'rxjs';\nimport { IModalResult } from './model/i-modal-result';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { map } from 'rxjs/operators';\nimport { ModalCloseReason } from './model/modal-close-reason.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n constructor(private _modal: ModalService) {}\n\n alert(message: string): void {\n this.createDialog(message, 'common.ok', null, 'primary', false);\n }\n\n confirm(\n message: string,\n buttonText: string = 'common.ok',\n buttonIcon: string = null,\n buttonPalette: string = 'primary'\n ): Observable<boolean> {\n return this.createDialog(\n message,\n buttonText,\n buttonIcon,\n buttonPalette,\n true\n ).pipe(\n map((result: IModalResult) => result.reason === ModalCloseReason.resolve)\n );\n }\n\n private createDialog(\n message: string,\n buttonText: string = 'common.ok',\n buttonIcon: string = null,\n buttonPalette: string = 'primary',\n showCancelButton: boolean = true\n ): Observable<IModalResult> {\n const dialog = this._modal.create(\n DialogComponent,\n {\n message,\n buttonText,\n buttonIcon,\n buttonPalette,\n showCancelButton,\n },\n {\n esc: true,\n backdrop: true,\n }\n );\n return dialog.onClose;\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-pager',\n templateUrl: './pager.component.html',\n styleUrls: ['./pager.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PagerComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>pager works!</p>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PagerComponent} from './pager/pager.component';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [PagerComponent],\n exports: [PagerComponent],\n imports: [\n CommonModule,\n IconModule\n ]\n})\nexport class PagerModule {\n}\n","export class PagerState {\n /**\n * Текущая страница\n */\n page = 0;\n\n /**\n * Количество записей на странице\n */\n pageSize = 30;\n /**\n * Количество страниц\n */\n count: number;\n /**\n * Количество записей\n */\n totalCount: number;\n /**\n * первая видимая страница\n */\n start: number;\n /**\n * Последняя видимая страница\n */\n end: number;\n /**\n * Список страниц\n */\n pages: number[];\n\n /**\n * Инициализация из анонимного объекта\n */\n constructor(options?: {\n page?: number;\n pageSize?: number;\n count?: number;\n totalCount?: number;\n }) {\n if (options) {\n this.pageSize = options.pageSize || 30;\n this.count = options.count !== null && options.count !== undefined ? options.count : this.count;\n this.totalCount = options.totalCount !== null && options.totalCount !== undefined ? options.totalCount : this.totalCount;\n this.page = options.page !== null && options.page !== undefined ? options.page : 0;\n this.createPages();\n }\n }\n\n createPages() {\n if (this.page > this.count) {\n this.page = this.count > 0 ? this.count - 1 : 0;\n }\n\n let start = 0;\n let end = this.count - 1;\n if (this.count > 5) {\n start = this.page - 2;\n end = this.page + 2;\n if (start < 0) {\n start = 0;\n end = 4;\n }\n const rightShift = this.count - 1 - end;\n if (rightShift < 0) {\n start = this.count - 5;\n end = this.count - 1;\n }\n }\n\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n\n this.start = start;\n this.end = end;\n this.pages = arr;\n }\n}\n","import {PagerState} from '../model/pager-state';\n\nexport class PagerUtil {\n static getPage<T>(data: T[], paging: PagerState): T[] {\n return data.slice(paging.page * paging.pageSize, (paging.page + 1) * paging.pageSize);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-panel',\n templateUrl: './panel.component.html',\n styleUrls: ['./panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('panel', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(300, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(150, style({ opacity: '0' }))]),\n ]),\n ],\n})\nexport class PanelComponent implements OnInit {\n @Input() width = 500;\n\n @HostBinding('@panel')\n private get panel() {\n return {\n value: true,\n params: { width: this.width },\n };\n }\n\n @HostBinding('class.column') private readonly column = true;\n @HostBinding('class.column_fixed') private readonly auto = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PanelComponent} from './panel/panel.component';\n\n@NgModule({\n declarations: [PanelComponent],\n exports: [PanelComponent],\n imports: [\n CommonModule\n ]\n})\nexport class PanelModule {\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnInit,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const SLIDER_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ProgressBarComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-progress-bar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n providers: [SLIDER_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressBarComponent implements OnInit, ControlValueAccessor {\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 0;\n\n @ViewChild('progressSlider', { static: true })\n private readonly slider: ElementRef;\n @HostBinding('class.progress') private readonly progressBar = true;\n\n percent: number;\n moving: boolean;\n\n set value(value: number) {\n this._value = value;\n this.percent = this.setPercentFromValue();\n this._cdr.detectChanges();\n }\n\n get value() {\n return this._value;\n }\n\n get containerPosition() {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return { min: rect.x, max: rect.x + rect.width };\n }\n\n private _value;\n\n constructor(\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n private _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: any\n ) {}\n\n @HostListener('document:mouseup', ['$event']) mouseup() {\n this.moving = false;\n this.restoreGlobalMouseEvents();\n this.removeListener();\n }\n\n @HostListener('click', ['$event']) click = (event: MouseEvent) => {\n this.getMousePositionInPercents(event);\n };\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {}\n\n writeValue(value: number): void {\n this.value = value;\n }\n\n mousedown = () => {\n this.moving = true;\n this.preventGlobalMouseEvents();\n this.addListener();\n };\n\n ngOnInit(): void {}\n\n private mousemove = (event: MouseEvent) => {\n event.preventDefault();\n this.getMousePositionInPercents(event);\n };\n\n private getMousePositionInPercents = (event: MouseEvent) => {\n const position = event.clientX - this.containerPosition.min;\n let percent =\n (100 / (this.containerPosition.max - this.containerPosition.min)) *\n position;\n percent = percent <= 0 ? 0 : percent > 100 ? 100 : percent;\n this.setValue(this.getValueFromPercent(percent));\n };\n\n private setValue(value: number) {\n this.value = value;\n this.onChange(this.value);\n }\n\n private getValueFromPercent(percent: number): number {\n if (percent === 0) {\n return this.min;\n }\n if (percent === 100) {\n return this.max;\n }\n const exactValue = this.min + (percent * (this.max - this.min)) / 100;\n if (!this.step || this.step <= 0 || isNaN(this.step)) {\n return exactValue;\n }\n return (\n Math.round((exactValue - this.min) / this.step) * this.step + this.min\n );\n }\n\n private preventGlobalMouseEvents = () => {\n this._document.body.style['pointer-events'] = 'none';\n };\n\n private restoreGlobalMouseEvents = () => {\n this._document.body.style['pointer-events'] = 'auto';\n };\n\n private addListener() {\n this._document.addEventListener('mousemove', this.mousemove);\n }\n\n private removeListener() {\n this._document.removeEventListener('mousemove', this.mousemove);\n }\n\n private setPercentFromValue() {\n const range = this.max - this.min;\n return (100 / range) * (this.value - this.min);\n }\n}\n","<div class=\"progress-bar\" [style.width.%]=\"percent\"></div>\n<div class=\"progress-slider\"\n [class.progress-slider_visible]=\"moving\"\n #progressSlider\n (mousedown)=\"mousedown()\"\n (click)=\"click($event)\"\n [style.left.%]=\"percent\"></div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ProgressBarComponent} from './progress-bar/progress-bar.component';\n\n@NgModule({\n declarations: [ProgressBarComponent],\n exports: [ProgressBarComponent],\n imports: [\n CommonModule\n ]\n})\nexport class ProgressBarModule {\n}\n","import {\n AbstractControl,\n FormControl,\n FormGroup,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { TableColumn } from '../component/table/contract/table-column';\nimport { ArrayUtil } from '../common/util/array-util';\n\nexport class FormsUtil {\n static validateAllFormFields(formGroup: FormGroup) {\n Object.keys(formGroup.controls).forEach((field) => {\n const control = formGroup.get(field);\n if (control instanceof FormControl) {\n control.markAsTouched({ onlySelf: true });\n control.markAsDirty({ onlySelf: true });\n } else if (control instanceof FormGroup) {\n this.validateAllFormFields(control);\n }\n });\n }\n\n static controlIsInvalid(formGroup: FormGroup, controlName: string) {\n return (\n formGroup.controls[controlName]?.invalid &&\n formGroup.controls[controlName]?.dirty\n );\n }\n\n static matchValuesValidator(\n matchTo: string\n ): (control: AbstractControl) => ValidationErrors | null {\n return (control: AbstractControl): ValidationErrors | null =>\n !!control.parent &&\n !!control.parent.value &&\n control.value === control.parent.controls[matchTo].value\n ? null\n : { isMatching: false };\n }\n\n static requiredIf(\n value: boolean\n ): (control: AbstractControl) => ValidationErrors | null {\n return (control: AbstractControl): ValidationErrors | null =>\n !!control.parent &&\n !!control.parent.value &&\n control.value != null &&\n value\n ? null\n : { isMatching: false };\n }\n\n static initFormFromColumns(columns: TableColumn[], dataItem: any) {\n const form = new FormGroup({});\n const flat = ArrayUtil.flatten(columns, 'columns');\n flat.forEach((column: TableColumn) => {\n const control = new FormControl(\n {\n value: dataItem ? dataItem[column.name] : undefined,\n disabled: !column.editable,\n },\n FormsUtil.getValidators(column)\n );\n form.registerControl(column.name, control);\n });\n return form;\n }\n\n static getValidators(column: TableColumn) {\n const validators = [];\n if (column.required) {\n validators.push(Validators.required);\n }\n if (column.minValue != null) {\n validators.push(Validators.min(column.minValue));\n }\n if (column.maxValue != null) {\n validators.push(Validators.max(column.maxValue));\n }\n return validators;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const TOGGLE_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-toggle',\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n providers: [TOGGLE_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleComponent implements ControlValueAccessor, OnInit {\n @HostBinding('attr.tabindex') tabindex = 0;\n @HostBinding('class.toggle') toggleClass = true;\n\n get paletteClass() {\n if (this.palette) {\n return `toggle-button-${this.palette}`;\n }\n }\n\n @Input() palette = 'primary';\n @Input() noLabel: boolean;\n\n /**\n * компонент неактивен\n */\n @HostBinding('class.toggle_disabled')\n @Input()\n disabled: boolean;\n\n /**\n * Значение\n */\n private model$: boolean;\n\n get model(): any {\n return this.model$;\n }\n\n set model(v: any) {\n if (v !== this.model$) {\n this.model$ = v;\n this.onChange(v);\n }\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n @HostListener('click')\n changeValue() {\n if (this.disabled) {\n return;\n }\n this.model = !this.model;\n }\n\n writeValue(model: boolean) {\n this.model$ = model;\n this.cdr.markForCheck();\n }\n\n ngOnInit() {}\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","<span class=\"font-body-3 row_auto\" *ngIf=\"!noLabel\">\n <ng-content></ng-content>\n</span>\n<div class=\"toggle-button\" [class.toggle-button-on]=\"model\" [ngClass]=\"paletteClass\">\n <div class=\"toggle-button-circle\"></div>\n</div>\n","import {\n ChangeDetectorRef,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DynamicComponentService } from '../common/service/dynamic-component.service';\nimport { Align } from '../common/enum/align.enum';\nimport { VerticalAlign } from '../common/enum/vertical-align.enum';\nimport { filter, takeWhile } from 'rxjs/operators';\nimport { TetaContentRef } from '../common/contract/teta-content-ref';\nimport { PopupContentComponent } from '../component/dynamic-component/popup-content/popup-content.component';\n\n@Directive()\nexport abstract class DynamicContentBaseDirective implements OnInit, OnDestroy {\n @Input() data: any;\n @Input() className: string | string[];\n @Input() align: Align = Align.left;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Input() appendToBody: boolean;\n @Input() set open(open: boolean) {\n this._open = open;\n if (this._open) {\n this.createContentRef();\n } else {\n this.destroyContentRef();\n }\n }\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n protected _alive = true;\n protected _componentRef: ComponentRef<any>;\n protected _content: TetaContentRef;\n protected _open = false;\n\n protected abstract get _dynamicContent():\n | string\n | TemplateRef<any>\n | Type<any>;\n\n protected constructor(\n protected _document: any,\n protected _elementRef: ElementRef,\n protected _service: DynamicComponentService,\n protected _injector: Injector,\n protected _zone: NgZone,\n protected _cdr: ChangeDetectorRef\n ) {\n this._zone.onStable\n .pipe(\n takeWhile((_) => this._alive),\n filter((_) => this._open)\n )\n .subscribe((_) => {\n this.setPosition();\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n this.destroyContentRef();\n }\n\n ngOnInit(): void {}\n\n protected createContentRef<T>(\n className?: string | string[]\n ): ComponentRef<T> {\n if (!this._componentRef) {\n this._open = true;\n const injector = this._service.getInjector(this.data, this._injector);\n const context = this._service.getContext(this._dynamicContent, this.data);\n this._content = this._service.createContent(\n this._dynamicContent,\n this._injector,\n context\n );\n this._componentRef = this._service.createComponent(\n PopupContentComponent,\n this._content,\n injector,\n this.appendToBody ? this._document.body : this._elementRef.nativeElement\n );\n if (className) {\n this._componentRef.instance.addClass(className);\n }\n }\n return this._componentRef;\n }\n\n protected destroyContentRef(): void {\n if (this._open) {\n this._open = false;\n this._service.destroy(\n this._componentRef,\n this._content,\n this.appendToBody ? this._document.body : this._elementRef.nativeElement\n );\n this._componentRef = null;\n }\n }\n\n protected abstract setPosition(): void;\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport {DynamicContentBaseDirective} from '../dynamic-content-base.directive';\nimport {DOCUMENT} from '@angular/common';\nimport {DynamicComponentService} from '../../common/service/dynamic-component.service';\nimport {PositionUtil} from '../../common/util/position-util';\nimport {ArrayUtil} from '../../common/util/array-util';\nimport {Align} from '../../common/enum/align.enum';\nimport {VerticalAlign} from '../../common/enum/vertical-align.enum';\nimport {DomUtil} from '../../common/util/dom-util';\nimport Timeout = NodeJS.Timeout;\n\n@Directive({\n selector: '[tetaHint]',\n})\nexport class HintDirective\n extends DynamicContentBaseDirective\n implements OnDestroy {\n /**\n * Строка, шаблон или компонент для создания контекстного меню\n */\n @Input() tetaHint: string | TemplateRef<any> | Type<any>;\n @Input() override align: Align = Align.center;\n @Input() override verticalAlign: VerticalAlign = VerticalAlign.top;\n @Input() delay = 300;\n\n get _dynamicContent() {\n return this.tetaHint;\n }\n\n private _timeout: Timeout;\n private _componentRect: any;\n\n constructor(\n @Inject(DOCUMENT)\n protected override _document: any,\n protected override _elementRef: ElementRef,\n protected override _service: DynamicComponentService,\n protected override _injector: Injector,\n protected override _zone: NgZone,\n protected override _cdr: ChangeDetectorRef\n ) {\n super(_document, _elementRef, _service, _injector, _zone, _cdr);\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(): void {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(() => {\n this.createHint();\n }, this.delay);\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(): void {\n clearTimeout(this._timeout);\n if (this._open && this._componentRef) {\n this._timeout = setTimeout(() => {\n this.destroyContentRef();\n }, this.delay);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent): void {\n if (\n this._open &&\n this._componentRef &&\n DomUtil.clickedInside(this._componentRef.location.nativeElement, event)\n ) {\n event.stopPropagation();\n }\n }\n\n protected setPosition() {\n if (this._componentRef && this._open) {\n if (!this._componentRect) {\n this._componentRect =\n this._componentRef.location.nativeElement.getBoundingClientRect();\n }\n const position = PositionUtil.getPosition(\n this._elementRef.nativeElement.getBoundingClientRect(),\n this._componentRect,\n this.align,\n this.verticalAlign,\n 0,\n 4\n );\n PositionUtil.setElementPosition(\n this._componentRef.location.nativeElement,\n position\n );\n }\n }\n\n private createHint(): void {\n if (!this._dynamicContent) {\n return;\n }\n this._componentRef = this.createContentRef();\n this._componentRef.instance.className = [\n ...ArrayUtil.asArray(this.className),\n 'hint',\n ];\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableColumn } from '../../../table/contract/table-column';\nimport { IDictionary } from '../../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../../common/contract/i-id-name';\nimport { FilterType } from '../../../filter/enum/filter-type.enum';\nimport { FormGroup } from '@angular/forms';\nimport { FormsUtil } from '../../../../util/forms-util';\nimport { TranslocoService } from '@ngneat/transloco';\nimport { filter, takeWhile } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\nimport {Align} from '../../../../common/enum/align.enum';\n\n@Component({\n selector: 'teta-property-grid-item',\n templateUrl: './property-grid-item.component.html',\n styleUrls: ['./property-grid-item.component.scss'],\n})\nexport class PropertyGridItemComponent<T> implements OnInit, OnDestroy {\n @Input() column: TableColumn;\n @Input() hideNonEditable: boolean;\n @Input() dict: IDictionary<IIdName<any>[]>;\n\n @Input()\n set formGroup(form: FormGroup) {\n this._formGroup = form;\n this._formSub?.unsubscribe();\n this._formSub = this._formGroup.controls[this.column.name].valueChanges\n .pipe(\n takeWhile(() => this._alive),\n filter(\n (_) =>\n this.column.filterType !== FilterType.string &&\n this.column.filterType !== FilterType.number\n )\n )\n .subscribe((_) => {\n this.controlValueChange.emit({\n id: _,\n name: this.column.name,\n });\n });\n }\n\n get formGroup() {\n return this._formGroup;\n }\n\n @Input() horizontal: boolean;\n @Output() controlValueChange = new EventEmitter<IIdName<any>>();\n align = Align;\n filterTypeEnum = FilterType;\n\n private _formGroup: FormGroup;\n private _formSub: Subscription;\n\n get caption(): string {\n if (this.column.filterType === FilterType.boolean) {\n return '';\n }\n return `${this.column.caption}${\n this.column.unit ? `, ${this.column.unit}` : ''\n }`;\n }\n\n private _alive = true;\n\n constructor(private _transloco: TranslocoService) {}\n\n getDict() {\n const dict = this.dict[this.column.name];\n if (this.column.parentName?.length > 0) {\n return dict?.filter(\n (dictItem: IIdName<any>) =>\n dictItem.parentId ===\n this.formGroup.getRawValue()[this.column.parentName]\n );\n }\n return dict;\n }\n\n controlIsInvalid(controlName: string) {\n return FormsUtil.controlIsInvalid(this.formGroup, controlName);\n }\n\n getError(column: TableColumn): string {\n const control = this.formGroup.get(column.name);\n if (control?.hasError('required')) {\n return this._transloco.translate('errors.field_is_required');\n }\n if (control?.hasError('min')) {\n return this._transloco.translate('errors.min_value', {\n value: column.minValue,\n });\n }\n if (control?.hasError('max')) {\n return this._transloco.translate('errors.max_value', {\n value: column.maxValue,\n });\n }\n }\n\n valueChange() {\n this.controlValueChange.emit({\n id: this.formGroup.controls[this.column.name].value,\n name: this.column.name,\n });\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy() {\n this._alive = false;\n this._formSub?.unsubscribe();\n }\n}\n","<teta-input [label]=\"caption\"\n [tetaHint]=\"column.hint\"\n [align]=\"align.left\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n *ngIf=\"column.editable || !hideNonEditable\">\n <ng-container [ngSwitch]=\"column.filterType\">\n <teta-select class=\"row_auto\"\n *ngSwitchCase=\"filterTypeEnum.list\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n <teta-date-picker *ngSwitchCase=\"filterTypeEnum.date\"\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-date-picker>\n <teta-toggle *ngSwitchCase=\"filterTypeEnum.boolean\"\n [formControlName]=\"column.name\">{{column.caption}}</teta-toggle>\n <teta-text-field class=\"row_auto\"\n *ngSwitchDefault\n (focusout)=\"valueChange()\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-text-field>\n </ng-container>\n <div *ngIf=\"controlIsInvalid(column.name)\"\n ngProjectAs=\"message\"\n class=\"color-red-50\">\n {{getError(column)}}\n </div>\n</teta-input>\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableColumn } from '../../../table/contract/table-column';\nimport { IDictionary } from '../../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../../common/contract/i-id-name';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'teta-property-grid-group',\n templateUrl: './property-grid-group.component.html',\n styleUrls: ['./property-grid-group.component.scss'],\n})\nexport class PropertyGridGroupComponent<T> implements OnInit {\n @HostBinding('class.form-container') formClass = true;\n @Input() column: TableColumn;\n @Input() hideNonEditable: boolean;\n @Input() dict: IDictionary<IIdName<any>[]>;\n @Input() formGroup: FormGroup;\n @Input() horizontal: boolean;\n @Output() controlValueChange = new EventEmitter<IIdName<any>>();\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<div class=\"font-title-3\">{{column.caption}}</div>\n<ng-container *ngFor=\"let col of column.columns\">\n <ng-container *ngIf=\"col.columns?.length < 1\">\n <teta-property-grid-item *ngIf=\"column.editable || !hideNonEditable\"\n [dict]=\"dict\"\n [column]=\"col\"\n [hideNonEditable]=\"hideNonEditable\"\n (controlValueChange)=\"controlValueChange.emit($event)\"\n [horizontal]=\"horizontal\"\n [formGroup]=\"formGroup\"></teta-property-grid-item>\n </ng-container>\n <ng-container *ngIf=\"col.columns?.length > 0\">\n <teta-property-grid-group [dict]=\"dict\"\n [column]=\"col\"\n [hideNonEditable]=\"hideNonEditable\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"controlValueChange.emit($event)\"\n [formGroup]=\"formGroup\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableColumn } from '../../table/contract/table-column';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'teta-property-grid',\n templateUrl: './property-grid.component.html',\n styleUrls: ['./property-grid.component.scss'],\n})\nexport class PropertyGridComponent<T> implements OnInit, OnDestroy {\n @HostBinding('class.form-container') formClass = true;\n\n @Input() hideNonEditable: boolean;\n @Input() columns: TableColumn[];\n @Input() dict: IDictionary<IIdName<any>[]>;\n @Input() formGroup: FormGroup;\n @Input() horizontal: boolean;\n\n @Output() controlValueChange = new EventEmitter<IIdName<any>>();\n\n private _alive = true;\n\n constructor() {}\n\n onControlValueChange(event: IIdName<any>) {\n const affected = this.columns.filter((_) => _.parentName === event.name);\n if (affected?.length) {\n affected.forEach((item) => {\n const value = this.formGroup.getRawValue()[item.name];\n if (value) {\n const dictValue = this.getDictValue(value, item.name);\n if (dictValue && dictValue.parentId !== event.id) {\n const newObj = {};\n newObj[item.name] = null;\n this.formGroup.patchValue(newObj);\n }\n }\n });\n }\n this.controlValueChange.emit(event);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n private getDictValue(value: any, name: string) {\n return this.dict[name]?.find((_) => _.id === value);\n }\n}\n","<ng-container *ngIf=\"columns?.length\">\n <ng-container *ngFor=\"let column of columns\">\n <teta-property-grid-item *ngIf=\"column.columns?.length < 1 && (column.editable || !hideNonEditable)\"\n [dict]=\"dict\"\n [column]=\"column\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-item>\n <teta-property-grid-group *ngIf=\"column.columns?.length > 0\"\n [dict]=\"dict\"\n [column]=\"column\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-numeric-item-default',\n templateUrl: './numeric-item-default.component.html',\n styleUrls: ['./numeric-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumericItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>numeric-item-default works!</p>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-date-item-default',\n templateUrl: './date-item-default.component.html',\n styleUrls: ['./date-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>date-item-default works!</p>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-list-item-default',\n templateUrl: './list-item-default.component.html',\n styleUrls: ['./list-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>list-item-default works!</p>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-string-item-default',\n templateUrl: './string-item-default.component.html',\n styleUrls: ['./string-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StringItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>string-item-default works!</p>\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {formatNumber} from '../util/number-helper';\n\n@Pipe({\n name: 'tetaNumber'\n})\nexport class NumberPipe implements PipeTransform {\n transform(value: number,\n decimalLength: number = 2,\n chunkDelimiter: string = '',\n decimalDelimiter: string = '.',\n chunkLength: number = 3): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (value !== value / 1) {\n return value.toString();\n }\n value /= 1;\n return formatNumber(value,\n decimalLength,\n chunkDelimiter,\n decimalDelimiter,\n chunkLength);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NumberPipe} from './number.pipe';\n\n@NgModule({\n declarations: [NumberPipe],\n exports: [\n NumberPipe\n ],\n imports: [\n CommonModule\n ]\n})\nexport class NumberPipeModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToggleComponent } from './toggle/toggle.component';\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [ToggleComponent],\n exports: [ToggleComponent],\n imports: [CommonModule, IconModule],\n})\nexport class ToggleModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HintDirective} from './hint.directive';\nimport {DynamicComponentModule} from '../../component/dynamic-component/dynamic-component.module';\n\n@NgModule({\n declarations: [HintDirective],\n exports: [HintDirective],\n imports: [\n CommonModule,\n DynamicComponentModule\n ]\n})\nexport class HintModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PropertyGridComponent} from './property-grid/property-grid.component';\nimport {NumericItemDefaultComponent} from './default/numeric-item-default/numeric-item-default.component';\nimport {DateItemDefaultComponent} from './default/date-item-default/date-item-default.component';\nimport {ListItemDefaultComponent} from './default/list-item-default/list-item-default.component';\nimport {StringItemDefaultComponent} from './default/string-item-default/string-item-default.component';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NumberPipeModule} from '../../pipe/number-pipe/number-pipe.module';\nimport {DatePickerModule} from '../date-picker/date-picker.module';\nimport {SelectModule} from '../select/select.module';\nimport {PropertyGridGroupComponent} from './property-grid/property-grid-group/property-grid-group.component';\nimport {PropertyGridItemComponent} from './property-grid/property-grid-item/property-grid-item.component';\nimport {OnlyNumberModule} from '../../directive/only-number/only-number.module';\nimport {InputModule} from '../input/input.module';\nimport {ToggleModule} from '../toggle/toggle.module';\nimport {TRANSLOCO_SCOPE, TranslocoModule} from '@ngneat/transloco';\nimport {HintModule} from '../../directive/hint/hint.module';\n\n@NgModule({\n declarations: [\n PropertyGridComponent,\n NumericItemDefaultComponent,\n DateItemDefaultComponent,\n ListItemDefaultComponent,\n StringItemDefaultComponent,\n PropertyGridGroupComponent,\n PropertyGridItemComponent,\n ],\n exports: [PropertyGridComponent],\n imports: [\n CommonModule,\n FormsModule,\n NumberPipeModule,\n DatePickerModule,\n SelectModule,\n OnlyNumberModule,\n InputModule,\n ToggleModule,\n ReactiveFormsModule,\n TranslocoModule,\n HintModule,\n ],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: {scope: 'errors', alias: 'errors'},\n multi: true,\n },\n ],\n})\nexport class PropertyGridModule {\n}\n","export enum SidebarPosition {\n left,\n right,\n bottom,\n top\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { SidebarPosition } from '../sidebar-position.enum';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('sidebar', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(300, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(300, style({ opacity: '0' }))]),\n ]),\n ],\n})\nexport class SidebarComponent implements OnInit {\n @Input() position: SidebarPosition = SidebarPosition.left;\n @Input() backdrop: boolean;\n @Input() open: boolean;\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Input() className: string | string[];\n\n @HostBinding('style.z-index') zIndex = 10;\n\n sidebarPosition = SidebarPosition;\n\n constructor() {}\n\n setOpen(value: boolean) {\n this.open = value;\n this.openChange.emit(this.open);\n }\n\n ngOnInit(): void {}\n}\n","<div *ngIf=\"backdrop && open\"\n [@sidebar]\n (click)=\"setOpen(false)\"\n class=\"sidebar-backdrop\"></div>\n<div class=\"sidebar\"\n [@sidebar]\n [ngClass]=\"className\"\n [class.sidebar-top]=\"position === sidebarPosition.top\"\n [class.sidebar-bottom]=\"position === sidebarPosition.bottom\"\n [class.sidebar-left]=\"position === sidebarPosition.left\"\n [class.sidebar-right]=\"position === sidebarPosition.right\"\n *ngIf=\"open\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport {ButtonModule} from '../button/button.module';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [SidebarComponent],\n exports: [SidebarComponent],\n imports: [\n CommonModule,\n ButtonModule,\n IconModule\n ]\n})\nexport class SidebarModule { }\n","import {Injectable} from '@angular/core';\nimport {Observable, ReplaySubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SwitchService {\n readonly value: Observable<any>;\n private readonly value$: ReplaySubject<any> = new ReplaySubject<any>(1);\n\n constructor() {\n this.value = this.value$.asObservable();\n }\n\n setValue(value: any) {\n this.value$.next(value);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SwitchService } from '../switch.service';\nimport { filter, takeWhile } from 'rxjs/operators';\n\nexport const SWITCH_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-switch',\n templateUrl: './switch.component.html',\n styleUrls: ['./switch.component.scss'],\n providers: [SWITCH_CONTROL_VALUE_ACCESSOR, SwitchService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n @HostBinding('class.switch') switchClass = true;\n\n private _alive = true;\n private _value: any;\n\n constructor(private svc: SwitchService, private cdr: ChangeDetectorRef) {\n this.svc.value\n .pipe(\n takeWhile((_) => this._alive),\n filter((_) => _ !== this._value)\n )\n .subscribe((_) => {\n this.onChange(_);\n this._value = _;\n });\n }\n\n writeValue(model: any) {\n this._value = model;\n this.svc.setValue(model);\n this.cdr.markForCheck();\n }\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { SwitchService } from '../switch.service';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-switch-button',\n templateUrl: './switch-button.component.html',\n styleUrls: ['./switch-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchButtonComponent implements OnInit, OnDestroy {\n @Input() value: any;\n @Input() class: string;\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'switch-button'];\n if (\n this.svcValue === this.value ||\n (this.svcValue instanceof Array && this.svcValue.indexOf(this.value) >= 0)\n ) {\n result.push('switch-button_active');\n }\n return result.join(' ');\n }\n\n private svcValue: any;\n private _alive = true;\n\n constructor(private svc: SwitchService, private cdr: ChangeDetectorRef) {\n this.svc.value.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.svcValue = _;\n this.cdr.markForCheck();\n });\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent): void {\n this.svc.setValue(this.value);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SwitchComponent} from './switch/switch.component';\nimport {SwitchButtonComponent} from './switch-button/switch-button.component';\n\n\n@NgModule({\n declarations: [SwitchComponent, SwitchButtonComponent],\n exports: [SwitchComponent, SwitchButtonComponent],\n imports: [\n CommonModule\n ]\n})\nexport class SwitchModule {\n}\n","import * as hash from 'object-hash';\n\nexport class TableRow<T> {\n set edit(value: boolean) {\n if (value !== this._edit) {\n this._edit = value;\n this._hash = null;\n }\n }\n\n get edit(): boolean {\n return this._edit;\n }\n\n expanded = false;\n showDetails = false;\n data: T;\n isGroup: boolean;\n level: number;\n path: any[] = [];\n groupColumn: string;\n groupValue: any[] = [];\n\n // children: GridRow<T>[] = [];\n // parents: GridRow<T>[];\n // private backup: any = {};\n private _edit = false;\n private _hash: string | null;\n\n constructor(data?: any) {\n if (data) {\n this.data = data;\n }\n }\n\n public get hash(): string {\n if (!this._hash) {\n const hashObj: any = { ...this.data };\n if (hashObj.children) {\n delete hashObj.children;\n }\n this._hash = hash.sha1(hashObj);\n }\n return this._hash;\n }\n\n public editData(items?: any): void {\n this.data = items;\n this._hash = null;\n }\n}\n","import {FilterItem} from '../../filter/contarct/filter-item';\nimport {FilterType} from '../../filter/enum/filter-type.enum';\nimport {StringFilterType} from '../../filter/enum/string-filter-type.enum';\nimport {ListFilterType} from '../../filter/enum/list-filter-type.enum';\nimport {TableRow} from './table-row';\nimport {AggregationType} from '../enum/aggregation-type.enum';\nimport {TemplateRef} from '@angular/core';\nimport {ICellCoordinates} from './i-cell-coordinates';\n\nexport class TableColumn extends FilterItem {\n /**\n * Ширина\n */\n width = 150;\n /**\n * Коэффициент растяжения ячейки\n */\n flex = 0;\n /**\n * Стобец закреплен\n */\n locked: boolean;\n /**\n * Название столбца в строке результатов\n */\n override name: string;\n /**\n * Название столбца родителя\n */\n parentName: string;\n /**\n * Название столбца для заголовка таблицы\n */\n override caption: string;\n /**\n * Единицы измерения\n */\n unit: string;\n /**\n * список style классов для шапки таблицы\n */\n headCellClass: string[];\n /**\n * список style классов для ячейки таблицы\n */\n cellClass: string[];\n /**\n * Дополнительные данные, свободное описание, доступны внутри компонета ячейки, можно прокинуть callback например\n */\n data: any;\n /**\n * Колонка доступна для редактирования\n */\n editable: boolean | ((coordinates: ICellCoordinates<any>) => boolean);\n /**\n * Компонент для рендера ячейки\n */\n cellComponent: any;\n /**\n * Компонент для рендера заголовка столбца ячейки\n */\n headCellComponent: any;\n /**\n * Custom head dropdown for column\n */\n headDropdownTemplate: TemplateRef<any>;\n /**\n * Группировать по этому столбцу\n */\n groupBy: boolean;\n /**\n * Порядок группировки\n */\n groupingOrder = 0;\n /**\n *\n */\n groupByFn: ((row: TableRow<any>) => string) | undefined;\n /**\n * Дочерние колонки\n */\n override columns: TableColumn[];\n\n /**\n * Aggregate type\n */\n aggregate: AggregationType;\n\n /**\n * Значение по умолчанию при создании записи\n */\n defaultValue: any;\n\n /**\n * Значение по умолчанию при создании записи\n */\n maxValue: number;\n\n /**\n * Значение по умолчанию при создании записи\n */\n minValue: number;\n\n /**\n * Поле обязательно для заполнения\n */\n required: boolean;\n\n /**\n * Инициализация из анонимного объекта\n */\n constructor(options?: {\n width?: number;\n flex?: number;\n sortOrder?: number;\n locked?: boolean;\n name?: string;\n parentName?: string;\n caption?: string;\n hint?: string;\n unit?: string;\n sortable?: boolean;\n sortField?: string;\n filterable?: boolean;\n filterField?: string;\n filterType?: FilterType | null;\n stringFilterType?: StringFilterType;\n listFilterType?: ListFilterType;\n strict?: boolean;\n headCellClass?: string[];\n cellClass?: string[];\n data?: any;\n editable?: boolean | ((coordinates: ICellCoordinates<any>) => boolean);\n objectType?: boolean;\n cellComponent?: any;\n headCellComponent?: any;\n headDropdownTemplate?: TemplateRef<any>;\n filterComponent?: any;\n groupBy?: boolean;\n groupingOrder?: number;\n groupByFn?: (row: TableRow<any>) => string;\n columns?: any[];\n aggregate?: AggregationType;\n defaultValue?: any;\n maxValue?: number;\n minValue?: number;\n required?: boolean;\n }) {\n super(options);\n this.width = options?.width ?? 150;\n this.flex = options?.flex ?? 0;\n this.headCellClass = options?.headCellClass ?? [];\n this.cellClass = options?.cellClass ?? [];\n this.locked = options?.locked ?? false;\n this.parentName = options?.parentName;\n this.unit = options?.unit ?? '';\n this.data = options?.data;\n this.editable = options?.editable ?? true;\n this.groupBy = options?.groupBy ?? false;\n this.groupingOrder = options?.groupingOrder ?? 0;\n this.groupByFn = options?.groupByFn;\n this.headCellComponent = options?.headCellComponent;\n this.headDropdownTemplate = options?.headDropdownTemplate;\n this.cellComponent = options?.cellComponent;\n this.aggregate = options?.aggregate;\n this.defaultValue = options?.defaultValue;\n this.maxValue = options?.maxValue;\n this.minValue = options?.minValue;\n this.required = options?.required;\n this.columns = options?.columns?.map((x) => new TableColumn(x)) ?? [];\n }\n}\n","import {TableColumn} from './table-column';\n\nexport class ColumnReorderEvent {\n source: TableColumn;\n target: TableColumn;\n\n constructor(source: TableColumn, target: TableColumn) {\n this.source = source;\n this.target = target;\n }\n}\n","import { FilterState } from '../../filter/contarct/filter-state';\nimport { TableColumn } from '../contract/table-column';\nimport { SortParam } from '../../filter/contarct/sort-param';\nimport { FilterType } from '../../filter/enum/filter-type.enum';\nimport { SortEvent } from '../contract/sort-event';\n\nexport class StateUtil {\n static hasSortedColumns(state: FilterState): boolean {\n return state.sortParams && state.sortParams.length > 0;\n }\n\n static hasFilteredColumns(state: FilterState): boolean {\n let hasFilters = false;\n if (\n state.stringFilters &&\n state.stringFilters.some((filter) => filter.value && filter.value.length)\n ) {\n hasFilters = true;\n }\n if (\n state.listFilters &&\n state.listFilters.some((filter) => filter.value && filter.value.length)\n ) {\n hasFilters = true;\n }\n if (\n state.numericFilters &&\n state.numericFilters.some(\n (filter) =>\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined) ||\n (filter.value.equalsTo !== null &&\n filter.value.equalsTo !== undefined))\n )\n ) {\n hasFilters = true;\n }\n if (\n state.dateFilters &&\n state.dateFilters.some(\n (filter) =>\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined))\n )\n ) {\n hasFilters = true;\n }\n\n return hasFilters;\n }\n\n static getSortState(\n state: FilterState,\n column: TableColumn\n ): SortParam | null {\n if (state?.sortParams && state.sortParams.length) {\n const param = state.sortParams.find((x) => x.field === column.sortField);\n if (param) {\n return param;\n }\n }\n return null;\n }\n\n static isColumnFiltered(state: FilterState, column: TableColumn): boolean {\n if (!column.filterable) {\n return;\n }\n let filtered = false;\n switch (column.filterType) {\n case FilterType.string:\n if (state?.stringFilters) {\n const filter = state.stringFilters.find(\n (x) => x.field === column.filterField\n );\n if (filter && filter.value && filter.value.length) {\n filtered = true;\n }\n }\n break;\n case FilterType.list:\n if (state?.listFilters) {\n const filter = state.listFilters.find(\n (x) => x.field === column.filterField\n );\n if (filter && filter.value && filter.value.length) {\n filtered = true;\n }\n }\n break;\n case FilterType.number:\n if (state?.numericFilters) {\n const filter = state.numericFilters.find(\n (x) => x.field === column.filterField\n );\n if (\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined) ||\n (filter.value.equalsTo !== null &&\n filter.value.equalsTo !== undefined))\n ) {\n filtered = true;\n }\n }\n break;\n case FilterType.date:\n if (state?.dateFilters) {\n const filter = state.dateFilters.find(\n (x) => x.field === column.filterField\n );\n if (\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined))\n ) {\n filtered = true;\n }\n }\n break;\n }\n return filtered;\n }\n\n static sortColumn(sortEvent: SortEvent, state: FilterState): FilterState {\n const column = sortEvent.column;\n const shiftKey = sortEvent.shiftKey;\n const sort = state.sortParams.find(\n (sortParam: SortParam) => sortParam.field === column.sortField\n );\n if (sort === null || sort === undefined) {\n if (!shiftKey) {\n state.sortParams.length = 0;\n }\n state.sortParams.push(\n new SortParam({ field: column.sortField, asc: true, order: 0 })\n );\n } else {\n if (!sort.asc) {\n state.sortParams = StateUtil.clearSortParam(sort, state.sortParams);\n } else {\n sort.asc = !sort.asc;\n if (!shiftKey) {\n state.sortParams = [sort];\n }\n }\n }\n return new FilterState(state);\n }\n\n static clearSortParam(sort: SortParam, sortParams: SortParam[]) {\n const index = sortParams.indexOf(sort);\n sortParams.splice(index, 1);\n return sortParams;\n }\n\n static clearSort(column: TableColumn, state: FilterState): FilterState {\n state.sortParams = state.sortParams.filter(\n (_) => _.field !== column.sortField\n );\n return new FilterState(state);\n }\n\n static clearAllSort(state: FilterState): FilterState {\n state.sortParams = [];\n return new FilterState(state);\n }\n}\n","export enum SelectType {\n none,\n multiple,\n single\n}\n","export class TableColumnStore {\n width: number;\n flex: number;\n locked: boolean;\n name: string;\n columns: TableColumnStore[];\n\n constructor(options?: {\n width?: number;\n flex?: number;\n sortOrder?: number;\n locked?: boolean;\n name?: string;\n columns?: any[];\n }) {\n if (options) {\n this.width = options?.width;\n this.flex = options?.flex;\n this.locked = options?.locked;\n this.name = options?.name;\n this.columns = options?.columns?.map((x) => new TableColumnStore(x));\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {TableRow} from '../contract/table-row';\nimport {ICellCoordinates} from '../contract/i-cell-coordinates';\nimport {TableColumn} from '../contract/table-column';\nimport {FilterState} from '../../filter/contarct/filter-state';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {ColumnResizeEvent} from '../contract/column-resize-event';\nimport {ColumnReorderEvent} from '../contract/column-reorder-event';\nimport {SortEvent} from '../contract/sort-event';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {StateUtil} from '../util/state-util';\nimport {SelectType} from '../enum/select-type.enum';\nimport {EditType} from '../enum/edit-type.enum';\nimport {EditEvent} from '../enum/edit-event.enum';\nimport {ListFilterType} from '../../filter/enum/list-filter-type.enum';\nimport {ListFilter} from '../../filter/contarct/list-filter';\nimport {FilterType} from '../../filter/enum/filter-type.enum';\nimport {NumericFilterValue} from '../../filter/contarct/numeric-filter-value';\nimport {NumericFilter} from '../../filter/contarct/numeric-filter';\nimport {StringFilter} from '../../filter/contarct/string-filter';\nimport {DateFilterValue} from '../../filter/contarct/date-filter-value';\nimport {DateFilter} from '../../filter/contarct/date-filter';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {DateUtil} from '../../../util/date-util';\nimport objectHash from 'object-hash';\nimport {TableColumnStore} from '../contract/table-column-store';\nimport {ICellValue} from '../contract/i-cell-value';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TableService<T> {\n columns: Observable<TableColumn[]>;\n displayData: Observable<TableRow<T>[]>;\n dict: Observable<IDictionary<IIdName<any>[]>>;\n state: Observable<FilterState>;\n selectType: SelectType;\n editRowStart: Observable<ICellCoordinates<T>>;\n editRowStop: Observable<ICellCoordinates<T>>;\n\n editCellStart: Observable<ICellCoordinates<T>>;\n editCellStop: Observable<ICellCoordinates<T>>;\n valueChanged: Observable<ICellCoordinates<T>>;\n valueSet: Observable<ICellValue<T>>;\n stateChanged: Observable<FilterState>;\n filterClear: Observable<TableColumn>;\n groupToggle: Observable<TableRow<T>>;\n selectedRows: Observable<TableRow<T>[]>;\n activeRow: Observable<TableRow<T>>;\n hiddenColumns: Observable<string[]>;\n scrollIndex: Observable<number>;\n\n editType: EditType;\n editEvent: EditEvent;\n rowEditable: boolean | ((row: TableRow<T>) => boolean);\n // cellEditable: boolean | ((row: ICellCoordinates<T>) => boolean);\n\n get dragSource() {\n return this._dragSource;\n }\n\n private initialColumnsHash: string;\n private initialColumns: TableColumn[] = [];\n private displayColumns: TableColumn[] = [];\n private _columns: BehaviorSubject<TableColumn[]> = new BehaviorSubject<TableColumn[]>([]);\n private initialData: TableRow<T>[] = [];\n private _displayData: BehaviorSubject<TableRow<T>[]> = new BehaviorSubject<TableRow<T>[]>([]);\n private _dict: BehaviorSubject<IDictionary<IIdName<any>[]>> =\n new BehaviorSubject<IDictionary<IIdName<any>[]>>({});\n private _state: BehaviorSubject<FilterState> =\n new BehaviorSubject<FilterState>(new FilterState());\n private _cookieName: string;\n private _hiddenCookieName: string;\n private _columnsCookieName: string;\n private _editRowStart = new Subject<ICellCoordinates<T> | null>();\n private _editRowStop = new Subject<ICellCoordinates<T> | null>();\n private _editCellStart = new Subject<ICellCoordinates<T> | null>();\n private _editCellStop = new Subject<ICellCoordinates<T> | null>();\n private _valueChanged = new Subject<ICellCoordinates<T> | null>();\n private _valueSet = new Subject<ICellValue<T>>();\n private _stateChanged = new Subject<FilterState>();\n private _filterClear = new Subject<TableColumn>();\n private _dragSource: TableColumn;\n private _groupToggle = new Subject<TableRow<T>>();\n private _selectedRows = new BehaviorSubject<TableRow<T>[]>([]);\n private _activeRow = new BehaviorSubject<TableRow<T>>(null);\n private _hiddenColumns = new BehaviorSubject<string[]>([]);\n private _scrollIndex = new Subject<number>();\n\n private _currentEditRow: ICellCoordinates<T>;\n private _currentEditCell: ICellCoordinates<T>;\n\n constructor() {\n this.columns = this._columns.asObservable();\n this.displayData = this._displayData.asObservable();\n this.dict = this._dict.asObservable();\n this.state = this._state.asObservable();\n this.editRowStart = this._editRowStart.asObservable();\n this.editRowStop = this._editRowStop.asObservable();\n this.editCellStart = this._editCellStart.asObservable();\n this.editCellStop = this._editCellStop.asObservable();\n this.valueChanged = this._valueChanged.asObservable();\n this.valueSet = this._valueSet.asObservable();\n this.stateChanged = this._stateChanged.asObservable();\n this.filterClear = this._filterClear.asObservable();\n this.groupToggle = this._groupToggle.asObservable();\n this.selectedRows = this._selectedRows.asObservable();\n this.activeRow = this._activeRow.asObservable();\n this.hiddenColumns = this._hiddenColumns.asObservable();\n this.scrollIndex = this._scrollIndex.asObservable();\n }\n\n setData(data: T[]): void {\n this.initialData = data?.map((_) => new TableRow<T>(_));\n this._displayData.next(this.initialData);\n }\n\n setDict(dict: IDictionary<IIdName<any>[]>): void {\n this._dict.next(dict);\n }\n\n setColumns(columns: TableColumn[]): void {\n this.initialColumns = columns ? columns.map((_) => new TableColumn(_)) : [];\n this.initialColumnsHash = objectHash(this.initialColumns, {\n algorithm: 'sha1',\n ignoreUnknown: true,\n excludeKeys: key => key === 'headDropdownTemplate',\n });\n const restored = this.restoreColumns();\n\n if (restored) {\n this.setDisplayColumns(restored);\n } else {\n this.setDisplayColumns(this.initialColumns);\n }\n }\n\n restoreDefaultColumns() {\n this.setDisplayColumns(this.initialColumns);\n this.clearColumnsState();\n }\n\n updateColumns(columns: TableColumn[]): void {\n this.setDisplayColumns(columns);\n this.saveColumnsState();\n }\n\n saveColumnsState() {\n if (this._cookieName) {\n localStorage.setItem(\n this._columnsCookieName,\n JSON.stringify({\n hash: this.initialColumnsHash,\n columns: this.displayColumns.map((_) => new TableColumnStore(_)),\n })\n );\n }\n }\n\n clearColumnsState() {\n localStorage.removeItem(this._columnsCookieName);\n }\n\n setDisplayColumns(columns: TableColumn[]): void {\n this.displayColumns = columns ? columns.map((_) => new TableColumn(_)) : [];\n this._columns.next(this.displayColumns);\n }\n\n restoreColumns() {\n const savedColumns = JSON.parse(\n localStorage.getItem(this._columnsCookieName)\n );\n if (savedColumns && savedColumns.hash === this.initialColumnsHash) {\n return this.restoreColumnsState(savedColumns.columns);\n }\n return null;\n }\n\n restoreColumnsState(columns: TableColumnStore[]) {\n return columns.map((column: TableColumnStore) => {\n const found = ArrayUtil.findRecursive(\n this.initialColumns,\n (item) => item.name === column.name,\n 'columns'\n );\n const resultColumn = new TableColumn(found);\n resultColumn.width = column.width;\n resultColumn.flex = column.flex;\n resultColumn.locked = column.locked;\n if (column.columns?.length > 0) {\n resultColumn.columns = this.restoreColumnsState(column.columns);\n }\n return resultColumn;\n });\n }\n\n setState(state: FilterState): void {\n state.save(this._cookieName);\n this._state.next(state);\n }\n\n setCookieName(name: string): void {\n this._cookieName = name;\n this._hiddenCookieName = `${this._cookieName}_hidden_columns`;\n this._columnsCookieName = `${this._cookieName}_columns`;\n }\n\n restoreState(): void {\n let state: FilterState;\n if (this._cookieName?.length > 0 && FilterState.restore(this._cookieName)) {\n let newState = Object.assign(\n this._state.value,\n FilterState.restore(this._cookieName)\n );\n newState = DateUtil.convertDateStringsToDates(newState);\n state = new FilterState(newState);\n } else {\n state = new FilterState();\n }\n this.setState(state);\n }\n\n saveHiddenColumns(hiddenColumns: string[]): void {\n localStorage.setItem(this._hiddenCookieName, JSON.stringify(hiddenColumns));\n }\n\n restoreHiddenColumns(): void {\n const hiddenColumns = localStorage.getItem(this._hiddenCookieName) || '[]';\n this._hiddenColumns.next(JSON.parse(hiddenColumns));\n }\n\n sort(sortEvent: SortEvent): void {\n if (sortEvent.column.sortable) {\n this.setState(StateUtil.sortColumn(sortEvent, this._state.value));\n }\n }\n\n clearSort(column: TableColumn): void {\n this.setState(StateUtil.clearSort(column, this._state.value));\n }\n\n clearAllSort(): void {\n this.setState(StateUtil.clearAllSort(this._state.value));\n }\n\n clearFilter(column: TableColumn) {\n const state = this._state.value;\n if (column !== null && column !== undefined && column.filterable) {\n switch (column.filterType) {\n case FilterType.date:\n state.addDateFilter(\n new DateFilter({\n name: column.name,\n field: column.filterField,\n value: new DateFilterValue(),\n })\n );\n break;\n case FilterType.string:\n state.addStringFilter(\n new StringFilter({\n name: column.name,\n field: column.filterField,\n value: '',\n })\n );\n break;\n case FilterType.number:\n state.addNumericFilter(\n new NumericFilter({\n name: column.name,\n field: column.filterField,\n value: new NumericFilterValue(),\n })\n );\n break;\n case FilterType.list:\n state.addListFilter(\n new ListFilter({\n name: column.name,\n field: column.filterField,\n value: [],\n type: ListFilterType.None,\n })\n );\n break;\n }\n this.setState(new FilterState(state));\n }\n }\n\n clearAllFilters() {\n const state = this._state.value;\n state.stringFilters = [];\n state.listFilters = [];\n state.numericFilters = [];\n state.dateFilters = [];\n this.setState(new FilterState(state));\n }\n\n pinColumn(column: TableColumn): void {\n this.displayColumns.forEach((col: TableColumn) => {\n if (col.name === column.name) {\n col.locked = !col.locked;\n }\n });\n this.updateColumns(this.displayColumns);\n }\n\n dragStart(column: TableColumn): void {\n this._dragSource = column;\n }\n\n lockPreviousColumns(column: TableColumn, element: HTMLElement) {\n const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true).sort(\n (a, b) => Number(b.locked) - Number(a.locked)\n );\n const index = flat.indexOf(column);\n const previous = flat.slice(0, index).filter((_) => _.flex > 0);\n if (previous?.length > 0) {\n const tableElement = this.getTableElement(element);\n previous.forEach((item: TableColumn) => {\n const itemCol = tableElement.querySelector(\n `teta-head-cell[data-column=${item.name}]`\n ) as HTMLElement;\n if (itemCol) {\n item.flex = 0;\n item.width = itemCol.clientWidth;\n }\n });\n }\n }\n\n resizeColumn(event: ColumnResizeEvent) {\n if (event.column !== null && event.column !== undefined) {\n event.column.width = event.newWidth < 50 ? 50 : event.newWidth;\n event.column.flex = 0;\n }\n this._columns.next(this.displayColumns);\n this.saveColumnsState();\n }\n\n autosizeColumn(column: TableColumn, target: HTMLElement) {\n const tableElement = this.getTableElement(target);\n this.setColumnAutoWidth(column, tableElement as HTMLElement);\n this._columns.next(this.displayColumns);\n this.saveColumnsState();\n }\n\n autosizeAllColumns(target: HTMLElement) {\n const tableElement = this.getTableElement(target);\n const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true);\n flat.forEach((col) =>\n this.setColumnAutoWidth(col, tableElement as HTMLElement)\n );\n this._columns.next(this.displayColumns);\n this.saveColumnsState();\n }\n\n reorderColumn(column: TableColumn, insertBefore: boolean): void {\n const event = new ColumnReorderEvent(this._dragSource, column);\n if (event.source !== event.target) {\n const sourceParent = this.findParent(event.source, this.displayColumns);\n const targetParent = this.findParent(event.target, this.displayColumns);\n\n if (sourceParent && targetParent) {\n const sourceIndex = sourceParent.indexOf(event.source);\n sourceParent.splice(sourceIndex, 1);\n let targetIndex = targetParent.indexOf(event.target);\n if (!insertBefore) {\n targetIndex = targetIndex + 1;\n }\n targetParent.splice(targetIndex, 0, event.source);\n event.source.locked = event.target.locked;\n\n this.updateColumns(this.displayColumns);\n }\n }\n }\n\n startEditRow(cellCoordinates: ICellCoordinates<T>): void {\n if (this._currentEditRow?.row !== cellCoordinates?.row) {\n if (this._currentEditRow != null) {\n this._editRowStop.next(this._currentEditRow);\n }\n if (cellCoordinates === null) {\n this._editRowStart.next(cellCoordinates);\n this._currentEditRow = cellCoordinates;\n } else {\n if (\n this.boolOrFuncCallback<TableRow<T>>(this.rowEditable)(\n cellCoordinates.row\n )\n ) {\n this._editRowStart.next(cellCoordinates);\n this._currentEditRow = cellCoordinates;\n }\n }\n }\n }\n\n startEditCell(cellCoordinates: ICellCoordinates<T>): void {\n if (\n this._currentEditCell?.column.name !== cellCoordinates?.column.name ||\n this._currentEditCell?.row !== cellCoordinates?.row\n ) {\n if (this._currentEditCell != null) {\n this._editCellStop.next(this._currentEditCell);\n }\n if (\n this.boolOrFuncCallback<ICellCoordinates<T>>(cellCoordinates.column.editable)(\n cellCoordinates\n )\n ) {\n this._editCellStart.next(cellCoordinates);\n this._currentEditCell = cellCoordinates;\n }\n }\n }\n\n setActiveRow(row: TableRow<T>): void {\n this._activeRow.next(row);\n }\n\n selectRows(rows: TableRow<T>[]): void {\n this._selectedRows.next(rows);\n }\n\n selectRow(row: TableRow<T>): void {\n if (this.selectType === SelectType.none) {\n return;\n }\n if (this.selectType === SelectType.single) {\n this._selectedRows.next([row]);\n } else {\n this._selectedRows.next([...this._selectedRows.value, row]);\n }\n }\n\n deselectRow(row: TableRow<T>): void {\n if (this.selectType === SelectType.none) {\n return;\n }\n if (this.selectType === SelectType.single) {\n this._selectedRows.next([]);\n } else {\n this._selectedRows.next(\n this._selectedRows.value.filter((_) => _ !== row)\n );\n }\n }\n\n selectAll() {\n this._selectedRows.next(this._displayData.value);\n }\n\n deselectAll() {\n this._selectedRows.next([]);\n }\n\n allRowsSelected(): boolean | null {\n if (\n this._displayData.value?.length &&\n this._selectedRows.value?.length &&\n this._displayData.value.every(\n (_) => this._selectedRows.value.indexOf(_) >= 0\n )\n ) {\n return true;\n } else if (\n this._selectedRows.value == null ||\n this._selectedRows.value.length === 0\n ) {\n return false;\n }\n return null;\n }\n\n setHiddenColumns(value: string[]) {\n this.saveHiddenColumns(value);\n this._hiddenColumns.next(value);\n }\n\n columnIsHidden(column: TableColumn) {\n return this._hiddenColumns.value.indexOf(column.name) >= 0;\n }\n\n toggleGroup(row: TableRow<T>): void {\n this._groupToggle.next(row);\n }\n\n changeValue(coordinates: ICellCoordinates<T>): void {\n this._valueChanged.next(coordinates);\n }\n\n setValue(cellValue: ICellValue<T>): void {\n this._valueSet.next(cellValue);\n }\n\n getRowByIndex(rowIndex: string) {\n return this._displayData.value[parseInt(rowIndex, 10)];\n }\n\n getColumnByName(columnName: string) {\n return ArrayUtil.findRecursive(\n this.displayColumns,\n (iterableNode) => columnName === iterableNode.name,\n 'columns'\n );\n }\n\n scrollToIndex(index: number) {\n this._scrollIndex.next(null);\n this._scrollIndex.next(index);\n }\n\n boolOrFuncCallback<M>(variable: boolean | ((row: M) => boolean)) {\n return (args: M) => {\n if (typeof variable === 'boolean') {\n return variable;\n } else if (this.isFunction(variable)) {\n return (variable as (row: M) => boolean)(args);\n }\n return true;\n };\n }\n\n private findParent(\n column: TableColumn,\n columns: TableColumn[]\n ): TableColumn[] | null {\n const found = columns.find((x) => x.name === column.name);\n if (found !== null && found !== undefined) {\n return columns;\n }\n for (let i = 0, l = columns.length; i < l; i++) {\n const col = columns[i];\n if (col.columns && col.columns.length) {\n const result = this.findParent(column, col.columns);\n if (result !== null && result !== undefined) {\n return result;\n }\n }\n }\n return null;\n }\n\n private getTableElement(element: HTMLElement) {\n return element.closest('teta-table');\n }\n\n private isFunction(obj: any) {\n return !!(obj && obj?.constructor && obj?.call && obj?.apply);\n }\n\n private setColumnAutoWidth(column: TableColumn, table: HTMLElement) {\n const cells = table.querySelectorAll(\n `teta-cell[data-column=${column.name}] .cell-text`\n );\n let maxWidth = 0;\n cells.forEach((cell) => {\n if (cell.scrollWidth > maxWidth) {\n maxWidth = cell.scrollWidth;\n }\n });\n column.flex = 0;\n column.width = maxWidth + 20;\n }\n}\n","import {TableRow} from '../contract/table-row';\nimport {TableColumn} from '../contract/table-column';\n\nexport abstract class GroupRowComponentBase<T> {\n /**\n * The row details are displayed for\n */\n abstract row: TableRow<T>;\n /**\n * displayed columns\n */\n abstract columns: TableColumn[];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { GroupRowComponentBase } from '../../base/group-row-component-base';\nimport { TableRow } from '../../contract/table-row';\nimport { TableColumn } from '../../contract/table-column';\n\n@Component({\n selector: 'teta-group-row',\n templateUrl: './group-row.component.html',\n styleUrls: ['./group-row.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupRowComponent<T>\n extends GroupRowComponentBase<T>\n implements OnInit\n{\n @Input() row: TableRow<T>;\n @Input() columns: TableColumn[];\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {}\n}\n","<span>{{row.groupValue[row.level]}} ()</span>\n<!--<span>{{row.groupValue[row.level]}} ({{row.children.length}})</span>-->\n","export enum EditType {\n cell,\n row\n}\n","export enum EditEvent {\n click,\n focus,\n doubleClick\n}\n","export class TableContextMenuConfig {\n contextMenu = true;\n copy = true;\n delete = true;\n add = true;\n paste = true;\n\n constructor(options?: {\n contextMenu?: boolean;\n copy?: boolean;\n delete?: boolean;\n add?: boolean;\n paste?: boolean;\n }) {\n if (options) {\n this.contextMenu = options?.contextMenu;\n this.copy = options?.copy;\n this.delete = options?.delete;\n this.add = options?.add;\n this.paste = options?.paste;\n }\n }\n}\n","import {TableColumn} from '../contract/table-column';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {SortParam} from '../../filter/contarct/sort-param';\nimport {ListFilterType} from '../../filter/enum/list-filter-type.enum';\nimport {ListFilter} from '../../filter/contarct/list-filter';\nimport {NumericFilter} from '../../filter/contarct/numeric-filter';\nimport {DateFilter} from '../../filter/contarct/date-filter';\nimport {StringFilterType} from '../../filter/enum/string-filter-type.enum';\nimport {StringFilter} from '../../filter/contarct/string-filter';\nimport {FilterState} from '../../filter/contarct/filter-state';\n\nexport class TableUtil {\n public static getColumnLeaves(column: TableColumn): TableColumn[] | null {\n if (column?.columns?.length > 0) {\n return ArrayUtil.flatten(column.columns, 'columns', true);\n }\n return null;\n }\n\n public static getGridTemplateColumns(columns: TableColumn[]): string {\n const res = columns?.map((column: TableColumn) =>\n column.flex > 0 ? `minmax(${column.width}px, ${column.flex}fr)` : `${column.width}px`).join(' ');\n return res;\n }\n\n static getData<T>(data: T[], state: FilterState): T[] {\n let result: T[] = data;\n result = TableUtil.filterData(result, state);\n result = TableUtil.sortData(result, state);\n return result;\n }\n\n static sortData<T>(data: T[], state: FilterState): T[] {\n let result: T[] = data;\n const func = (sortParam: SortParam) => {\n result = TableUtil.sort(result, sortParam);\n };\n if (state?.sortParams?.length > 0) {\n state.sortParams.forEach(func);\n }\n return result;\n }\n\n static filterData<T>(data: T[], state: FilterState): T[] {\n let result: T[] = data;\n if (state?.stringFilters?.length) {\n const stringFilter = (filter: StringFilter) => {\n result = TableUtil.filterString(result, filter);\n };\n state.stringFilters.forEach(stringFilter);\n }\n if (state?.dateFilters?.length) {\n const dateFilter = (filter: DateFilter) => {\n result = TableUtil.filterDate(result, filter);\n };\n state.dateFilters.forEach(dateFilter);\n }\n if (state?.numericFilters?.length) {\n const numericFilter = (filter: NumericFilter) => {\n result = TableUtil.filterNumber(result, filter);\n };\n state.numericFilters.forEach(numericFilter);\n }\n if (state?.listFilters?.length) {\n const listFilter = (filter: ListFilter) => {\n result = TableUtil.filterList(result, filter);\n };\n state.listFilters.forEach(listFilter);\n }\n return result;\n }\n\n static filterString<T>(data: T[], filter: StringFilter): T[] {\n if (filter.value === null || filter.value === undefined) {\n return data;\n }\n const filterString = (row: T) => {\n const item = row as any;\n if (filter.type === StringFilterType.EndsWith) {\n return item[filter.field].endsWith(filter.value);\n }\n if (filter.type === StringFilterType.Equals) {\n return item[filter.field] === filter.value;\n }\n if (filter.type === StringFilterType.StartsWith) {\n return item[filter.field].startsWith(filter.value);\n }\n return item[filter.field].indexOf(filter.value) >= 0;\n };\n return data.filter(filterString);\n }\n\n static filterDate<T>(data: T[], filter: DateFilter): T[] {\n const filterDate = (row: T) => {\n const item = row as any;\n return (filter.value.lessThan === null || filter.value.lessThan === undefined\n ? true\n : filter.value.lessThan.getTime() > item[filter.field].getTime()) &&\n (filter.value.greaterThan === null || filter.value.greaterThan === undefined\n ? true\n : filter.value.greaterThan.getTime() < item[filter.field].getTime());\n };\n return data.filter(filterDate);\n }\n\n static filterNumber<T>(data: T[], filter: NumericFilter): T[] {\n const filterNumber = (row: T) => {\n const item = row as any;\n return (filter.value.lessThan === null || filter.value.lessThan === undefined\n ? true\n : filter.value.lessThan > item[filter.field]) &&\n (filter.value.greaterThan === null || filter.value.greaterThan === undefined\n ? true\n : filter.value.greaterThan < item[filter.field]) &&\n (filter.value.equalsTo === null || filter.value.equalsTo === undefined\n ? true\n : filter.value.equalsTo === item[filter.field]);\n };\n return data.filter(filterNumber);\n }\n\n static filterList<T>(data: T[], filter: ListFilter): T[] {\n if (filter.value === null || filter.value === undefined || filter.value.length < 1) {\n return data;\n }\n const filterList = (row: T) => {\n const item = row as any;\n if (filter.type === ListFilterType.Excluded) {\n return filter.value.indexOf(item[filter.field]) < 0;\n }\n return filter.value.indexOf(item[filter.field]) >= 0;\n };\n return data.filter(filterList);\n }\n\n static sort<T>(data: T[], sortParam: SortParam): T[] {\n const res = data.sort(sortParam.asc ? TableUtil.asc(sortParam.field) : TableUtil.desc(sortParam.field));\n return res;\n }\n\n static desc(field: string) {\n const res = (a: any, b: any) => a[field] > b[field] ? -1 : 1;\n return res;\n }\n\n static asc(field: string) {\n const res = (a: any, b: any) => a[field] < b[field] ? -1 : 1;\n return res;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableService } from '../service/table.service';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-selection-head-cell',\n templateUrl: './selection-head-cell.component.html',\n styleUrls: ['./selection-head-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectionHeadCellComponent<T> implements OnInit, OnDestroy {\n @HostBinding('class.table-head__group') private readonly tableCellClass =\n true;\n\n private _alive = true;\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {}\n\n selectAll(value: boolean) {\n if (value) {\n this._svc.selectAll();\n } else {\n this._svc.deselectAll();\n }\n }\n\n allSelected() {\n return this._svc.allRowsSelected();\n }\n\n ngOnInit(): void {\n this._svc.selectedRows\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this._cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"allSelected()\"\n (ngModelChange)=\"selectAll($event)\"></teta-checkbox>\n","import { TableColumn } from './table-column';\n\nexport class ColumnResizeEvent {\n column: TableColumn;\n newWidth: number;\n\n constructor(column: TableColumn, newWidth: number) {\n this.column = column;\n this.newWidth = newWidth;\n }\n}\n","import {TableColumn} from './table-column';\n\nexport class SortEvent {\n column: TableColumn;\n shiftKey: boolean;\n\n constructor(column: TableColumn, shiftKey: boolean) {\n this.column = column;\n this.shiftKey = shiftKey;\n }\n}\n","import {Component, HostBinding} from '@angular/core';\nimport {TableColumn} from '../contract/table-column';\n\n@Component({\n template: ''\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport abstract class HeadCellComponentBase {\n @HostBinding('class.table-head__cell__component')\n\n abstract column: TableColumn;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { HeadCellComponentBase } from '../../base/head-cell-component-base';\nimport { TableColumn } from '../../contract/table-column';\n\n@Component({\n selector: 'teta-default-head-cell',\n templateUrl: './default-head-cell.component.html',\n styleUrls: ['./default-head-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultHeadCellComponent\n extends HeadCellComponentBase\n implements OnInit\n{\n private _column: TableColumn;\n\n @Input()\n set column(val: TableColumn) {\n this._column = val;\n this._cdr.detectChanges();\n }\n\n get column(): TableColumn {\n return this._column;\n }\n\n constructor(private _cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {}\n}\n","<div class=\"column column_auto align-center\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text align-center\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text align-center color-text-70\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n OnInit,\n ViewContainerRef,\n} from '@angular/core';\nimport {HeadCellComponentBase} from '../base/head-cell-component-base';\nimport {TableColumn} from '../contract/table-column';\nimport {DefaultHeadCellComponent} from '../default/default-head-cell/default-head-cell.component';\n\n@Component({\n selector: 'teta-head-cell-host',\n template: '',\n styleUrls: ['./head-cell-host.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeadCellHostComponent implements OnInit {\n private _column: TableColumn;\n private componentRef: ComponentRef<HeadCellComponentBase>;\n private init: boolean;\n\n @Input()\n set column(column: TableColumn) {\n this._column = column;\n if (this.init) {\n this.componentRef.instance.column = this._column;\n }\n }\n\n get column(): TableColumn {\n return this._column;\n }\n\n constructor(\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n ngOnInit(): void {\n if (!HeadCellComponentBase.isPrototypeOf(this.column.headCellComponent)) {\n this.column.headCellComponent = DefaultHeadCellComponent;\n }\n this.componentRef =\n this.viewContainerRef.createComponent<HeadCellComponentBase>(this.column.headCellComponent);\n this.componentRef.instance.column = this.column;\n this.init = true;\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaTabContent]'\n})\nexport class TabContentDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaTabTitle]'\n})\nexport class TabTitleDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n Input,\n QueryList,\n} from '@angular/core';\nimport { TabContentDirective } from '../tab-content.directive';\nimport { TabTitleDirective } from '../tab-title.directive';\n\nlet nextId = 0;\n\n@Component({\n selector: 'teta-tab',\n template: '',\n styleUrls: ['./tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent implements AfterContentChecked {\n /**\n * Unique tab identifier. Must be unique for the entire document for proper accessibility support.\n */\n @Input() id = `teta-tab-${nextId++}`;\n /**\n * Simple (string only) title. Use the \"ItskTabTitleDirective\" directive for more complex use-cases.\n */\n @Input() title: string;\n /**\n * Allows toggling disabled state of a given state. Disabled tabs can't be selected.\n */\n @Input() disabled = false;\n\n @ContentChild(TabTitleDirective, { static: false })\n titleTpl: TabTitleDirective;\n @ContentChild(TabContentDirective, { static: false })\n contentTpl: TabContentDirective;\n // titleTpl: TabTitleDirective | null;\n // contentTpl: TabContentDirective | null;\n\n ngAfterContentChecked(): void {\n // this.titleTpl = this.titleTemplates.first;\n // this.contentTpl = this.contentTemplates.first;\n }\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n QueryList,\n} from '@angular/core';\nimport { TabComponent } from '../tab/tab.component';\n\nexport interface ITabChangeEvent {\n activeId: string | null;\n nextId: string;\n preventDefault: () => void;\n}\n\n@Component({\n selector: 'teta-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent implements AfterContentChecked {\n @HostBinding('class.tabs') classTabs = true;\n /**\n * An identifier of an initially selected (active) tab. Use the \"select\" method to switch a tab programmatically.\n */\n @Input() activeId: string | null;\n\n /**\n * Whether the closed tabs should be hidden without destroying them\n */\n @Input() destroyOnHide = true;\n\n /**\n * A tab change event fired right before the tab selection happens. See NgbTabChangeEvent for payload details\n */\n @Output() tabChange = new EventEmitter<ITabChangeEvent>();\n\n @ContentChildren(TabComponent) tabs: QueryList<TabComponent>;\n\n constructor() {}\n\n /**\n * Selects the tab with the given id and shows its associated pane.\n * Any other tab that was previously selected becomes unselected and its associated pane is hidden.\n */\n select(tabId: string): void {\n const selectedTab = this._getTabById(tabId);\n if (\n selectedTab &&\n !selectedTab.disabled &&\n this.activeId !== selectedTab.id\n ) {\n let defaultPrevented = false;\n\n this.tabChange.emit({\n activeId: this.activeId,\n nextId: selectedTab.id,\n preventDefault: () => {\n defaultPrevented = true;\n },\n });\n\n if (!defaultPrevented) {\n this.activeId = selectedTab.id;\n }\n }\n }\n\n ngAfterContentChecked(): void {\n const activeTab = this._getTabById(this.activeId);\n this.activeId = activeTab\n ? activeTab.id\n : this.tabs.length\n ? this.tabs.first.id\n : null;\n }\n\n private _getTabById(id: string | null): TabComponent | null {\n const tabsWithId: TabComponent[] = this.tabs.filter((tab) => tab.id === id);\n return tabsWithId.length ? tabsWithId[0] : null;\n }\n}\n","<div class=\"tabs-head\" role=\"tablist\">\n <div class=\"tabs-head-item\"\n *ngFor=\"let tab of tabs\"\n (click)=\"select(tab.id);\"\n [class.tabs-head-item_active]=\"tab.id === activeId\"\n [class.tabs-head-item_disabled]=\"tab.disabled\">\n <span [id]=\"tab.id\" class=\"tabs-title\"\n role=\"tab\"\n [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\n [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n {{tab.title}}\n <ng-template [ngTemplateOutlet]=\"tab.titleTpl?.template\"></ng-template>\n </span>\n </div>\n</div>\n<div class=\"tabs-content\">\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <ng-container *ngIf=\"!destroyOnHide || tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl?.template\"></ng-template>\n </ng-container>\n </ng-template>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ITreeData } from '../../common/contract/i-tree-data';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TreeService {\n openItems: Observable<ITreeData[]>;\n private _openItems: BehaviorSubject<ITreeData[]> = new BehaviorSubject<\n ITreeData[]\n >([]);\n\n constructor() {\n this.openItems = this._openItems.asObservable();\n }\n\n compareItems: (item: ITreeData) => any = (item: ITreeData) => item;\n\n openItem(item: ITreeData) {\n const newValue = this.addOrRemove(item, this._openItems.value);\n this.setOpenItems(newValue);\n }\n\n setOpenItems(items: ITreeData[]) {\n this._openItems.next(items);\n }\n\n private addOrRemove<G>(needle: G, list: G[]): G[] {\n const found = list?.find(\n (x) => this.compareItems(x) === this.compareItems(needle)\n );\n if (found) {\n return list.filter(\n (x) => this.compareItems(x) !== this.compareItems(needle)\n );\n } else {\n return [...list, needle];\n }\n }\n}\n","import {Directive, Input, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaTemplate]'\n})\nexport class TetaTemplateDirective {\n @Input('tetaTemplate') id: string;\n\n constructor(public template: TemplateRef<any>) {\n }\n\n getId(): string {\n return this.id;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { TreeService } from '../tree.service';\nimport { takeWhile } from 'rxjs/operators';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n/**\n * TODO: Lazy загрузка дочерних элементов, Output onExpand, шаблон для иконки expand\n */\n@Component({\n selector: 'teta-tree-item',\n templateUrl: './tree-item.component.html',\n styleUrls: ['./tree-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('children', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(200, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(200, style({ opacity: '0' }))]),\n ]),\n ],\n})\nexport class TreeItemComponent implements OnInit, OnChanges, OnDestroy {\n @Input() item: ITreeData;\n @Input() depth = 0;\n @Input() padding = 16;\n @Input() childNodeName = 'children';\n @Input() template: TemplateRef<any>;\n @Input() noChildMode: boolean;\n\n @HostBinding('class.tree__item-container') private readonly treeItemClass =\n true;\n\n itemIsOpen = false;\n\n private _alive = true;\n\n get computedDepth(): number {\n return (\n this.depth +\n (this.item[this.childNodeName]?.length > 0 ? 0 : this.noChildMode ? 1 : 2)\n );\n }\n\n constructor(public service: TreeService, private _cdr: ChangeDetectorRef) {}\n\n openItem() {\n this.service.openItem(this.item);\n }\n\n ngOnInit(): void {\n this.service.openItems\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n const found = _?.find(\n (x) =>\n this.service.compareItems(x) ===\n this.service.compareItems(this.item)\n );\n this.itemIsOpen = found != null;\n this._cdr.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<div class=\"tree__item_content\" [ngClass]=\"'tree__item_content-' + computedDepth\" (click)=\"openItem()\">\n <ng-container\n *ngTemplateOutlet=\"template; context: {$implicit: item, item: item, open: itemIsOpen, service: service, depth: depth}\"></ng-container>\n</div>\n<div [@children] class=\"tree__children\" *ngIf=\"itemIsOpen && item[childNodeName]?.length > 0\">\n <teta-tree-item *ngFor=\"let child of item[childNodeName];\"\n [item]=\"child\"\n [template]=\"template\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [depth]=\"depth + 1\"></teta-tree-item>\n</div>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { TreeService } from '../tree.service';\nimport { TetaTemplateDirective } from '../../../directive/teta-template/teta-template.directive';\nimport { filter, takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-tree',\n templateUrl: './tree.component.html',\n styleUrls: ['./tree.component.scss'],\n providers: [TreeService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeComponent\n implements OnInit, AfterContentInit, OnChanges, OnDestroy\n{\n @Input() data: ITreeData[];\n @Output() service: EventEmitter<TreeService> =\n new EventEmitter<TreeService>();\n @Input() class;\n @Input() padding = 8;\n @Input() childNodeName = 'children';\n\n @Input()\n set openItems(items: ITreeData[]) {\n this._openItems = items;\n this._service.setOpenItems(items);\n }\n\n get noChildMode(): boolean {\n const hasChildren = this.data.find(\n (_) => _[this.childNodeName]?.length > 0\n );\n return !hasChildren;\n }\n\n @Output() openItemsChange = new EventEmitter();\n\n @ContentChild(TetaTemplateDirective, { static: true })\n template: TetaTemplateDirective;\n\n private _openItems: ITreeData[];\n private _alive = true;\n\n constructor(private _service: TreeService, private _cdr: ChangeDetectorRef) {\n this._service.openItems\n .pipe(\n takeWhile((_) => this._alive),\n filter((_) => this._openItems !== _)\n )\n .subscribe((_) => this.openItemsChange.emit(_));\n }\n\n @Input()\n set compareItems(func: (item: ITreeData) => any) {\n this._service.compareItems = func;\n }\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'tree'];\n return result.join(' ');\n }\n\n ngOnInit(): void {\n this.service.emit(this._service);\n }\n\n ngAfterContentInit(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this._cdr.detectChanges();\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","<ng-container *ngFor=\"let item of data\">\n <teta-tree-item [item]=\"item\"\n [depth]=\"0\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [noChildMode]=\"noChildMode\"\n [template]=\"template?.template\"></teta-tree-item>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { TreeService } from '../tree.service';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'teta-tree-item-toggle',\n templateUrl: './tree-item-toggle.component.html',\n styleUrls: ['./tree-item-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeItemToggleComponent implements OnInit {\n @Input() item: ITreeData;\n open: Observable<boolean>;\n\n constructor(public service: TreeService, private _cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.open = this.service.openItems.pipe(\n map((_) => {\n const found = _?.find(\n (x) =>\n this.service.compareItems(x) ===\n this.service.compareItems(this.item)\n );\n return found != null;\n })\n );\n }\n}\n","<teta-icon [name]=\"(open | async) ? 'arrowDownKey' : 'arrowRightKey'\"\n class=\"tree__icon\"></teta-icon>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableService } from '../service/table.service';\nimport { TableColumn } from '../contract/table-column';\nimport { FilterState } from '../../filter/contarct/filter-state';\nimport { StateUtil } from '../util/state-util';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { Observable } from 'rxjs';\nimport { map, takeWhile } from 'rxjs/operators';\nimport { ArrayUtil } from '../../../common/util/array-util';\nimport {SortParam} from '../../filter/contarct/sort-param';\n\n@Component({\n selector: 'teta-head-cell-dropdown',\n templateUrl: './head-cell-dropdown.component.html',\n styleUrls: ['./head-cell-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeadCellDropdownComponent<T> implements OnInit, OnDestroy {\n @Input() columns: ITreeData[];\n @Input() column: TableColumn;\n @Input() state: FilterState;\n @Input() dropDownOpen: boolean;\n @Output() dropDownOpenChange: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @Output() autosize: EventEmitter<void> = new EventEmitter<void>();\n @Output() autosizeAll: EventEmitter<void> = new EventEmitter<void>();\n\n @HostBinding('class.shadow-2') private readonly shadow = true;\n @HostBinding('class.bg-background-50') private readonly bg = true;\n\n dict: Observable<IDictionary<IIdName<any>[]>>;\n hiddenColumns: string[];\n\n get sortParam(): SortParam {\n return StateUtil.getSortState(this.state, this.column);\n }\n\n get filtered() {\n return StateUtil.isColumnFiltered(this.state, this.column);\n }\n\n get openItems() {\n if (this._openItems == null) {\n this._openItems = this.columns.map((_) => _);\n }\n return this._openItems;\n }\n\n set openItems(openItems: ITreeData[]) {\n this._openItems = openItems;\n }\n\n get childMode() {\n return this.columns.find((_: any) => _.columns?.length > 0);\n }\n\n private _openItems: ITreeData[];\n private _alive = true;\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n this.dict = this._svc.dict;\n this._svc.hiddenColumns\n .pipe(\n takeWhile((_) => this._alive),\n map((_) => [..._])\n )\n .subscribe((_) => {\n this.hiddenColumns = _;\n });\n }\n\n clearFilter() {\n this._svc.clearFilter(this.column);\n this.dropDownOpenChange.emit(false);\n this._cdr.markForCheck();\n }\n\n applyFilter() {\n this._svc.setState(new FilterState(this.state));\n this.dropDownOpenChange.emit(false);\n this._cdr.markForCheck();\n }\n\n pinColumn() {\n this._svc.pinColumn(this.column);\n }\n\n clearSort(): void {\n this._svc.clearSort(this.column);\n }\n\n clearAllSort(): void {\n this._svc.clearAllSort();\n }\n\n hasFilteredColumns() {\n return StateUtil.hasFilteredColumns(this.state);\n }\n\n hasSortedColumns() {\n return StateUtil.hasSortedColumns(this.state);\n }\n\n restoreDefaultColumns() {\n this._svc.restoreDefaultColumns();\n }\n\n clearAllFilters() {\n this._svc.clearAllFilters();\n this.dropDownOpen = false;\n this._cdr.markForCheck();\n }\n\n columnIsHidden(column: TableColumn) {\n return this.hiddenColumns.indexOf(column.name) >= 0;\n }\n\n allColumnsVisible() {\n if (this.hiddenColumns?.length <= 0) {\n return true;\n }\n const columns = ArrayUtil.flatten(this.columns, 'columns');\n const notHidden = columns.find(\n (_) => this.hiddenColumns.indexOf(_.name) < 0\n );\n if (!notHidden) {\n return false;\n }\n return null;\n }\n\n setAllColumns(value: boolean) {\n if (value) {\n this.hiddenColumns = [];\n } else {\n this.hiddenColumns = ArrayUtil.flatten(this.columns, 'columns').map(\n (_) => _.name\n );\n }\n }\n\n setColumnsVisibility() {\n this._svc.setHiddenColumns(this.hiddenColumns);\n }\n\n compareItems = (item: TableColumn) => item.name;\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n setColumnVisibility(item: TableColumn, visible: boolean) {\n this.setChildrenVisibility(item, visible, this.hiddenColumns);\n this.setParentsVisibility(item, visible, this.hiddenColumns);\n }\n\n setChildrenVisibility = (\n column: TableColumn,\n visible: boolean,\n hiddenColumns: string[]\n ) => {\n if (visible) {\n this.showColumn(column, hiddenColumns);\n } else {\n this.hideColumn(column, hiddenColumns);\n }\n if (column.columns) {\n column.columns.forEach((x) => {\n this.setChildrenVisibility(x, visible, hiddenColumns);\n });\n }\n };\n\n setParentsVisibility = (\n column: TableColumn,\n visible: boolean,\n hiddenColumns: string[]\n ) => {\n if (!visible) {\n this.hideParents(column, hiddenColumns);\n } else {\n this.showParents(column, hiddenColumns);\n }\n };\n\n showParents(column: TableColumn, hiddenColumns: string[]) {\n const parent = this.findParentColumn(column, this.columns as TableColumn[]);\n if (parent && this.columnIsHidden(parent)) {\n this.showColumn(parent, hiddenColumns);\n this.showParents(parent, hiddenColumns);\n }\n }\n\n hideParents(column: TableColumn, hiddenColumns: string[]) {\n const parent = this.findParentColumn(column, this.columns as TableColumn[]);\n if (\n parent &&\n !this.columnIsHidden(parent) &&\n parent.columns &&\n parent.columns.every((_) => this.columnIsHidden(_))\n ) {\n this.hideColumn(parent, hiddenColumns);\n this.hideParents(parent, hiddenColumns);\n }\n }\n\n hideColumn(column: TableColumn, hiddenColumns: string[]) {\n hiddenColumns.push(column.name);\n }\n\n showColumn(column: TableColumn, hiddenColumns: string[]) {\n hiddenColumns.splice(hiddenColumns.indexOf(column.name), 1);\n }\n\n private findParentColumn(\n column: TableColumn,\n columns: TableColumn[]\n ): TableColumn | null {\n return ArrayUtil.findRecursive(\n columns,\n (iterableNode) => iterableNode.columns?.indexOf(column) >= 0,\n 'columns'\n );\n }\n}\n","<teta-tabs class=\"column_auto\">\n <teta-tab *ngIf=\"column.filterable\">\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'filter'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <teta-filter-host [column]=\"column\" [state]=\"state\"\n *ngIf=\"dict | async as d\"\n [filterOptions]=\"d[column.name]\"></teta-filter-host>\n <teta-toolbar class=\"justify-content-between\">\n <button teta-button [palette]=\"'text'\" [view]=\"'ghost'\" (click)=\"clearFilter()\">\n Очистить\n </button>\n <button teta-button [palette]=\"'primary'\" (click)=\"applyFilter()\">\n <teta-icon [name]=\"'tick'\"></teta-icon>\n Применить\n </button>\n </teta-toolbar>\n </ng-template>\n </teta-tab>\n <teta-tab *ngIf=\"column.headDropdownTemplate\">\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'measurement'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <ng-container\n *ngTemplateOutlet=\"column.headDropdownTemplate; context: {$implicit: column, column: column}\"></ng-container>\n </ng-template>\n </teta-tab>\n <teta-tab>\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'menu'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <div class=\"list column_auto\">\n <div class=\"list-item list-item_interactive\" (click)=\"pinColumn()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"column.locked ? 'unpin' : 'pin'\"\n class=\"margin-right-2\"></teta-icon>\n {{column.locked ? 'Открепить' : 'Закрепить'}}\n </div>\n <div class=\"list-divider\"></div>\n <ng-container *ngIf=\"hasSortedColumns()\">\n <div class=\"list-item list-item_interactive\"\n *ngIf=\"sortParam\"\n (click)=\"clearSort()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\" class=\"margin-right-2\"></teta-icon>\n Сбросить сортировку\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"clearAllSort()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\"\n class=\"margin-right-2\"></teta-icon>\n Сбросить все сортировки\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"hasFilteredColumns()\">\n <div class=\"list-item list-item_interactive\"\n *ngIf=\"filtered\"\n (click)=\"clearFilter()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\"\n class=\"margin-right-2\"></teta-icon>\n Очистить фильтр\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"clearAllFilters()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\"\n class=\"margin-right-2\"></teta-icon>\n Очистить все фильтры\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <div class=\"list-item list-item_interactive\" (click)=\"autosize.emit()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'autoSize'\"\n class=\"margin-right-2\"></teta-icon>\n Авторазмер колонки\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeAll.emit()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'autoSizeAll'\"\n class=\"margin-right-2\"></teta-icon>\n Авторазмер всех колонок\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item list-item_interactive\" (click)=\"restoreDefaultColumns()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'undo'\"\n class=\"margin-right-2\"></teta-icon>\n Отменить все изменения\n </div>\n </div>\n </ng-template>\n </teta-tab>\n <teta-tab>\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'eye'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <div class=\"list-item padding-left-6 padding-top-2\" [class.padding-left-9]=\"childMode\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"allColumnsVisible()\"\n (ngModelChange)=\"setAllColumns($event)\">\n Все\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"padding-v-2 column column_auto scrollable\">\n <teta-tree [data]=\"columns\"\n [openItems]=\"openItems\"\n (openItemsChange)=\"openItems = $event\"\n [childNodeName]=\"'columns'\"\n [compareItems]=\"compareItems\">\n <ng-template tetaTemplate let-item>\n <div class=\"tree__item\">\n <teta-tree-item-toggle [item]=\"item\" *ngIf=\"item.columns?.length > 0\"></teta-tree-item-toggle>\n <teta-checkbox\n [ngModel]=\"!columnIsHidden(item)\"\n (ngModelChange)=\"setColumnVisibility(item, $event)\"\n (click)=\"$event.stopPropagation()\"\n [binary]=\"true\"\n >\n {{item.caption}}\n </teta-checkbox>\n </div>\n </ng-template>\n </teta-tree>\n </div>\n <teta-toolbar class=\"justify-content-end\">\n <button teta-button\n [disabled]=\"allColumnsVisible() === false\"\n [palette]=\"'primary'\"\n (click)=\"setColumnsVisibility()\">\n Применить\n </button>\n </teta-toolbar>\n </ng-template>\n </teta-tab>\n</teta-tabs>\n","import {\n Directive,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n Output,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n selector: '[tetaResizeDrag]',\n})\nexport class ResizeDragDirective {\n @Input() tetaResizeDrag: 'horizontal' | 'vertical' = 'vertical';\n\n @Output() resizeStart = new EventEmitter<MouseEvent>();\n @Output() resizeProcess = new EventEmitter<MouseEvent>();\n @Output() resizeEnd = new EventEmitter<MouseEvent>();\n\n @HostBinding('class.resize-drag_active')\n private _active: boolean;\n\n @HostBinding('class.resize-drag_horizontal')\n private get horizontal() {\n return this.tetaResizeDrag === 'horizontal';\n }\n\n @HostBinding('class.resize-drag_vertical')\n private get vertical() {\n return this.tetaResizeDrag === 'vertical';\n }\n\n constructor(@Inject(DOCUMENT) private _document: any) {}\n\n @HostListener('mousedown', ['$event']) mouseDown(event: MouseEvent) {\n this.resizeStart.emit(event);\n this.addListeners();\n }\n\n private addListeners() {\n this._active = true;\n this._document.addEventListener('mouseup', this.handleMouseUp);\n this._document.addEventListener('mousemove', this.handleMouseMove);\n }\n\n private removeListeners() {\n this._active = false;\n this._document.removeEventListener('mouseup', this.handleMouseUp);\n this._document.removeEventListener('mousemove', this.handleMouseMove);\n }\n\n private handleMouseUp = (event: MouseEvent) => {\n this.resizeEnd.emit(event);\n this.removeListeners();\n };\n\n private handleMouseMove = (event: MouseEvent) => {\n this.resizeProcess.emit(event);\n };\n}\n","import {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { ColumnResizeEvent } from '../contract/column-resize-event';\nimport { FilterState } from '../../filter/contarct/filter-state';\nimport { TableService } from '../service/table.service';\nimport { SortEvent } from '../contract/sort-event';\nimport { map } from 'rxjs/operators';\nimport { SortParam } from '../../filter/contarct/sort-param';\nimport { StateUtil } from '../util/state-util';\nimport { VerticalAlign } from '../../../common/enum/vertical-align.enum';\nimport { Align } from '../../../common/enum/align.enum';\nimport { combineLatest, Observable } from 'rxjs';\n\n@Component({\n selector: 'teta-head-cell',\n templateUrl: './head-cell.component.html',\n styleUrls: ['./head-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeadCellComponent<T> implements OnInit, OnDestroy {\n @Input() column: TableColumn;\n @Input() showHeadCellMenu: boolean;\n verticalAlign = VerticalAlign;\n align = Align;\n state: Observable<FilterState>;\n columns: Observable<TableColumn[]>;\n filtered: Observable<boolean>;\n sortParam: Observable<SortParam>;\n iconName: Observable<string>;\n dropDownOpen: boolean;\n showDrag: 'left' | 'right' | null = null;\n private rect: any;\n\n private _alive = true;\n private _startPosition: number;\n\n constructor(\n private _svc: TableService<T>,\n private _app: ApplicationRef,\n private _elementRef: ElementRef\n ) {}\n\n @HostListener('dragstart', ['$event']) dragstart(event: DragEvent): void {\n if (event && event.dataTransfer) {\n event.dataTransfer.setData('text', 'move');\n }\n this._svc.dragStart(this.column);\n }\n\n @HostListener('dragenter', ['$event']) dragenter(event: DragEvent): void {\n this.rect = this._elementRef.nativeElement.getBoundingClientRect();\n }\n\n @HostListener('dragover', ['$event']) allowDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.rect && this._svc.dragSource) {\n this.showDrag =\n event.clientX >= this.rect.x + this.rect.width / 2 ? 'right' : 'left';\n }\n }\n\n @HostListener('dragleave', ['$event']) dragleave(event: DragEvent): void {\n event.preventDefault();\n this.showDrag = null;\n }\n\n @HostListener('dragend', ['$event']) dragend(event: DragEvent): void {\n this.showDrag = null;\n }\n\n @HostListener('drop', ['$event']) drop(event: DragEvent): void {\n const move = event.dataTransfer && event.dataTransfer.getData('text');\n if (move === 'move') {\n this._svc.reorderColumn(this.column, this.showDrag === 'left');\n }\n this.showDrag = null;\n }\n\n ngOnInit(): void {\n this.columns = this._svc.columns;\n this.state = this._svc.state;\n this.sortParam = this.state.pipe(\n map((_) => StateUtil.getSortState(_, this.column))\n );\n this.filtered = this.state.pipe(\n map((_) => StateUtil.isColumnFiltered(_, this.column))\n );\n this.iconName = combineLatest([this.sortParam, this.filtered]).pipe(\n map((data: [SortParam, boolean]) => {\n const [sortParam, filtered] = data;\n if (sortParam && filtered) {\n return sortParam.asc ? 'filterSortUpColor' : 'filterSortDownColor';\n }\n if (sortParam) {\n return sortParam.asc ? 'sortUpColor' : 'sortDownColor';\n }\n if (filtered) {\n return 'filterColor';\n }\n return '';\n })\n );\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n autosizeColumn() {\n this._svc.autosizeColumn(this.column, this._elementRef.nativeElement);\n }\n\n autosizeAllColumns() {\n this._svc.autosizeAllColumns(this._elementRef.nativeElement);\n }\n\n sortColumn(column: TableColumn, event: MouseEvent): void {\n if (!event.defaultPrevented) {\n this._svc.sort(new SortEvent(this.column, event.shiftKey));\n }\n }\n\n resizeStart(event: MouseEvent): void {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n this._startPosition = rect.x;\n this._svc.lockPreviousColumns(this.column, this._elementRef.nativeElement);\n }\n\n resizeProcess(event: MouseEvent): void {\n if (this._startPosition && event.pageX > 0) {\n this._svc.resizeColumn(\n new ColumnResizeEvent(this.column, event.pageX - this._startPosition)\n );\n this._app.tick();\n }\n }\n\n resizeEnd() {\n this._startPosition = null;\n }\n}\n","<div draggable=\"true\" class=\"row row_auto\">\n <div class=\"table-head__cell__wrapper\"\n [ngClass]=\"column.headCellClass\"\n (click)=\"sortColumn(column, $event)\">\n <teta-icon *ngIf=\"iconName | async as icon\"\n [palette]=\"'text'\"\n [name]=\"icon\"></teta-icon>\n <teta-head-cell-host [column]=\"column\"></teta-head-cell-host>\n <teta-dropdown *ngIf=\"showHeadCellMenu\"\n [verticalAlign]=\"verticalAlign.bottom\"\n [appendToBody]=\"true\"\n [(open)]=\"dropDownOpen\"\n [align]=\"align.right\"\n (click)=\"$event.preventDefault()\"\n [class.table-head__cell__menu_open]=\"dropDownOpen\"\n class=\"table-head__cell__menu\">\n <button tetaDropdownHead teta-button\n [square]=\"true\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\">\n <teta-icon [palette]=\"'text'\" [name]=\"'menu'\"></teta-icon>\n </button>\n <teta-head-cell-dropdown tetaDropdownContent\n (autosize)=\"autosizeColumn()\"\n (autosizeAll)=\"autosizeAllColumns()\"\n [column]=\"column\"\n [columns]=\"columns | async\"\n [state]=\"state | async\"\n [(dropDownOpen)]=\"dropDownOpen\"></teta-head-cell-dropdown>\n </teta-dropdown>\n </div>\n <div class=\"drop-area\"\n draggable=\"false\"\n [class.drop-area_left]=\"showDrag === 'left'\"\n [class.drop-area_right]=\"showDrag === 'right'\"\n *ngIf=\"showDrag\"></div>\n</div>\n<div class=\"table-head__cell__resize\"\n draggable=\"false\"\n (dragstart)=\"$event.preventDefault();$event.stopPropagation()\"\n (drag)=\"$event.preventDefault();$event.stopPropagation()\"\n [tetaResizeDrag]=\"'vertical'\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd()\"></div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { TableUtil } from '../util/table-util';\nimport { TableService } from '../service/table.service';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-table-head-group',\n templateUrl: './table-head-group.component.html',\n styleUrls: ['./table-head-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeadGroupComponent<T> implements OnInit, OnDestroy {\n @Input() showHeadCellMenu: boolean;\n\n @Input()\n set column(column: TableColumn) {\n this._column = column;\n }\n\n get column(): TableColumn {\n return this._column;\n }\n\n private _alive = true;\n private _column: TableColumn;\n private _hiddenColumns: string[];\n\n private get _leaves() {\n return TableUtil.getColumnLeaves(this._column)?.filter(\n (_) => this._hiddenColumns.indexOf(_.name) < 0\n );\n }\n\n @HostBinding('style.grid-column-end')\n get gridColumnEnd(): string {\n if (this._leaves?.length > 0) {\n return `span ${this._leaves.length}`;\n }\n return null;\n }\n\n get gridTemplateColumns(): string {\n return TableUtil.getGridTemplateColumns(this._leaves);\n }\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n this._svc.hiddenColumns\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this._hiddenColumns = _;\n this._cdr.markForCheck();\n });\n }\n\n columnIsHidden(column: TableColumn) {\n return this._svc.columnIsHidden(column);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<ng-container *ngIf=\"column.columns && column.columns.length > 0\">\n <div class=\"table-head__group__container\">\n <div class=\"table-head__group__caption\">\n {{column.caption}}\n </div>\n <div class=\"table-head__group__children\" [style.grid-template-columns]=\"gridTemplateColumns\">\n <ng-container *ngFor=\"let col of column.columns\">\n <teta-table-head-group\n class=\"table-head__group\"\n *ngIf=\"!columnIsHidden(col)\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"col\"></teta-table-head-group>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"!column.columns || column.columns.length === 0\">\n <teta-head-cell\n *ngIf=\"!columnIsHidden(column)\"\n class=\"table-head__cell\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"></teta-head-cell>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { FilterState } from '../../filter/contarct/filter-state';\nimport { TableService } from '../service/table.service';\nimport { takeWhile } from 'rxjs/operators';\nimport { TableUtil } from '../util/table-util';\nimport { SelectType } from '../enum/select-type.enum';\nimport { combineLatest } from 'rxjs';\nimport { ArrayUtil } from '../../../common/util/array-util';\n\n@Component({\n selector: 'teta-table-head',\n templateUrl: './table-head.component.html',\n styleUrls: ['./table-head.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeadComponent<T> implements OnInit, OnDestroy {\n @Input() selectType: SelectType;\n @Input() showHeadCellMenu: boolean;\n @HostBinding('class.table-head') private readonly tableHeadClass = true;\n gridTemplateColumns: string;\n\n @HostBinding('style.grid-template-columns')\n get getTemplateColumns() {\n let template = this.gridTemplateColumns;\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n state: FilterState;\n selectTypeEnum = SelectType;\n\n private _alive = true;\n private _columns: TableColumn[] = [];\n private _hiddenColumns: string[] = [];\n\n set columns(columns: TableColumn[]) {\n this._columns = columns;\n this._cdr.markForCheck();\n }\n\n get columns(): TableColumn[] {\n return this._columns;\n }\n\n get locked(): TableColumn[] {\n return this._columns.filter(\n (_) => _.locked === true && this._hiddenColumns.indexOf(_.name) < 0\n );\n }\n\n get unlocked(): TableColumn[] {\n return this._columns.filter(\n (_) => _.locked === false && this._hiddenColumns.indexOf(_.name) < 0\n );\n }\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n combineLatest([this._svc.columns, this._svc.hiddenColumns])\n .pipe(takeWhile((_) => this._alive))\n .subscribe((values: [TableColumn[], string[]]) => {\n const [columns, hiddenColumns] = values;\n this._hiddenColumns = hiddenColumns;\n this.columns = columns;\n\n this.gridTemplateColumns = TableUtil.getGridTemplateColumns(\n ArrayUtil.flatten(columns, 'columns', true)\n .filter((_) => this._hiddenColumns.indexOf(_.name) < 0)\n .sort((a, b) => Number(b.locked) - Number(a.locked))\n );\n this._cdr.markForCheck();\n });\n\n this._svc.state.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.state = _;\n this._cdr.markForCheck();\n });\n }\n\n getSpan(): string {\n if (this.locked?.length > 0) {\n let span = this.locked.length;\n if (this.selectType !== SelectType.none) {\n span += 1;\n }\n return `span ${span}`;\n }\n return null;\n }\n\n getLockedGridTemplateColumns(columns: TableColumn[]) {\n let template = TableUtil.getGridTemplateColumns(columns);\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n track(index: number, item: TableColumn): any {\n return item.name;\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<div class=\"table-head_locked\"\n *ngIf=\"locked?.length\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-head-cell *ngIf=\"selectType !== selectTypeEnum.none\"></teta-selection-head-cell>\n <ng-container *ngFor=\"let column of locked; trackBy: track\">\n <teta-table-head-group\n class=\"table-head__group\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"></teta-table-head-group>\n </ng-container>\n</div>\n<ng-container *ngIf=\"unlocked?.length\">\n <teta-selection-head-cell *ngIf=\"selectType !== selectTypeEnum.none && locked?.length < 1\"></teta-selection-head-cell>\n <ng-container *ngFor=\"let column of unlocked; trackBy: track\">\n <teta-table-head-group\n class=\"table-head__group\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"></teta-table-head-group>\n </ng-container>\n</ng-container>\n","export enum AggregationType {\n none,\n sum,\n avg,\n min,\n max,\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableService } from '../service/table.service';\nimport { TableRow } from '../contract/table-row';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-selection-cell',\n templateUrl: './selection-cell.component.html',\n styleUrls: ['./selection-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectionCellComponent<T> implements OnInit, OnDestroy {\n @Input() row: TableRow<T>;\n\n @HostBinding('class.cell') private readonly tableCellClass = true;\n selectedRows: TableRow<T>[] = [];\n\n private _alive = true;\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {}\n\n selectRow(value: boolean) {\n if (value) {\n this._svc.selectRow(this.row);\n } else {\n this._svc.deselectRow(this.row);\n }\n }\n\n ngOnInit(): void {\n this._svc.selectedRows\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this.selectedRows = _;\n this._cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<teta-checkbox [binary]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"selectedRows?.indexOf(row) >= 0\"\n (ngModelChange)=\"selectRow($event)\"></teta-checkbox>\n","import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {TableService} from '../service/table.service';\nimport {TableRow} from '../contract/table-row';\nimport {takeWhile} from 'rxjs/operators';\nimport {ICellCoordinates} from '../contract/i-cell-coordinates';\nimport {TableColumn} from '../contract/table-column';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {ICellValue} from '../contract/i-cell-value';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\n\n@Component({\n template: '',\n})\nexport abstract class CellComponentBase<T> implements OnInit, OnDestroy {\n @HostBinding('class.cell-component')\n private readonly tableCellComponent = true;\n\n get edit() {\n return (\n this._edit &&\n this.svc.boolOrFuncCallback(this.column.editable)({\n column: this.column,\n row: this.row,\n })\n );\n }\n\n _edit: boolean;\n column: TableColumn;\n filterOptions: IIdName<any>[] = [];\n dict: IDictionary<IIdName<any>[]> = {};\n row: TableRow<T>;\n\n protected _alive = true;\n\n protected constructor(\n protected svc: TableService<T>,\n protected cdr: ChangeDetectorRef\n ) {\n }\n\n valueChanged(): void {\n this.svc.changeValue({\n column: this.column,\n row: this.row,\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngOnInit(): void {\n this.init();\n }\n\n private init(): void {\n this.svc.editRowStart\n .pipe(\n takeWhile((_) => this._alive)\n )\n .subscribe((cell: ICellCoordinates<T>) => {\n if (\n this.row === cell?.row &&\n !this._edit\n // &&\n // this.svc.boolOrFuncCallback(this.svc.cellEditable)({\n // column: this.column,\n // row: this.row,\n // })\n ) {\n this.start(cell, 'row');\n }\n if (this.row !== cell?.row && this._edit) {\n this.stop();\n }\n });\n\n this.svc.editCellStart\n .pipe(\n takeWhile((_) => this._alive)\n )\n .subscribe((cell: ICellCoordinates<T>) => {\n if (\n this.row === cell.row &&\n this.column.name === cell.column.name &&\n !this._edit\n ) {\n this.start(cell, 'cell');\n }\n if (\n (this.row !== cell.row || this.column.name !== cell.column.name) &&\n this._edit\n ) {\n this.stop();\n }\n });\n\n this.svc.valueSet\n .pipe(takeWhile((_) => this._alive))\n .subscribe((cellValue: ICellValue<T>) => {\n if (\n this.row === cellValue.cell.row\n && this.column.name === cellValue.cell.column.name\n ) {\n this.row.data[this.column.name] = cellValue.value;\n this.cdr.detectChanges();\n }\n });\n\n this.svc.valueChanged\n .pipe(takeWhile((_) => this._alive))\n .subscribe((cellValue: ICellCoordinates<T>) => {\n if (\n this.row === cellValue.row\n ) {\n this.cdr.detectChanges();\n }\n });\n }\n\n private start(initiator: ICellCoordinates<T>, type: 'cell' | 'row') {\n this._edit = true;\n this.startEdit(initiator, type);\n this.cdr.markForCheck();\n }\n\n private stop() {\n this._edit = false;\n this.stopEdit();\n this.cdr.markForCheck();\n }\n\n abstract startEdit(\n initiator: ICellCoordinates<T>,\n type: 'cell' | 'row'\n ): void;\n\n abstract stopEdit(): void;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { TableService } from '../../service/table.service';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\n\n@Component({\n selector: 'teta-numeric-cell',\n templateUrl: './numeric-cell.component.html',\n styleUrls: ['./numeric-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumericCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @ViewChild('input', { static: false }) input: ElementRef;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n setValue(): void {\n this.valueChanged();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input?.nativeElement.focus();\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text cell-text_numeric\">\n {{row.data[column.name] | tetaNumber : 2}}\n</span>\n<input #input\n *ngIf=\"edit\"\n tetaOnlyNumber\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"row.data[column.name]=$event;\"/>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {CellComponentBase} from '../../base/cell-component-base';\nimport {TableColumn} from '../../contract/table-column';\nimport {TableRow} from '../../contract/table-row';\nimport {TableService} from '../../service/table.service';\nimport {ICellCoordinates} from '../../contract/i-cell-coordinates';\nimport {DatePickerComponent} from '../../../date-picker/date-picker/date-picker.component';\n\n@Component({\n selector: 'teta-date-cell',\n templateUrl: './date-cell.component.html',\n styleUrls: ['./date-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit {\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n\n @ViewChild('input', {static: false}) input: DatePickerComponent;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n setValue(value: Date): void {\n this.row.data[this.column.name] = value ? new Date(value) : value;\n this.valueChanged();\n this.cdr.detectChanges();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input?.focus();\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{row.data[column.name] | date : 'dd.MM.yyyy'}}\n</span>\n<teta-date-picker class=\"datepicker-table\"\n #input\n *ngIf=\"edit\"\n [appendToBody]=\"true\"\n [showTime]=\"false\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\"\n></teta-date-picker>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { TableService } from '../../service/table.service';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { SelectComponent } from '../../../select/select/select.component';\nimport { IIdName } from '../../../../common/contract/i-id-name';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\nimport { VerticalAlign } from '../../../../common/enum/vertical-align.enum';\n\n@Component({\n selector: 'teta-list-cell',\n templateUrl: './list-cell.component.html',\n styleUrls: ['./list-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @Input() override filterOptions: IIdName<any>[] = [];\n\n get value() {\n return this.getValue();\n }\n\n @ViewChild('input', { static: false }) input: SelectComponent;\n\n verticalAlign = VerticalAlign;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n setValue(value: any): void {\n this.row.data[this.column.name] = value;\n this.valueChanged();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input?.focus();\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit() {\n this.cdr.markForCheck();\n }\n\n override ngOnInit() {\n super.ngOnInit();\n }\n\n private getValue() {\n if (\n this.filterOptions === null ||\n this.filterOptions === undefined ||\n !(this.filterOptions instanceof Array)\n ) {\n return '';\n }\n const item = this.filterOptions.find(\n (option) => option.id === this.row.data[this.column.name]\n );\n if (item === null || item === undefined) {\n return '';\n }\n return item.name;\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{value}}\n</span>\n<teta-select #input\n class=\"row_auto select-table\"\n *ngIf=\"edit\"\n [allowNull]=\"!column.required\"\n [verticalAlign]=\"verticalAlign.auto\"\n [appendToBody]=\"true\"\n [options]=\"filterOptions\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\">\n</teta-select>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { TableService } from '../../service/table.service';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\n\n@Component({\n selector: 'teta-string-cell',\n templateUrl: './string-cell.component.html',\n styleUrls: ['./string-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StringCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @ViewChild('input', { static: false }) input: ElementRef;\n\n constructor(public override svc: TableService<T>, public override cdr: ChangeDetectorRef) {\n super(svc, cdr);\n }\n\n setValue(): void {\n this.valueChanged();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n this.cdr.markForCheck();\n setTimeout(() => {\n this.input.nativeElement.focus();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{row.data[column.name]}}\n</span>\n<input #input\n *ngIf=\"edit\"\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"row.data[column.name]=$event\"/>\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { TableService } from '../../service/table.service';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\n\n@Component({\n selector: 'teta-boolean-cell',\n templateUrl: './boolean-cell.component.html',\n styleUrls: ['./boolean-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BooleanCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @ViewChild('input', { static: false }) input: ElementRef;\n\n constructor(public override svc: TableService<T>, public override cdr: ChangeDetectorRef) {\n super(svc, cdr);\n }\n\n setValue(): void {\n this.valueChanged();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n this.cdr.markForCheck();\n setTimeout(() => {\n this.input?.nativeElement.focus();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{ row.data[column.name] }}\n</span>\n<teta-checkbox\n #input\n *ngIf=\"edit\"\n [binary]=\"true\"\n [(ngModel)]=\"row.data[column.name]\"\n (blur)=\"setValue()\"\n></teta-checkbox>\n","import { FilterType } from '../../filter/enum/filter-type.enum';\nimport { Type } from '@angular/core';\nimport { NumericCellComponent } from '../default/numeric-cell/numeric-cell.component';\nimport { DateCellComponent } from '../default/date-cell/date-cell.component';\nimport { ListCellComponent } from '../default/list-cell/list-cell.component';\nimport { StringCellComponent } from '../default/string-cell/string-cell.component';\nimport { TableColumn } from './table-column';\nimport { BooleanCellComponent } from '../default/boolean-cell/boolean-cell.component';\n\nconst cellComponentsMap: Map<FilterType, Type<any>> = new Map<\n FilterType,\n Type<any>\n>()\n .set(FilterType.number, NumericCellComponent)\n .set(FilterType.date, DateCellComponent)\n .set(FilterType.list, ListCellComponent)\n .set(FilterType.string, StringCellComponent)\n .set(FilterType.boolean, BooleanCellComponent)\n .set(FilterType.custom, StringCellComponent);\n\nexport const getCellComponent = (column: TableColumn): Type<any> =>\n cellComponentsMap.has(column.filterType)\n ? cellComponentsMap.get(column.filterType)\n : StringCellComponent;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { CellComponentBase } from '../base/cell-component-base';\nimport { TableColumn } from '../contract/table-column';\nimport { TableRow } from '../contract/table-row';\nimport { getCellComponent } from '../contract/cell-components-map';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\n\n@Component({\n selector: 'teta-cell-host',\n template: '',\n styleUrls: ['./cell-host.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CellHostComponent<T> implements OnInit, OnDestroy, OnChanges {\n @Input() column: TableColumn;\n @Input() row: TableRow<T>;\n @Input() filterOptions: IIdName<any>[];\n @Input() dict: IDictionary<IIdName<any>[]>;\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n if (!CellComponentBase.isPrototypeOf(this.column.cellComponent)) {\n this.column.cellComponent = getCellComponent(this.column);\n }\n this._componentRef = this.viewContainerRef.createComponent(\n this.column.cellComponent\n );\n this._componentRef.instance.column = this.column;\n this._componentRef.instance.row = this.row;\n this._componentRef.instance.filterOptions = this.filterOptions;\n this._componentRef.instance.dict = this.dict;\n this._init = true;\n }\n\n ngOnDestroy(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n this._init &&\n (changes.hasOwnProperty('row') ||\n changes.hasOwnProperty('column') ||\n changes.hasOwnProperty('filterOptions') ||\n changes.hasOwnProperty('dict'))\n ) {\n this._componentRef.instance.row = this.row;\n this._componentRef.instance.column = this.column;\n this._componentRef.instance.filterOptions = this.filterOptions;\n this._componentRef.instance.dict = this.dict;\n this._componentRef.injector.get(ChangeDetectorRef).markForCheck();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { TableRow } from '../contract/table-row';\nimport { TableService } from '../service/table.service';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\n\n@Component({\n selector: 'teta-cell',\n templateUrl: './cell.component.html',\n styleUrls: ['./cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CellComponent<T> implements OnInit, OnDestroy {\n @Input() column: TableColumn;\n @Input() filterOptions: IIdName<any>[];\n @Input() dict: IDictionary<IIdName<any>[]>;\n @Input() row: TableRow<T>;\n @HostBinding('class.cell') private readonly tableCellClass = true;\n\n private alive = true;\n\n constructor(protected _svc: TableService<T>) {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.alive = false;\n }\n}\n","<teta-cell-host [row]=\"row\"\n [column]=\"column\"\n [filterOptions]=\"filterOptions\"\n [dict]=\"dict\"></teta-cell-host>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Type,\n ViewChild,\n} from '@angular/core';\nimport {TableRow} from '../contract/table-row';\nimport {TableColumn} from '../contract/table-column';\nimport {GroupRowComponentBase} from '../base/group-row-component-base';\nimport {TableService} from '../service/table.service';\nimport {DetailComponentBase} from '../base/detail-component-base';\nimport {takeWhile} from 'rxjs/operators';\nimport {TableUtil} from '../util/table-util';\nimport {SelectType} from '../enum/select-type.enum';\nimport {combineLatest} from 'rxjs';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {AggregationType} from '../enum/aggregation-type.enum';\nimport {Datasource, IDatasource, SizeStrategy} from 'ngx-ui-scroll';\nimport {CdkVirtualScrollViewport} from '@angular/cdk/scrolling';\n\n@Component({\n selector: 'teta-table-body',\n templateUrl: './table-body.component.html',\n styleUrls: ['./table-body.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableBodyComponent<T> implements OnInit, OnDestroy {\n @Input() virtual: boolean;\n @Input() activeRow: TableRow<T>;\n @Input() rowHeight: number;\n @Input() additionalComponent: Type<DetailComponentBase<T>>;\n @Input() tree: boolean;\n @Input() aggregate: boolean;\n @Input() grouping: boolean;\n @Input() groupRowComponent: Type<GroupRowComponentBase<T>>;\n @Input() openLevels: number;\n @Input() selectType: SelectType;\n @Input() rowClass: (row: TableRow<T>, index?: number) => string;\n\n @ViewChild(CdkVirtualScrollViewport, {static: false}) viewport: CdkVirtualScrollViewport;\n\n @HostBinding('class.table-body') private readonly tableBodyClass = true;\n\n set data(data: TableRow<T>[]) {\n this._data = data;\n if (!this.dataSource) {\n this.createAdapter();\n }\n this.resetAdapter();\n }\n\n get data() {\n return this._data;\n }\n\n dict: IDictionary<IIdName<any>[]>;\n\n gridTemplateColumns: string;\n selectedRows: TableRow<T>[] = [];\n locked: TableColumn[] = [];\n unlocked: TableColumn[] = [];\n\n selectTypeEnum = SelectType;\n dataSource: IDatasource<TableRow<T>>;\n\n private _columns: TableColumn[] = [];\n private _alive = true;\n private _data: TableRow<T>[];\n private _hiddenColumns: string[] = [];\n private _index: number;\n\n set columns(columns: TableColumn[]) {\n this._columns = columns;\n this.locked = this._columns?.filter((_) => _.locked === true);\n this.unlocked = this._columns?.filter((_) => _.locked === false);\n }\n\n get columns(): TableColumn[] {\n return this._columns;\n }\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n combineLatest([this._svc.columns, this._svc.hiddenColumns])\n .pipe(takeWhile((_) => this._alive))\n .subscribe((values: [TableColumn[], string[]]) => {\n const [columns, hiddenColumns] = values;\n this._hiddenColumns = hiddenColumns;\n this.columns = ArrayUtil.flatten(columns, 'columns', true).filter(\n (_) => this._hiddenColumns.indexOf(_.name) < 0\n );\n this.gridTemplateColumns = TableUtil.getGridTemplateColumns(\n this.columns.sort((a, b) => Number(b.locked) - Number(a.locked))\n );\n this._cdr.markForCheck();\n });\n\n this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.data = _;\n this._cdr.markForCheck();\n });\n\n this._svc.dict.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.dict = _;\n this._cdr.markForCheck();\n });\n\n this._svc.scrollIndex\n .pipe(takeWhile((_) => this._alive))\n .subscribe(async (_) => {\n // if (this.viewport && this.dataSource && _ !== null) {\n // await this.dataSource.adapter.relax();\n // await this.dataSource.adapter.fix({\n // scrollPosition: (_ + 1) * 24,\n // });\n // }\n if (this.viewport) {\n this.viewport.scrollToIndex(_, 'smooth');\n }\n this._cdr.markForCheck();\n });\n\n this._svc.activeRow\n .pipe(takeWhile((_) => this._alive))\n .subscribe(async (_) => {\n this.activeRow = _;\n this._cdr.markForCheck();\n });\n }\n\n setActiveRow(row: TableRow<T>) {\n this._svc.setActiveRow(row);\n }\n\n getData = (index, count, success) => {\n const data = [];\n if (this.data?.length > 0) {\n const start = Math.max(0, index);\n const end = Math.min(index + count - 1, this.data.length - 1);\n for (let i = start; i <= end; i++) {\n data.push(this.data[i]);\n }\n }\n return success(data);\n };\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n getAggregateValue(column: TableColumn): number {\n if (column.aggregate === AggregationType.sum) {\n return this.getSum(column.name);\n }\n if (column.aggregate === AggregationType.avg) {\n return this.getSum(column.name) / this.data.length;\n }\n if (column.aggregate === AggregationType.min) {\n return this.getMin(column.name);\n }\n if (column.aggregate === AggregationType.max) {\n return this.getMax(column.name);\n }\n }\n\n getAggregateText(column: TableColumn): string {\n if (column.aggregate === AggregationType.sum) {\n return 'Сумма=';\n }\n if (column.aggregate === AggregationType.avg) {\n return 'Среднее=';\n }\n if (column.aggregate === AggregationType.min) {\n return 'Мин=';\n }\n if (column.aggregate === AggregationType.max) {\n return 'Макс=';\n }\n return '';\n }\n\n getSpan(): string {\n if (this.locked?.length > 0) {\n let span = this.locked.length;\n if (this.selectType !== SelectType.none) {\n span += 1;\n }\n return `span ${span}`;\n }\n return null;\n }\n\n getTemplateColumns() {\n let template = this.gridTemplateColumns;\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n getLockedGridTemplateColumns(columns: TableColumn[]) {\n let template = TableUtil.getGridTemplateColumns(columns);\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n trackRow(index: number, row: TableRow<T>): any {\n return index;\n }\n\n trackColumns(index: number, column: TableColumn): any {\n return column.name;\n }\n\n private getSum(columnName) {\n return this.data?.reduce((accum, current) => {\n const val = parseFloat(current.data[columnName]);\n return accum + (isNaN(val) ? 0 : val);\n }, 0);\n }\n\n private getMin(columnName) {\n return this.data?.reduce(\n (accum, current) =>\n accum != null && accum <= current.data[columnName]\n ? accum\n : current.data[columnName],\n null\n );\n }\n\n private getMax(columnName) {\n return this.data?.reduce(\n (accum, current) =>\n accum != null && accum >= current.data[columnName]\n ? accum\n : current.data[columnName],\n null\n );\n }\n\n private async resetAdapter() {\n await this.dataSource.adapter.relax();\n await this.dataSource.adapter.reset({\n get: this.getData,\n settings: {\n minIndex: 0,\n maxIndex: this._data?.length ? this._data.length - 1 : 0,\n startIndex: 0,\n itemSize: 24,\n sizeStrategy: SizeStrategy.Constant,\n },\n });\n await this.dataSource.adapter.check();\n }\n\n private createAdapter() {\n this.dataSource = new Datasource<TableRow<T>>({\n get: this.getData,\n settings: {\n startIndex: 0,\n bufferSize: 2,\n sizeStrategy: SizeStrategy.Constant,\n itemSize: 24,\n },\n });\n }\n}\n","<!--<div #viewport class=\"table-body-container table-body-container-virtual\"-->\n<!-- *ngIf=\"virtual\"-->\n<!-- [style.grid-template-columns]=\"getTemplateColumns()\"-->\n<!-- style=\"height: 100%;\">-->\n<!-- <ng-container-->\n<!-- *uiScroll=\"let row of dataSource; let rowIndex = index; let last = last;\" style=\"display: flex;flex-grow: 1\">-->\n<!-- <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>-->\n<!-- </ng-container>-->\n<!-- <ng-container *ngIf=\"aggregate\">-->\n<!-- <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>-->\n<!-- </ng-container>-->\n<!--</div>-->\n\n<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"24\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n\n\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\"\n [style.grid-template-rows]=\"rowHeight + 'px'\"\n [style.grid-auto-rows]=\"rowHeight + 'px'\"\n [style.grid-template-columns]=\"getTemplateColumns()\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\"\n [class.table-row_active]=\"row === activeRow || selectedRows.indexOf(row) >= 0\">\n <ng-container *ngIf=\"!grouping\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </ng-container>\n <ng-container *ngIf=\"grouping\">\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <div class=\"cell align-center justify-content-center\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n Type,\n ViewChild,\n} from '@angular/core';\nimport {TableRow} from '../contract/table-row';\nimport {TableService} from '../service/table.service';\nimport {TableColumn} from '../contract/table-column';\nimport {FilterState} from '../../filter/contarct/filter-state';\nimport {DetailComponentBase} from '../base/detail-component-base';\nimport {ICellEvent} from '../contract/i-cell-event';\nimport {ICellCoordinates} from '../contract/i-cell-coordinates';\nimport {GroupRowComponentBase} from '../base/group-row-component-base';\nimport {GroupRowComponent} from '../default/group-row/group-row.component';\nimport {filter, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {EditType} from '../enum/edit-type.enum';\nimport {EditEvent} from '../enum/edit-event.enum';\nimport {SelectType} from '../enum/select-type.enum';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\nimport {of} from 'rxjs';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {PositionUtil} from '../../../common/util/position-util';\nimport {Align} from '../../../common/enum/align.enum';\nimport {VerticalAlign} from '../../../common/enum/vertical-align.enum';\nimport {FilterType} from '../../filter/enum/filter-type.enum';\nimport {TableContextMenuConfig} from '../contract/table-context-menu-config';\n\n@Component({\n selector: 'teta-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TableService],\n})\nexport class TableComponent<T>\n implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n @Input() data: T[] = [];\n @Input() columns: TableColumn[] = [];\n @Input() dict: IDictionary<IIdName<any>[]>;\n\n @Input()\n set state(state: FilterState) {\n this._state = state;\n }\n\n @Input() rowHeight = 24;\n @Input() cookieName: string;\n @Input() virtual: boolean;\n @Input() detailComponent: Type<DetailComponentBase<T>>;\n @Input() activeRow: TableRow<T>;\n @Input() selectedRows: TableRow<T>[];\n @Input() selectType: SelectType = SelectType.none;\n @Input() aggregate: boolean;\n @Input() grouping: boolean;\n @Input() groupRowComponent: Type<GroupRowComponentBase<T>> =\n GroupRowComponent;\n @Input() openLevels: number;\n @Input() tree: boolean;\n @Input() trackBy: (row: TableRow<T>) => any;\n @Input() editType: EditType;\n @Input() editEvent: EditEvent;\n @Input() rowEditable: boolean | ((row: TableRow<T>) => boolean);\n @Input() rowClass: (row: TableRow<T>, index?: number) => string;\n\n @Input() set scrollToIndex(index: number) {\n this._svc.scrollToIndex(index);\n }\n\n @Input() contextMenuConfig: TableContextMenuConfig =\n new TableContextMenuConfig();\n\n @Input() showHeadCellMenu = true;\n\n @Output()\n stateChange: EventEmitter<FilterState> = new EventEmitter<FilterState>();\n @Output() bodyLeft = new EventEmitter<TableRow<T>>();\n @Output() activeRowChange: EventEmitter<TableRow<T>> = new EventEmitter();\n @Output() selectedRowsChange: EventEmitter<TableRow<T>[]> =\n new EventEmitter();\n @Output() rowLeft = new EventEmitter<TableRow<T>>();\n @Output() rowEditStart = new EventEmitter<TableRow<T>>();\n @Output() rowEditEnd = new EventEmitter<TableRow<T>>();\n @Output() cellClick = new EventEmitter<ICellEvent<T>>();\n @Output() cellDoubleClick = new EventEmitter<ICellEvent<T>>();\n @Output() cellFocus = new EventEmitter<ICellEvent<T>>();\n @Output() cellEditStart = new EventEmitter<ICellCoordinates<T>>();\n @Output() cellEditEnd = new EventEmitter<ICellCoordinates<T>>();\n @Output() valueChange = new EventEmitter<ICellCoordinates<T>>();\n @Output() cellKeyUp = new EventEmitter<ICellEvent<T>>();\n\n @Output() pasteRows = new EventEmitter<any[]>();\n @Output() addRow = new EventEmitter<void>();\n @Output() deleteRows = new EventEmitter<TableRow<T>[]>();\n @Output() tableService = new EventEmitter<TableService<T>>();\n\n @ViewChild('contextMenu', {static: true}) menu: ElementRef;\n @HostBinding('class.table') private readonly tableClass = true;\n\n showContextMenu: boolean;\n selectedRowsList: TableRow<T>[];\n contextMenuTarget: ICellCoordinates<T>;\n\n private _alive = true;\n private _bodyElement: HTMLElement;\n private _headElement: HTMLElement;\n\n private _state: FilterState;\n\n constructor(private _svc: TableService<T>, private _elementRef: ElementRef) {\n this._svc.state\n .pipe(\n takeWhile((_) => this._alive),\n filter((state) => state !== this._state)\n )\n .subscribe((state: FilterState) => this.stateChange.next(state));\n\n this._svc.editCellStart\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) => this.cellEditStart.emit(item));\n\n this._svc.editCellStop\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) => this.cellEditEnd.emit(item));\n\n this._svc.editRowStart\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) =>\n this.rowEditStart.emit(item?.row)\n );\n\n this._svc.editRowStop\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) =>\n this.rowEditEnd.emit(item?.row)\n );\n\n this._svc.selectedRows\n .pipe(takeWhile((_) => this._alive))\n .subscribe((items: TableRow<T>[]) => {\n this.selectedRowsList = items;\n this.selectedRowsChange.emit(items);\n });\n\n this._svc.activeRow\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: TableRow<T>) => this.activeRowChange.emit(item));\n\n this._svc.valueChanged\n .pipe(takeWhile((_) => this._alive))\n .subscribe((coordinates: ICellCoordinates<T>) => {\n this.valueChange.emit(coordinates);\n });\n }\n\n @HostListener('document:click', ['$event']) handleClickOutsideAnyRow(\n event: MouseEvent\n ) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellClick.emit(coordinates);\n if (this.editEvent === EditEvent.click) {\n this.startEditRowOrCell(coordinates);\n }\n }\n if (!this.eventIsOnRow(event) && !event.defaultPrevented) {\n this._svc.startEditRow(null);\n }\n }\n\n @HostListener('focusin', ['$event']) focusIn(event: any) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellFocus.emit(coordinates);\n if (this.editEvent === EditEvent.focus) {\n this.startEditRowOrCell(coordinates);\n }\n }\n }\n\n @HostListener('dblclick', ['$event'])\n dblclick(event: MouseEvent) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellDoubleClick.emit(coordinates);\n if (this.editEvent === EditEvent.doubleClick) {\n this.startEditRowOrCell(coordinates);\n }\n }\n }\n\n @HostListener('window:keyup', ['$event'])\n keyup(event: KeyboardEvent) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellKeyUp.emit(coordinates);\n }\n switch (event.key) {\n case 'Enter':\n this._svc.startEditRow(null);\n break;\n case 'Escape':\n this._svc.startEditRow(null);\n break;\n default:\n break;\n }\n }\n\n @HostListener('mousedown', ['$event']) mousedown(event: MouseEvent) {\n if (event.button === 2) {\n event.preventDefault();\n }\n }\n\n @HostListener('contextmenu', ['$event']) contextMenu(event: MouseEvent) {\n if (\n this.getSelectedText() ||\n this.contextMenuConfig?.contextMenu === false\n ) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.contextMenuTarget = this.getCoordinates(event);\n this.showContextMenu = true;\n this.setPosition(event);\n }\n\n rowAdd() {\n this.addRow.emit();\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n }\n\n copy(rows: TableRow<T>[]) {\n of(1)\n .pipe(withLatestFrom(this._svc.columns, this._svc.hiddenColumns))\n .subscribe((data: [number, TableColumn[], string[]]) => {\n const [, columns, hidden] = data;\n navigator.clipboard.writeText(\n this.toClipboardString(rows, this.getVisibleColumns(columns, hidden))\n );\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n });\n }\n\n delete(rows: TableRow<T>[]) {\n this.deleteRows.emit(rows);\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n }\n\n async pasteData() {\n const result = await navigator.clipboard.readText();\n of(1)\n .pipe(withLatestFrom(this._svc.columns, this._svc.hiddenColumns))\n .subscribe((data: [number, TableColumn[], string[]]) => {\n const [, columns, hidden] = data;\n this.pasteRows.emit(\n this.fromClipboard(result, this.getVisibleColumns(columns, hidden))\n );\n });\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n }\n\n ngOnInit(): void {\n this._svc.restoreState();\n this._svc.restoreHiddenColumns();\n this.tableService.emit(this._svc);\n }\n\n ngAfterViewInit(): void {\n this._headElement =\n this._elementRef.nativeElement.querySelector('.table-head');\n this._bodyElement = this._elementRef.nativeElement.querySelector(\n '.table-body-container'\n );\n this._bodyElement.addEventListener('scroll', this.onScroll);\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n this._bodyElement.removeEventListener('scroll', this.onScroll);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('editType')) {\n this._svc.editType = this.editType;\n }\n if (changes.hasOwnProperty('selectType')) {\n this._svc.selectType = this.selectType;\n }\n if (changes.hasOwnProperty('selectedRows')) {\n this._svc.selectRows(this.selectedRows);\n }\n if (changes.hasOwnProperty('rowEditable')) {\n this._svc.rowEditable = this.rowEditable;\n }\n if (changes.hasOwnProperty('cookieName')) {\n this._svc.setCookieName(this.cookieName);\n }\n if (changes.hasOwnProperty('columns')) {\n if (this.columns !== null && this.columns !== undefined) {\n this._svc.setColumns(this.columns);\n }\n }\n if (changes.hasOwnProperty('data')) {\n this._svc.setData(this.data);\n this._svc.selectRows([]);\n }\n if (changes.hasOwnProperty('dict')) {\n this._svc.setDict(this.dict);\n }\n }\n\n private startEditRowOrCell(coordinates: ICellCoordinates<T>): void {\n if (this.editType === EditType.row) {\n this._svc.startEditRow(coordinates);\n }\n if (this.editType === EditType.cell) {\n this._svc.startEditCell(coordinates);\n }\n }\n\n private getEventCell(event: Event): HTMLElement | null {\n return event.composedPath().find((target: HTMLElement) => {\n return target.tagName?.toLowerCase() === 'teta-cell';\n }) as HTMLElement;\n }\n\n private eventIsOnRow(event: Event): boolean {\n const row = event.composedPath().find((target: HTMLElement) => {\n return target?.getAttribute && target?.getAttribute('data-row');\n });\n return row && this._elementRef.nativeElement.contains(row);\n }\n\n private getCoordinates(event: Event): ICellEvent<T> | null {\n const cell = this.getEventCell(event);\n if (cell) {\n const rowIndex = cell.getAttribute('data-row');\n const columnName = cell.getAttribute('data-column');\n if (rowIndex && columnName) {\n const row = this._svc.getRowByIndex(rowIndex);\n const column = this._svc.getColumnByName(columnName);\n return {\n row,\n column: column ? column : new TableColumn(),\n event,\n };\n }\n }\n return null;\n }\n\n private onScroll = () => {\n this._headElement.scrollLeft = this._bodyElement.scrollLeft;\n };\n\n private getSelectedText() {\n let text = '';\n if (typeof window.getSelection != 'undefined') {\n text = window.getSelection().toString();\n }\n return text;\n }\n\n private setPosition(event: MouseEvent) {\n const position = PositionUtil.getPosition(\n {\n top: event.y,\n bottom: event.y,\n left: event.x,\n right: event.x,\n },\n this.menu.nativeElement.getBoundingClientRect(),\n Align.left,\n VerticalAlign.auto\n );\n PositionUtil.setElementPosition(this.menu.nativeElement, position);\n }\n\n private toClipboardString(rows: TableRow<T>[], columns: TableColumn[]) {\n return rows.reduce(\n (res: string, currentRow: TableRow<T>, i: number) =>\n `${res}${i === 0 ? '' : '\\n'}${columns.reduce(\n (columnResult: string, column: TableColumn, j: number) =>\n `${columnResult}${j === 0 ? '' : '\\t'}${\n currentRow.data[column.name] ?? ''\n }`,\n ''\n )}`,\n ''\n );\n }\n\n private fromClipboard(data: string, columns: TableColumn[]) {\n const rows = data.split('\\n').filter((_) => _?.length > 0);\n const result = rows.map((_) =>\n _.replace('\\r', '').replace('\\n', '').split('\\t')\n );\n return result.map((row: string[]) =>\n row.reduce((res, item, index) => {\n let value: any = item;\n if (\n columns[index]?.filterType === FilterType.number ||\n columns[index]?.filterType === FilterType.list\n ) {\n value = parseFloat(item);\n }\n if (columns[index]?.filterType === FilterType.boolean) {\n value = Boolean(JSON.parse(item.toLowerCase()));\n }\n if (columns[index]) {\n res[columns[index].name] = value;\n }\n return res;\n }, {})\n );\n }\n\n private getVisibleColumns(columns: TableColumn[], hidden: string[]) {\n const visible = ArrayUtil.flatten(columns, 'columns', true).filter(\n (_) => hidden.indexOf(_.name) < 0\n );\n return visible.sort((a, b) => Number(b.locked) - Number(a.locked));\n }\n}\n","<div class=\"column column_auto\">\n <teta-table-head [selectType]=\"selectType\" [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <teta-table-body\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [additionalComponent]=\"detailComponent\"\n [grouping]=\"grouping\"\n [groupRowComponent]=\"groupRowComponent\"\n [openLevels]=\"openLevels\"\n [selectType]=\"selectType\"\n [rowHeight]=\"rowHeight\"\n [rowClass]=\"rowClass\"\n [tree]=\"tree\"></teta-table-body>\n</div>\n\n<div #contextMenu\n class=\"list shadow-1\"\n style=\"position: fixed; z-index: 2;\"\n [style.visibility]=\"showContextMenu ? 'visible ' : 'hidden'\"\n [tetaClickOutside]=\"showContextMenu\"\n (clickOutside)=\"showContextMenu = false\">\n <ng-container *ngIf=\"contextMenuConfig?.add\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"rowAdd()\">\n <teta-icon [name]=\"'add'\" [palette]=\"'text'\"></teta-icon>\n Добавить строку\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"contextMenuConfig?.copy\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"copy(selectedRowsList)\"\n *ngIf=\"selectedRowsList?.length > 0\">\n <teta-icon [name]=\"'copySelected'\" [palette]=\"'text'\"></teta-icon>\n Копировать выделенные строки\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"copy([contextMenuTarget.row])\"\n *ngIf=\"contextMenuTarget\">\n <teta-icon [name]=\"'copy'\" [palette]=\"'text'\"></teta-icon>\n Копировать строку\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"contextMenuConfig?.paste\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"pasteData()\">\n <teta-icon [name]=\"'paste'\" [palette]=\"'text'\"></teta-icon>\n Вставить\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"contextMenuConfig?.delete\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"delete(selectedRowsList)\"\n *ngIf=\"selectedRowsList?.length > 0\">\n <teta-icon [name]=\"'deleteSelected'\" [palette]=\"'text'\"></teta-icon>\n Удалить выделенные строки\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"delete([contextMenuTarget.row])\"\n *ngIf=\"contextMenuTarget\">\n <teta-icon [name]=\"'delete'\" [palette]=\"'text'\"></teta-icon>\n Удалить строку\n </div>\n </ng-container>\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TabContentDirective} from './tab-content.directive';\nimport {TabTitleDirective} from './tab-title.directive';\nimport {TabComponent} from './tab/tab.component';\nimport {TabsComponent} from './tabs/tabs.component';\n\n@NgModule({\n declarations: [\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabsComponent\n ],\n exports: [\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabsComponent\n ],\n imports: [\n CommonModule\n ]\n})\nexport class TabsModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TetaTemplateDirective} from './teta-template.directive';\n\n\n@NgModule({\n declarations: [\n TetaTemplateDirective\n ],\n exports: [\n TetaTemplateDirective\n ],\n imports: [\n CommonModule\n ]\n})\nexport class TetaTemplateModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeComponent } from './tree/tree.component';\nimport { TreeItemComponent } from './tree-item/tree-item.component';\nimport { TetaTemplateModule } from '../../directive/teta-template/teta-template.module';\nimport { IconModule } from '../icon/icon.module';\nimport { TreeItemToggleComponent } from './tree-item-toggle/tree-item-toggle.component';\n\n@NgModule({\n declarations: [TreeComponent, TreeItemComponent, TreeItemToggleComponent],\n exports: [TreeComponent, TetaTemplateModule, TreeItemToggleComponent],\n imports: [CommonModule, IconModule, TetaTemplateModule],\n})\nexport class TreeModule {}\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {CellComponentBase} from '../../base/cell-component-base';\nimport {TableColumn} from '../../contract/table-column';\nimport {TableRow} from '../../contract/table-row';\nimport {TableService} from '../../service/table.service';\nimport {ICellCoordinates} from '../../contract/i-cell-coordinates';\nimport {DatePickerComponent} from '../../../date-picker/date-picker/date-picker.component';\n\n@Component({\n selector: 'teta-date-time-cell',\n templateUrl: './date-time-cell.component.html',\n styleUrls: ['./date-time-cell.component.scss'],\n})\nexport class DateTimeCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit {\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n\n @ViewChild('input', {static: false}) input: DatePickerComponent;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n setValue(value: Date): void {\n this.row.data[this.column.name] = value;\n this.valueChanged();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input.openPicker(true);\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{row.data[column.name] | date : 'dd.MM.yyyy HH:mm:ss'}}\n</span>\n<teta-date-picker class=\"datepicker-table\" #input\n *ngIf=\"edit\"\n [appendToBody]=\"true\"\n [showTime]=\"true\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\"\n></teta-date-picker>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizeDragDirective } from './resize-drag.directive';\n\n@NgModule({\n declarations: [ResizeDragDirective],\n exports: [ResizeDragDirective],\n imports: [CommonModule],\n})\nexport class ResizeDragModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableComponent } from './table/table.component';\nimport { FilterModule } from '../filter/filter.module';\nimport { NumericCellComponent } from './default/numeric-cell/numeric-cell.component';\nimport { ListCellComponent } from './default/list-cell/list-cell.component';\nimport { DateCellComponent } from './default/date-cell/date-cell.component';\nimport { StringCellComponent } from './default/string-cell/string-cell.component';\nimport { HeadCellHostComponent } from './head-cell-host/head-cell-host.component';\nimport { TableHeadComponent } from './table-head/table-head.component';\nimport { TableBodyComponent } from './table-body/table-body.component';\nimport { CellComponent } from './cell/cell.component';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxModule } from '../checkbox/checkbox.module';\nimport { CellHostComponent } from './cell-host/cell-host.component';\nimport { GroupRowComponent } from './default/group-row/group-row.component';\nimport { TableHeadGroupComponent } from './table-head-group/table-head-group.component';\nimport { HeadCellComponent } from './head-cell/head-cell.component';\nimport { DefaultHeadCellComponent } from './default/default-head-cell/default-head-cell.component';\nimport { IconModule } from '../icon/icon.module';\nimport { DropdownModule } from '../dropdown/dropdown.module';\nimport { TabsModule } from '../tabs/tabs.module';\nimport { SelectModule } from '../select/select.module';\nimport { NumberPipeModule } from '../../pipe/number-pipe/number-pipe.module';\nimport { DatePickerModule } from '../date-picker/date-picker.module';\nimport { ButtonModule } from '../button/button.module';\nimport { SelectionCellComponent } from './selection-cell/selection-cell.component';\nimport { SelectionHeadCellComponent } from './selection-head-cell/selection-head-cell.component';\nimport { HintModule } from '../../directive/hint/hint.module';\nimport { TreeModule } from '../tree/tree.module';\nimport { HeadCellDropdownComponent } from './head-cell-dropdown/head-cell-dropdown.component';\nimport { DateTimeCellComponent } from './default/date-time-cell/date-time-cell.component';\nimport { OnlyNumberModule } from '../../directive/only-number/only-number.module';\nimport { BooleanCellComponent } from './default/boolean-cell/boolean-cell.component';\nimport { UiScrollModule } from 'ngx-ui-scroll';\nimport { ToolbarModule } from '../toolbar/toolbar.module';\nimport { ClickOutsideModule } from '../../directive/click-outside/click-outside.module';\nimport {ResizeDragModule} from '../../directive/resize-drag/resize-drag.module';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n@NgModule({\n declarations: [\n TableComponent,\n NumericCellComponent,\n ListCellComponent,\n DateCellComponent,\n StringCellComponent,\n HeadCellHostComponent,\n TableHeadComponent,\n TableBodyComponent,\n CellComponent,\n CellHostComponent,\n GroupRowComponent,\n TableHeadGroupComponent,\n HeadCellComponent,\n DefaultHeadCellComponent,\n SelectionCellComponent,\n SelectionHeadCellComponent,\n HeadCellDropdownComponent,\n DateTimeCellComponent,\n BooleanCellComponent,\n ],\n exports: [\n TableComponent,\n NumericCellComponent,\n ListCellComponent,\n DateCellComponent,\n StringCellComponent,\n HeadCellHostComponent,\n TableHeadComponent,\n TableBodyComponent,\n CellComponent,\n CellHostComponent,\n GroupRowComponent,\n DateTimeCellComponent,\n BooleanCellComponent,\n ],\n imports: [\n CommonModule,\n FilterModule,\n FormsModule,\n CheckboxModule,\n IconModule,\n DropdownModule,\n TabsModule,\n SelectModule,\n NumberPipeModule,\n DatePickerModule,\n ButtonModule,\n HintModule,\n TreeModule,\n OnlyNumberModule,\n UiScrollModule,\n ToolbarModule,\n ClickOutsideModule,\n ResizeDragModule,\n ScrollingModule,\n ],\n})\nexport class TableModule {}\n","import {TableRow} from '../contract/table-row';\nimport {TableColumn} from '../contract/table-column';\n\nexport abstract class DetailComponentBase<T> {\n /**\n * The row details are displayed for\n */\n abstract row: TableRow<T>;\n /**\n * displayed columns\n */\n abstract columns: TableColumn[];\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeSwitchService {\n theme: Observable<boolean>;\n private theme$: BehaviorSubject<boolean>;\n\n constructor() {\n const value = this.restoreTheme();\n this.theme$ = new BehaviorSubject<boolean>(value);\n this.theme = this.theme$.asObservable();\n }\n\n switchTheme() {\n const value = !this.theme$.value;\n this.saveTheme(value);\n this.theme$.next(value);\n }\n\n saveTheme(value: boolean) {\n localStorage.setItem('theme', value.toString());\n }\n\n restoreTheme(): boolean {\n const theme = localStorage.getItem('theme');\n if (theme) {\n return JSON.parse(theme);\n }\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ThemeSwitchService } from '../theme-switch.service';\nimport { Observable } from 'rxjs';\nimport {ButtonViewType} from '../../button/button/button.component';\n\n@Component({\n selector: 'teta-theme-switch',\n templateUrl: './theme-switch.component.html',\n styleUrls: ['./theme-switch.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThemeSwitchComponent implements OnInit {\n @Input() palette = 'text';\n @Input() view: ButtonViewType = 'ghost';\n theme: Observable<boolean>;\n\n constructor(private _svc: ThemeSwitchService) {\n this.theme = this._svc.theme;\n }\n\n ngOnInit(): void {}\n\n switchTheme() {\n this._svc.switchTheme();\n }\n}\n","<button teta-button [palette]=\"palette\" [view]=\"view\" [square]=\"true\" (click)=\"switchTheme()\">\n <teta-icon [name]=\"'lamp'\" [palette]=\"'text'\"></teta-icon>\n</button>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ThemeSwitchComponent} from './theme-switch/theme-switch.component';\nimport {ButtonModule} from '../button/button.module';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [ThemeSwitchComponent],\n exports: [ThemeSwitchComponent],\n imports: [\n CommonModule,\n ButtonModule,\n IconModule\n ]\n})\nexport class ThemeSwitchModule {\n}\n","export enum Scale {\n time = 'time',\n number = 'number',\n category = 'category',\n}\n","export enum SeriesType {\n area,\n bar,\n line,\n pie,\n scatter,\n spline,\n contour,\n custom,\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\n\nexport class AreaDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data;\n\n const path = d3\n .area()\n .x1((d: any) => (d.x1 != null ? scaleX(d.x1) : scaleX(0)))\n .x0((d: any) => scaleX(d.x))\n .y((d: any) => scaleY(d.y));\n\n context\n .append('path')\n .attr('transform', `translate(${0}, 0)`)\n .attr('fill', series.color)\n .attr('stroke', series.color)\n .attr('stroke-width', series.strokeWidth ? series.strokeWidth : 1)\n .datum(points)\n .attr('d', path as any);\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { BarPoint } from '../model/point/bar-point';\n\nexport class BarDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BarPoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data.filter((_) => _.visible);\n\n const barScale = d3\n .scaleBand<number>()\n .domain(d3.range(points.length))\n .range(scaleX.range())\n .paddingInner(0.2)\n .paddingOuter(0.2);\n\n const u = context.selectAll('rect').data(points) as any;\n\n u.enter()\n .append('rect')\n .merge(u as any)\n .attr('x', (d: BasePoint, i) => barScale(i))\n .attr('y', (d: BasePoint) => scaleY(d.y))\n .attr('width', barScale.bandwidth())\n .attr('height', (d: BasePoint) => Math.abs(scaleY(0) - scaleY(d.y)))\n .attr('fill', (d: BasePoint) => d.color);\n\n u.exit().remove();\n }\n}\n","export enum DispatchType {\n moveLine = 'moveLine',\n movePoint = 'movePoint',\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { ChartOptions } from '../model/chart-options';\nimport { IDragEvent } from '../model/i-drag-event';\nimport { DispatchType } from '../model/enum/dispatch-type';\nimport { DragPointType } from '../model/enum/drag-point-type';\n\nexport class LineDrawer implements IDrawer<BasePoint> {\n dispatch: d3.Dispatch<IDragEvent<Series<BasePoint>>>;\n\n constructor() {\n this.dispatch = d3.dispatch(DispatchType.moveLine, DispatchType.movePoint);\n }\n\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any,\n options: ChartOptions\n ): void {\n const points = series.data;\n\n const markerPoints = points.filter((_) => _.marker);\n\n const path = d3\n .line<BasePoint>()\n .curve(series.curveType)\n .defined((d) => d.x != null && d.y != null)\n .x((d) => scaleX(d.x))\n .y((d) => scaleY(d.y));\n\n const seriesIndex = options.series.findIndex((_) => _.id === series.id);\n\n context\n .append('path')\n .attr('class', (d: BasePoint) =>\n series?.drag.enable ? 'draggable' : `series-${seriesIndex}`\n )\n .attr('data-draggable-id', seriesIndex)\n .attr('fill', 'none')\n .attr('stroke', series.color)\n .attr('stroke-dasharray', series?.strokeDasharray)\n .attr('stroke-width', series.strokeWidth ? series.strokeWidth : 1)\n .style('cursor', series?.drag?.enable ? 'move' : 'default')\n .datum(points)\n .attr('d', path);\n\n const u = context.append('g').attr('class', 'grabbers');\n\n const emit = (event: DragEvent, target: Series<BasePoint>) => {\n this.dispatch.apply(DispatchType.moveLine, {\n target,\n event,\n });\n };\n\n if (series.drag.enable) {\n u.selectAll('circle')\n .data(points)\n .enter()\n .append('circle')\n .attr('data-grabber-id', seriesIndex)\n .attr('stroke', series?.drag?.grabbers?.stroke ?? series?.color)\n .attr('stroke-width', series?.drag?.grabbers?.strokeWidth ?? 1)\n .attr('fill', series?.drag?.grabbers?.fill ?? series?.color)\n .attr('r', series?.drag?.grabbers?.radius ?? 4)\n .attr('cx', function (d) {\n return scaleX(d.x);\n })\n .attr('cy', function (d) {\n return scaleY(d.y);\n })\n .style('cursor', 'move')\n .call(\n d3.drag().on('start drag end', function (event, d: BasePoint) {\n d.x = scaleX.invert(event.sourceEvent?.offsetX);\n d.y = scaleY.invert(event.sourceEvent?.offsetY);\n d3.select(this).attr('cx', scaleX(d.x)).attr('cy', scaleY(d.y));\n\n context\n .select(`[data-draggable-id='${seriesIndex}']`)\n .attr('d', path);\n\n emit(event, series);\n\n if (series?.drag?.extendLine) {\n drawExtendedLine();\n }\n })\n );\n\n u.exit().remove();\n }\n\n const drawExtendedLine = () => {\n context.selectAll(`[data-extended-id='${seriesIndex}']`).remove();\n\n const p1 = points[0];\n const p2 = points[points.length - 1];\n\n const distance = Math.sqrt(\n Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p2.y, 2)\n );\n\n if (distance <= 0) {\n return;\n }\n\n const extendLength = 50;\n\n const extendedEndX = p2.x + ((p2.x - p1.x) / distance) * extendLength;\n const extendedEndY = p2.y + ((p2.y - p1.y) / distance) * extendLength;\n\n const extendedStartX = p1.x - ((p2.x - p1.x) / distance) * extendLength;\n const extendedStartY = p1.y - ((p2.y - p1.y) / distance) * extendLength;\n\n context\n .append('line')\n .attr('class', 'extendedLine')\n .attr('data-extended-id', seriesIndex)\n .attr('stroke', series?.color)\n .attr('stroke-width', series?.strokeWidth)\n .attr('stroke-dasharray', series?.strokeDasharray)\n .attr('x1', scaleX(p1.x))\n .attr('y1', scaleY(p1.y))\n .attr('x2', scaleX(extendedStartX))\n .attr('y2', scaleY(extendedStartY));\n\n context\n .append('line')\n .attr('class', 'extendedLine')\n .attr('data-extended-id', seriesIndex)\n .attr('stroke', series?.color)\n .attr('stroke-width', series?.strokeWidth)\n .attr('stroke-dasharray', series?.strokeDasharray)\n .attr('x1', scaleX(p2.x))\n .attr('y1', scaleY(p2.y))\n .attr('x2', scaleX(extendedEndX))\n .attr('y2', scaleY(extendedEndY));\n };\n\n if (series?.drag?.extendLine && points?.length) {\n drawExtendedLine();\n }\n\n if (markerPoints?.length) {\n const emit = (event: DragEvent, target: BasePoint) => {\n this.dispatch.apply(DispatchType.movePoint, {\n target: series,\n point: {\n ...target,\n },\n event,\n });\n };\n\n context\n .selectAll(`draggable-marker-${seriesIndex}`)\n .data(markerPoints)\n .enter()\n .append('circle')\n .attr('class', `draggable-marker-${seriesIndex}`)\n .attr('r', (d) => d.marker?.style?.radius || 5)\n .attr('cx', function (d) {\n return scaleX(d.x);\n })\n .attr('cy', function (d) {\n return scaleY(d.y);\n })\n .style('cursor', 'pointer')\n .style('fill', (d) => d.marker?.style?.color || 'none')\n .attr('stroke', (d) => d.marker?.style?.stroke || 'none')\n .attr('stroke-width', (d) => d.marker?.style?.strokeWidth || 0);\n\n context.selectAll(`.draggable-marker-${seriesIndex}`).call(\n d3.drag().on('drag start end', function dragged(event, d: BasePoint) {\n const node = d3.select(this);\n\n if (event.type === 'start') {\n node.raise().classed('active', true);\n }\n\n if (d.marker?.dragType === DragPointType.x) {\n d.x = scaleX.invert(event.sourceEvent?.offsetX);\n node.attr('cx', scaleX(d.x));\n }\n\n if (d.marker?.dragType === DragPointType.y) {\n d.y = scaleY.invert(event.sourceEvent?.offsetY);\n node.attr('cy', scaleY(d.y));\n }\n\n context.select(`.series-${seriesIndex}`).attr('d', path);\n\n emit(event, d);\n })\n );\n }\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\n\nexport class PieDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {}\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\n\nexport class SplineDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data;\n\n const path = d3\n .line()\n .curve(d3.curveCatmullRom)\n .defined((d: any) => d.x != null && d.y != null)\n .x((d: any) => scaleX(d.x))\n .y((d: any) => scaleY(d.y));\n\n context\n .append('path')\n .attr('transform', `translate(${0}, 0)`)\n .attr('fill', 'none')\n .attr('stroke', series.color)\n .attr('stroke-width', series.strokeWidth ? series.strokeWidth : 1)\n .datum(points)\n .attr('d', path as any)\n .transition()\n .duration(750);\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { ScatterPoint } from '../model/point/scatter-point';\nimport { ChartOptions } from '../model/chart-options';\n\nexport class ScatterDrawer implements IDrawer<ScatterPoint> {\n private _virtualCanvas: any;\n private _colorToData = {};\n private _options: ChartOptions;\n private _context:\n | d3.Selection<SVGElement, unknown, null, undefined>\n | d3.Selection<HTMLCanvasElement, unknown, null, undefined>;\n\n draw(\n series: Series<ScatterPoint>,\n context:\n | d3.Selection<SVGElement, unknown, null, undefined>\n | d3.Selection<HTMLCanvasElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any,\n options: ChartOptions\n ): void {\n this._options = options;\n\n d3.select(context.node().parentNode as any).select('.virtual-canvas').remove();\n\n if (series.renderTo === 'canvas') {\n this._context = context;\n\n const height = context.node().clientHeight;\n const width = context.node().clientWidth;\n\n const points = series.data;\n\n const context2D = (context.node() as HTMLCanvasElement).getContext('2d');\n this._virtualCanvas = d3\n .select(context.node().parentNode as any)\n .append('canvas')\n .attr('class', 'virtual-canvas')\n .style('display', 'none');\n\n this._virtualCanvas.attr('width', width).attr('height', height);\n const virtualContext = this._virtualCanvas.node().getContext('2d');\n\n context.on('mouseout', () => {\n d3.select(this._context.node().parentNode as any)\n .select('.tooltip-chart')\n .style('display', 'none');\n\n context.on('mousemove', null);\n });\n\n context.on('mouseenter', () => {\n d3.select(this._context.node().parentNode as any)\n .select('.tooltip-chart')\n .style('display', null);\n context.on('mousemove', (e) => this.handleMouseMove(e));\n });\n\n points.forEach((d: any, idx) => {\n const color = this.getColor(idx);\n this._colorToData[color] = d;\n virtualContext.fillStyle = color;\n context2D.fillStyle = d.color;\n\n const cx = scaleX(d.x);\n const cy = scaleY(d.y);\n\n context2D.beginPath();\n context2D.arc(cx, cy, d.radius, 0, 2 * Math.PI);\n context2D.closePath();\n context2D.fill();\n\n virtualContext.beginPath();\n virtualContext.arc(cx, cy, d.radius, 0, 2 * Math.PI);\n virtualContext.closePath();\n virtualContext.fill();\n });\n }\n }\n\n private getColor(index) {\n return d3\n .rgb(\n Math.floor(index / 256 / 256) % 256,\n Math.floor(index / 256) % 256,\n index % 256\n )\n .toString();\n }\n\n private tooltipPosition(event) {\n const centerX = this._context.node().clientWidth / 2;\n const centerY = this._context.node().clientHeight / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n private handleMouseMove(event: MouseEvent) {\n const mouse = d3.pointer(event);\n\n const virtualContext = this._virtualCanvas.node().getContext('2d');\n\n const image = virtualContext.getImageData(mouse[0], mouse[1], 1, 1);\n const color = d3.rgb.apply(null, image.data).toString();\n const possibleDatum = this._colorToData[color];\n\n const { top, right, bottom, left } = this.tooltipPosition(event);\n\n if (possibleDatum) {\n const formatted = this._options.tooltip?.format([possibleDatum]);\n d3.select(this._context.node().parentNode as any)\n .select('.tooltip-chart')\n .style('z-index', 3)\n .style('top', top)\n .style('right', right)\n .style('bottom', bottom)\n .style('left', left)\n .html(formatted);\n }\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { tricontour } from 'd3-tricontour';\nimport { ContourPoint } from '../model/point/contour-point';\n\nexport class ContourDrawer implements IDrawer<ContourPoint> {\n draw(\n series: Series<ContourPoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data;\n\n const tricontourFn = tricontour()\n .x((d) => scaleX(d.x))\n .y((d) => scaleY(d.y))\n .value((d) => d.value)\n .thresholds(30);\n\n let contours = tricontourFn(points);\n\n const geoFn = d3.geoPath();\n\n const color = series?.colorScale.domain(\n d3.extent(contours, (d: ContourPoint) => d.value) as any\n );\n\n contours = contours.map((_) => ({\n ..._,\n color: color(_.value),\n }));\n\n const u = context.selectAll('path').data(contours) as any;\n\n u.enter()\n .append('path')\n .merge(u as any)\n .attr('d', (_: any) => geoFn(_))\n .attr('stroke', 'rgba(255, 255,255,0.5)')\n .attr('stroke-width', 0.5)\n .attr('fill', (_: ContourPoint) => _.color);\n\n u.exit().remove();\n }\n}\n","import { SeriesType } from '../model/enum/series-type';\nimport { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { AreaDrawer } from './area-drawer';\nimport { BarDrawer } from './bar-drawer';\nimport { LineDrawer } from './line-drawer';\nimport { PieDrawer } from './pie-drawer';\nimport { SplineDrawer } from './spline-drawer';\nimport { ScatterDrawer } from './scatter-drawer';\nimport { ContourDrawer } from './contour-drawer';\n\nexport const defaultDrawerMapping = new Map<SeriesType, IDrawer<BasePoint>>()\n .set(SeriesType.area, new AreaDrawer())\n .set(SeriesType.bar, new BarDrawer())\n .set(SeriesType.line, new LineDrawer())\n .set(SeriesType.pie, new PieDrawer())\n .set(SeriesType.scatter, new ScatterDrawer())\n .set(SeriesType.spline, new SplineDrawer())\n .set(SeriesType.contour, new ContourDrawer());\n","export enum LegendType {\n swatches,\n gradient,\n}\n","import * as d3 from 'd3';\nimport { SeriesType } from '../model/enum/series-type';\nimport { ILegendDrawer, LegendDrawOptions } from '../model/i-drawer-legend';\nimport { BasePoint } from '../model/point/base-point';\nimport { BarPoint } from '../model/point/bar-point';\n\nconst classTypeLegendMapping = new Map<SeriesType, string>()\n .set(SeriesType.line, 'line')\n .set(SeriesType.spline, 'line');\n\nexport class SwatchDrawer implements ILegendDrawer {\n draw(options: LegendDrawOptions<BasePoint | BarPoint>): void {\n d3.select(options.context.parentElement)\n .select('.legend-container')\n .selectAll('.legend')\n .remove();\n\n const defaultData = options.series?.filter(\n (serie) => serie.type !== SeriesType.bar\n );\n const barData = options?.series\n ?.filter((serie) => serie.type === SeriesType.bar)\n .reduce((acc, serie) => {\n const data = serie.data.map((_) => ({\n ..._,\n serieType: serie.type,\n serieIndex: serie.id,\n }));\n\n return acc.concat(data);\n }, []);\n\n const legendContainer = d3\n .select(options.context.parentElement)\n .select('.legend-container')\n .append('div')\n .attr('class', 'legend padding-bottom-4');\n\n const defaultLegend = legendContainer\n .selectAll('div')\n .data(defaultData)\n .enter()\n .append('div')\n .attr('class', 'item')\n .style('user-select', 'none');\n\n const barLegend = legendContainer\n .selectAll('.bar')\n .data(barData)\n .enter()\n .append('div')\n .attr('class', 'item bar')\n .style('user-select', 'none');\n\n defaultLegend\n .append('div')\n .attr('class', (_) => classTypeLegendMapping.get(_.type) || 'swatch')\n .style('background', (_) =>\n _.visible ? _.color ?? 'black' : 'var(--color-text-10)'\n );\n\n defaultLegend\n .append('div')\n .attr('class', 'label')\n .text((_) => _.name ?? 'Без названия')\n .style('text-decoration', (_) => (_.visible ? 'unset' : 'line-through'));\n\n barLegend\n .append('div')\n .attr('class', 'swatch')\n .style('background', (_) =>\n _.visible ? _.color ?? 'black' : 'var(--color-text-10)'\n );\n\n barLegend\n .append('div')\n .attr('class', 'label')\n .text((_) => _.label ?? 'Без названия')\n .style('text-decoration', (_) => (_.visible ? 'unset' : 'line-through'));\n }\n}\n","import * as d3 from 'd3';\nimport { ILegendDrawer, LegendDrawOptions } from '../model/i-drawer-legend';\nimport { BasePoint } from '../model/point/base-point';\n\nexport class GradientDrawer implements ILegendDrawer {\n draw(options: LegendDrawOptions<BasePoint>): void {\n const container = d3\n .select(options.context.parentElement)\n .select('.legend-container');\n\n container.selectAll('.gradient-legend').remove();\n\n const svg = container\n .append('svg')\n .attr('class', 'gradient-legend')\n .attr('width', options.width)\n .attr('height', 32);\n\n svg.selectAll('.legend-defs').remove();\n\n const extent = d3.extent(\n options.series[0]?.data as any,\n (d: any) => d.value\n ) as any;\n\n const defs = svg.append('defs').attr('class', 'legend-defs') as any;\n\n const linearGradient = defs\n .append('linearGradient')\n .attr('id', 'legend-gradient');\n\n linearGradient\n .selectAll('stop')\n .data([...options.series[0]?.data].reverse())\n .enter()\n .append('stop')\n .attr(\n 'offset',\n (d) => ((d.value - extent[0]) / (extent[1] - extent[0])) * 100 + '%'\n )\n .attr('stop-color', (d) => d.color);\n\n const g = svg.append('g').attr('class', 'gradient-legend');\n\n g.append('rect')\n .attr('width', options.width - 80)\n .attr('transform', 'translate(40, 0)')\n .attr('height', 4)\n .style('fill', 'url(#legend-gradient)');\n\n const xScale = d3\n .scaleLinear()\n .range([80, options.width - 80])\n .domain(extent)\n .nice();\n const tickCount = options.width / 80;\n\n const xAxis = d3.axisBottom(xScale).tickSize(8).ticks(tickCount);\n\n g.call(xAxis).call((node) => {\n node.select('.domain').remove();\n node.selectAll('line').remove();\n });\n }\n}\n","import { ILegendDrawer } from '../model/i-drawer-legend';\nimport { LegendType } from '../model/enum/legend-type';\nimport { SwatchDrawer } from './swatch-drawer';\nimport { GradientDrawer } from './gradient-drawer';\n\nexport const defaultLegendDrawerMapping = new Map<LegendType, ILegendDrawer>()\n .set(LegendType.swatches, new SwatchDrawer())\n .set(LegendType.gradient, new GradientDrawer());\n","export enum AxisType {\n abscissa,\n ordinatus,\n}\n","import * as d3 from 'd3';\nimport {AxisType} from '../model/enum/axis-type';\nimport {Series} from '../model/series';\nimport {BasePoint} from '../model/point/base-point';\nimport {ChartOptions} from '../model/chart-options';\nimport {AxisOptions} from '../model/axis-options';\n\nexport class Axis {\n public static offsetFactor = 22;\n public readonly width: number;\n\n private _type: AxisType;\n private _chartOptions: ChartOptions;\n private _extents: [number, number] = [0, 0];\n private _index: number;\n private _height: number;\n private _offset: number;\n private _ticks: any;\n\n constructor(options: {\n type: AxisType;\n index: number;\n chartOptions: ChartOptions;\n height?: number;\n }) {\n this._type = options?.type;\n this._index = options?.index || 0;\n this._chartOptions = options?.chartOptions;\n this._height = options?.height;\n\n if (this._chartOptions == null) {\n throw new Error(`No chartOptions for axis ${AxisType[this._type]}`);\n }\n\n this.createExtents();\n this.width = this.calculateAxisWidth();\n }\n\n get index() {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this._type === AxisType.abscissa\n ? this._chartOptions.xAxis[this.index]\n : this._chartOptions.yAxis[this.index];\n }\n\n get extent(): [number, number] {\n return this._extents;\n }\n\n get type(): AxisType {\n return this._type;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n get ticks() {\n return this._ticks;\n }\n\n setOffset(offset: number) {\n this._offset = offset;\n }\n\n private calculateAxisWidth(): number {\n if (this.type === AxisType.abscissa) {\n return 0;\n }\n\n const y = d3\n .scaleLinear()\n .domain([this.extent[0], this.extent[1]])\n .range([0, this._height])\n .nice();\n\n const body = d3\n .select('body')\n .append('svg')\n .attr('class', 'calculate-offset')\n .style('position', 'absolute')\n .style('left', '-9999px');\n const axis = d3.axisRight(y).tickValues(this.ticks);\n const element = body.append('g').attr('class', 'font-caption').call(axis);\n\n const bBox = element.node().getBBox();\n\n d3.selectAll('.calculate-offset').remove();\n\n return bBox.width;\n }\n\n private createExtents() {\n const hasMin = this.options?.min != null;\n const hasMax = this.options?.max != null;\n\n if (!hasMin || !hasMax) {\n const filtered = this._chartOptions?.series?.filter(\n (serie: Series<BasePoint>) =>\n this._index ===\n serie[this._type === AxisType.abscissa ? 'xAxisIndex' : 'yAxisIndex']\n );\n\n const raw = filtered.map((series: Series<BasePoint>) =>\n d3.extent(series?.data, (point: BasePoint) =>\n this._type === AxisType.abscissa ? point.x : point.y\n )\n );\n\n const merged = [].concat(...(raw ?? []));\n\n const abs = (num) => Math.abs(num);\n\n this._extents = this.options.negative\n ? [-Math.abs(d3.max(merged.map(abs))), d3.max(merged.map(abs))]\n : [d3.min(merged), d3.max(merged)];\n }\n\n if (hasMin) {\n this._extents[0] = this.options?.min;\n }\n\n if (hasMax) {\n this._extents[1] = this.options?.max;\n }\n }\n}\n","export enum ScaleType {\n linear,\n log,\n pow,\n sqrt,\n time,\n}\n","export enum ZoomType {\n x,\n y,\n xy,\n}\n","import { ElementRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, zoomIdentity, ZoomTransform } from 'd3';\nimport * as d3annotation from 'd3-svg-annotation';\nimport { Scale } from '../model/enum/scale';\nimport { ChartOptions } from '../model/chart-options';\nimport { AxisOptions } from '../model/axis-options';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/point/base-point';\nimport { SeriesType } from '../model/enum/series-type';\nimport { defaultDrawerMapping } from '../drawer/default-drawer-mapping';\nimport { defaultLegendDrawerMapping } from '../legend-drawer/default-drawer-legend-mapping';\nimport { LegendType } from '../model/enum/legend-type';\nimport { Axis } from './axis-creator';\nimport { AxisType } from '../model/enum/axis-type';\nimport { PlotLine } from '../model/plot-line';\nimport { PlotBand } from '../model/plot-band';\nimport { ScaleType } from '../model/enum/scale-type';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IDragEvent } from '../model/i-drag-event';\nimport { DispatchType } from '../model/enum/dispatch-type';\nimport { IZoomEvent } from '../model/i-zoom-event';\n\ntype ChartSize = { width: number; height: number };\n\nexport class TetaChart {\n plotLinesMove: Observable<IDragEvent<PlotLine>>;\n plotBandsMove: Observable<IDragEvent<PlotBand>>;\n\n zoom: Observable<IZoomEvent>;\n seriesMove: Observable<IDragEvent<Series<BasePoint>>>;\n pointMove: Observable<IDragEvent<Series<BasePoint>>>;\n\n private plotLinesMove$: Subject<IDragEvent<PlotLine>> = new Subject<\n IDragEvent<PlotLine>\n >();\n private plotBandsMove$: Subject<IDragEvent<PlotBand>> = new Subject<\n IDragEvent<PlotBand>\n >();\n\n private seriesMove$: Subject<IDragEvent<Series<BasePoint>>> = new Subject<\n IDragEvent<Series<BasePoint>>\n >();\n\n private pointMove$: Subject<IDragEvent<Series<BasePoint>>> = new Subject<\n IDragEvent<Series<BasePoint>>\n >();\n\n private zoom$: Subject<IZoomEvent> = new Subject<IZoomEvent>();\n\n private _container: ElementRef = null;\n private _canvas: any;\n private _width = 0;\n private _height = 0;\n\n private _zoomYCache: Map<number, ZoomTransform> = new Map<\n number,\n ZoomTransform\n >();\n\n private _zoomXCache: Map<number, ZoomTransform> = new Map<\n number,\n ZoomTransform\n >();\n\n private _zoom = d3.zoom();\n private _commonZoomTransform: ZoomTransform;\n\n private visibleChartWindowWidth = 0;\n\n private _options: ChartOptions;\n private _xAxisList: Axis[];\n private _yAxisList: Axis[];\n private _xScales: Map<number, any> = new Map<number, any>();\n private _yScales: Map<number, any> = new Map<number, any>();\n\n private _clonedX = new Map<number, any>();\n private _clonedY = new Map<number, any>();\n\n private _chart: d3.Selection<any, unknown, null, undefined>;\n\n private offsetOpposite = 0;\n private offsetNonOpposite = 0;\n\n private uniqId: string;\n private _zoomAdded = false;\n\n constructor(options: ChartOptions, element: ElementRef) {\n this._options = options;\n this.selectNode(element);\n this.createTooltip();\n\n this.plotLinesMove = this.plotLinesMove$.asObservable();\n this.plotBandsMove = this.plotBandsMove$.asObservable();\n this.seriesMove = this.seriesMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n this.zoom = this.zoom$.asObservable();\n }\n\n public redraw(options?: ChartOptions) {\n if (options) {\n this._options = options;\n }\n\n this.createAxis();\n this.createScales();\n this.createMarkers();\n this.createVisibleWindow();\n this._redraw();\n this.drawLegend();\n\n if (this._commonZoomTransform) {\n this._chart.call(this._zoom.transform, this._commonZoomTransform);\n }\n\n if (!this._zoomAdded) {\n this.addZoom();\n this._zoomAdded = true;\n }\n\n this.addAxesZoom();\n }\n\n public setZoom(zoom: IZoomEvent) {\n if (!this._zoom) {\n return;\n }\n this._chart.call(this._zoom.transform, zoom?.zoomTransform ?? zoomIdentity);\n }\n\n public setSize(size: ChartSize = { width: 0, height: 0 }) {\n this._height = size.height;\n this._width = size.width;\n\n this._chart.attr('width', this._width).attr('height', this._height);\n this._canvas.attr('width', this._width).attr('height', this._height);\n\n const extent = [\n [\n this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left,\n this._options.bounds.top,\n ],\n [\n this._width -\n (this.offsetOpposite\n ? this.offsetOpposite\n : this._options.bounds.right),\n this._height - this._options.bounds.bottom,\n ],\n ] as any;\n\n this._zoom\n .scaleExtent([1, Infinity])\n .translateExtent(extent)\n .extent(extent);\n }\n\n private createVisibleWindow() {\n this.uniqId = (Date.now() + Math.random()).toString(36);\n\n this._chart.selectAll('defs').remove();\n\n this._chart\n .append('defs')\n .append('clipPath')\n .attr('id', `draw-window-${this.uniqId}`)\n .append('rect')\n .attr(\n 'x',\n this.offsetNonOpposite === 0\n ? this._options.bounds.left\n : this.offsetNonOpposite\n )\n .attr('y', this._options.bounds.top)\n .attr('width', this.visibleChartWindowWidth + 1)\n .attr(\n 'height',\n this._height -\n this._options.bounds.bottom -\n this._options.bounds.top +\n 1 >\n 0\n ? this._height -\n this._options.bounds.bottom -\n this._options.bounds.top +\n 1\n : 0\n );\n }\n\n private createAxis() {\n this._xAxisList = this._options.xAxis.map(\n (_, index) =>\n new Axis({\n type: AxisType.abscissa,\n index,\n chartOptions: this._options,\n })\n );\n\n this._yAxisList = this._options.yAxis.map((_, index) => {\n const axis = new Axis({\n type: AxisType.ordinatus,\n index,\n chartOptions: this._options,\n height: this._height,\n });\n return axis;\n });\n\n const nonTitleOffset = 6;\n\n this.offsetNonOpposite = d3.reduce(\n this._yAxisList.filter(\n (_) => _.options?.opposite !== true && _.options?.visible\n ),\n (sum, axis) => {\n const offset =\n sum +\n axis.width +\n (axis?.options?.title ? Axis.offsetFactor : nonTitleOffset);\n axis.setOffset(offset);\n return offset;\n },\n 0\n );\n\n this.offsetOpposite = d3.reduce(\n this._yAxisList.filter(\n (_) => _.options?.opposite === true && _.options?.visible\n ),\n (sum, axis) => {\n const offset =\n sum +\n axis.width +\n (axis?.options?.title ? Axis.offsetFactor : nonTitleOffset);\n axis.setOffset(offset);\n return offset;\n },\n 0\n );\n\n this.visibleChartWindowWidth = this.caluclateChartWidth();\n }\n\n private _redraw() {\n this.drawPlotBands();\n this.drawPlotLines();\n\n this.drawChart();\n this.drawAxis();\n this.drawGridLines();\n\n this.drawAnnotations();\n }\n\n private addZoom() {\n if (this._options?.zoom?.enable) {\n const hasXZoom = [ZoomType.x, ZoomType.xy].includes(\n this._options.zoom.zoomType\n );\n const hasYZoom = [ZoomType.y, ZoomType.xy].includes(\n this._options.zoom.zoomType\n );\n\n this._chart.call(\n this._zoom.on('start end zoom', (event) => {\n if (hasXZoom) {\n for (const [key, value] of this._clonedX.entries()) {\n const rescaled = event.transform.rescaleX(value);\n this._xScales.set(key, rescaled);\n\n if (event.sourceEvent) {\n this.zoom$.next({\n domain: rescaled.domain(),\n zoomTransform: event.transform,\n zoomType: ZoomType.x,\n event,\n });\n }\n }\n }\n\n if (hasYZoom) {\n for (const [key, value] of this._clonedY.entries()) {\n const rescaled = event.transform.rescaleY(value);\n this._yScales.set(key, rescaled);\n\n if (event.type === 'zoom') {\n if (event.sourceEvent) {\n this.zoom$.next({\n domain: rescaled.domain(),\n zoomTransform: event.transform,\n zoomType: ZoomType.y,\n event,\n });\n }\n }\n }\n }\n\n if (event.type === 'end') {\n this._commonZoomTransform = event.transform;\n }\n\n this._redraw();\n })\n );\n }\n }\n\n private addAxesZoom() {\n this._chart.selectAll('.zoom-behavior').remove();\n\n [...this._yAxisList, ...this._xAxisList]\n .filter((axis) => axis.options.visible && axis.options.zoom)\n .forEach((axis) => {\n const foundNode = this._chart\n .select(\n `[data-${axis.type === AxisType.abscissa ? 'x' : 'y'}-scale-id='${\n axis.index\n }']`\n )\n .node() as any;\n\n if (!foundNode) {\n return;\n }\n\n const bBox = foundNode.getBBox();\n\n const translateX =\n axis.type === AxisType.abscissa\n ? this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left + this.offsetNonOpposite\n : axis.options.opposite\n ? this._width - axis.offset\n : axis.offset - bBox.width;\n\n const zoom = d3\n .zoom()\n .scaleExtent([1, Infinity])\n .on('zoom end', (event: D3ZoomEvent<any, any>) => {\n if (axis.type === AxisType.abscissa) {\n const scale = this._clonedX.get(axis.index);\n this._xScales.set(axis.index, event.transform.rescaleX(scale));\n } else {\n const scale = this._clonedY.get(axis.index);\n this._yScales.set(axis.index, event.transform.rescaleY(scale));\n }\n\n if (event.type === 'end') {\n if (axis.type === AxisType.ordinatus) {\n this._zoomYCache.set(axis.index, event.transform);\n }\n\n if (axis.type === AxisType.abscissa) {\n this._zoomXCache.set(axis.index, event.transform);\n this._chart.call(this._zoom.transform, event.transform);\n }\n }\n\n this._redraw();\n });\n\n const restoredTransform: ZoomTransform =\n axis.type === AxisType.ordinatus\n ? this._zoomYCache.get(axis.index)\n : this._zoomXCache.get(axis.index);\n\n this._chart\n .append('rect')\n .attr('class', 'zoom-behavior')\n .attr('height', bBox.height)\n .attr('width', bBox.width)\n .attr(\n 'transform',\n `translate(${translateX}, ${\n axis.type === AxisType.abscissa\n ? this._height - this._options.bounds.bottom\n : this._options.bounds.top\n })`\n )\n .style('opacity', '0')\n .style('pointer-events', 'all')\n .call(zoom.transform, restoredTransform ?? d3.zoomIdentity)\n .call(zoom);\n });\n }\n\n private selectNode(element: ElementRef) {\n this._container = element;\n\n d3.select(element.nativeElement).selectAll('.tooltip-chart').remove();\n\n d3.select(element.nativeElement).selectAll('svg').remove();\n d3.select(element.nativeElement).selectAll('canvas').remove();\n\n this._chart = d3\n .select(element.nativeElement)\n .append('svg')\n .attr('position', 'relative')\n .style('z-index', 0);\n\n this._canvas = d3\n .select(element.nativeElement)\n .append('canvas')\n .attr('class', 'main-canvas')\n .style('transform', 'translate(35, 0)')\n .style('position', 'absolute')\n .style('z-index', 1);\n }\n\n private drawAnnotations() {\n this._chart.selectAll('.annotations').remove();\n\n const annotations = this._options.annotations?.map((annotation) => {\n const x = this._xScales.get(annotation.xAxisIndex);\n const y = this._yScales.get(annotation.yAxisIndex);\n\n return {\n note: annotation.note,\n connector: annotation.connector,\n x: x(annotation.point?.x),\n y: y(annotation.point?.y),\n dx: annotation.dx,\n dy: annotation.dy,\n type: annotation.type,\n className: annotation.className,\n };\n });\n\n const makeAnnotations = d3annotation\n .annotation()\n .annotations(annotations ?? []);\n\n this._chart\n .append('g')\n .attr('class', 'annotations')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`)\n .call(makeAnnotations as any)\n .lower();\n }\n\n private drawPlotLines() {\n this._chart.selectAll('.plotlines').remove();\n\n const plotlineGroup = this._chart\n .append('g')\n .attr('class', 'plotlines')\n .style('shape-rendering', 'crispEdges')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`);\n\n this._xAxisList\n .filter((_) => _.options.plotLines.length > 0)\n .forEach((axis) => {\n const [min, max] = axis.extent;\n const x = this._xScales.get(axis.index);\n\n const plotlinesPoints = axis.options.plotLines;\n\n const getTextCenterPointPx = (d: PlotLine, idx: number) =>\n x(\n (d?.value +\n (plotlinesPoints[idx - 1]\n ? plotlinesPoints[idx - 1]?.value\n : 0)) /\n 2\n );\n\n const opacity = (d: PlotLine, idx: number) => {\n const displayWidth = 20;\n\n const width =\n x(d?.value) -\n x(plotlinesPoints[idx - 1] ? plotlinesPoints[idx - 1]?.value : 0);\n return width <= displayWidth ? 0 : 1;\n };\n\n plotlineGroup\n .selectAll('.label')\n .data(plotlinesPoints)\n .join('text')\n .attr('class', 'label font-body-3 fill-text-70')\n .attr('x', getTextCenterPointPx)\n .attr('y', (d) => this._height / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'central')\n .attr(\n 'transform',\n (d, idx) =>\n `rotate(-90, ${getTextCenterPointPx(d, idx)}, ${\n this._height / 2\n })`\n )\n .text((d) => d?.label ?? '')\n .style('opacity', opacity);\n\n plotlineGroup\n .selectAll('.plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'plotline')\n .attr('data-plotline-id', (d) => d.id)\n .attr('x1', (d) => x(d.value))\n .attr('x2', (d) => x(d.value))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', (d) => d.width)\n .style('stroke', (d) => d.color)\n .style('stroke-dasharray', (d) => (d.dashed ? '8, 8' : '0, 0'));\n\n const emit = (event: DragEvent, plotLine: PlotLine) => {\n this.plotLinesMove$.next({ event, target: plotLine });\n };\n\n plotlineGroup\n .selectAll('.drag-plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'drag-plotline')\n .attr('x1', (d) => x(d.value))\n .attr('x2', (d) => x(d.value))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'col-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event, d: PlotLine) {\n const group = d3.select(this).node().parentElement;\n\n const draggedPlotLine = d3\n .select(group)\n .select(`[data-plotline-id='${d.id}']`);\n\n d.value = x.invert(event.x);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\n const borderLeftReached = d.value <= minValue;\n const borderRightReached = d.value >= maxValue;\n\n if (borderLeftReached) {\n d.value = minValue;\n }\n\n if (borderRightReached) {\n d.value = maxValue;\n }\n\n d3.select(this).attr('x1', x(d.value)).attr('x2', x(d.value));\n\n draggedPlotLine.attr('x1', x(d.value)).attr('x2', x(d.value));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotLine) => {\n emit(event, d);\n }) as any\n );\n });\n\n this._yAxisList\n .filter((_) => _.options.plotLines.length > 0)\n .forEach((axis) => {\n const [min, max] = axis.extent;\n const y = this._yScales.get(axis.index);\n\n const plotlinesPoints = axis.options.plotLines;\n\n plotlineGroup\n .selectAll('.plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'plotline')\n .attr('data-plotline-id', (d) => d.id)\n .attr('y1', (d) => y(d.value))\n .attr('y2', (d) => y(d.value))\n .attr('x1', 0)\n .attr(\n 'x2',\n this._width - this._options.bounds.left - this._options.bounds.right\n )\n .attr('transform', `translate(${this._options.bounds.left}, 0)`)\n .style('stroke-width', (d) => d.width)\n .style('stroke', (d) => d.color)\n .style('stroke-dasharray', (d) => (d.dashed ? '8, 8' : '0, 0'));\n\n const emit = (event: DragEvent, plotLine: PlotLine) => {\n this.plotLinesMove$.next({ event, target: plotLine });\n };\n\n plotlineGroup\n .selectAll('.drag-plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'drag-plotline')\n .attr('y1', (d) => y(d.value))\n .attr('y2', (d) => y(d.value))\n .attr('x1', 0)\n .attr(\n 'x2',\n this._width - this._options.bounds.left - this._options.bounds.right\n )\n .attr('transform', `translate(${this._options.bounds.left}, 0)`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'row-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event, d: PlotLine) {\n const group = d3.select(this).node().parentElement;\n\n const draggedPlotLine = d3\n .select(group)\n .select(`[data-plotline-id='${d.id}']`);\n\n d.value = y.invert(event.y);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\n const borderTopReached = d.value <= minValue;\n const borderBottomReached = d.value >= maxValue;\n\n if (borderTopReached) {\n d.value = minValue;\n }\n\n if (borderBottomReached) {\n d.value = maxValue;\n }\n\n d3.select(this).attr('y1', y(d.value)).attr('y2', y(d.value));\n\n draggedPlotLine.attr('y1', y(d.value)).attr('y2', y(d.value));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotLine) => {\n emit(event, d);\n }) as any\n );\n });\n }\n\n private drawPlotBands() {\n this._chart.selectAll('.plotbands').remove();\n\n const plotBandGroup = this._chart\n .append('g')\n .attr('class', 'plotbands')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`);\n\n this._xAxisList\n .filter((_) => _.options.plotBands.length > 0)\n .forEach((axis) => {\n const x = this._xScales.get(axis.index);\n\n const [min, max] = axis.extent;\n\n const plotband = plotBandGroup\n .append('g')\n .style('shape-rendering', 'crispEdges');\n\n const plotBandHeight =\n this._height - this._options.bounds.top - this._options.bounds.bottom;\n\n const emit = (event: DragEvent, plotBand: PlotBand) => {\n this.plotBandsMove$.next({\n event,\n target: plotBand,\n });\n };\n\n plotband\n .selectAll('rect')\n .data(axis.options.plotBands)\n .on('start', (_) => {\n this._chart.selectAll('.marker').style('display', 'none');\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('display', 'none');\n })\n .join('rect')\n .attr('data-plotband-id', (d) => d.id)\n .attr('x', (d) => x(d.from))\n .attr('y', 0)\n .attr('width', (d) => Math.abs(x(d.to) - x(d.from)))\n .attr('fill', (d) => {\n if (d.image) {\n return `url(#${d.image})`;\n }\n return d.color;\n })\n .style('opacity', (d) => d.opacity ?? 1)\n .attr('height', plotBandHeight > 0 ? plotBandHeight : 0)\n .attr('transform', `translate(0, ${this._options.bounds.top})`);\n\n plotband\n .selectAll('.line-left')\n .data(axis.options.plotBands)\n .join('line')\n .attr('data-line-left-id', (d) => d.id)\n .attr('class', 'line-left')\n .attr('x1', (d) => x(d.from))\n .attr('x2', (d) => x(d.from))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-left')\n .data(axis.options.plotBands)\n .join('line')\n .attr('x1', (d) => x(d.from))\n .attr('x2', (d) => x(d.from))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .style('display', (d) => (d?.resizable ? 'unset' : 'none'))\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'col-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-left-id='${d.id}']`);\n\n d.from = x.invert(event.x);\n\n const minValue = d.min ?? min;\n\n const borderReached = d.from <= minValue;\n\n if (borderReached) {\n d.from = minValue;\n }\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n d3.select(this).attr('x1', x(d.from)).attr('x2', x(d.from));\n\n draggedBand\n .attr('x', x(d.from))\n .attr('width', x(d.to) - x(d.from));\n\n draggedLine.attr('x1', x(d.from)).attr('x2', x(d.from));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) =>\n emit(event, d)\n ) as any\n );\n\n plotband\n .selectAll('.line-right')\n .data(axis.options.plotBands)\n .join('line')\n .attr('data-line-right-id', (d) => d.id)\n .attr('class', 'line-right')\n .attr('x1', (d) => x(d.to))\n .attr('x2', (d) => x(d.to))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-right')\n .data(axis.options.plotBands)\n .join('line')\n .attr('class', 'drag-right')\n .style('display', (d) => (d?.resizable ? 'unset' : 'none'))\n .attr('x1', (d) => x(d.to))\n .attr('x2', (d) => x(d.to))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'col-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-right-id='${d.id}']`);\n\n d.to = x.invert(event.x);\n\n const maxValue = d.max ?? max;\n\n const borderReached = d.to >= maxValue;\n\n if (borderReached) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n\n d3.select(this).attr('x1', x(d.to)).attr('x2', x(d.to));\n draggedBand.attr('width', x(d.to) - x(d.from));\n draggedLine.attr('x1', x(d.to)).attr('x2', x(d.to));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) =>\n emit(event, d)\n ) as any\n );\n });\n\n this._yAxisList\n .filter((_) => _.options.plotBands.length > 0)\n .forEach((axis) => {\n const y = this._yScales.get(axis.index);\n\n const [min, max] = axis.extent;\n\n const plotband = plotBandGroup\n .append('g')\n .style('shape-rendering', 'crispEdges');\n\n const plotBandWidth =\n this._width - this._options.bounds.left - this._options.bounds.right; // TODO add multiaxis support width\n\n const emit = (event: DragEvent, plotBand: PlotBand) => {\n this.plotBandsMove$.next({\n event,\n target: plotBand,\n });\n };\n\n const dragPlotband = d3\n .drag()\n .subject(function () {\n const element = d3.select(this);\n return { y: element.attr('y') };\n })\n .on('start drag end', function (event: any, d: PlotBand) {\n const element = d3.select(this);\n\n const height = parseFloat(element.attr('height'));\n\n d.to = y.invert(event.y + height);\n d.from = y.invert(event.y);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\n const borderReachedMin = d.from <= minValue;\n const borderReachedMax = d.to >= maxValue;\n\n if (borderReachedMin) {\n d.to = y.invert(y(minValue) + height);\n d.from = minValue;\n }\n\n if (borderReachedMax) {\n d.to = maxValue;\n d.from = y.invert(y(maxValue) - height);\n }\n\n element.attr('y', y(d.from));\n\n const group = element.node().parentElement;\n\n d3.select(group)\n .select(`[data-line-left-id='${d.id}']`)\n .attr('y1', y(d.from))\n .attr('y2', y(d.from));\n\n d3.select(group)\n .select(`[data-grab-left-id='${d.id}']`)\n .attr('y1', y(d.from))\n .attr('y2', y(d.from));\n\n d3.select(group)\n .select(`[data-line-right-id='${d.id}']`)\n .attr('y1', y(d.to))\n .attr('y2', y(d.to));\n\n d3.select(group)\n .select(`[data-grab-right-id='${d.id}']`)\n .attr('y1', y(d.to))\n .attr('y2', y(d.to));\n\n emit(event, d);\n }) as any;\n\n const leftGrabDrag = d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-left-id='${d.id}']`);\n\n d.from = y.invert(event.y);\n\n const minValue = d.min ?? min;\n\n const borderReached = d.from <= minValue;\n\n if (borderReached) {\n d.from = minValue;\n }\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n d3.select(this).attr('y1', y(d.from)).attr('y2', y(d.from));\n\n draggedBand\n .attr('y', y(d.from))\n .attr('height', Math.abs(y(d.to) - y(d.from)));\n draggedLine.attr('y1', y(d.from)).attr('y2', y(d.from));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) => emit(event, d)) as any;\n\n const rightGrabDrag = d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-right-id='${d.id}']`);\n\n d.to = y.invert(event.y);\n\n const maxValue = d.max ?? max;\n\n const borderReached = d.to >= maxValue;\n\n if (borderReached) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n\n d3.select(this).attr('y1', y(d.to)).attr('y2', y(d.to));\n\n draggedBand\n .attr('y', y(d.from))\n .attr('height', Math.abs(y(d.to) - y(d.from)));\n draggedLine.attr('y1', y(d.to)).attr('y2', y(d.to));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) => emit(event, d)) as any;\n\n plotband\n .selectAll('rect')\n .data(axis.options.plotBands)\n .join('rect')\n .attr('data-plotband-id', (d) => d.id)\n .attr('x', 0)\n .attr('y', (d) => y(d.from))\n .attr('width', (d) => plotBandWidth)\n .attr('fill', (d) => {\n if (d.image) {\n return `url(#${d.image})`;\n }\n return d.color;\n })\n .style('opacity', (d) => d.opacity ?? 1)\n .attr('height', (d) => Math.abs(y(d.to) - y(d.from)))\n .attr('cursor', (d) => (d.draggable ? 'move' : 'default'));\n\n plotband\n .selectAll('.line-left')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('data-line-left-id', (d) => d.id)\n .attr('class', 'line-left')\n .attr('y1', (d) => y(d.from))\n .attr('y2', (d) => y(d.from))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-left')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('data-grab-left-id', (d) => d.id)\n .attr('y1', (d) => y(d.from))\n .attr('y2', (d) => y(d.from))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', (d) => (d.resizable ? 'row-resize' : 'default'));\n\n plotband\n .selectAll('.line-right')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('data-line-right-id', (d) => d.id)\n .attr('class', 'line-right')\n .attr('y1', (d) => y(d.to))\n .attr('y2', (d) => y(d.to))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-right')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('class', 'drag-right')\n .attr('data-grab-right-id', (d) => d.id)\n .attr('y1', (d) => y(d.to))\n .attr('y2', (d) => y(d.to))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', (d) => (d.resizable ? 'row-resize' : 'default'));\n\n axis.options.plotBands.forEach((_) => {\n if (_.draggable) {\n plotband.select(`[data-plotband-id='${_.id}']`).call(dragPlotband);\n }\n\n if (_.resizable) {\n plotband.select(`[data-grab-left-id='${_.id}']`).call(leftGrabDrag);\n plotband\n .select(`[data-grab-right-id='${_.id}']`)\n .call(rightGrabDrag);\n }\n });\n });\n }\n\n private drawChart() {\n const series = this._options.series?.filter((_) => _.visible);\n\n this._chart.selectAll('.series').remove();\n\n if (!series || series.length < 1) {\n d3.select(this._container.nativeElement)\n .select('canvas')\n .style('display', 'none');\n }\n\n const group = this._chart\n .append('g')\n .attr('class', 'series')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`);\n\n series?.forEach((seriesItem: Series<BasePoint>, index) => {\n if (seriesItem.renderTo === 'canvas') {\n d3.select(this._container.nativeElement)\n .select('canvas')\n .style('display', null);\n\n d3.select(this._container.nativeElement)\n .select('svg')\n .style('position', 'absolute');\n } else {\n d3.select(this._container.nativeElement)\n .select('canvas')\n .style('display', 'none');\n }\n if (\n !this._xScales.has(seriesItem.xAxisIndex) ||\n !this._yScales.has(seriesItem.yAxisIndex)\n ) {\n return;\n }\n\n const foundX = this._xScales.get(seriesItem.xAxisIndex);\n const foundY = this._yScales.get(seriesItem.yAxisIndex);\n\n const drawer =\n seriesItem.drawer != null\n ? seriesItem.drawer\n : defaultDrawerMapping.get(seriesItem.type);\n\n if (!drawer) {\n throw new Error(\n `No drawer for series ${seriesItem.name}, type ${\n SeriesType[seriesItem.type]\n }`\n );\n }\n\n if (seriesItem.renderTo === 'canvas') {\n const context = this._canvas.node().getContext('2d');\n context.clearRect(0, 0, this._width, this._height);\n }\n\n let [xMin, xMax] = foundX.domain();\n let [yMin, yMax] = foundY.domain();\n\n xMin = xMin instanceof Date ? xMin.getTime() : xMin;\n xMax = xMax instanceof Date ? xMax.getTime() : xMax;\n\n yMin = yMin instanceof Date ? yMin.getTime() : yMin;\n yMax = yMax instanceof Date ? yMax.getTime() : yMax;\n\n const visiblePoints = (\n point: BasePoint,\n idx: number,\n arr: Array<BasePoint>\n ) =>\n (point.x <= xMax ||\n point.x1 <= xMax ||\n (arr[idx - 1] && arr[idx - 1].x <= xMax) ||\n (arr[idx - 1] && arr[idx - 1].x1 <= xMax)) &&\n (point.x >= xMin ||\n point.x1 >= xMin ||\n (arr[idx + 1] && arr[idx + 1].x >= xMin) ||\n (arr[idx + 1] && arr[idx + 1].x1 >= xMin)) &&\n (point.y <= yMax ||\n point.y1 <= yMax ||\n (arr[idx - 1] && arr[idx - 1].y <= yMax) ||\n (arr[idx - 1] && arr[idx - 1].y1 <= yMax)) &&\n (point.y >= yMin ||\n point.y1 >= yMin ||\n (arr[idx + 1] && arr[idx + 1].y >= yMin) ||\n (arr[idx + 1] && arr[idx + 1].y1 >= yMin));\n\n const filteredData = seriesItem.data; //.filter(visiblePoints);\n\n const serie = {\n ...seriesItem,\n data: filteredData,\n };\n\n drawer.draw(\n serie,\n seriesItem.renderTo === 'canvas' ? this._canvas : group,\n foundX,\n foundY,\n this._options\n );\n\n const emit = (event: IDragEvent<Series<BasePoint>>) => {\n this.seriesMove$.next(event);\n };\n\n const emitPoint = (event: IDragEvent<Series<BasePoint>>) => {\n this.pointMove$.next(event);\n };\n\n drawer?.dispatch?.on(DispatchType.moveLine, function () {\n emit(this);\n });\n\n drawer?.dispatch?.on(DispatchType.movePoint, function () {\n emitPoint(this);\n });\n });\n }\n\n private createTooltip() {\n d3.select(this._container.nativeElement)\n .append('div')\n .attr('class', 'tooltip-chart color-text-90 bg-background-50 shadow-2')\n .style('position', 'fixed')\n .style('top', 'unset')\n .style('right', 'unset')\n .style('bottom', 'unset')\n .style('left', 'unset')\n .style('pointer-events', 'none')\n .style('display', 'none');\n }\n\n private handleMouseMove(options) {\n const mouse = d3.pointer(options.event);\n const { top, right, bottom, left } = this.tooltipPosition(options.event);\n\n const tooltipsData = [];\n\n this._chart\n .select('.marker-line')\n .attr('transform', `translate(${0}, ${mouse[1] - 2})`);\n\n this._chart\n .selectAll('.marker')\n .attr('transform', (d: Series<BasePoint>) => {\n if (!d.data.length) {\n return;\n }\n\n if (\n !this._xScales.has(d.xAxisIndex) ||\n !this._yScales.has(d.yAxisIndex)\n ) {\n return;\n }\n\n const foundX = this._xScales.get(d.xAxisIndex);\n const foundY = this._yScales.get(d.yAxisIndex);\n\n if (this._options.tooltip.tracking === 'x') {\n const [min, max] = foundX.domain();\n const filteredData = d.data.filter(\n (point) => point.x <= max && point.x >= min\n );\n\n const sorted = [...filteredData].sort((a, b) =>\n d3.ascending(a.x, b.x)\n );\n\n const bisect = d3.bisector((dd: any) => dd.x).left;\n const x0 = foundX.invert(mouse[0]);\n\n const index = bisect(sorted, x0);\n\n const data = sorted[index] ? sorted[index] : sorted[index - 1];\n\n tooltipsData.push({\n point: data,\n color: d.color,\n name: d.name,\n });\n\n return `translate(${\n !isNaN(data?.x) && data?.x != null ? foundX(data.x) : -10\n }, ${!isNaN(data?.y) && data?.y != null ? foundY(data.y) : -10})`;\n }\n\n if (this._options.tooltip.tracking === 'y') {\n const sorted = [...d.data].sort((a, b) => d3.ascending(a.y, b.y));\n const bisect = d3.bisector((dd: any) => dd.y).left;\n const y0 = foundY.invert(mouse[1]);\n\n const index = bisect(sorted, y0, 0);\n\n const data = sorted[index] ? sorted[index] : sorted[index - 1];\n\n tooltipsData.push({\n point: data,\n color: d.color,\n name: d.name,\n });\n\n return `translate(${\n !isNaN(data?.x) && data?.x != null ? foundX(data.x) : -10\n }, ${!isNaN(data?.y) && data?.y != null ? foundY(data.y) : -10})`;\n }\n });\n\n if (this._options.tooltip?.format) {\n const formatted = this._options.tooltip?.format(tooltipsData);\n\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('top', top)\n .style('right', right)\n .style('bottom', bottom)\n .style('left', left)\n .html(formatted);\n }\n }\n\n private tooltipPosition(event) {\n const centerX = this._width / 2;\n const centerY = this._height / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n private createMarkers() {\n if (this._options.tooltip === undefined) {\n return;\n }\n\n if (!this._options.tooltip.enable) {\n return;\n }\n\n this._chart.selectAll('.marker').remove();\n this._chart.select('.marker-line').remove();\n\n this._chart\n .append('line')\n .attr('class', 'marker-line')\n .attr('x1', 35)\n .attr('x2', this._width)\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-40)')\n .style('display', 'none');\n\n const { series } = this._options;\n\n if (!series) {\n return;\n }\n\n const markers = this._chart\n .selectAll()\n .data(series.filter((_) => _.visible));\n\n markers\n .enter()\n .append('circle')\n .attr('class', 'marker')\n .attr('pointer-events', 'none')\n .attr('r', 3)\n .attr('fill', (_, i) => _.color)\n .style('display', 'none');\n\n const mouseoutEvent = () => {\n this._chart.selectAll('.marker').style('display', 'none');\n this._chart.select('.marker-line').style('display', 'none');\n\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('display', 'none');\n };\n\n const mouseMoveEvent = (event) => {\n const options = {\n event,\n series,\n };\n\n this.handleMouseMove(options);\n };\n\n const mouseOverEvent = () => {\n if (this._options.tooltip.showMarkers) {\n this._chart\n .selectAll('.marker')\n .style('display', (d: Series<BasePoint>) => {\n if (d.data.length) {\n return null;\n }\n return 'none';\n });\n }\n\n if (this._options.tooltip.showLine) {\n this._chart.select('.marker-line').style('display', null);\n }\n\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('display', null);\n };\n\n this._chart\n .on('mouseover', mouseOverEvent)\n .on('mousemove', mouseMoveEvent)\n .on('mouseleave', mouseoutEvent);\n }\n\n private drawLegend() {\n if (this._options.legend?.visible === false) {\n return;\n }\n\n this._chart.selectAll('.legend').remove();\n\n const drawer = this._options.legend?.type\n ? defaultLegendDrawerMapping.get(this._options.legend.type)\n : defaultLegendDrawerMapping.get(LegendType.swatches);\n\n const context = this._container.nativeElement as HTMLElement;\n\n if (!drawer) {\n throw new Error(\n `No drawer for legend\n }`\n );\n }\n\n drawer.draw({\n context,\n series: this._options.series.filter((_) => _.showInLegend),\n width: this._width,\n height: this._height,\n });\n }\n\n private caluclateChartWidth() {\n let width = -this._width;\n\n if (this.offsetOpposite > 0) {\n width = -this._width + this.offsetOpposite + this.offsetNonOpposite;\n }\n\n if (this.offsetNonOpposite > 0) {\n width =\n -this._width + this._options.bounds.right + this.offsetNonOpposite;\n }\n\n if (\n this.offsetOpposite >= Axis.offsetFactor &&\n this.offsetNonOpposite === 0\n ) {\n width = -this._width + this.offsetOpposite + this._options.bounds.left;\n }\n\n if (this.offsetOpposite > 0 && this.offsetNonOpposite > 0) {\n width = -this._width + this.offsetOpposite + this.offsetNonOpposite;\n }\n\n return Math.abs(width);\n }\n\n private drawGridLines() {\n if (this._options.gridLines === false) {\n return;\n }\n\n const translateX =\n this.offsetNonOpposite > 0\n ? this.offsetNonOpposite\n : this._options.bounds.left + this.offsetNonOpposite;\n\n this._chart.selectAll('.grid').remove();\n\n const yList = this._yAxisList.filter(\n (_) => _.options.visible && !_.options.opposite\n );\n\n const y: any =\n yList?.length > 0\n ? this._yScales.get(yList[yList.length - 1].index)\n : this._yScales.get(0);\n\n const x = this._xScales.get(0);\n\n if (!y || !x) {\n return;\n }\n\n const TICK_HEIGHT = 40;\n const TICK_WIDTH = 60;\n\n const tickCount = Math.round(this._height / TICK_HEIGHT);\n const tickCountX = Math.round(this._width / TICK_WIDTH);\n\n const gridY = this._chart\n .append('g')\n .attr('class', 'grid color-text-10')\n .style('shape-rendering', 'crispEdges');\n\n const gridlinesY = d3\n .axisLeft(y)\n .tickFormat('' as any)\n .tickSize(-this.visibleChartWindowWidth);\n\n const hasBarSeriesType = this._options.series.some(\n (_) => _.type === SeriesType.bar\n );\n\n if (!hasBarSeriesType) {\n const gridX = this._chart\n .append('g')\n .attr('class', 'grid color-text-10')\n .style('shape-rendering', 'crispEdges');\n\n const gridlinesX = d3\n .axisBottom(x)\n .ticks(tickCountX)\n .tickFormat('' as any)\n .tickSize(\n this._height - this._options.bounds.bottom - this._options.bounds.top\n );\n\n gridX\n .call(gridlinesX)\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .lower();\n }\n\n gridY\n .call(gridlinesY)\n .attr('transform', `translate(${translateX}, ${0})`)\n .lower();\n\n this._chart.selectAll('.grid path').remove();\n }\n\n private createScales() {\n this._xScales.clear();\n this._yScales.clear();\n\n const defaultScaleMapping: Map<ScaleType, any> = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.sqrt, d3.scaleSqrt)\n .set(ScaleType.pow, d3.scalePow);\n\n const xRange = [\n this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left,\n this._width -\n (this.offsetOpposite\n ? this.offsetOpposite\n : this._options.bounds.right),\n ];\n\n const yRange = [\n this._height - this._options.bounds.bottom,\n this._options.bounds.top,\n ];\n\n this._xAxisList.forEach((axis, index) => {\n let scale = null;\n\n if (axis.options.type === Scale.time) {\n scale = d3\n .scaleTime()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...xRange].reverse() : xRange);\n }\n\n if (axis.options.type === Scale.number) {\n scale = defaultScaleMapping\n .get(axis.options.scaleOptions.type)()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...xRange].reverse() : xRange);\n }\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleOptions.type === ScaleType.log) {\n scale.base(axis.options.scaleOptions.base);\n }\n\n if (axis.options.scaleOptions.type === ScaleType.pow) {\n scale.exponent(axis.options.scaleOptions.base);\n }\n\n this._xScales.set(index, scale);\n });\n\n this._yAxisList.forEach((axis, index) => {\n let scale = null;\n\n if (axis.options.type === Scale.number) {\n scale = defaultScaleMapping\n .get(axis.options.scaleOptions.type)()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...yRange].reverse() : yRange);\n }\n\n if (axis.options.type === Scale.time) {\n scale = d3\n .scaleTime()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...yRange].reverse() : yRange);\n }\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleOptions.type === ScaleType.log) {\n scale.base(axis.options.scaleOptions.base);\n }\n\n if (axis.options.scaleOptions.type === ScaleType.pow) {\n scale.exponent(axis.options.scaleOptions.base);\n }\n\n this._yScales.set(index, scale);\n });\n\n for (const [key, value] of this._yScales) {\n this._clonedY.set(key, value.copy());\n }\n\n for (const [key, value] of this._xScales) {\n this._clonedX.set(key, value.copy());\n }\n }\n\n private drawAxis() {\n const hasVisibleAxis = [...this._xAxisList, ...this._yAxisList].filter(\n (axis) => axis.options.visible\n );\n\n if (!hasVisibleAxis) {\n return;\n }\n\n const negative = false;\n\n this._chart.selectAll('.axes').remove();\n\n const axes = this._chart\n .append('g')\n .attr('class', 'axes')\n .style('shape-rendering', 'crispEdges');\n\n const TICK_HEIGHT = 40;\n const TICK_WIDTH = 60;\n\n const tickCount = Math.round(this._height / TICK_HEIGHT);\n const tickCountX = Math.round(this._width / TICK_WIDTH);\n\n this._xAxisList.forEach((axis) => {\n const options: AxisOptions = axis.options;\n\n const translate = `translate(${0}, ${\n this._height - this._options.bounds.bottom\n })`;\n\n const x = this._xScales.get(axis.index);\n\n const xAxis = d3.axisBottom(x).ticks(tickCountX);\n\n if (axis.options?.tickFormat) {\n xAxis.tickFormat(axis.options.tickFormat);\n }\n\n if (options.visible !== false) {\n const translateX = this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left + this.offsetNonOpposite;\n\n axes\n .append('g')\n .attr('class', 'x-axis-label')\n .append('text')\n .style('fill', 'var(--color-text-50)')\n .attr(\n 'transform',\n 'translate(' +\n this._width / 2 +\n ' ,' +\n (this._height - this._options.bounds.bottom) +\n ')'\n )\n .style('text-anchor', 'middle')\n .attr('dy', '3em')\n .text(options.title ?? '');\n\n axes\n .append('g')\n .attr('class', 'x-axis font-caption')\n .attr('data-x-scale-id', axis.index)\n .attr('transform', translate)\n .style('pointer-events', 'none')\n .call(xAxis)\n .call((_) => {\n _.select('.domain').remove();\n _.selectAll('.tick').attr('class', 'color-text-50');\n\n if (negative) {\n _.append('line')\n .attr('y1', 0)\n .attr('y2', this._height)\n .attr('transform', `translate(${x(0)}, -${this._height})`)\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-50)');\n }\n\n _.append('line')\n .attr('x1', 0)\n .attr('x2', this.visibleChartWindowWidth)\n .attr('transform', `translate(${translateX}, ${0})`)\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-50)');\n });\n }\n });\n\n this._yAxisList.forEach((axis) => {\n const translate = axis.options.opposite\n ? `translate(${this._width - axis.offset}, ${0})`\n : `translate(${axis.offset}, ${0})`;\n\n const y = this._yScales.get(axis.index);\n\n const yAxis = axis.options.opposite ? d3.axisRight(y) : d3.axisLeft(y);\n\n if (axis.options.visible !== false) {\n const labelOffset = axis.options.opposite\n ? this._width - axis.offset + axis.width\n : axis.offset - axis.width;\n\n axes\n .append('g')\n .attr('class', 'y-axis-label')\n .append('text')\n .style('fill', 'var(--color-text-50)')\n .attr('transform', 'rotate(-90)')\n .attr('y', labelOffset)\n .attr('x', 0 - this._height / 2)\n .attr('dy', axis.options.opposite ? '12px' : '-3px')\n .style('text-anchor', 'middle')\n .text(axis.options.title ?? '');\n\n axes\n .append('g')\n .attr('class', 'y-axis font-caption')\n .attr('data-y-scale-id', axis.index)\n .attr('transform', translate)\n .call(yAxis)\n .style('pointer-events', 'none')\n .call((_) => {\n _.select('.domain').remove();\n _.selectAll('.tick').attr('class', 'color-text-50');\n\n if (!negative) {\n _.append('line')\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr(\n 'transform',\n `translate(${0}, ${this._options.bounds.top})`\n )\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-50)');\n }\n });\n }\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { map, takeWhile, throttleTime } from 'rxjs/operators';\nimport { TetaChart } from '../core/chart';\nimport { ChartOptions } from '../model/chart-options';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport { PlotLine } from '../model/plot-line';\nimport { PlotBand } from '../model/plot-band';\nimport { IDragEvent } from '../model/i-drag-event';\nimport { IZoomEvent } from '../model/i-zoom-event';\nimport { SeriesType } from '../model/enum/series-type';\nimport { BarPoint } from '../model/point/bar-point';\n\n@Component({\n selector: 'teta-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent\n implements OnInit, AfterViewInit, OnDestroy, OnChanges\n{\n @Input() zoom: IZoomEvent;\n\n @Input() config: ChartOptions;\n\n @Output()\n plotLinesMove: EventEmitter<IDragEvent<PlotLine>> = new EventEmitter<\n IDragEvent<PlotLine>\n >();\n\n @Output()\n plotBandsMove: EventEmitter<IDragEvent<PlotBand>> = new EventEmitter<\n IDragEvent<PlotBand>\n >();\n\n @Output()\n seriesMove: EventEmitter<IDragEvent<Series<BasePoint>>> = new EventEmitter<\n IDragEvent<Series<BasePoint>>\n >();\n\n @Output()\n pointMove: EventEmitter<IDragEvent<Series<BasePoint>>> = new EventEmitter<\n IDragEvent<Series<BasePoint>>\n >();\n\n @Output()\n zoomChange: EventEmitter<IZoomEvent> = new EventEmitter<IZoomEvent>();\n\n @ViewChild('chart', {\n static: true,\n })\n chart: ElementRef;\n hasSeriesData: boolean;\n\n private _config: ChartOptions;\n private _alive = true;\n private size$ = new Subject<any>();\n private _observer: ResizeObserver;\n private _chart: TetaChart;\n private _zoom: IZoomEvent;\n\n constructor(private _zone: NgZone) {}\n\n @HostListener('click', ['$event']) click(event: any): void {\n const composedPath = event.composedPath();\n const triggerToken = 'legend';\n\n const isLegend = composedPath.some((_) =>\n _.classList?.contains(triggerToken)\n );\n\n if (isLegend) {\n const clickedElement: any = event.target?.__data__;\n\n if (!clickedElement) {\n return;\n }\n\n const serieIndex = this._config?.series?.indexOf(clickedElement);\n\n if (clickedElement.serieType === SeriesType.bar) {\n const foundSerie = this._config.series[clickedElement.serieIndex];\n\n this._config.series[foundSerie.id].data = this._config.series[\n foundSerie.id\n ].data.map((_: BasePoint & BarPoint) => {\n if (clickedElement.id === _.id) {\n return {\n ..._,\n visible: !_.visible,\n };\n }\n\n return _;\n });\n\n this.redraw(this._config);\n }\n\n if (serieIndex !== -1) {\n const foundSerie = this._config.series[serieIndex];\n\n const yAxisIndex = foundSerie?.yAxisIndex;\n\n this._config.series[serieIndex].visible = !foundSerie.visible;\n\n const attachedYAxes = this._config.series\n ?.filter((_) => _.visible)\n .map((_) => _.yAxisIndex);\n\n const shouldVisibleYAxis = attachedYAxes?.includes(yAxisIndex);\n\n this._config.yAxis[yAxisIndex].visible = shouldVisibleYAxis;\n this.redraw(this._config);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.config && changes.hasOwnProperty('config')) {\n this.setConfig(this.config);\n\n if (this.zoom) {\n this._chart?.setZoom(this.zoom);\n }\n }\n\n if (this.zoom && changes.hasOwnProperty('zoom')) {\n this._chart?.setZoom(this.zoom);\n }\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit(): void {\n this._observer = new ResizeObserver((entries) => {\n const { contentRect } = entries[0];\n this.size$.next(contentRect);\n });\n\n this._observer.observe(this.chart.nativeElement);\n\n this.size$\n .pipe(throttleTime(100, undefined, { trailing: true }))\n .pipe(\n takeWhile((_) => this._alive),\n map((_) => {\n this.resize(_);\n this.redraw(this._config);\n })\n )\n .subscribe();\n }\n\n get showLegend(): boolean {\n return this._config?.legend?.visible;\n }\n\n ngOnDestroy() {\n this._alive = false;\n this._observer?.unobserve(this.chart.nativeElement);\n }\n\n private redraw(config: any) {\n if (config) {\n this._chart.redraw(config);\n }\n }\n\n private resize(contentRect: any) {\n const { width, height } = contentRect;\n this._chart.setSize({\n width,\n height,\n });\n }\n\n private setConfig(config: ChartOptions) {\n if (config) {\n this._config = config;\n this.hasSeriesData = !!this._config?.series?.some((_) => _.data.length);\n\n if (!this._chart) {\n this._chart = new TetaChart(this._config, this.chart);\n\n this._chart.plotLinesMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => this.plotLinesMove.emit(_));\n\n this._chart.plotBandsMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => this.plotBandsMove.emit(_));\n\n this._chart.seriesMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => this.seriesMove.emit(_));\n\n this._chart.pointMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this.pointMove.emit(_);\n });\n\n this._chart.zoom\n .pipe(\n takeWhile((_) => this._alive),\n map((_) => {\n this.zoomChange.emit(_);\n })\n )\n .subscribe();\n }\n\n if (this.chart) {\n if (this.hasSeriesData) {\n if (!this._zoom || this._zoom?.event?.type === 'end') {\n this.redraw(this._config);\n }\n }\n }\n }\n }\n}\n","<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div *ngIf=\"showLegend\" class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">Данные отсутствуют</span>\n</div>\n\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChartComponent } from './chart/chart.component';\n\n@NgModule({\n declarations: [ChartComponent],\n exports: [ChartComponent],\n imports: [CommonModule],\n})\nexport class ChartModule {}\n","import { PlotLine } from './plot-line';\nimport { PlotBand } from './plot-band';\nimport { ScaleType } from './enum/scale-type';\n\nexport class AxisOptions {\n title: string;\n min: number;\n max: number;\n visible: boolean;\n tickFormat: (d: any) => string;\n transform: string;\n type: 'time' | 'number' | 'category';\n zoom?: boolean;\n scaleOptions: {\n type?: ScaleType;\n base?: number;\n };\n inverted?: boolean;\n negative?: boolean;\n opposite?: boolean;\n niceTicks = true;\n plotLines: PlotLine[];\n plotBands: PlotBand[];\n\n constructor(options?: {\n title?: string;\n min?: number;\n max?: number;\n visible?: boolean;\n tickFormat?: (d: any) => string;\n transform?: string;\n type?: 'time' | 'number' | 'category';\n zoom?: boolean;\n scaleOptions?: {\n type?: ScaleType;\n base?: number;\n };\n inverted?: boolean;\n negative?: boolean;\n opposite?: boolean;\n niceTicks?: boolean;\n plotLines?: PlotLine[];\n plotBands?: PlotBand[];\n }) {\n this.title = options?.title;\n this.min = options?.min;\n this.max = options?.max;\n this.visible = options?.visible ?? true;\n this.tickFormat = options?.tickFormat;\n this.transform = options?.transform;\n this.zoom = options?.zoom;\n this.type = options?.type ?? 'number';\n this.scaleOptions = {\n type: ScaleType.linear,\n base: 10,\n ...options?.scaleOptions,\n };\n this.inverted = options?.inverted;\n this.negative = options?.negative;\n this.opposite = options?.opposite;\n this.niceTicks = options?.niceTicks == null ? true : options.niceTicks;\n this.plotLines = options?.plotLines || [];\n this.plotBands = options?.plotBands || [];\n }\n}\n","import {BasePoint} from './point/base-point';\nimport {SeriesType} from './enum/series-type';\nimport {IDrawer} from './i-drawer';\nimport * as d3 from 'd3';\n\nexport class Series<T extends BasePoint> {\n id?: number;\n renderTo?: 'canvas' | 'svg';\n type: SeriesType;\n curveType?: d3.CurveFactoryLineOnly | d3.CurveFactory;\n data: T[];\n axisFormat?: () => void;\n name?: string;\n xAxisIndex?: number;\n yAxisIndex?: number;\n drawer?: IDrawer<T>;\n strokeWidth?: number;\n strokeDasharray?: string;\n visible?: boolean;\n color?: string;\n colorScale?: d3.ScaleSequential<any, any>;\n drag?: {\n enable?: boolean;\n extendLine?: boolean;\n grabbers?: {\n radius?: number;\n stroke?: string;\n fill?: string;\n strokeWidth?: string;\n };\n };\n extend?: boolean;\n showInLegend?: boolean;\n\n constructor(options?: {\n id?: number;\n renderTo?: 'canvas' | 'svg';\n type?: SeriesType;\n curveType?: d3.CurveFactoryLineOnly | d3.CurveFactory;\n data?: T[];\n axisFormat?: () => void;\n name?: string;\n xAxisIndex?: number;\n yAxisIndex?: number;\n drawer?: IDrawer<T>;\n strokeWidth?: number;\n strokeDasharray?: string;\n visible?: boolean;\n color?: string;\n colorScale?: d3.ScaleSequential<any, any>;\n drag?: {\n enable?: boolean;\n extendLine?: boolean;\n grabbers?: {\n radius?: number;\n stroke?: string;\n fill?: string;\n strokeWidth?: string;\n };\n };\n extend?: boolean;\n showInLegend?: boolean;\n }) {\n this.id = options?.id;\n this.renderTo = options?.renderTo ?? 'svg';\n this.type = options?.type != null ? options?.type : SeriesType.line;\n this.curveType =\n options?.curveType != null ? options?.curveType : d3.curveLinear;\n this.data = options?.data?.filter((_) => !isNaN(_.x) && !isNaN(_.y));\n this.axisFormat = options?.axisFormat;\n this.name = options?.name;\n this.xAxisIndex = options?.xAxisIndex != null ? options?.xAxisIndex : 0;\n this.yAxisIndex = options?.yAxisIndex != null ? options?.yAxisIndex : 0;\n this.drawer = options?.drawer;\n this.strokeWidth = options?.strokeWidth;\n this.strokeDasharray = options?.strokeDasharray ?? null;\n this.visible = options?.visible || true;\n this.color = options?.color ?? 'cyan';\n this.colorScale = options?.colorScale;\n this.drag = {enable: false, extendLine: false, ...options?.drag};\n this.showInLegend =\n options?.showInLegend != null ? options?.showInLegend : true;\n this.extend = options?.extend != null ? options?.extend : false;\n }\n}\n","export class TooltipOptions {\n enable?: boolean;\n showMarkers?: boolean;\n showLine?: boolean;\n tracking?: 'x' | 'y' | 'both';\n format?: (data: any) => any;\n\n constructor(options?: {\n enable?: boolean;\n showMarkers?: boolean;\n showLine?: boolean;\n tracking?: 'x' | 'y' | 'both';\n format?: (data: any) => any;\n }) {\n const defaultFormatter = (tooltips) => {\n let html = '';\n\n tooltips\n .filter((_) => _.point)\n .forEach((_) => {\n html += `<div>${_.name ?? 'Без названия'} x: ${_.point?.x?.toFixed(\n 2\n )} y: ${_.point?.y?.toFixed(2)}</div>`;\n });\n\n return html;\n };\n\n this.enable = options?.enable ?? true;\n this.showMarkers = options?.showMarkers ?? true;\n this.showLine = options?.showLine ?? false;\n this.tracking = options?.tracking ?? 'x';\n this.format = options?.format ?? defaultFormatter;\n }\n}\n","export class ChartBounds {\n top = 35;\n right = 50;\n bottom = 50;\n left = 35;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left: number;\n }) {\n this.top = options?.top || this.top;\n this.right = options?.right || this.right;\n this.bottom = options?.bottom || this.bottom;\n this.left = options?.left || this.left;\n }\n}\n","import { AxisOptions } from './axis-options';\nimport { Series } from './series';\nimport { BasePoint } from './point/base-point';\nimport { TooltipOptions } from './tooltip-options';\nimport { ChartBounds } from './chart-bounds';\nimport { LegendType } from './enum/legend-type';\nimport { ZoomType } from './enum/zoom-type';\nimport { ZoomTransform } from 'd3';\nimport { Annotation } from './annotation';\n\nexport class ChartOptions {\n name: string;\n series?: Series<BasePoint>[];\n legend?: {\n type?: LegendType;\n visible?: boolean;\n };\n zoom?: {\n enable?: boolean;\n zoomType?: ZoomType;\n zoomTransform?: ZoomTransform;\n };\n tooltip?: TooltipOptions;\n xAxis: AxisOptions[];\n yAxis: AxisOptions[];\n gridLines?: boolean;\n width?: number;\n height?: number;\n bounds = new ChartBounds();\n annotations?: Annotation[];\n\n constructor(options?: {\n name?: string;\n series?: Series<BasePoint>[];\n zoom?: {\n enable?: boolean;\n zoomType?: ZoomType;\n zoomTransform?: ZoomTransform;\n };\n tooltip?: TooltipOptions;\n xAxis: AxisOptions[];\n yAxis: AxisOptions[];\n gridLines?: boolean;\n width?: number;\n height?: number;\n legend?: {\n type?: LegendType;\n visible?: boolean;\n };\n bounds?: ChartBounds;\n annotations?: Annotation[];\n }) {\n this.name = options?.name;\n this.zoom = {\n enable: false,\n zoomType: ZoomType.x,\n ...options?.zoom,\n };\n this.series = options?.series?.map((series, idx) => ({\n ...series,\n id: idx,\n }));\n this.zoom = { enable: false, zoomType: ZoomType.x, ...options?.zoom };\n this.series = options?.series?.map((series, idx) => new Series(series));\n this.tooltip = new TooltipOptions({ ...options?.tooltip });\n this.xAxis = options?.xAxis?.map((_) => new AxisOptions(_));\n this.yAxis = options?.yAxis?.map((_) => new AxisOptions(_));\n this.gridLines = options?.gridLines == null ? true : options.gridLines;\n this.width = options?.width;\n this.height = options?.height;\n this.legend = {\n visible: true,\n type: LegendType.swatches,\n ...options?.legend,\n };\n this.bounds = { ...this.bounds, ...options?.bounds };\n this.annotations = options?.annotations;\n }\n}\n","import {\n annotationBadge,\n annotationCallout,\n annotationCalloutCircle,\n annotationCalloutCurve,\n annotationCalloutElbow,\n annotationCalloutRect,\n annotationCustomType,\n annotationLabel,\n annotationXYThreshold,\n} from 'd3-svg-annotation';\nimport { BasePoint } from './point/base-point';\n\nconst annotationMap = [\n annotationBadge,\n annotationLabel,\n annotationCallout,\n annotationCalloutCircle,\n annotationCalloutCurve,\n annotationCalloutElbow,\n annotationCalloutRect,\n annotationCustomType,\n annotationXYThreshold,\n] as const;\n\ntype AnnotationTypes = typeof annotationMap[number];\n\nexport class Annotation {\n point: BasePoint;\n yAxisIndex: number;\n xAxisIndex: number;\n type?: AnnotationTypes;\n enabled?: boolean;\n fillColor?: string;\n borderWidth?: number;\n borderColor?: string;\n dx?: number;\n dy?: number;\n className?: string;\n connector?: {\n end: string;\n };\n note?: {\n label?: string;\n title?: string;\n bgPadding?: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n };\n bgRadius?: boolean;\n };\n\n constructor(options?: {\n point: BasePoint;\n type?: AnnotationTypes;\n yAxisIndex: number;\n xAxisIndex: number;\n enabled?: boolean;\n fillColor?: string;\n borderWidth?: number;\n borderColor?: string;\n dx?: number;\n dy?: number;\n className?: string;\n connector?: {\n end: string;\n };\n note?: {\n label?: string;\n title?: string;\n bgPadding?: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n };\n bgRadius?: boolean;\n };\n }) {\n this.point = options?.point;\n this.yAxisIndex = options?.yAxisIndex;\n this.xAxisIndex = options?.xAxisIndex;\n this.type = options?.type || annotationLabel;\n this.enabled = options?.enabled;\n this.className = options?.className;\n this.fillColor = options?.fillColor;\n this.borderColor = options?.borderColor;\n this.borderWidth = options?.borderWidth;\n this.note = options?.note;\n this.connector = options?.connector;\n this.dx = options?.dx;\n this.dy = options?.dy;\n }\n}\n","export class PlotLine {\n id: number;\n width?: number;\n value: number;\n label?: string;\n color?: string;\n dashed?: boolean;\n min?: number;\n max?: number;\n\n constructor(options?: {\n id: number;\n width?: number;\n value: number;\n label?: string;\n color?: string;\n dashed?: boolean;\n min?: number;\n max?: number;\n }) {\n this.id = options?.id;\n this.width = options?.width || 1;\n this.value = options?.value;\n this.label = options?.label;\n this.dashed = options?.dashed || false;\n this.color = options?.color || 'var(--color-text-70)';\n this.min = options?.min;\n this.max = options?.max;\n }\n}\n","export class PlotBand {\n id: any;\n from: number;\n to: number;\n label?: string;\n color?: string;\n image?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n opacity?: number;\n\n constructor(options?: {\n id: any;\n from: number;\n to: number;\n label?: string;\n color?: string;\n image?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n opacity?: number;\n }) {\n this.id = options?.id;\n this.from = options?.from;\n this.to = options?.to;\n this.label = options?.label;\n this.color = options?.color || '#59AE501A';\n this.image = options?.image;\n this.showGrabbers =\n options?.showGrabbers != null ? options.showGrabbers : true;\n this.draggable = options?.draggable != null ? options?.draggable : false;\n this.resizable = options?.resizable != null ? options?.resizable : true;\n this.min = options?.min;\n this.max = options?.max;\n this.opacity = options?.opacity;\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\nimport * as d3 from 'd3';\nimport { Chart3dOptions } from '../model/chart-3d-options';\nimport { Base3dPoint } from '../model/base-3d-point';\nimport { Series3d } from '../model/series-3d';\nimport { ThemeSwitchService } from '../../theme-switch/theme-switch.service';\nimport { takeWhile, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-chart3d',\n templateUrl: './chart3d.component.html',\n styleUrls: ['./chart3d.component.scss'],\n})\nexport class Chart3dComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('canvas') canvasRef: ElementRef;\n\n private _scene: THREE.Scene;\n private _camera: THREE.PerspectiveCamera;\n private _renderer: THREE.Renderer;\n private _controls: OrbitControls;\n private _obs: ResizeObserver;\n private _config: Chart3dOptions;\n\n private SIDE_SIZE = 100;\n private gridColor: any;\n\n private _alive = true;\n\n constructor(\n private _elementRef: ElementRef,\n private _themeService: ThemeSwitchService\n ) {}\n\n @Input() set config(config: Chart3dOptions) {\n if (config) {\n this._config = config;\n this.init();\n }\n }\n\n get config() {\n return this._config;\n }\n\n private get canvas(): HTMLCanvasElement {\n return this.canvasRef.nativeElement;\n }\n\n ngOnInit(): void {\n this._themeService.theme\n .pipe(\n takeWhile((_) => this._alive),\n tap((_) => {\n this.gridColor = _ ? '#474751' : '#d7dee3';\n this.init();\n })\n )\n .subscribe();\n }\n\n ngAfterViewInit() {\n this.addResizeObserver();\n this.createScene();\n this.startRenderingLoop();\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n private init() {\n if (!this._scene) {\n return;\n }\n\n while (this._scene.children.length > 0) {\n this._scene.remove(this._scene.children[0]);\n }\n\n const { x, y, z } = this.getScales(this._config.series);\n\n this.config.series.forEach((data, idx) => {\n const geometry = new THREE.BufferGeometry().setFromPoints(\n data.points.map((_) => new THREE.Vector3(x(_.x), z(_.z), y(_.y)))\n );\n\n const color = d3.scaleOrdinal(d3.schemeTableau10);\n\n const material = new THREE.LineBasicMaterial({\n color: data?.color ?? color(idx.toString()),\n });\n\n const line = new THREE.Line(geometry, material);\n\n line.computeLineDistances();\n line.scale.set(1, 1, 1);\n this._scene.add(line);\n });\n\n const plane = new THREE.GridHelper(\n this.SIDE_SIZE,\n this.SIDE_SIZE / 10,\n this.gridColor,\n this.gridColor\n );\n\n plane.position.set(this.SIDE_SIZE / 2, 0, this.SIDE_SIZE / 2);\n this._scene.add(plane);\n\n const gridX = new THREE.GridHelper(\n this.SIDE_SIZE,\n this.SIDE_SIZE / 10,\n this.gridColor,\n this.gridColor\n );\n gridX.geometry.rotateX(-Math.PI / 2);\n gridX.position.set(this.SIDE_SIZE / 2, this.SIDE_SIZE / 2, 0);\n this._scene.add(gridX);\n\n const gridY = new THREE.GridHelper(\n this.SIDE_SIZE,\n this.SIDE_SIZE / 10,\n this.gridColor,\n this.gridColor\n );\n gridY.geometry.rotateZ(Math.PI / 2);\n gridY.position.set(0, this.SIDE_SIZE / 2, this.SIDE_SIZE / 2);\n this._scene.add(gridY);\n\n this.drawTicks(x, y, z);\n\n this._controls = new OrbitControls(this._camera, this._renderer.domElement);\n\n this._controls.enableDamping = true;\n this._controls.enablePan = true;\n this._controls.dampingFactor = 0.25;\n this._controls.screenSpacePanning = true;\n this._controls.minDistance = 0;\n this._controls.maxDistance = 10000;\n this._controls.maxPolarAngle = Math.PI / 2;\n\n this._controls.enableZoom = true;\n }\n\n private createScene() {\n this._scene = new THREE.Scene();\n\n const aspectRatio =\n this._elementRef.nativeElement.clientWidth /\n this._elementRef.nativeElement.clientHeight;\n\n const fieldOfView = 10;\n const nearClippingPane = 1;\n const farClippingPane = 10000;\n\n this._camera = new THREE.PerspectiveCamera(\n fieldOfView,\n aspectRatio,\n nearClippingPane,\n farClippingPane\n );\n\n this._camera.position.set(1300, 1300, 1300).setLength(1300);\n this._scene.add(this._camera);\n }\n\n private setSize(width: number, height: number) {\n this._camera.aspect = width / height;\n this._renderer.setSize(width, height);\n\n this._camera.updateProjectionMatrix();\n }\n\n private render() {\n this._renderer.render(this._scene, this._camera);\n }\n\n private startRenderingLoop() {\n this._renderer = new THREE.WebGLRenderer({\n antialias: true,\n canvas: this.canvas,\n alpha: true,\n preserveDrawingBuffer: true,\n });\n\n const animate = () => {\n requestAnimationFrame(animate);\n this._controls?.update();\n this.render();\n };\n\n animate();\n }\n\n private addResizeObserver() {\n this._obs = new ResizeObserver((_) => {\n this.setSize(_[0]?.contentRect.width, _[0]?.contentRect.height);\n });\n\n this._obs.observe(this._elementRef.nativeElement);\n }\n\n private makeSprite(text: string, opts?: { fontSize?: number }): THREE.Sprite {\n const fontSize = 20;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const textWidth = text.length * 50;\n canvas.height = 50;\n canvas.width = 50;\n\n if(ctx) {\n ctx.font = `${fontSize}px Arial`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillStyle = '#A0A0A0';\n ctx.fillText(text, 25, 25);\n }\n\n const texture = new THREE.Texture(canvas);\n texture.minFilter = THREE.LinearFilter;\n texture.needsUpdate = true;\n const spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n });\n\n const sprite = new THREE.Sprite(spriteMaterial);\n sprite.scale.set(5, 5, 5);\n\n return sprite;\n }\n\n private drawTicks(x: any, y: any, z: any) {\n const ticks = new THREE.Object3D();\n const scalesExtrems: any[] = [];\n\n [x, y, z].forEach((scale, idx) => {\n const generatedTicks = scale.ticks(this.SIDE_SIZE / 10);\n\n scalesExtrems.push(d3.max(generatedTicks));\n\n generatedTicks.forEach((_: any) => {\n const sprite = this.makeSprite(_);\n\n if (idx === 0) {\n sprite.position.set(x(_), z(0), -5);\n }\n\n if (idx === 1) {\n sprite.position.set(-5, z(0), y(_));\n }\n\n if (idx === 2) {\n sprite.position.set(0, z(_), -5);\n }\n\n ticks.add(sprite);\n });\n });\n\n const northLabel = this.makeSprite('North', { fontSize: 28 });\n const westLabel = this.makeSprite('West', { fontSize: 28 });\n const tvdLabel = this.makeSprite('TVD', { fontSize: 28 });\n\n northLabel.position.set(x(scalesExtrems[0]) + 10, 0, 0);\n westLabel.position.set(0, 0, y(scalesExtrems[1]) + 10);\n tvdLabel.position.set(0, z(scalesExtrems[2]), 0);\n\n ticks.add(northLabel, westLabel, tvdLabel);\n\n this._scene.add(ticks);\n }\n\n private getScales(series: Series3d<Base3dPoint>[]) {\n const extrems = series.map((_) => ({\n x: d3.extent(_.points, (p: any) => p.x),\n y: d3.extent(_.points, (p: any) => p.y),\n z: d3.extent(_.points, (p: any) => p.z),\n }));\n\n const flattenExtrems = extrems.reduce(\n (acc: any, _): { x: [number]; y: [number]; z: [number] } => {\n acc.x = acc.x.concat(_.x);\n acc.y = acc.y.concat(_.y);\n acc.z = acc.z.concat(_.z);\n return acc as any;\n },\n { x: [], y: [], z: [] }\n );\n\n const x = d3\n .scaleLinear()\n .domain([\n d3.min(flattenExtrems.x) as any,\n this._config?.axes?.max == null\n ? d3.max(flattenExtrems.x)\n : this._config.axes.max,\n ])\n .range([0, this.SIDE_SIZE])\n .nice();\n\n const y = d3\n .scaleLinear()\n .domain([\n d3.min(flattenExtrems.y) as any,\n this._config?.axes?.max == null\n ? d3.max(flattenExtrems.y)\n : this._config.axes.max,\n ])\n .range([0, this.SIDE_SIZE])\n .nice();\n\n const z = d3\n .scaleLinear()\n .domain([\n d3.min(flattenExtrems.z) as any,\n this._config?.axes?.max == null\n ? d3.max(flattenExtrems.z)\n : this._config.axes.max,\n ])\n .range([this.SIDE_SIZE, 0])\n .nice();\n\n return { x, y, z };\n }\n}\n","<canvas #canvas></canvas>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Chart3dComponent } from './chart3d/chart3d.component';\n\n@NgModule({\n declarations: [Chart3dComponent],\n exports: [Chart3dComponent],\n imports: [CommonModule],\n})\nexport class Chart3dModule {}\n","import { Base3dPoint } from './base-3d-point';\nimport { Series3d } from './series-3d';\n\nexport class Chart3dOptions {\n axes?: {\n max?: number;\n };\n\n series: Series3d<Base3dPoint>[];\n\n constructor(options?: Chart3dOptions) {\n this.axes = { ...options?.axes };\n this.series = options?.series || [];\n }\n}\n","/* accordion */\nexport * from './accordion/public-api';\n\n/* button */\nexport * from './button/public-api';\n\n/* checkbox */\nexport * from './checkbox/public-api';\n\n/* datepicker */\nexport * from './date-picker/public-api';\n\n/* delimiter */\nexport * from './delimiter/public-api';\n\n/* dropdown */\nexport * from './dropdown/public-api';\n\n/* dynamic-component */\nexport * from './dynamic-component/public-api';\n\n/* expand-panel */\nexport * from './expand-panel/public-api';\n\n/* file */\nexport * from './file-upload/public-api';\n\n/* filter */\nexport * from './filter/public-api';\n\n/* icon */\nexport * from './icon/public-api';\n\n/* input */\nexport * from './input/public-api';\n\n/* message */\nexport * from './message/public-api';\n\n/* modal */\nexport * from './modal/public-api';\n\n/* pager */\nexport * from './pager/public-api';\n\n/* panel */\nexport * from './panel/public-api';\n\n/* progress-bar */\nexport * from './progress-bar/public-api';\n\n/* property-grid */\nexport * from './property-grid/public-api';\n\n/* radio */\nexport * from './radio/public-api';\n\n/* select */\nexport * from './select/public-api';\n\n/* sidebar */\nexport * from './sidebar/public-api';\n\n/* switch */\nexport * from './switch/public-api';\n\n/* table */\nexport * from './table/public-api';\n\n/* tabs */\nexport * from './tabs/public-api';\n\n/* theme-switch */\nexport * from './theme-switch/public-api';\n\n/* toggle */\nexport * from './toggle/public-api';\n\n/* toolbar */\nexport * from './toolbar/public-api';\n\n/* tree */\nexport * from './tree/public-api';\n\n/* chart */\nexport * from './chart/public-api';\n\n/* 3d-chart */\nexport * from './chart-3d/public-api';\n","import { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { fromEvent, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClickService {\n click: Observable<MouseEvent>;\n contextMenu: Observable<MouseEvent>;\n\n constructor(@Inject(DOCUMENT) protected _document: any) {\n this.click = fromEvent(this._document, 'click');\n this.contextMenu = fromEvent(this._document, 'contextmenu');\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DynamicComponentService } from '../../common/service/dynamic-component.service';\nimport { DOCUMENT } from '@angular/common';\nimport { ArrayUtil } from '../../common/util/array-util';\nimport { DomUtil } from '../../common/util/dom-util';\nimport { PositionUtil } from '../../common/util/position-util';\nimport { DynamicContentBaseDirective } from '../dynamic-content-base.directive';\nimport { ClickService } from '../../common/service/click.service';\nimport { merge } from 'rxjs';\nimport { filter, takeWhile, tap } from 'rxjs/operators';\n\n@Directive({\n selector: '[tetaContextMenu]',\n})\nexport class ContextMenuDirective\n extends DynamicContentBaseDirective\n implements OnDestroy, OnInit\n{\n /**\n * Строка, шаблон или компонент для создания контекстного меню\n */\n @Input() tetaContextMenu: string | TemplateRef<any> | Type<any>;\n\n get _dynamicContent() {\n return this.tetaContextMenu;\n }\n\n private _eventPoint: {\n x: number;\n y: number;\n };\n\n constructor(\n @Inject(DOCUMENT)\n protected override _document: any,\n protected override _elementRef: ElementRef,\n protected override _service: DynamicComponentService,\n protected override _injector: Injector,\n protected override _zone: NgZone,\n protected override _cdr: ChangeDetectorRef,\n private _click: ClickService\n ) {\n super(_document, _elementRef, _service, _injector, _zone, _cdr);\n }\n\n @HostListener('contextmenu', ['$event'])\n showContent(event: MouseEvent): void {\n event.preventDefault();\n setTimeout(() => {\n this.createMenu(event);\n });\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent): void {\n if (\n this._componentRef &&\n DomUtil.clickedInside(this._componentRef.location.nativeElement, event)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n merge(this._click.click, this._click.contextMenu)\n .pipe(\n takeWhile(() => this._alive),\n filter(() => this._open),\n filter(() => this._componentRef != null),\n filter(\n (event: MouseEvent) =>\n !DomUtil.clickedInside(\n this._componentRef.location.nativeElement,\n event\n )\n ),\n tap((_) => {\n this.destroyContentRef();\n this.openChange.emit(false);\n })\n )\n .subscribe();\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n protected setPosition() {\n if (this._componentRef && this._open) {\n const position = PositionUtil.getPosition(\n {\n top: this._eventPoint.y,\n bottom: this._eventPoint.y,\n left: this._eventPoint.x,\n right: this._eventPoint.x,\n },\n this._componentRef.location.nativeElement.getBoundingClientRect(),\n this.align,\n this.verticalAlign\n );\n PositionUtil.setElementPosition(\n this._componentRef.location.nativeElement,\n position\n );\n }\n }\n\n private createMenu(event: MouseEvent): void {\n if (this.tetaContextMenu == null) {\n return;\n }\n this._eventPoint = event;\n this._componentRef = this.createContentRef();\n this._componentRef.instance.className = [\n ...ArrayUtil.asArray(this.className),\n 'context-menu',\n ];\n this.openChange.emit(true);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ContextMenuDirective} from './context-menu.directive';\nimport {DynamicComponentModule} from '../../component/dynamic-component/dynamic-component.module';\n\n@NgModule({\n declarations: [ContextMenuDirective],\n exports: [ContextMenuDirective],\n imports: [\n CommonModule,\n DynamicComponentModule\n ]\n})\nexport class ContextMenuModule {\n}\n","import {Directive, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[tetaDisableControl]'\n})\nexport class DisableControlDirective {\n @Input() set tetaDisableControl(val: boolean) {\n if (this.ngControl.control) {\n if (val) {\n this.ngControl.control.disable();\n } else {\n this.ngControl.control.enable();\n }\n }\n }\n\n constructor(private ngControl: NgControl) {\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DisableControlDirective} from './disable-control.directive';\n\n\n@NgModule({\n declarations: [DisableControlDirective],\n imports: [\n CommonModule\n ],\n exports: [\n DisableControlDirective\n ]\n})\nexport class DisableControlModule {\n}\n","import {\n // ContentChildren,\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n // QueryList,\n} from '@angular/core';\nimport {DragSortEvent} from './drag-sort-event';\n// import {DragSortItemDirective} from './drag-sort-item.directive';\n\n@Directive({\n selector: '[tetaDragSortContainer]',\n})\nexport class DragSortContainerDirective<T> {\n @Input() dragSortList: T[];\n @Output() dragSorted: EventEmitter<DragSortEvent<T>> = new EventEmitter<DragSortEvent<T>>();\n\n // @ContentChildren(DragSortItemDirective, {descendants: true})\n // private items: QueryList<DragSortItemDirective<T>>;\n private _dragItem: T;\n\n constructor() {\n }\n\n @HostListener('drop', ['$event']) drop(event: DragEvent): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n setDragItem(item: T) {\n this._dragItem = item;\n }\n\n getDragItem(): T {\n return this._dragItem;\n }\n\n getList(): T[] {\n return this.dragSortList;\n }\n\n setList(list: T[]) {\n this.dragSortList = list;\n }\n\n updateSortOrder(source: T, target: T, insertBefore: boolean) {\n if (source === target) {\n return;\n }\n const list = this.getList();\n const sourceIndex = list.indexOf(source);\n const targetIndex = list.indexOf(target);\n if (\n (insertBefore && sourceIndex + 1 === targetIndex) ||\n (!insertBefore && sourceIndex === targetIndex + 1)\n ) {\n return;\n }\n const newIndex = list.indexOf(target) + (insertBefore ? 0 : 1);\n\n this.dragSorted.emit({\n list,\n source,\n target,\n newIndex,\n previousIndex: sourceIndex,\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Host,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport {DragSortContainerDirective} from './drag-sort-container.directive';\n\n@Directive({\n selector: '[tetaDragSortItem]',\n})\nexport class DragSortItemDirective<T> implements OnInit, OnDestroy {\n @Input() tetaDragSortItem: T;\n @Input() dragSortDirection: 'horizontal' | 'vertical' = 'horizontal';\n\n @HostBinding('attr.draggable') private readonly draggable = true;\n @HostBinding('class.position-relative') private readonly relative = true;\n\n private _dragElement: HTMLElement;\n\n private rect: any;\n\n constructor(\n @Host() private _container: DragSortContainerDirective<T>,\n private _elementRef: ElementRef,\n private _renderer: Renderer2\n ) {\n }\n\n @HostListener('dragstart', ['$event']) dragstart(event: DragEvent): void {\n this._container.setDragItem(this.tetaDragSortItem);\n }\n\n @HostListener('dragenter', ['$event']) dragenter(event: DragEvent): void {\n this.rect = this._elementRef.nativeElement.getBoundingClientRect();\n }\n\n @HostListener('dragover', ['$event']) dragover(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (this.rect && this._container.getDragItem()) {\n this.showDrag(this.getDropPosition(event));\n }\n }\n\n @HostListener('dragleave', ['$event']) dragleave(event: DragEvent): void {\n event.preventDefault();\n this.hideDrag();\n }\n\n @HostListener('dragend', ['$event']) dragend(event: DragEvent): void {\n this._container.setDragItem(null);\n this.hideDrag();\n }\n\n @HostListener('drop', ['$event']) drop(event: DragEvent): void {\n event.stopPropagation();\n this._container.updateSortOrder(\n this._container.getDragItem(),\n this.tetaDragSortItem,\n this.getDropPosition(event) === 'start'\n );\n this.hideDrag();\n }\n\n ngOnInit() {\n this.createDrag();\n }\n\n ngOnDestroy() {\n this.destroyDrag();\n }\n\n private showDrag(position: 'start' | 'end') {\n this.hideDrag();\n this._renderer.addClass(this._dragElement, `drop-direction-${position}`);\n }\n\n private hideDrag() {\n this._renderer.removeClass(this._dragElement, 'drop-direction-start');\n this._renderer.removeClass(this._dragElement, 'drop-direction-end');\n }\n\n private createDrag() {\n this._dragElement = this._renderer.createElement('div');\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this._dragElement\n );\n this._renderer.addClass(this._dragElement, 'drop-direction');\n this._renderer.addClass(\n this._dragElement,\n this.dragSortDirection === 'horizontal'\n ? 'drop-direction-horizontal'\n : 'drop-direction-vertical'\n );\n }\n\n private destroyDrag() {\n this._renderer.removeChild(this._renderer, this._dragElement);\n }\n\n private getDropPosition(event: DragEvent) {\n if (this.dragSortDirection === 'horizontal') {\n return event.clientX >= this.rect.x + this.rect.width / 2\n ? 'end'\n : 'start';\n } else {\n return event.clientY >= this.rect.y + this.rect.height / 2\n ? 'end'\n : 'start';\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragSortContainerDirective } from './drag-sort-container.directive';\nimport { DragSortItemDirective } from './drag-sort-item.directive';\n\n@NgModule({\n declarations: [DragSortContainerDirective, DragSortItemDirective],\n exports: [DragSortContainerDirective, DragSortItemDirective],\n imports: [CommonModule],\n})\nexport class DragSortModule {}\n","import {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n selector: '[tetaLoader]',\n})\nexport class LoaderDirective implements OnDestroy {\n @Input() appendToBody = false;\n\n @Input()\n set tetaLoader(value: boolean) {\n this._loading = value;\n if (this._loading) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n get tetaLoader() {\n return this._loading;\n }\n\n private _element: HTMLElement;\n private _loader: any;\n private _alive = true;\n private _loading: boolean;\n\n constructor(\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n this._element = this._elementRef.nativeElement;\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n this.hide();\n }\n\n private show() {\n if (this._loader === null || this._loader === undefined) {\n this._loader = this._renderer.createElement('div');\n this._loader.setAttribute('class', 'loader');\n }\n this._renderer.appendChild(\n this.appendToBody ? this._document.body : this._element,\n this._loader\n );\n this.setPosition();\n }\n\n private hide() {\n if (this._loader && this._loader.parentElement) {\n this._renderer.removeChild(this._loader.parentElement, this._loader);\n }\n }\n\n private setPosition() {\n const position = this._element.getBoundingClientRect();\n this._renderer.setStyle(\n this._loader,\n 'top',\n `${position.y + position.height / 2}px`\n );\n this._renderer.setStyle(\n this._loader,\n 'left',\n `${position.x + +position.width / 2}px`\n );\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {LoaderDirective} from './loader.directive';\n\n@NgModule({\n declarations: [LoaderDirective],\n exports: [LoaderDirective],\n imports: [\n CommonModule\n ]\n})\nexport class LoaderModule {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n@Component({\n selector: 'teta-resize-panel',\n templateUrl: './resize-panel.component.html',\n styleUrls: ['./resize-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResizePanelComponent implements OnInit, OnDestroy {\n @Input()\n set direction(val: 'vertical' | 'horizontal') {\n this._direction = val;\n }\n\n get direction() {\n return this._direction;\n }\n\n @Input()\n set grabPosition(val: 'top' | 'left' | 'bottom' | 'right') {\n this._grabPosition = val;\n }\n\n get grabPosition() {\n if (this.direction === 'vertical') {\n if (['left', 'right'].includes(this._grabPosition)) {\n return this._grabPosition;\n }\n return 'left';\n }\n if (['top', 'bottom'].includes(this._grabPosition)) {\n return this._grabPosition;\n }\n return 'bottom';\n }\n\n @Input() name: string;\n @Input() minSize: number;\n @Input() maxSize: number;\n @HostBinding('class.resize-panel') private readonly resizePanelClass = true;\n\n private _direction: 'vertical' | 'horizontal' = 'horizontal';\n private _grabPosition: 'top' | 'left' | 'bottom' | 'right' = 'left';\n private _startSize: number;\n private _startPosition: number;\n\n private _positionMap: Map<string, string> = new Map<string, string>()\n .set('left', 'resize-grab_left')\n .set('right', 'resize-grab_right')\n .set('top', 'resize-grab_top')\n .set('bottom', 'resize-grab_bottom');\n\n constructor(\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n }\n\n resizeStart(event: MouseEvent) {\n this.setStartPosition();\n if (this.direction === 'vertical') {\n this._startSize = this._elementRef.nativeElement.clientWidth;\n this._startPosition = event.clientX;\n } else {\n this._startSize = this._elementRef.nativeElement.clientHeight;\n this._startPosition = event.clientY;\n }\n }\n\n resizeProcess(event: MouseEvent) {\n event.preventDefault();\n if (this.direction === 'vertical') {\n this.manageVertical(event);\n } else {\n this.manageHorizontal(event);\n }\n }\n\n resizeEnd(event: MouseEvent) {\n window.dispatchEvent(new Event('resize'));\n }\n\n ngOnInit() {\n this.restorePosition();\n }\n\n ngOnDestroy(): void {\n }\n\n getClassName() {\n return this._positionMap.get(this.grabPosition) || '';\n }\n\n private setStartPosition() {\n if (this.direction === 'vertical') {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'width',\n `${this._elementRef.nativeElement.offsetWidth}px`\n );\n } else {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'height',\n `${this._elementRef.nativeElement.offsetHeight}px`\n );\n }\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex-grow', `0`);\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex-shrink', `0`);\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex', `none`);\n }\n\n private manageHorizontal(event: MouseEvent) {\n let newSize =\n this.grabPosition === 'bottom'\n ? this._startSize + (event.clientY - this._startPosition)\n : this._startSize - (event.clientY - this._startPosition);\n if (this.maxSize && newSize > this.maxSize) {\n newSize = this.maxSize;\n }\n if (this.minSize && newSize < this.minSize) {\n newSize = this.minSize;\n }\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'height',\n `${newSize}px`\n );\n this.save();\n }\n\n private manageVertical(event: MouseEvent) {\n let newSize =\n this.grabPosition === 'right'\n ? this._startSize + (event.clientX - this._startPosition)\n : this._startSize - (event.clientX - this._startPosition);\n if (this.maxSize && newSize > this.maxSize) {\n newSize = this.maxSize;\n }\n if (this.minSize && newSize < this.minSize) {\n newSize = this.minSize;\n }\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'width',\n `${newSize}px`\n );\n this.save();\n }\n\n private restore() {\n if (this.name?.length > 0) {\n return JSON.parse(localStorage.getItem(`resize-panel${this.name}`));\n }\n }\n\n private restorePosition() {\n const savedSize = this.restore();\n if (savedSize) {\n if (this.direction === 'vertical') {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'width',\n `${savedSize}px`\n );\n } else {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'height',\n `${savedSize}px`\n );\n }\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex-grow', `0`);\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'flex-shrink',\n `0`\n );\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex', `none`);\n }\n }\n\n private save() {\n if (this.name?.length > 0) {\n if (this.direction === 'vertical') {\n localStorage.setItem(\n `resize-panel${this.name}`,\n this._elementRef.nativeElement.clientWidth\n );\n } else {\n localStorage.setItem(\n `resize-panel${this.name}`,\n this._elementRef.nativeElement.clientHeight\n );\n }\n }\n }\n}\n","<ng-content></ng-content>\n<div #grab class=\"resize-grab\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd($event)\"\n [tetaResizeDrag]=\"direction\"\n [ngClass]=\"getClassName()\">\n <teta-icon [name]=\"direction\"></teta-icon>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizePanelComponent } from './resize-panel/resize-panel.component';\nimport { IconModule } from '../icon/icon.module';\nimport { ResizeDragModule } from '../../directive/resize-drag/resize-drag.module';\n\n@NgModule({\n declarations: [ResizePanelComponent],\n exports: [ResizePanelComponent],\n imports: [CommonModule, IconModule, ResizeDragModule],\n})\nexport class ResizePanelModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DynamicContentBaseDirective } from '../dynamic-content-base.directive';\nimport { DOCUMENT } from '@angular/common';\nimport { DynamicComponentService } from '../../common/service/dynamic-component.service';\nimport { DomUtil } from '../../common/util/dom-util';\nimport { PositionUtil } from '../../common/util/position-util';\nimport { Align } from '../../common/enum/align.enum';\nimport { VerticalAlign } from '../../common/enum/vertical-align.enum';\nimport { merge } from 'rxjs';\nimport { filter, takeWhile, tap } from 'rxjs/operators';\nimport { ClickService } from '../../common/service/click.service';\n\n@Directive({\n selector: '[tetaTooltip]',\n})\nexport class TooltipDirective\n extends DynamicContentBaseDirective\n implements OnDestroy, OnInit\n{\n /**\n * Строка, шаблон или компонент для создания контекстного меню\n */\n @Input() tetaTooltip: string | TemplateRef<any> | Type<any>;\n @Input() override align: Align = Align.center;\n @Input() override verticalAlign: VerticalAlign = VerticalAlign.top;\n private _componentRect: any;\n\n get _dynamicContent() {\n return this.tetaTooltip;\n }\n\n constructor(\n @Inject(DOCUMENT)\n protected override _document: any,\n protected override _elementRef: ElementRef,\n protected override _service: DynamicComponentService,\n protected override _injector: Injector,\n protected override _zone: NgZone,\n protected override _cdr: ChangeDetectorRef,\n private _click: ClickService\n ) {\n super(_document, _elementRef, _service, _injector, _zone, _cdr);\n }\n\n @HostListener('click', ['$event'])\n showContent(event: MouseEvent): void {\n event.preventDefault();\n this.createTooltip();\n }\n\n override ngOnInit() {\n super.ngOnInit();\n merge(this._click.click, this._click.contextMenu)\n .pipe(\n takeWhile(() => this._alive),\n filter(() => this._open),\n filter(() => this._componentRef != null),\n filter(\n (event: MouseEvent) =>\n !DomUtil.clickedInside(this._elementRef.nativeElement, event)\n ),\n filter(\n (event: MouseEvent) =>\n !DomUtil.clickedInside(\n this._componentRef.location.nativeElement,\n event\n )\n ),\n tap((_) => this.destroyContentRef())\n )\n .subscribe();\n }\n\n protected setPosition() {\n if (this._componentRef && this._open) {\n if (!this._componentRect) {\n this._componentRect =\n this._componentRef.location.nativeElement.getBoundingClientRect();\n }\n const containerPosition =\n this._elementRef.nativeElement.getBoundingClientRect();\n const position = PositionUtil.getPosition(\n containerPosition,\n this._componentRect,\n this.align,\n this.verticalAlign,\n 0,\n 12\n );\n PositionUtil.setElementPosition(\n this._componentRef.location.nativeElement,\n position\n );\n const verticalClass =\n containerPosition.top < position.top ? 'tooltip_bottom' : 'tooltip_top';\n this._componentRef.instance.addClass(verticalClass);\n }\n }\n\n private createTooltip(): void {\n this._componentRef = this.createContentRef('tooltip');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TooltipDirective } from './tooltip.directive';\nimport { DynamicComponentModule } from '../../component/dynamic-component/dynamic-component.module';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\n@NgModule({\n declarations: [TooltipDirective],\n exports: [TooltipDirective],\n imports: [CommonModule, DynamicComponentModule, BrowserAnimationsModule],\n})\nexport class TooltipModule {}\n","import { Directive, ElementRef, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[tetaNoAutofill]',\n})\n\n/**\n * Disable autofill inputs in Chrome. Append hidden inputs with text/password type, to element.\n */\nexport class NoAutofillDirective implements OnInit {\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n ngOnInit() {\n const inputsTypes = ['text', 'password'];\n\n inputsTypes.forEach((_) => {\n const inputElement = this._renderer.createElement('input');\n this._renderer.setAttribute(inputElement, 'type', _);\n this._renderer.setAttribute(inputElement, 'class', 'position-absolute');\n this._renderer.setStyle(inputElement, 'left', '-9999px');\n this._renderer.insertBefore(\n this._elementRef.nativeElement,\n inputElement,\n this._elementRef.nativeElement.firstChild\n );\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NoAutofillDirective } from './no-autofill.directive';\n\n@NgModule({\n exports: [NoAutofillDirective],\n declarations: [NoAutofillDirective],\n imports: [CommonModule],\n})\nexport class NoAutofillModule {}\n","import {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OverlayContainerService implements OnDestroy {\n private _containerClass = 'overlay-container';\n private _container: HTMLElement;\n\n constructor(@Inject(DOCUMENT) private document$: any) {\n }\n\n getContainer(): HTMLElement {\n if (!this._container) {\n this.createContainer();\n }\n return this._container;\n }\n\n private createContainer(): void {\n const container = this.document$.createElement('div');\n container.classList.add(this._containerClass);\n this.document$.body.appendChild(container);\n this._container = container;\n }\n\n private removeContainer(): void {\n if (this._container && this._container.parentNode) {\n this._container.parentNode.removeChild(this._container);\n }\n }\n\n ngOnDestroy(): void {\n this.removeContainer();\n }\n}\n","export class StringUtil {\n static firstLetterToLower(input: string) {\n return input.charAt(0).toLocaleLowerCase() + input.slice(1);\n };\n}\n","/**\n * Components\n */\n\nexport * from './component/public-api';\n\n/**\n * Directives\n */\nexport * from './directive/public-api';\n\n/**\n * Pipes\n */\nexport * from './pipe/public-api';\n\n/**\n * Common\n */\nexport * from './common/public-api';\n\n/**\n * Util\n */\nexport * from './util/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["objectHash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tetacom-ng-components.mjs","sources":["../../src/component/accordion/accordion/accordion.component.ts","../../src/component/accordion/accordion/accordion.component.html","../../src/component/accordion/accordion-content.directive.ts","../../src/component/accordion/accordion-item/accordion-item.component.ts","../../src/component/accordion/accordion-item/accordion-item.component.html","../../src/common/enum/teta-size.enum.ts","../../src/component/icon/icon/icon.component.ts","../../src/component/icon/icon/icon.component.html","../../src/component/accordion/accordion-head/accordion-head.component.ts","../../src/component/accordion/accordion-head/accordion-head.component.html","../../src/component/icon/icon.service.ts","../../src/component/icon/icon-sprite.directive.ts","../../src/component/icon/icon.module.ts","../../src/component/accordion/accordion.module.ts","../../src/component/button/button/button.component.ts","../../src/component/button/button/button.component.html","../../src/component/button/button.module.ts","../../src/component/checkbox/checkbox/checkbox.component.ts","../../src/component/checkbox/checkbox/checkbox.component.html","../../src/component/checkbox/checkbox.module.ts","../../src/component/date-picker/model/date-picker-mode.enum.ts","../../src/util/date-util.ts","../../src/component/date-picker/model/day-model.ts","../../src/component/date-picker/util/date-picker-util.ts","../../src/common/enum/align.enum.ts","../../src/common/enum/vertical-align.enum.ts","../../src/component/date-picker/model/picker-locale-model.ts","../../src/component/date-picker/service/picker-locale.service.ts","../../src/common/util/dom-util.ts","../../src/common/util/position-util.ts","../../src/component/dropdown/dropdown-head.directive.ts","../../src/component/dropdown/dropdown-content.directive.ts","../../src/component/dropdown/dropdown-base.ts","../../src/component/dropdown/dropdown/dropdown.component.ts","../../src/component/dropdown/dropdown/dropdown.component.html","../../src/component/date-picker/service/picker-touch.service.ts","../../src/component/date-picker/year-select/year-select.component.ts","../../src/component/date-picker/year-select/year-select.component.html","../../src/pipe/util/number-helper.ts","../../src/pipe/prepend-zero/prepend-zero.pipe.ts","../../src/component/date-picker/month-select/month-select.component.ts","../../src/component/date-picker/month-select/month-select.component.html","../../src/component/date-picker/day-select/day-select.component.ts","../../src/component/date-picker/day-select/day-select.component.html","../../src/component/date-picker/time-part-control/time-part-control.component.ts","../../src/component/date-picker/time-part-control/time-part-control.component.html","../../src/component/date-picker/date-picker/date-picker.component.ts","../../src/component/date-picker/date-picker/date-picker.component.html","../../src/component/date-picker/month-picker/month-picker.component.ts","../../src/component/date-picker/month-picker/month-picker.component.html","../../src/component/dropdown/dropdown.directive.ts","../../src/component/dropdown/dropdown.module.ts","../../src/directive/click-outside/click-outside.directive.ts","../../src/directive/click-outside/click-outside.module.ts","../../src/pipe/prepend-zero/prepend-zero.module.ts","../../src/directive/only-number/only-number.directive.ts","../../src/directive/only-number/only-number.module.ts","../../src/component/date-picker/date-picker.module.ts","../../src/component/date-picker/model/date-period.ts","../../src/component/delimiter/delimiter/delimiter.component.ts","../../src/component/delimiter/delimiter/delimiter.component.html","../../src/component/delimiter/delimiter.module.ts","../../src/common/util/array-util.ts","../../src/component/dynamic-component/popup-content/popup-content.component.ts","../../src/component/dynamic-component/popup-content/popup-content.component.html","../../src/component/dynamic-component/dynamic-component.module.ts","../../src/component/expand-panel/expand-panel-content.directive.ts","../../src/component/expand-panel/expand-panel-head.directive.ts","../../src/component/toolbar/toolbar/toolbar.component.ts","../../src/component/toolbar/toolbar/toolbar.component.html","../../src/component/expand-panel/expand-panel/expand-panel.component.ts","../../src/component/expand-panel/expand-panel/expand-panel.component.html","../../src/component/toolbar/toolbar.module.ts","../../src/component/expand-panel/expand-panel.module.ts","../../src/component/file-upload/file-upload-area/file-upload-area.component.ts","../../src/component/file-upload/file-upload-area/file-upload-area.component.html","../../src/component/file-upload/file-item/file-item.component.ts","../../src/component/file-upload/file-item/file-item.component.html","../../src/component/file-upload/file-upload.module.ts","../../src/component/filter/filter-panel/filter-panel.component.ts","../../src/component/filter/filter-panel/filter-panel.component.html","../../src/component/filter/base/filter-base.ts","../../src/component/filter/contarct/numeric-filter.ts","../../src/component/filter/base/filter-component-base.ts","../../src/component/filter/contarct/numeric-filter-value.ts","../../src/component/input/input/input.component.ts","../../src/component/input/input/input.component.html","../../src/component/filter/numeric-filter/numeric-filter.component.ts","../../src/component/filter/numeric-filter/numeric-filter.component.html","../../src/component/filter/enum/string-filter-type.enum.ts","../../src/component/filter/contarct/string-filter.ts","../../src/component/filter/string-filter/string-filter.component.ts","../../src/component/filter/string-filter/string-filter.component.html","../../src/component/filter/enum/list-filter-type.enum.ts","../../src/component/filter/contarct/list-filter.ts","../../src/component/input/text-field/text-field.component.ts","../../src/component/input/text-field/text-field.component.html","../../src/component/filter/list-filter/list-filter.component.ts","../../src/component/filter/list-filter/list-filter.component.html","../../src/component/filter/contarct/date-filter-value.ts","../../src/component/filter/contarct/date-filter.ts","../../src/component/filter/date-filter/date-filter.component.ts","../../src/component/filter/date-filter/date-filter.component.html","../../src/component/filter/enum/filter-type.enum.ts","../../src/component/filter/contarct/boolean-filter.ts","../../src/component/radio/radio/radio.component.ts","../../src/component/radio/radio/radio.component.html","../../src/component/radio/radio-button/radio-button.component.ts","../../src/component/radio/radio-button/radio-button.component.html","../../src/component/filter/boolean-filter/boolean-filter.component.ts","../../src/component/filter/boolean-filter/boolean-filter.component.html","../../src/component/filter/contarct/filter-component-map.ts","../../src/component/filter/filter-host/filter-host.component.ts","../../src/component/select/select-option.directive.ts","../../src/component/select/select-value.directive.ts","../../src/directive/highlight/highlight.directive.ts","../../src/component/select/select/select.component.ts","../../src/component/select/select/select.component.html","../../src/directive/highlight/highlight.module.ts","../../src/component/input/form-group-title/form-group-title.component.ts","../../src/component/input/form-group-title/form-group-title.component.html","../../src/component/input/input.module.ts","../../src/component/select/select.module.ts","../../src/component/radio/radio.module.ts","../../src/component/filter/filter.module.ts","../../src/component/filter/contarct/filter-item.ts","../../src/component/filter/contarct/sort-param.ts","../../src/component/filter/contarct/filter-state.ts","../../src/component/message/message.service.ts","../../src/component/message/message/message.component.ts","../../src/component/message/message/message.component.html","../../src/component/message/message-host/message-host.component.ts","../../src/component/message/message-host/message-host.component.html","../../src/component/message/message.module.ts","../../src/component/message/model/message.ts","../../src/component/modal/model/modal-close-reason.enum.ts","../../src/component/modal/modal-container/modal-container.component.ts","../../src/component/modal/modal-container/modal-container.component.html","../../src/component/modal/model/current-modal.ts","../../src/common/contract/dynamic-data.ts","../../src/component/modal/dialog/dialog.component.ts","../../src/component/modal/dialog/dialog.component.html","../../src/component/modal/modal.module.ts","../../src/component/modal/model/modal-instance.ts","../../src/common/contract/teta-content-ref.ts","../../src/common/service/dynamic-component.service.ts","../../src/component/modal/modal.service.ts","../../src/component/modal/dialog.service.ts","../../src/component/pager/pager/pager.component.ts","../../src/component/pager/pager/pager.component.html","../../src/component/pager/pager.module.ts","../../src/component/pager/model/pager-state.ts","../../src/component/pager/util/pager-util.ts","../../src/component/panel/panel/panel.component.ts","../../src/component/panel/panel/panel.component.html","../../src/component/panel/panel.module.ts","../../src/component/progress-bar/progress-bar/progress-bar.component.ts","../../src/component/progress-bar/progress-bar/progress-bar.component.html","../../src/component/progress-bar/progress-bar.module.ts","../../src/util/forms-util.ts","../../src/component/toggle/toggle/toggle.component.ts","../../src/component/toggle/toggle/toggle.component.html","../../src/directive/dynamic-content-base.directive.ts","../../src/directive/hint/hint.directive.ts","../../src/component/property-grid/property-grid/property-grid-item/property-grid-item.component.ts","../../src/component/property-grid/property-grid/property-grid-item/property-grid-item.component.html","../../src/component/property-grid/property-grid/property-grid-group/property-grid-group.component.ts","../../src/component/property-grid/property-grid/property-grid-group/property-grid-group.component.html","../../src/component/property-grid/property-grid/property-grid.component.ts","../../src/component/property-grid/property-grid/property-grid.component.html","../../src/component/property-grid/default/numeric-item-default/numeric-item-default.component.ts","../../src/component/property-grid/default/numeric-item-default/numeric-item-default.component.html","../../src/component/property-grid/default/date-item-default/date-item-default.component.ts","../../src/component/property-grid/default/date-item-default/date-item-default.component.html","../../src/component/property-grid/default/list-item-default/list-item-default.component.ts","../../src/component/property-grid/default/list-item-default/list-item-default.component.html","../../src/component/property-grid/default/string-item-default/string-item-default.component.ts","../../src/component/property-grid/default/string-item-default/string-item-default.component.html","../../src/pipe/number-pipe/number.pipe.ts","../../src/pipe/number-pipe/number-pipe.module.ts","../../src/component/toggle/toggle.module.ts","../../src/directive/hint/hint.module.ts","../../src/component/property-grid/property-grid.module.ts","../../src/component/sidebar/sidebar-position.enum.ts","../../src/component/sidebar/sidebar/sidebar.component.ts","../../src/component/sidebar/sidebar/sidebar.component.html","../../src/component/sidebar/sidebar.module.ts","../../src/component/switch/switch.service.ts","../../src/component/switch/switch/switch.component.ts","../../src/component/switch/switch/switch.component.html","../../src/component/switch/switch-button/switch-button.component.ts","../../src/component/switch/switch-button/switch-button.component.html","../../src/component/switch/switch.module.ts","../../src/component/table/contract/table-row.ts","../../src/component/table/contract/table-column.ts","../../src/component/table/contract/column-reorder-event.ts","../../src/component/table/util/state-util.ts","../../src/component/table/enum/select-type.enum.ts","../../src/component/table/contract/table-column-store.ts","../../src/component/table/service/table.service.ts","../../src/component/table/base/group-row-component-base.ts","../../src/component/table/default/group-row/group-row.component.ts","../../src/component/table/default/group-row/group-row.component.html","../../src/component/table/enum/edit-type.enum.ts","../../src/component/table/enum/edit-event.enum.ts","../../src/component/table/contract/table-context-menu-config.ts","../../src/component/table/util/table-util.ts","../../src/component/table/selection-head-cell/selection-head-cell.component.ts","../../src/component/table/selection-head-cell/selection-head-cell.component.html","../../src/component/table/contract/column-resize-event.ts","../../src/component/table/contract/sort-event.ts","../../src/component/table/base/head-cell-component-base.ts","../../src/component/table/default/default-head-cell/default-head-cell.component.ts","../../src/component/table/default/default-head-cell/default-head-cell.component.html","../../src/component/table/head-cell-host/head-cell-host.component.ts","../../src/component/tabs/tab-content.directive.ts","../../src/component/tabs/tab-title.directive.ts","../../src/component/tabs/tab/tab.component.ts","../../src/component/tabs/tabs/tabs.component.ts","../../src/component/tabs/tabs/tabs.component.html","../../src/component/tree/tree.service.ts","../../src/directive/teta-template/teta-template.directive.ts","../../src/component/tree/tree-item/tree-item.component.ts","../../src/component/tree/tree-item/tree-item.component.html","../../src/component/tree/tree/tree.component.ts","../../src/component/tree/tree/tree.component.html","../../src/component/tree/tree-item-toggle/tree-item-toggle.component.ts","../../src/component/tree/tree-item-toggle/tree-item-toggle.component.html","../../src/component/table/head-cell-dropdown/head-cell-dropdown.component.ts","../../src/component/table/head-cell-dropdown/head-cell-dropdown.component.html","../../src/directive/resize-drag/resize-drag.directive.ts","../../src/component/table/head-cell/head-cell.component.ts","../../src/component/table/head-cell/head-cell.component.html","../../src/component/table/table-head-group/table-head-group.component.ts","../../src/component/table/table-head-group/table-head-group.component.html","../../src/component/table/table-head/table-head.component.ts","../../src/component/table/table-head/table-head.component.html","../../src/component/table/enum/aggregation-type.enum.ts","../../src/component/table/selection-cell/selection-cell.component.ts","../../src/component/table/selection-cell/selection-cell.component.html","../../src/component/table/base/cell-component-base.ts","../../src/component/table/default/numeric-cell/numeric-cell.component.ts","../../src/component/table/default/numeric-cell/numeric-cell.component.html","../../src/component/table/default/date-cell/date-cell.component.ts","../../src/component/table/default/date-cell/date-cell.component.html","../../src/component/table/default/list-cell/list-cell.component.ts","../../src/component/table/default/list-cell/list-cell.component.html","../../src/component/table/default/string-cell/string-cell.component.ts","../../src/component/table/default/string-cell/string-cell.component.html","../../src/component/table/default/boolean-cell/boolean-cell.component.ts","../../src/component/table/default/boolean-cell/boolean-cell.component.html","../../src/component/table/contract/cell-components-map.ts","../../src/component/table/cell-host/cell-host.component.ts","../../src/component/table/cell/cell.component.ts","../../src/component/table/cell/cell.component.html","../../src/component/table/table-body/table-body.component.ts","../../src/component/table/table-body/table-body.component.html","../../src/component/table/table/table.component.ts","../../src/component/table/table/table.component.html","../../src/component/tabs/tabs.module.ts","../../src/directive/teta-template/teta-template.module.ts","../../src/component/tree/tree.module.ts","../../src/component/table/default/date-time-cell/date-time-cell.component.ts","../../src/component/table/default/date-time-cell/date-time-cell.component.html","../../src/directive/resize-drag/resize-drag.module.ts","../../src/component/table/table.module.ts","../../src/component/table/base/detail-component-base.ts","../../src/component/theme-switch/theme-switch.service.ts","../../src/component/theme-switch/theme-switch/theme-switch.component.ts","../../src/component/theme-switch/theme-switch/theme-switch.component.html","../../src/component/theme-switch/theme-switch.module.ts","../../src/component/chart/model/enum/scale.ts","../../src/component/chart/model/enum/series-type.ts","../../src/component/chart/drawer/area-drawer.ts","../../src/component/chart/drawer/bar-drawer.ts","../../src/component/chart/model/enum/dispatch-type.ts","../../src/component/chart/model/enum/drag-point-type.ts","../../src/component/chart/drawer/line-drawer.ts","../../src/component/chart/drawer/pie-drawer.ts","../../src/component/chart/drawer/spline-drawer.ts","../../src/component/chart/drawer/scatter-drawer.ts","../../src/component/chart/drawer/contour-drawer.ts","../../src/component/chart/drawer/default-drawer-mapping.ts","../../src/component/chart/model/enum/legend-type.ts","../../src/component/chart/legend-drawer/swatch-drawer.ts","../../src/component/chart/legend-drawer/gradient-drawer.ts","../../src/component/chart/legend-drawer/default-drawer-legend-mapping.ts","../../src/component/chart/model/enum/axis-type.ts","../../src/component/chart/core/axis-creator.ts","../../src/component/chart/model/enum/scale-type.ts","../../src/component/chart/model/enum/zoom-type.ts","../../src/component/chart/core/chart.ts","../../src/component/chart/chart/chart.component.ts","../../src/component/chart/chart/chart.component.html","../../src/component/chart/chart.module.ts","../../src/component/chart/model/axis-options.ts","../../src/component/chart/model/series.ts","../../src/component/chart/model/tooltip-options.ts","../../src/component/chart/model/chart-bounds.ts","../../src/component/chart/model/chart-options.ts","../../src/component/chart/model/annotation.ts","../../src/component/chart/model/plot-line.ts","../../src/component/chart/model/plot-band.ts","../../src/component/chart-3d/chart3d/chart3d.component.ts","../../src/component/chart-3d/chart3d/chart3d.component.html","../../src/component/chart-3d/chart-3d.module.ts","../../src/component/chart-3d/model/chart-3d-options.ts","../../src/component/public-api.ts","../../src/common/service/click.service.ts","../../src/directive/context-menu/context-menu.directive.ts","../../src/directive/context-menu/context-menu.module.ts","../../src/directive/disable-control/disable-control.directive.ts","../../src/directive/disable-control/disable-control.module.ts","../../src/directive/drag-sort/drag-sort-container.directive.ts","../../src/directive/drag-sort/drag-sort-item.directive.ts","../../src/directive/drag-sort/drag-sort.module.ts","../../src/directive/loader/loader.directive.ts","../../src/directive/loader/loader.module.ts","../../src/component/resize-panel/resize-panel/resize-panel.component.ts","../../src/component/resize-panel/resize-panel/resize-panel.component.html","../../src/component/resize-panel/resize-panel.module.ts","../../src/directive/tooltip/tooltip.directive.ts","../../src/directive/tooltip/tooltip.module.ts","../../src/directive/no-autofill/no-autofill.directive.ts","../../src/directive/no-autofill/no-autofill.module.ts","../../src/common/service/overlay-container.service.ts","../../src/util/string-util.ts","../../src/public-api.ts","../../src/tetacom-ng-components.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-accordion',\n templateUrl: './accordion.component.html',\n styleUrls: ['./accordion.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionComponent implements OnInit {\n @HostBinding('class.accordion') private readonly accordionClassName = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaAccordionContent]'\n})\nexport class AccordionContentDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n HostBinding,\n Inject,\n Input,\n OnInit,\n Optional,\n} from '@angular/core';\nimport { AccordionContentDirective } from '../accordion-content.directive';\nimport { AccordionComponent } from '../accordion/accordion.component';\n\n@Component({\n selector: 'teta-accordion-item',\n templateUrl: './accordion-item.component.html',\n styleUrls: ['./accordion-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionItemComponent implements OnInit {\n @ContentChild(AccordionContentDirective, { static: false })\n content: AccordionContentDirective;\n\n @HostBinding('class.accordion-item_active')\n @Input()\n open: boolean;\n @Input() disabled: boolean;\n\n @HostBinding('class.accordion-item') private readonly accordionItemClass =\n true;\n\n private readonly accordion$: AccordionComponent;\n\n constructor(\n @Optional() @Inject(AccordionComponent) accordion: AccordionComponent,\n private cdr$: ChangeDetectorRef\n ) {\n this.accordion$ = accordion;\n }\n\n toggle() {\n this.open = !this.open;\n this.cdr$.detectChanges();\n }\n\n ngOnInit() {}\n}\n","<ng-content select=\"teta-accordion-head\"></ng-content>\n<div class=\"accordion-content\" *ngIf=\"open\">\n <ng-container *ngTemplateOutlet=\"content.template\"></ng-container>\n</div>\n","export enum TetaSize {\n XS,\n S,\n M,\n L,\n XL\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { TetaSize } from '../../../common/enum/teta-size.enum';\n\n@Component({\n selector: 'teta-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent implements OnInit {\n @Input() name: string;\n @Input() size: TetaSize = TetaSize.M;\n @Input() palette: string;\n\n @Input() class;\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'icon'];\n if (this.palette) {\n result.push(`icon-${this.palette}`);\n }\n return result.join(' ');\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n\n getName(): string {\n return `#${this.name}`;\n }\n}\n","<svg class=\"icon__image\">\n <use [attr.xlink:href]=\"getName()\"></use>\n</svg>\n","import {\n ChangeDetectionStrategy,\n Component,\n Host,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnInit,\n} from '@angular/core';\nimport { AccordionItemComponent } from '../accordion-item/accordion-item.component';\n\n@Component({\n selector: 'teta-accordion-head',\n templateUrl: './accordion-head.component.html',\n styleUrls: ['./accordion-head.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AccordionHeadComponent implements OnInit {\n @HostBinding('class.accordion-head') private readonly accordionHeadClass =\n true;\n\n @Input() showToggle = true;\n\n private readonly accordionItem$: AccordionItemComponent;\n\n constructor(\n @Host()\n @Inject(AccordionItemComponent)\n accordionItem: AccordionItemComponent\n ) {\n this.accordionItem$ = accordionItem;\n }\n\n @HostListener('click')\n toggle(): void {\n if (this.disabled) {\n return;\n }\n this.accordionItem$.toggle();\n }\n\n @HostBinding('class.accordion-head_open')\n get open(): boolean {\n return this.accordionItem$.open;\n }\n\n @HostBinding('class.accordion-head_disabled')\n get disabled(): boolean {\n return this.accordionItem$.disabled;\n }\n\n ngOnInit() {}\n}\n","<ng-content></ng-content>\n<div *ngIf=\"showToggle\" class=\"accordion-toggle\">\n <teta-icon [name]=\"open ? 'arrowUpKey' : 'arrowDownKey'\"\n [palette]=\"'text'\"></teta-icon>\n</div>\n\n","import {Inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {HttpBackend, HttpClient} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IconService {\n private static _loaded: string[] = [];\n private static _pending: string[] = [];\n private _renderer: Renderer2;\n\n constructor(@Inject(DOCUMENT) protected _document: any,\n private _rendererFactory: RendererFactory2,\n private _httpBackend: HttpBackend,\n private _http: HttpClient) {\n this._renderer = this._rendererFactory.createRenderer(null, null);\n }\n\n addSprite(url: string, bypassInterceptors: boolean = true) {\n if (IconService._loaded.indexOf(url) < 0 && IconService._pending.indexOf(url) < 0) {\n IconService._pending.push(url);\n this.getSVG(url, bypassInterceptors).subscribe(svg => {\n IconService._pending = IconService._pending.filter(_ => _ !== url);\n IconService._loaded.push(url);\n this._renderer.insertBefore(this._document.body, svg, this._document.body.firstChild);\n });\n }\n }\n\n private getSVG(url: string, bypassInterceptors: boolean = true): Observable<SVGElement> {\n const http = bypassInterceptors ? new HttpClient(this._httpBackend) : this._http;\n return http.get(url, {responseType: 'text'})\n .pipe(\n map((svgText: string) => {\n const svgEl = this.svgElementFromString(svgText);\n return this.cloneSVG(svgEl);\n })\n );\n }\n\n private svgElementFromString(str: string): SVGElement | never {\n const div = this._renderer.createElement('DIV');\n div.innerHTML = str;\n const svg = div.querySelector('svg') as SVGElement;\n if (!svg) {\n throw new Error('No SVG found in loaded contents');\n }\n return svg;\n }\n\n private cloneSVG(svg: SVGElement): SVGElement {\n return svg.cloneNode(true) as SVGElement;\n }\n}\n","import {Directive, Input, OnInit} from '@angular/core';\nimport {IconService} from './icon.service';\n\n@Directive({\n selector: '[tetaIconSprite]'\n})\nexport class IconSpriteDirective implements OnInit {\n @Input() tetaIconSprite: string | string[];\n @Input() bypassInterceptors = true;\n\n constructor(private _iconService: IconService) {\n }\n\n ngOnInit(): void {\n if (typeof this.tetaIconSprite === 'string') {\n this._iconService.addSprite(this.tetaIconSprite, this.bypassInterceptors);\n }\n if (this.tetaIconSprite instanceof Array && this.tetaIconSprite?.length) {\n this.tetaIconSprite.forEach((sprite: string) => {\n this._iconService.addSprite(sprite, this.bypassInterceptors);\n });\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {IconComponent} from './icon/icon.component';\nimport {IconSpriteDirective} from './icon-sprite.directive';\nimport {HttpClientModule} from '@angular/common/http';\n\n\n@NgModule({\n declarations: [\n IconComponent,\n IconSpriteDirective\n ],\n exports: [\n IconComponent,\n IconSpriteDirective\n ],\n imports: [\n CommonModule,\n HttpClientModule\n ]\n})\nexport class IconModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AccordionComponent} from './accordion/accordion.component';\nimport {AccordionHeadComponent} from './accordion-head/accordion-head.component';\nimport {AccordionContentDirective} from './accordion-content.directive';\nimport {IconModule} from '../icon/icon.module';\nimport {AccordionItemComponent} from './accordion-item/accordion-item.component';\n\n@NgModule({\n declarations: [AccordionComponent, AccordionHeadComponent, AccordionContentDirective, AccordionItemComponent],\n exports: [AccordionComponent, AccordionHeadComponent, AccordionContentDirective, AccordionItemComponent],\n imports: [\n CommonModule,\n IconModule\n ]\n})\nexport class AccordionModule {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\nexport type ButtonViewType = 'primary' | 'outline' | 'ghost';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'button[teta-button], teta-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent implements OnInit {\n @Input() palette: string;\n @Input() class;\n @Input() view: ButtonViewType = 'primary';\n @Input() square = false;\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'button'];\n if (this.palette) {\n result.push(`button-${this.palette}`);\n }\n if (this.view) {\n result.push(`button_${this.view}`);\n }\n if (this.square) {\n result.push(`button-square`);\n }\n return result.join(' ');\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ButtonComponent} from './button/button.component';\n\n\n@NgModule({\n declarations: [ButtonComponent],\n imports: [\n CommonModule\n ],\n exports: [\n ButtonComponent\n ]\n})\nexport class ButtonModule {\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const CHECKBOX_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n providers: [CHECKBOX_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent implements ControlValueAccessor, OnInit {\n @HostBinding('attr.tabindex') tabindex = 0;\n\n @Input() class;\n\n @HostBinding('class')\n private get getClass() {\n const result = [this.class, 'checkbox'];\n if (this.palette) {\n result.push(`checkbox-${this.palette}`);\n }\n return result.join(' ');\n }\n\n @Input() palette = 'primary';\n @Input() noLabel: boolean;\n\n /**\n * компонент неактивен\n */\n @HostBinding('class.checkbox_disabled')\n @Input()\n disabled: boolean;\n /**\n * true/false или list\n */\n @Input() value: any;\n /**\n * true/false или list\n */\n @Input() binary: boolean;\n\n @Input() allowNull: boolean;\n\n checked: boolean;\n\n /**\n * Значение\n */\n private model$: any = null;\n\n get model(): any {\n return this.model$;\n }\n\n set model(v: any) {\n if (v !== this.model$) {\n this.model$ = v;\n this.onChange(v);\n }\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n @HostListener('click')\n changeValue() {\n if (this.disabled) {\n return;\n }\n if (this.binary) {\n this.model = !this.model;\n } else {\n if (!this.isChecked()) {\n this.addValue();\n } else {\n this.removeValue();\n }\n }\n this.checked = this.isChecked();\n }\n\n writeValue(model: any) {\n if (this.binary) {\n this.model$ = model;\n } else {\n if (model && model instanceof Array) {\n this.model$ = model;\n } else {\n this.model$ = [];\n }\n }\n this.checked = this.isChecked();\n this.cdr.detectChanges();\n }\n\n isChecked(): boolean {\n if (this.binary) {\n return this.allowNull ? this.model : !!this.model;\n } else {\n return this.model && this.model.indexOf(this.value) >= 0;\n }\n }\n\n removeValue() {\n this.model = this.model.filter((val: any) => val !== this.value);\n }\n\n addValue() {\n if (this.model) {\n this.model = [...this.model, this.value];\n } else {\n this.model = [this.value];\n }\n }\n\n ngOnInit() {}\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.detectChanges();\n }\n}\n","<div class=\"checkbox__tick\">\n <teta-icon [name]=\"checked ? 'tick' : checked === false ? '' : 'minus'\"></teta-icon>\n</div>\n<span class=\"font-body-3 margin-left-1\" *ngIf=\"!noLabel\">\n <ng-content></ng-content>\n</span>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {CheckboxComponent} from './checkbox/checkbox.component';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [CheckboxComponent],\n imports: [\n CommonModule,\n IconModule\n ],\n exports: [\n CheckboxComponent\n ]\n})\nexport class CheckboxModule {\n}\n","export enum DatePickerMode {\n date,\n month,\n year\n}\n","export class DateUtil {\n /**\n * Вычесть n-дней\n */\n\n public static subtractDays(date: Date, days = 0): Date | null {\n if (date && date instanceof Date) {\n const dt = new Date(date.getTime());\n\n dt.setDate(dt.getDate() - days);\n return dt;\n }\n\n return null;\n }\n\n /**\n * Добавить n-дней\n */\n\n public static addDays(date: Date, days = 0): Date | null {\n if (date && date instanceof Date) {\n const dt = new Date(date.getTime());\n\n dt.setDate(dt.getDate() + days);\n return dt;\n }\n\n return null;\n }\n\n /**\n * Получить дату из строки\n */\n public static parseString(dat: string): Date | null {\n if (!dat || dat.length < 1) {\n return null;\n }\n\n const parts = dat.split(' ');\n const dtPart = parts[0].split('.');\n const tPart = parts[1]?.split(':') ?? ['0', '0', '0'];\n const parsedDate = new Date(\n parseInt(dtPart[2], 10),\n parseInt(dtPart[1], 10) - 1,\n parseInt(dtPart[0], 10),\n parseInt(tPart[0], 10),\n parseInt(tPart[1], 10),\n parseInt(tPart[2], 10)\n );\n if (isNaN(parsedDate.getTime())) {\n return null;\n }\n return parsedDate;\n }\n\n /**\n * Привести дату к строке\n */\n public static toString(dat: Date): string {\n if (!dat || !(dat instanceof Date)) {\n return '';\n }\n const month = dat.getMonth() + 1;\n const monthString = month < 10 ? '0' + month.toString() : month.toString();\n return `${dat.getDate().toString()}.${monthString}.${dat\n .getFullYear()\n .toString()} ${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()}`;\n }\n\n /**\n * Подготовка даты к отправке на сервер, чтобы небыло смещения часов\n */\n public static convertUTC2DateLocal(date?: Date): Date | null {\n if (date && date instanceof Date) {\n const timezoneOffsetMs: number =\n new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n ).getTimezoneOffset() * 60000;\n return new Date(date.getTime() - timezoneOffsetMs);\n }\n return null;\n }\n\n /**\n * Подготовка даты к отправке на сервер, чтобы небыло смещения часов\n */\n public static convertDateLocal2UTC(date?: Date): Date | null {\n if (date && date instanceof Date) {\n const timezoneOffsetMs: number =\n new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate()\n ).getTimezoneOffset() * 60000;\n return date == null ? null : new Date(date.getTime() + timezoneOffsetMs);\n }\n return null;\n }\n\n public static convertDateStringsToDates(input: any): any {\n const regexIso8601 =\n /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?$/i;\n if (typeof input === 'string' && regexIso8601.test(input)) {\n return DateUtil.convertStringToLocalDate(input);\n }\n if (typeof input !== 'object' || !input) {\n return input;\n }\n let res: any | any[];\n if (input instanceof Array) {\n res = [];\n } else {\n res = {};\n }\n return DateUtil.fillConvertDateStringsToDates(res, input);\n }\n\n public static convertDates(input: any | any[]): any | any[] {\n if (typeof input !== 'object' || !input) {\n return input;\n }\n if (input instanceof Date) {\n return DateUtil.convertUTC2DateLocal(input);\n }\n let res: any | any[];\n if (input instanceof Array) {\n res = [];\n } else {\n res = {};\n }\n return DateUtil.fillConvertDates(res, input);\n }\n\n public static getMonthDaysCount(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n }\n\n // Возвращает список месяцев между двумя датами\n public static getRangeOfMonths(start: Date, end: Date): Date[] {\n if (start > end || !start || !end) {\n return null;\n }\n const resDates: Date[] = [];\n let i = 0;\n let dateTmp = new Date(start.getFullYear(), start.getMonth() + i, 1);\n while (end >= dateTmp) {\n resDates.push(dateTmp);\n i++;\n dateTmp = new Date(start.getFullYear(), start.getMonth() + i, 1);\n }\n return resDates;\n }\n\n public static truncateToMonth(date: Date): Date {\n const res = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0);\n return res;\n }\n\n public static truncateToDay(date: Date): Date {\n const res = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n 0,\n 0,\n 0\n );\n return res;\n }\n\n public static truncateToHour(date: Date): Date {\n const res = new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n 0,\n 0\n );\n return res;\n }\n\n public static toISOString(date: number): string {\n return (\n new Date(date - new Date().getTimezoneOffset() * 60000)\n .toISOString()\n .slice(0, -5) + 'Z'\n );\n }\n\n public static isValidDate(date: any): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n private static fillConvertDates(result: any, input: any): any {\n for (const key in input) {\n if (!input.hasOwnProperty || !input.hasOwnProperty(key)) {\n continue;\n }\n if (input.hasOwnProperty(key)) {\n let value = input[key];\n if (value instanceof Date) {\n if (value !== null && value !== undefined) {\n value = DateUtil.convertUTC2DateLocal(value);\n }\n result[key] = value;\n } else if (typeof value === 'object') {\n result[key] = DateUtil.convertDates(value);\n } else {\n result[key] = value;\n }\n }\n }\n return result;\n }\n\n private static fillConvertDateStringsToDates(result: any, input: any): any {\n const regexIso8601 =\n /^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z?)?$/i;\n for (const key in input) {\n if (!input.hasOwnProperty(key)) {\n continue;\n }\n const value = input[key];\n if (typeof value === 'string' && regexIso8601.test(value)) {\n result[key] = DateUtil.convertStringToLocalDate(value);\n } else if (typeof value === 'object') {\n result[key] = DateUtil.convertDateStringsToDates(value);\n } else {\n result[key] = value;\n }\n }\n return result;\n }\n\n private static convertStringToLocalDate(dateString: string): Date | null {\n const milliseconds = Date.parse(dateString);\n if (!isNaN(milliseconds)) {\n const dt = new Date(milliseconds);\n return DateUtil.convertDateLocal2UTC(dt);\n }\n return null;\n }\n}\n","export class DayModel {\n disabled: boolean;\n isCurrentMonth: boolean;\n today: boolean;\n selected: boolean;\n date: Date;\n weekend: boolean;\n\n public constructor(options?: {\n disabled?: boolean;\n isCurrentMonth?: boolean;\n today?: boolean;\n selected?: boolean;\n date: Date;\n weekend?: boolean;\n }) {\n if (options) {\n this.disabled = options.disabled;\n this.isCurrentMonth = options.isCurrentMonth;\n this.today = options.today;\n this.selected = options.selected;\n this.date = options.date;\n this.weekend = options.weekend;\n }\n }\n}\n","import { DatePeriod } from '../model/date-period';\nimport { DayModel } from '../model/day-model';\n\nexport class DatePickerUtil {\n static getFirstDay(\n month: number,\n year: number,\n firstDayOfWeek: number\n ): Date {\n const lastDay = new Date(year, month, 0);\n const lastDayIndex =\n lastDay.getDay() >= firstDayOfWeek\n ? lastDay.getDay() - firstDayOfWeek\n : lastDay.getDay() + 7 - firstDayOfWeek;\n return new Date(year, month - 1, lastDay.getDate() - lastDayIndex);\n }\n\n static getPickerDays(\n date: Date,\n firstDayOfWeek: number,\n minDate: Date,\n maxDate: Date,\n disabledDates: Date[],\n disabledDays: number[],\n disabledPeriods: DatePeriod[]\n ): DayModel[] {\n const days = [];\n const firstDay = DatePickerUtil.getFirstDay(\n date.getMonth(),\n date.getFullYear(),\n firstDayOfWeek\n );\n for (let i = 0; i < 6 * 7; i++) {\n const dat = new Date(firstDay);\n dat.setDate(dat.getDate() + i);\n days.push(\n new DayModel({\n date: dat,\n disabled: DatePickerUtil.isDateInvalid(\n dat,\n minDate,\n maxDate,\n disabledDates,\n disabledDays,\n disabledPeriods\n ),\n today: DatePickerUtil.isToday(dat),\n isCurrentMonth: dat.getMonth() === date.getMonth(),\n selected:\n dat.getFullYear() === date.getFullYear() &&\n dat.getMonth() === date.getMonth() &&\n dat.getDate() === date.getDate(),\n weekend: dat.getDay() === 0 || dat.getDay() === 6,\n })\n );\n }\n return days;\n }\n\n static isDateInvalid(\n dat: Date,\n minDate: Date,\n maxDate: Date,\n disabledDates: Date[],\n disabledDays: number[],\n disabledPeriods: DatePeriod[]\n ): boolean {\n return (\n DatePickerUtil.isDayDisabled(dat, disabledDays) ||\n DatePickerUtil.isDateDisabled(dat, disabledDates) ||\n DatePickerUtil.isDateInDisabledPeriod(dat, disabledPeriods) ||\n DatePickerUtil.isMaxInvalid(dat, maxDate) ||\n DatePickerUtil.isMinInvalid(dat, minDate)\n );\n }\n\n static isDayDisabled(dat: Date, disabledDays: number[]): boolean {\n if (\n dat === null ||\n dat === undefined ||\n disabledDays === null ||\n disabledDays === undefined ||\n disabledDays.length < 1\n ) {\n return false;\n }\n return disabledDays.indexOf(dat.getDay()) >= 0;\n }\n\n static isMinInvalid(dat: Date, minDate: Date): boolean {\n if (\n dat === null ||\n dat === undefined ||\n minDate === null ||\n minDate === undefined\n ) {\n return false;\n }\n return minDate.getTime() > dat.getTime();\n }\n\n static isMaxInvalid(dat: Date, maxDate: Date): boolean {\n if (\n dat === null ||\n dat === undefined ||\n maxDate === null ||\n maxDate === undefined\n ) {\n return false;\n }\n return maxDate.getTime() < dat.getTime();\n }\n\n static isDateInDisabledPeriod(\n dat: Date,\n disabledPeriods: DatePeriod[]\n ): boolean {\n if (\n dat === null ||\n dat === undefined ||\n disabledPeriods === null ||\n disabledPeriods === undefined ||\n disabledPeriods.length < 1\n ) {\n return false;\n }\n return disabledPeriods.some(\n (d: DatePeriod) =>\n d !== null &&\n d !== undefined &&\n d.start !== null &&\n d.start !== undefined &&\n d.end !== null &&\n d.end !== undefined &&\n d.start.getTime() <= dat.getTime() &&\n d.end.getTime() >= dat.getTime()\n );\n }\n\n static isDateDisabled(dat: Date, disabledDates: Date[]): boolean {\n if (\n disabledDates === null ||\n disabledDates === undefined ||\n disabledDates.length < 1 ||\n dat === null ||\n dat === undefined\n ) {\n return false;\n }\n return disabledDates.some(\n (d: Date) =>\n d !== null &&\n d !== undefined &&\n d.getFullYear() === dat.getFullYear() &&\n d.getMonth() === dat.getMonth() &&\n d.getDate() === dat.getDate()\n );\n }\n\n static isToday(dat: Date): boolean {\n if (dat === null || dat === undefined) {\n return false;\n }\n const today = new Date();\n return (\n dat.getFullYear() === today.getFullYear() &&\n dat.getMonth() === today.getMonth() &&\n dat.getDate() === today.getDate()\n );\n }\n\n static scrollMonth(delta: number, date: Date) {\n const res = new Date(date);\n let month = date.getMonth();\n let year = date.getFullYear();\n if (delta > 0) {\n if (month === 11) {\n month = 0;\n year++;\n } else {\n month++;\n }\n } else {\n if (month === 0) {\n month = 11;\n year--;\n } else {\n month--;\n }\n }\n res.setFullYear(year, month);\n return res;\n }\n\n static scrollYear(delta: number, date: Date) {\n const res = new Date(date);\n let year = date.getFullYear();\n if (delta > 0) {\n year++;\n } else {\n year--;\n }\n res.setFullYear(year);\n return res;\n }\n\n // static isSelected(date: Date, selectedDate: Date): boolean {\n // if (date === null || date === undefined || selectedDate === null || selectedDate === undefined) {\n // return false;\n // }\n // return date.getFullYear() === selectedDate.getFullYear()\n // && date.getMonth() === selectedDate.getMonth()\n // && date.getDate() === selectedDate.getDate();\n // }\n\n // static nextMonth(date: Date): Date {\n // const dt = new Date(date);\n // dt.setMonth(dt.getMonth() + 1);\n // return dt;\n // }\n\n // static prevMonth(date: Date): Date {\n // const dt = new Date(date);\n // dt.setMonth(dt.getMonth() - 1);\n // return dt;\n // }\n}\n","export enum Align {\n left,\n right,\n center,\n auto,\n fitWidth,\n minWidth,\n}\n","export enum VerticalAlign {\n top,\n bottom,\n center,\n auto\n}\n","export class PickerLocaleModel {\n dayNames: string[];\n dayNamesShort: string[];\n dayNamesMin: string[];\n monthNames: string[];\n monthNamesShort: string[];\n today: string;\n\n public constructor(options?: {\n dayNames: string[];\n dayNamesShort: string[];\n dayNamesMin: string[];\n monthNames: string[];\n monthNamesShort: string[];\n today: string;\n }) {\n if (options) {\n this.dayNames = options.dayNames;\n this.dayNamesShort = options.dayNamesShort;\n this.dayNamesMin = options.dayNamesMin;\n this.monthNames = options.monthNames;\n this.monthNamesShort = options.monthNamesShort;\n this.today = options.today;\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PickerLocaleModel} from '../model/picker-locale-model';\nimport {BehaviorSubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PickerLocaleService {\n private _defaults = new PickerLocaleModel({\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n today: 'Today'\n });\n\n public locale: BehaviorSubject<PickerLocaleModel> = new BehaviorSubject<PickerLocaleModel>(this._defaults);\n\n public setLocale(locale: PickerLocaleModel) {\n this.locale.next(locale);\n }\n\n constructor() {\n }\n}\n","export class DomUtil {\n public static clickedInside(target: HTMLElement, event: MouseEvent): boolean {\n return event.composedPath().indexOf(target) >= 0;\n }\n\n public static findTransformedParent(node: HTMLElement) {\n while (node !== null && node.tagName !== 'BODY') {\n const style = getComputedStyle(node);\n if (style.transform !== 'none') {\n return node;\n }\n node = node.parentNode as HTMLElement;\n }\n return null;\n }\n}\n","import {IRect} from '../contract/i-rect';\nimport {Align} from '../enum/align.enum';\nimport {VerticalAlign} from '../enum/vertical-align.enum';\n\nexport class PositionUtil {\n public static getPosition(\n containerPosition: IRect,\n elementPosition: IRect,\n align: Align,\n verticalAlign: VerticalAlign,\n margin: number = 0,\n verticalMargin: number = 0,\n transformedParentRect: IRect = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }\n ): IRect {\n const rect: IRect = {};\n const elementWidth = elementPosition.right - elementPosition.left;\n const elementHeight = elementPosition.bottom - elementPosition.top;\n const containerWidth = containerPosition.right - containerPosition.left;\n const containerHeight = containerPosition.bottom - containerPosition.top;\n if (align === Align.left) {\n rect.left = containerPosition.left + margin;\n }\n if (align === Align.right) {\n rect.left = containerPosition.right - elementWidth - margin;\n }\n if (align === Align.center) {\n rect.left =\n (containerPosition.left + containerPosition.right) / 2 -\n elementWidth / 2;\n }\n if (align === Align.fitWidth) {\n rect.left = containerPosition.left + margin;\n rect.right = window.innerWidth - containerPosition.right + margin;\n }\n\n if (align === Align.minWidth) {\n rect.left = containerPosition.left + margin;\n rect.minWidth = containerWidth;\n }\n\n if (verticalAlign === VerticalAlign.auto) {\n if (\n containerPosition.bottom +\n (elementPosition.bottom - elementPosition.top) <=\n window.innerHeight\n ) {\n verticalAlign = VerticalAlign.bottom;\n } else {\n verticalAlign = VerticalAlign.top;\n }\n }\n if (verticalAlign === VerticalAlign.top) {\n rect.top = containerPosition.top - elementHeight - verticalMargin;\n }\n if (verticalAlign === VerticalAlign.bottom) {\n rect.top = containerPosition.bottom + verticalMargin;\n }\n if (verticalAlign === VerticalAlign.center) {\n rect.top =\n (containerPosition.top + containerPosition.bottom) / 2 -\n elementHeight / 2;\n }\n\n if (rect.left < 0) {\n rect.left = 0;\n }\n if (rect.top + elementHeight > window.innerHeight || rect.bottom < 0) {\n rect.bottom = 0;\n }\n if (rect.top < 0) {\n rect.top = 0;\n }\n if (verticalAlign === VerticalAlign.bottom || verticalAlign === VerticalAlign.center) {\n rect.maxHeight = window.innerHeight - rect.top;\n }\n if (verticalAlign === VerticalAlign.top) {\n rect.maxHeight = containerPosition.top;\n }\n rect.left = rect.left - transformedParentRect.left;\n rect.right = rect.right - transformedParentRect.left;\n rect.top = rect.top - transformedParentRect.top;\n rect.bottom = rect.bottom ? rect.bottom - transformedParentRect.bottom : rect.bottom;\n return rect;\n }\n\n public static setElementPosition(element: HTMLElement, rect: IRect): void {\n element.style.left = rect.left != null ? `${rect.left}px` : '';\n element.style.right = rect.right != null ? `${rect.right}px` : '';\n element.style.top = rect.top != null ? `${rect.top}px` : '';\n element.style.bottom = rect.bottom != null ? `${rect.bottom}px` : '';\n element.style.maxHeight =\n rect.maxHeight != null ? `${rect.maxHeight}px` : '';\n element.style.minWidth = rect.minWidth != null ? `${rect.minWidth}px` : '';\n }\n\n public static getMaxHeight(position: IRect): number | null {\n let maxHeight = null;\n maxHeight = 1;\n return maxHeight;\n }\n\n public static getMaxWidth(position: IRect): number | null {\n let maxWidth = null;\n maxWidth = 1;\n return maxWidth;\n }\n}\n","import {Directive, Optional, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaDropdownHead]'\n})\nexport class DropdownHeadDirective {\n constructor(@Optional() public template: TemplateRef<any>) {\n }\n}\n","import {Directive, ElementRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaDropdownContent]'\n})\nexport class DropdownContentDirective {\n nativeElement: HTMLElement;\n\n constructor(private _elementRef: ElementRef<HTMLElement>) {\n this.nativeElement = _elementRef.nativeElement;\n }\n}\n","import {\n ChangeDetectorRef,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n Output,\n Renderer2,\n} from '@angular/core';\nimport {DomUtil} from '../../common/util/dom-util';\nimport {PositionUtil} from '../../common/util/position-util';\nimport {Align} from '../../common/enum/align.enum';\nimport {VerticalAlign} from '../../common/enum/vertical-align.enum';\nimport {DropdownHeadDirective} from './dropdown-head.directive';\nimport {DropdownContentDirective} from './dropdown-content.directive';\nimport {AutoCloseIgnoreCase} from '../../common/contract/auto-close-ignore-case';\nimport {IRect} from '../../common/contract/i-rect';\nimport {takeWhile, throttleTime} from 'rxjs/operators';\n\n@Directive()\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class DropdownBase {\n @Input() align: Align = Align.left;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Input() appendToBody: boolean;\n @Input() disabled: boolean;\n @Input() shadow = true;\n @Input() className: string | string[];\n\n @Input()\n set open(val: boolean) {\n if (val != null && val !== this._open && !this.disabled) {\n if (val) {\n this.openDropdown();\n } else {\n this.closeDropdown();\n }\n }\n }\n\n get open(): boolean {\n return this._open;\n }\n\n get container() {\n return this.appendToBody\n ? this._document.body\n : this._elementRef.nativeElement;\n }\n\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Input() autoClose = true;\n @Input() autoCloseIgnore: Array<AutoCloseIgnoreCase> = ['inside'];\n\n @ContentChild(DropdownHeadDirective, {\n static: false,\n read: ElementRef,\n })\n protected _head: ElementRef;\n\n @ContentChild(DropdownContentDirective, {static: false})\n protected _content: DropdownContentDirective;\n\n protected _body: HTMLElement | null = null;\n protected _open = false;\n protected _alive = true;\n\n constructor(\n protected _cdr: ChangeDetectorRef,\n protected _document: any,\n protected _elementRef: ElementRef<HTMLElement>,\n protected _zone: NgZone,\n protected _renderer: Renderer2\n ) {\n this._zone.onStable\n .pipe(\n takeWhile((_) => this._alive),\n throttleTime(10, undefined, {trailing: true})\n )\n .subscribe((_) => {\n if (this._head?.nativeElement && this._body) {\n setTimeout(() => {\n if (this._head?.nativeElement && this._body) {\n this.setPosition(this._head.nativeElement, this._body);\n }\n });\n }\n });\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent): void {\n if (this.open) {\n if (!DomUtil.clickedInside(this._body, event)) {\n this.closeDropdown();\n }\n } else {\n if (DomUtil.clickedInside(this._head.nativeElement, event)) {\n this.openDropdown();\n }\n }\n }\n\n @HostListener('document:click', ['$event']) documentClick(\n event: MouseEvent\n ): void {\n if (\n !this.open ||\n !this.autoClose ||\n event.detail === 0 ||\n DomUtil.clickedInside(this._head.nativeElement, event) ||\n DomUtil.clickedInside(this._body, event)\n ) {\n return;\n }\n if (DomUtil.clickedInside(this._body, event)) {\n if (this.autoCloseIgnore.indexOf('inside') < 0) {\n this.closeDropdown();\n }\n } else {\n if (this.autoCloseIgnore.indexOf('outside') < 0) {\n this.closeDropdown();\n }\n }\n }\n\n @HostListener('window:keyup', ['$event']) keyUp(event: KeyboardEvent): void {\n if (\n !this.open ||\n !this.autoClose ||\n ['esc', 'enter'].every(\n (_: 'esc' | 'enter') => this.autoCloseIgnore.indexOf(_) >= 0\n )\n ) {\n return;\n }\n if (\n (event.code === 'Escape' && this.autoCloseIgnore.indexOf('esc') < 0) ||\n (event.code === 'Enter' && this.autoCloseIgnore.indexOf('enter') < 0)\n ) {\n this.closeDropdown();\n }\n }\n\n protected closeDropdown(): void {\n if (this.open && this._body && this.container.contains(this._body)) {\n this._renderer.removeChild(this.container, this._body);\n this._open = false;\n this._body = null;\n this.openChange.emit(this.open);\n }\n }\n\n private openDropdown(): void {\n if (this._open || !this._content || this.disabled) {\n return;\n }\n this._open = true;\n this.openChange.emit(this.open);\n const renderer = this._renderer;\n const content = this._content.nativeElement;\n const container = (this._body =\n this._body || renderer.createElement('div'));\n renderer.addClass(container, 'dropdown');\n if (this.className != null) {\n if (this.className instanceof Array && this.className.length > 0) {\n this.className.forEach((_) => {\n renderer.addClass(container, _);\n });\n }\n if (typeof this.className === 'string') {\n renderer.addClass(container, this.className);\n }\n }\n\n renderer.appendChild(container, content);\n renderer.appendChild(this.container, container);\n\n this.setPosition(this._head.nativeElement, this._body);\n }\n\n private setPosition(container: HTMLElement, target: HTMLElement): void {\n const containerPosition = container.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const rect: IRect = {\n bottom: containerPosition.bottom,\n top: containerPosition.top,\n left: containerPosition.left,\n right: containerPosition.right,\n };\n\n const targetRect: IRect = {\n bottom: targetPosition.bottom,\n top: targetPosition.top,\n left: targetPosition.left,\n right: targetPosition.right,\n };\n\n const targetTransformedParent = DomUtil.findTransformedParent(target);\n let parentPosition = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n if (targetTransformedParent) {\n parentPosition = targetTransformedParent.getBoundingClientRect();\n }\n\n const position = PositionUtil.getPosition(\n rect,\n targetRect,\n this.align,\n this.verticalAlign,\n 0,\n 0,\n parentPosition\n );\n\n PositionUtil.setElementPosition(target, position);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { DropdownBase } from '../dropdown-base';\n\n@Component({\n selector: 'teta-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropdownComponent\n extends DropdownBase\n implements OnInit, OnDestroy\n{\n constructor(\n protected override _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) protected override _document: any,\n protected override _elementRef: ElementRef<HTMLElement>,\n protected override _zone: NgZone,\n protected override _renderer: Renderer2\n ) {\n super(_cdr, _document, _elementRef, _zone, _renderer);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.closeDropdown();\n this._alive = false;\n }\n}\n","<ng-content select=\"[tetaDropdownHead]\"></ng-content>\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { bufferCount, tap, throttleTime } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PickerTouchService {\n step: Observable<number>;\n\n private touchMove: Observable<TouchEvent>;\n private touchMove$: Subject<TouchEvent> = new Subject<TouchEvent>();\n private step$: Subject<number> = new Subject<number>();\n\n constructor() {\n this.touchMove = this.touchMove$.asObservable();\n this.step = this.step$.asObservable();\n\n this.touchMove\n .pipe(\n throttleTime(25),\n bufferCount(2),\n tap((touches: [TouchEvent, TouchEvent]) => {\n const [start, end] = touches.map((_) => _.changedTouches?.item(0));\n const deltaY = start?.clientY - end?.clientY;\n if (deltaY !== 0) {\n const step = deltaY > 0 ? 1 : -1;\n this.step$.next(step);\n }\n })\n )\n .subscribe();\n }\n\n onTouchMove(event: TouchEvent) {\n this.touchMove$.next(event);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { takeWhile, tap } from 'rxjs/operators';\nimport { PickerTouchService } from '../service/picker-touch.service';\n\n@Component({\n selector: 'teta-year-select',\n templateUrl: './year-select.component.html',\n styleUrls: ['./year-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class YearSelectComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() currentYear: number;\n @Input() today: Date;\n @Input() size = 8;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() allowableRange: number[] = [1900, 2100];\n @Output() yearSelected = new EventEmitter<number>();\n @Output() yearApplied = new EventEmitter<number>();\n\n minYearDate: Date;\n maxYearDate: Date;\n years: number[];\n minYearList: number[];\n maxYearList: number[];\n decreaseInterval: number;\n increaseInterval: number;\n private _alive = true;\n\n constructor(\n private _cdr: ChangeDetectorRef,\n private _pickerTouchService: PickerTouchService,\n private _elementRef: ElementRef\n ) {}\n\n ngOnInit() {\n const [minRange, maxRange] = this.allowableRange;\n this.minYearDate = new Date(minRange, 0, 1);\n this.maxYearDate = new Date(maxRange, 11, 31);\n this.initMinYearList();\n this.initMaxYearList();\n this.initYearSelector(this.currentYear);\n }\n\n ngAfterViewInit() {\n const touchMove$ = fromEvent(\n this._elementRef.nativeElement.parentElement,\n 'touchmove'\n );\n\n touchMove$\n .pipe(\n takeWhile((_) => this._alive),\n tap((e: TouchEvent) => {\n this._pickerTouchService.onTouchMove(e);\n })\n )\n .subscribe();\n\n this._pickerTouchService.step\n .pipe(\n takeWhile((_) => this._alive),\n tap((_) => {\n this.shiftYearSelector(_);\n this._cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n window.clearInterval(this.decreaseInterval);\n window.clearInterval(this.increaseInterval);\n this._alive = false;\n }\n\n scrollYearSelector = (e: WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const step = e.deltaY > 0 ? 1 : -1;\n this.shiftYearSelector(step);\n };\n\n setYear = (e: any, year: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isYearDisabled(year)) {\n this.yearSelected.emit(year);\n }\n };\n\n applyYear = (e: any, year: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isYearDisabled(year)) {\n this.yearApplied.emit(year);\n }\n };\n\n initYearSelector = (year: number) => {\n if (!year) {\n year = this.today.getFullYear();\n }\n this.years = [year];\n let direction = false;\n for (let i = 1; i < this.size; i++) {\n if (direction) {\n this.years.unshift(this.years[0] - 1);\n } else {\n this.years.push(this.years[this.years.length - 1] + 1);\n }\n direction = !direction;\n }\n this.checkRanges();\n };\n\n initMinYearList = () => {\n this.minYearList = [this.minYearDate.getFullYear()];\n for (let i = 1; i < this.size; i++) {\n this.minYearList.push(this.minYearList[this.minYearList.length - 1] + 1);\n }\n };\n\n initMaxYearList = () => {\n this.maxYearList = [this.maxYearDate.getFullYear()];\n for (let i = 1; i < this.size; i++) {\n this.maxYearList.unshift(this.maxYearList[0] - 1);\n }\n };\n\n checkRanges = () => {\n if (\n this.years.some((year) => {\n const dat = new Date(year, 0, 1);\n return this.isMinYear(dat);\n })\n ) {\n this.years = this.minYearList;\n }\n if (\n this.years.some((year) => {\n const dat = new Date(year, 0, 1);\n return this.isMaxYear(dat);\n })\n ) {\n this.years = this.maxYearList;\n }\n };\n\n shiftYearSelector = (step: number = 0) => {\n this.years = this.years.map((year) => year + step);\n this.checkRanges();\n };\n\n decreaseYearSelector = (step: number = 3) => {\n const dat = new Date(this.years[0] - step, 0, 1);\n if (this.isMinYear(dat)) {\n this.years = this.minYearList;\n return;\n }\n\n this.years = this.years.map((year) => year - step);\n };\n\n increaseYearSelector = (step: number = 3) => {\n const dat = new Date(this.years[this.years.length - 1] + step, 0, 1);\n if (this.isMaxYear(dat)) {\n this.years = this.maxYearList;\n return;\n }\n this.years = this.years.map((year) => year + step);\n };\n\n // stopLongDecrease = () => {\n // window.clearInterval(this.decreaseInterval);\n // };\n //\n // stopLongIncrease = () => {\n // window.clearInterval(this.increaseInterval);\n // };\n\n isMinYear = (dat: Date): boolean => {\n if (!this.minYearDate || !(this.minYearDate instanceof Date) || !dat) {\n return false;\n }\n return this.minYearDate.getFullYear() > dat.getFullYear();\n };\n\n isMaxYear = (dat: Date): boolean => {\n if (!this.maxYearDate || !(this.maxYearDate instanceof Date) || !dat) {\n return false;\n }\n return this.maxYearDate.getFullYear() < dat.getFullYear();\n };\n\n isYearDisabled = (year: number) => {\n if (year) {\n const dat = new Date(year, 0, 1);\n return this.isMaxInvalid(dat) || this.isMinInvalid(dat);\n }\n return false;\n };\n\n isMinInvalid = (dat: Date): boolean => {\n if (!this.minDate || !(this.minDate instanceof Date) || !dat) {\n return false;\n }\n return this.minDate.getFullYear() > dat.getFullYear();\n };\n\n isMaxInvalid = (dat: Date): boolean => {\n if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {\n return false;\n }\n return this.maxDate.getFullYear() < dat.getFullYear();\n };\n}\n","<div class=\"list row_auto margin-top-2\"\n (wheel)=\"scrollYearSelector($event);\">\n <div class=\"list-item list-item_interactive\"\n [class.list-item_active]=\"year === currentYear\"\n [class.list-item_disabled]=\"isYearDisabled(year)\"\n (click)=\"setYear($event, year)\"\n (dblclick)=\"applyYear($event, year)\"\n *ngFor=\"let year of years\">\n {{year}}\n </div>\n</div>\n","export const getPrecision = (a: number) => {\n if (!isFinite(a)) {\n return 0;\n }\n let e = 1;\n let p = 0;\n while (Math.round(a * e) / e !== a) {\n e *= 10;\n p++;\n }\n return p;\n};\n\nexport const formatNumber = (\n value: any,\n decimalLength: number,\n chunkDelimiter: string,\n decimalDelimiter: string,\n chunkLength: number\n) => {\n const abs = Math.abs(value);\n if (0 < abs && 1 > abs) {\n const firstDigitIndex = Math.floor(Math.abs(Math.log10(abs)));\n decimalLength += firstDigitIndex;\n }\n const precision = Math.min(getPrecision(value), Math.floor(decimalLength));\n const result =\n '\\\\d(?=(\\\\d{' + chunkLength + '})+' + (precision > 0 ? '\\\\D' : '$') + ')';\n const num = value.toFixed(precision);\n return (decimalDelimiter ? num.replace('.', decimalDelimiter) : num).replace(\n new RegExp(result, 'g'),\n '$&' + chunkDelimiter\n );\n};\n\nexport const prependZero = (input: number, length: number) =>\n ('0'.repeat(length) + input).slice(-length);\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {prependZero} from '../util/number-helper';\n\n@Pipe({\n name: 'tetaPrependZero'\n})\nexport class PrependZeroPipe implements PipeTransform {\n transform(value: number, length: number): string {\n if (value === null || value === undefined) {\n return '';\n }\n value /= 1;\n return prependZero(value, length);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { PickerLocaleModel } from '../model/picker-locale-model';\nimport { fromEvent, merge } from 'rxjs';\nimport { takeWhile, tap } from 'rxjs/operators';\nimport { PickerTouchService } from '../service/picker-touch.service';\n\n@Component({\n selector: 'teta-month-select',\n templateUrl: './month-select.component.html',\n styleUrls: ['./month-select.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MonthSelectComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() locale: PickerLocaleModel;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() size = 8;\n @Output() monthSelected = new EventEmitter<number>();\n @Output() monthApplied = new EventEmitter<number>();\n\n _currentMonth: number;\n\n @Input()\n set currentMonth(val: number) {\n this._currentMonth = val;\n this.makeMonths();\n }\n\n get currentMonth(): number {\n return this._currentMonth;\n }\n\n _currentYear: number;\n\n @Input()\n set currentYear(val: number) {\n this._currentYear = val;\n }\n\n get currentYear(): number {\n return this._currentYear;\n }\n\n today: Date;\n months: number[] = [];\n shift = 0;\n\n private _alive = true;\n\n private get _displayDate(): Date {\n let month = 0;\n let year = 0;\n if (\n this.currentMonth !== null &&\n this.currentMonth !== undefined &&\n this.currentMonth >= 0 &&\n this.currentMonth <= 11\n ) {\n month = this.currentMonth;\n }\n if (this.currentYear !== null && this.currentYear !== undefined) {\n year = this.currentYear;\n }\n return new Date(year, month, 1);\n }\n\n constructor(\n private _elementRef: ElementRef,\n private _cdr: ChangeDetectorRef,\n private _pickerTouchService: PickerTouchService\n ) {\n this.today = new Date();\n this.today.setHours(0, 0, 0, 0);\n }\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n ngAfterViewInit() {\n const touchMove$ = fromEvent(\n this._elementRef.nativeElement.parentElement,\n 'touchmove'\n );\n\n touchMove$\n .pipe(\n takeWhile((_) => this._alive),\n tap((e: TouchEvent) => {\n if (e.type === 'touchmove') {\n this._pickerTouchService.onTouchMove(e);\n }\n })\n )\n .subscribe();\n\n this._pickerTouchService.step\n .pipe(\n takeWhile((_) => this._alive),\n tap((_) => {\n this.shiftMonthSelector(_);\n this._cdr.detectChanges();\n })\n )\n .subscribe();\n }\n\n scrollMonthSelector = (e: WheelEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const step = e.deltaY > 0 ? 1 : -1;\n this.shiftMonthSelector(step);\n };\n\n shiftMonthSelector = (step: number = 0) => {\n this.shift += step;\n this.makeMonths();\n };\n\n setMonth = (e: any, month: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isMonthDisabled(month)) {\n this.shift = 0;\n this.monthSelected.emit(month);\n }\n };\n\n applyMonth = (e: any, month: number) => {\n e.preventDefault();\n e.stopPropagation();\n if (!this.isMonthDisabled(month)) {\n this.monthApplied.emit(month);\n }\n };\n\n isMonthDisabled = (month: number) => {\n if (!month && !this.currentYear) {\n const dat = new Date(this.currentYear, month, 1);\n return this.isMaxInvalid(dat) || this.isMinInvalid(dat);\n }\n return false;\n };\n\n isMinInvalid = (dat: Date): boolean => {\n if (!this.minDate || !(this.minDate instanceof Date) || !dat) {\n return false;\n }\n const min = new Date(\n this.minDate.getFullYear(),\n this.minDate.getMonth(),\n 1\n );\n return min.getTime() > dat.getTime();\n };\n\n isMaxInvalid = (dat: Date): boolean => {\n if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {\n return false;\n }\n const max = new Date(\n this.maxDate.getFullYear(),\n this.maxDate.getMonth(),\n 1\n );\n return max.getTime() < dat.getTime();\n };\n\n private makeMonths() {\n const start = this._displayDate;\n this.months = [];\n start.setMonth(start.getMonth() - 3);\n for (let i = this.shift; i < this.size + this.shift; i++) {\n const dt = new Date(start.getFullYear(), start.getMonth() + i, 1);\n this.months.push(dt.getMonth());\n }\n }\n}\n","<div class=\"list row_auto margin-top-2\"\n (wheel)=\"scrollMonthSelector($event);\">\n <div *ngFor=\"let month of months\"\n class=\"list-item list-item_interactive\"\n [class.list-item_active]=\"month === _currentMonth\"\n [class.list-item_disabled]=\"isMonthDisabled(month)\"\n [class.datepicker__month__item_current]=\"month === today?.getMonth() && currentYear === today?.getFullYear()\"\n (click)=\"setMonth($event, month)\"\n (dblclick)=\"applyMonth($event, month)\">\n <span class=\"color-text-20 margin-right-2\">\n {{month + 1 | tetaPrependZero: 2}}\n </span>\n {{locale.monthNames[month]}}\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DayModel } from '../model/day-model';\nimport { DatePeriod } from '../model/date-period';\nimport { PickerLocaleService } from '../service/picker-locale.service';\nimport { takeWhile, tap, withLatestFrom } from 'rxjs/operators';\nimport { PickerLocaleModel } from '../model/picker-locale-model';\nimport { DatePickerUtil } from '../util/date-picker-util';\nimport { fromEvent } from 'rxjs';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DateUtil } from '../../../util/date-util';\n\nexport const DAY_SELECT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DaySelectComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-day-select',\n templateUrl: './day-select.component.html',\n styleUrls: ['./day-select.component.scss'],\n providers: [DAY_SELECT_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DaySelectComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n @Input() firstDayOfWeek = 1;\n @Input() disabledDates: Date[];\n @Input() disabledPeriods: DatePeriod[];\n @Input() disabledDays: number[];\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() disabled: boolean;\n\n @Output() dateSelected = new EventEmitter<Date>();\n @Output() monthSelected = new EventEmitter<number>();\n @Output() yearSelected = new EventEmitter<number>();\n\n locale: PickerLocaleModel;\n\n value: Date;\n\n _currentValue: Date;\n\n set currentValue(val: Date) {\n if (\n !this._currentValue ||\n DateUtil.truncateToDay(val)?.getTime() !==\n DateUtil.truncateToDay(this._currentValue)?.getTime()\n ) {\n this._currentValue = val;\n this.createDays();\n this.checkDays();\n } else {\n this._currentValue = val;\n }\n this._cdr.markForCheck();\n }\n\n get currentValue(): Date {\n return this._currentValue;\n }\n\n days: Array<DayModel>;\n weekDays: number[] = [];\n\n private _alive = true;\n\n constructor(\n public localeService: PickerLocaleService,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef\n ) {\n localeService.locale\n .pipe(takeWhile((_) => this._alive))\n .subscribe((locale: PickerLocaleModel) => {\n this.locale = locale;\n });\n }\n\n ngOnInit() {\n this.weekDays = this.createWeekDays();\n\n const touchStart$ = fromEvent(this._elementRef.nativeElement, 'touchstart');\n const touchEnd$ = fromEvent(this._elementRef.nativeElement, 'touchend');\n\n touchEnd$\n .pipe(\n takeWhile((_) => this._alive),\n withLatestFrom(touchStart$),\n tap((touches: [TouchEvent, TouchEvent]) => {\n const [start, end] = touches.map((_) => _.changedTouches?.item(0));\n const deltaY = end?.clientY - start?.clientY;\n if (deltaY !== 0) {\n this.scrollMonth(deltaY);\n }\n })\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n writeValue(model: Date) {\n this.value = model;\n this.currentValue = model ? model : new Date();\n this._cdr.markForCheck();\n }\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n\n applyValue(day: DayModel, event: MouseEvent) {\n this.preventEvent(event);\n if (day === null || day === undefined || day.disabled) {\n return;\n }\n this.value = day.date;\n this.currentValue = day.date;\n this.onChange(day.date);\n }\n\n setDate(day: DayModel, event: MouseEvent) {\n if (day === null || day === undefined || day.disabled) {\n return;\n }\n if (\n day.date !== null &&\n day.date !== undefined &&\n day.date instanceof Date\n ) {\n this.currentValue = day.date;\n this.dateSelected.emit(day.date);\n }\n }\n\n scrollMonth(event: WheelEvent | number) {\n const deltaY = event instanceof WheelEvent ? event.deltaY : event;\n\n if (event instanceof WheelEvent) {\n this.preventEvent(event);\n }\n this.currentValue = DatePickerUtil.scrollMonth(deltaY, this.currentValue);\n this.monthSelected.emit(this.currentValue.getMonth());\n this.yearSelected.emit(this.currentValue.getFullYear());\n this._cdr.detectChanges();\n }\n\n private createWeekDays(): number[] {\n const result = [];\n let dayIndex = this.firstDayOfWeek;\n for (let i = 0; i < 7; i++) {\n result.push(dayIndex);\n dayIndex = dayIndex === 6 ? 0 : ++dayIndex;\n }\n return result;\n }\n\n private createDays() {\n this.days = DatePickerUtil.getPickerDays(\n this.currentValue,\n this.firstDayOfWeek,\n this.minDate,\n this.maxDate,\n this.disabledDates,\n this.disabledDays,\n this.disabledPeriods\n );\n }\n\n private checkDays() {\n if (this.days) {\n this.days = this.days.map((dat: DayModel) => ({\n ...dat,\n selected:\n dat.date.getFullYear() === this.currentValue.getFullYear() &&\n dat.date.getMonth() === this.currentValue.getMonth() &&\n dat.date.getDate() === this.currentValue.getDate(),\n }));\n }\n }\n\n private preventEvent(event: any) {\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n}\n","<div class=\"datepicker-week font-caption color-text-80\">\n <div class=\"datepicker-day\"\n [class.font-caption-bold]=\"day === 0 || day === 6\"\n *ngFor=\"let day of weekDays\">\n {{locale.dayNamesMin[day]}}\n </div>\n</div>\n<div class=\"datepicker-picker color-text-90 font-body-3\"\n (wheel)=\"scrollMonth($event)\"\n>\n <div *ngFor=\"let day of days\"\n class=\"datepicker-date\"\n (click)=\"setDate(day, $event);\"\n (dblclick)=\"applyValue(day, $event);\"\n [class.datepicker-date_active]=\"day.selected\"\n [class.datepicker-date_disabled]=\"day.disabled || !day.isCurrentMonth\"\n [class.datepicker-date_weekend]=\"day.weekend\"\n [class.datepicker-date_today]=\"day.today\">\n <ng-container *ngIf=\"day !== null && day !== undefined\">\n {{day.date.getDate()}}\n </ng-container>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const TIME_PART_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TimePartControlComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-time-part-control',\n templateUrl: './time-part-control.component.html',\n styleUrls: ['./time-part-control.component.scss'],\n providers: [TIME_PART_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimePartControlComponent implements OnInit, ControlValueAccessor {\n @Input() min = 0;\n @Input() max = 59;\n @Input() disabled: boolean;\n\n private _value: number;\n\n set value(value: number) {\n this._value = value;\n this.onChange(this._value);\n }\n\n get value() {\n return this._value;\n }\n\n constructor(private _cdr: ChangeDetectorRef) {}\n\n up() {\n this.value = this.value < this.max ? this.value + 1 : this.min;\n }\n\n down() {\n this.value = this.value > this.min ? this.value - 1 : this.max;\n }\n\n scroll = (e: any) => {\n const delta = e?.deltaY ?? e;\n\n if (e instanceof WheelEvent) {\n e.preventDefault();\n }\n if (delta > 0) {\n this.down();\n } else {\n this.up();\n }\n };\n\n ngOnInit() {}\n\n writeValue(model: number) {\n this._value = model;\n this._cdr.markForCheck();\n }\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n}\n","<button teta-button [square]=\"true\" (click)=\"up()\" [palette]=\"'text'\" [view]=\"'ghost'\">\n <teta-icon [name]=\"'arrowUpKey'\"></teta-icon>\n</button>\n<div (wheel)=\"scroll($event);\" class=\"row row_auto font-body-3 height-6 width-6 align-center justify-content-center\">\n {{value | tetaPrependZero: 2}}\n</div>\n<button teta-button [square]=\"true\" (click)=\"down()\" [palette]=\"'text'\" [view]=\"'ghost'\">\n <teta-icon [name]=\"'arrowDownKey'\"></teta-icon>\n</button>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {PickerLocaleService} from '../service/picker-locale.service';\nimport {takeWhile} from 'rxjs/operators';\nimport {DatePeriod} from '../model/date-period';\nimport {PickerLocaleModel} from '../model/picker-locale-model';\nimport {DatePickerMode} from '../model/date-picker-mode.enum';\nimport {DateUtil} from '../../../util/date-util';\nimport {DatePickerUtil} from '../util/date-picker-util';\nimport {Align} from '../../../common/enum/align.enum';\nimport {VerticalAlign} from '../../../common/enum/vertical-align.enum';\n\nexport const DATE_PICKER_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n providers: [DATE_PICKER_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatePickerComponent\n implements ControlValueAccessor, OnInit, OnDestroy {\n @Input() disabled: boolean;\n @Input() invalid: boolean;\n @Input() firstDayOfWeek = 1;\n @Input() disabledDates: Date[];\n @Input() disabledPeriods: DatePeriod[];\n @Input() disabledDays: number[];\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() minYearDate: Date;\n @Input() maxYearDate: Date;\n @Input() align: Align = Align.left;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.auto;\n @Input() appendToBody: boolean;\n\n @HostBinding('class.datepicker-wide')\n @Input()\n showTime = false;\n\n @Input()\n set format(val: string) {\n this._format = val;\n }\n\n get format(): string {\n if (this._format) {\n return this._format;\n }\n return this.showTime ? 'dd.MM.yyyy HH:mm:ss' : 'dd.MM.yyyy';\n }\n\n @HostBinding('class.datepicker_open') open: boolean;\n @HostBinding('class.datepicker') private readonly classDatepicker = true;\n @HostBinding('tabindex') private readonly tabindex = 0;\n\n locale: PickerLocaleModel;\n today: Date = new Date();\n\n datePickerModeEnum = DatePickerMode;\n displayMode: DatePickerMode = DatePickerMode.date;\n _format: string;\n\n _value: Date | null = null;\n _currentValue: Date;\n\n private _alive = true;\n\n get value(): Date | null {\n return this._value;\n }\n\n set value(v: Date | null) {\n if (v?.getTime() !== this._value?.getTime()) {\n this._value = v;\n this.currentValue = this._value;\n }\n }\n\n get currentValue(): Date {\n return this._currentValue;\n }\n\n set currentValue(date: Date) {\n this._currentValue = date;\n this._cdr.markForCheck();\n }\n\n get internalValue() {\n return this.currentValue ?? this.emptyDate();\n }\n\n constructor(\n public localeService: PickerLocaleService,\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef\n ) {\n localeService.locale\n .pipe(takeWhile((_) => this._alive))\n .subscribe((locale: PickerLocaleModel) => {\n this.locale = locale;\n });\n }\n\n @HostListener('window:keyup', ['$event']) keyUp(event: KeyboardEvent): void {\n if (!this.open) {\n return;\n }\n if (event.code === 'Escape') {\n this.currentValue = this.value;\n this.open = false;\n }\n }\n\n writeValue(value: any) {\n this.value = value;\n this._cdr.markForCheck();\n }\n\n onChange = (_: any) => {\n };\n\n onTouched = () => {\n };\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngOnInit() {\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n applyValue(date: Date) {\n this.setDate(date);\n this.value = this.currentValue;\n this.onChange(this.value);\n this.open = false;\n }\n\n setDate = (day: Date) => {\n if (day === null || day === undefined) {\n this.currentValue = null;\n return;\n }\n const dt = this.internalValue;\n dt.setFullYear(day.getFullYear(), day.getMonth(), day.getDate());\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setYear = (year: number) => {\n const dt = this.internalValue;\n dt.setFullYear(year);\n this.currentValue = new Date(dt);\n this.setMode(DatePickerMode.date);\n this._cdr.markForCheck();\n };\n\n setMonth = (month: number) => {\n const dt = this.internalValue;\n dt.setMonth(month);\n this.currentValue = new Date(dt);\n this.setMode(DatePickerMode.date);\n this._cdr.markForCheck();\n };\n\n setHour = (hours: number) => {\n const dt = this.internalValue;\n dt.setHours(hours);\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setMinute = (minute: number) => {\n const dt = this.internalValue;\n dt.setMinutes(minute);\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setSecond = (seconds: number) => {\n const dt = this.internalValue;\n dt.setSeconds(seconds);\n this.currentValue = new Date(dt);\n this._cdr.markForCheck();\n };\n\n setToday = () => {\n this.currentValue = this.emptyDate();\n this._cdr.markForCheck();\n };\n\n clearPicker = (event: MouseEvent): void => {\n this.preventEvent(event);\n this.value = null;\n this.onChange(null);\n };\n\n isDateInDisabledPeriod = (dat: Date): boolean => {\n if (!this.disabledPeriods || this.disabledPeriods.length < 1 || !dat) {\n return false;\n }\n return this.disabledPeriods.some(\n (d: DatePeriod) =>\n d &&\n d.start &&\n d.end &&\n d.start.getTime() <= dat.getTime() &&\n d.end.getTime() >= dat.getTime()\n );\n };\n\n isScrollIgnored = (): boolean =>\n this.displayMode === DatePickerMode.month ||\n this.displayMode === DatePickerMode.year;\n\n scrollMonth = (e: any) => {\n const delta = e?.deltaY ?? e;\n\n if (e instanceof WheelEvent) {\n this.preventEvent(e);\n }\n\n if (this.isScrollIgnored()) {\n return false;\n }\n this.currentValue = DatePickerUtil.scrollMonth(delta, this.internalValue);\n };\n\n scrollYear = (e: any) => {\n this.preventEvent(e);\n if (this.isScrollIgnored()) {\n return false;\n }\n this.currentValue = DatePickerUtil.scrollMonth(\n e.deltaY,\n this.internalValue\n );\n };\n\n openPicker = (show: boolean) => {\n if (this.disabled) {\n return;\n }\n if (!show) {\n this.setMode(DatePickerMode.date);\n this.applyValue(this.currentValue);\n }\n this.open = show;\n this._cdr.markForCheck();\n };\n\n closePicker = () => {\n this.openPicker(false);\n this.onTouched();\n };\n\n preventEvent = (event: any) => {\n event.stopPropagation();\n event.preventDefault();\n return false;\n };\n\n focus() {\n this._elementRef.nativeElement.focus();\n }\n\n setMode(mode: DatePickerMode) {\n let result: DatePickerMode;\n if (mode === this.displayMode || mode === DatePickerMode.date) {\n result = DatePickerMode.date;\n } else {\n result = mode;\n }\n this.displayMode = result;\n }\n\n private emptyDate() {\n return DateUtil.truncateToDay(new Date());\n }\n}\n","<teta-dropdown\n class=\"row row_auto\"\n [disabled]=\"disabled\"\n [open]=\"open\"\n [autoCloseIgnore]=\"['esc']\"\n (openChange)=\"openPicker($event)\"\n [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [appendToBody]=\"appendToBody\">\n <div tetaDropdownHead\n class=\"datepicker-head font-body-3\"\n [class.datepicker-head_disabled]=\"disabled\"\n [class.datepicker-head_invalid]=\"invalid\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-1\"></teta-icon>\n <div class=\"row_auto\">\n {{currentValue !== null && currentValue !== undefined ? (currentValue | date : format) : ''}}\n </div>\n <teta-icon [name]=\"'closeBig'\" (click)=\"clearPicker($event);\" class=\"margin-left-1\"></teta-icon>\n </div>\n <div tetaDropdownContent class=\"datepicker-body scrollable\" (click)=\"$event.preventDefault()\">\n <div class=\"padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.monthNames[internalValue?.getMonth()]}}\n </button>\n <button teta-button\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{internalValue?.getFullYear()}}\n </button>\n </div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [today]=\"today\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"internalValue?.getMonth()\"\n [currentYear]=\"internalValue?.getFullYear()\"\n [locale]=\"locale\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n <teta-day-select\n *ngIf=\"displayMode === datePickerModeEnum.date\"\n [ngModel]=\"currentValue\"\n (ngModelChange)=\"applyValue($event)\"\n (dateSelected)=\"setDate($event)\"\n (yearSelected)=\"setYear($event)\"\n (monthSelected)=\"setMonth($event)\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [disabledDays]=\"disabledDays\"\n [disabledDates]=\"disabledDates\"\n [disabledPeriods]=\"disabledPeriods\"></teta-day-select>\n </div>\n </div>\n <div *ngIf=\"showTime\" class=\"datepicker-time padding-v-1 border-top border-text-10 font-body-3 color-text-90\">\n <teta-time-part-control [max]=\"23\" [ngModel]=\"internalValue?.getHours()\"\n (ngModelChange)=\"setHour($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getMinutes()\"\n (ngModelChange)=\"setMinute($event)\"></teta-time-part-control>\n :\n <teta-time-part-control [ngModel]=\"internalValue?.getSeconds()\"\n (ngModelChange)=\"setSecond($event)\"></teta-time-part-control>\n </div>\n </div>\n</teta-dropdown>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PickerLocaleModel } from '../model/picker-locale-model';\nimport { PickerLocaleService } from '../service/picker-locale.service';\nimport { takeWhile } from 'rxjs/operators';\nimport { DatePickerMode } from '../model/date-picker-mode.enum';\n\nexport const MONTH_PICKER_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MonthPickerComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-month-picker',\n templateUrl: './month-picker.component.html',\n styleUrls: ['./month-picker.component.scss'],\n providers: [MONTH_PICKER_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MonthPickerComponent\n implements ControlValueAccessor, OnInit, OnDestroy\n{\n @Input() disabled: boolean;\n @Input() minDate: Date;\n @Input() maxDate: Date;\n @Input() showToday = true;\n @Input() appendToBody = true;\n\n @HostBinding('class.datepicker_open') showPicker: boolean;\n @HostBinding('class.datepicker') private readonly classDatepicker = true;\n @HostBinding('tabindex') private readonly tabindex = 0;\n\n datePickerModeEnum = DatePickerMode;\n\n locale: PickerLocaleModel;\n today: Date;\n\n displayMode: DatePickerMode = DatePickerMode.month;\n\n _value: Date | null = null;\n _currentMonth: number | null;\n _currentYear: number | null;\n\n get value(): any {\n return this._value;\n }\n\n set value(v: any) {\n if (v !== this._value) {\n this._value = v;\n this.onChange(v);\n }\n }\n\n get currentMonth(): number | null {\n return this._currentMonth;\n }\n\n set currentMonth(v: number | null) {\n if (v === null || v === undefined || v < 0 || v > 11) {\n return;\n }\n if (v !== this._currentMonth) {\n this._currentMonth = v;\n }\n }\n\n get currentYear(): number | null {\n return this._currentYear;\n }\n\n set currentYear(v: number | null) {\n if (v !== this._currentYear) {\n this._currentYear = v;\n }\n }\n\n private _alive = true;\n\n constructor(\n public localeService: PickerLocaleService,\n private _cdr: ChangeDetectorRef\n ) {\n localeService.locale\n .pipe(takeWhile((_) => this._alive))\n .subscribe((locale: PickerLocaleModel) => {\n this.locale = locale;\n });\n this.setDefaults();\n }\n\n writeValue(value: any) {\n this._value = value;\n this.initPicker(value);\n }\n\n initPicker(date: Date) {\n if (!date || !(date instanceof Date)) {\n this.setDefaults();\n } else {\n this.currentMonth = date.getMonth();\n this.currentYear = date.getFullYear();\n }\n this._cdr.markForCheck();\n }\n\n setDefaults() {\n this.today = new Date();\n this.currentMonth = null;\n this.currentYear = null;\n }\n\n clearPicker() {\n this.value = null;\n }\n\n onChange = (_: any) => {};\n\n onTouched = () => {};\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngOnInit() {\n if (!this.minDate || !(this.minDate instanceof Date)) {\n this.minDate = new Date('1900-01-01T00:00:00Z');\n }\n if (!this.maxDate || !(this.maxDate instanceof Date)) {\n this.maxDate = new Date('2100-12-31T00:00:00Z');\n }\n this.initPicker(this.value);\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n isMinInvalid = (dat: Date): boolean => {\n if (!this.minDate || !(this.minDate instanceof Date) || !dat) {\n return false;\n }\n const min = new Date(\n this.minDate.getFullYear(),\n this.minDate.getMonth(),\n 1\n );\n return min.getTime() > dat.getTime();\n };\n\n isMaxInvalid = (dat: Date): boolean => {\n if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {\n return false;\n }\n const max = new Date(\n this.maxDate.getFullYear(),\n this.maxDate.getMonth(),\n 1\n );\n return max.getTime() < dat.getTime();\n };\n\n scrollMonth = (e: any) => {\n if (this.showPicker) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n if (!this._value) {\n return;\n }\n if (this.currentYear === null || this.currentYear === undefined) {\n this.currentYear = this.today.getFullYear();\n }\n if (this.currentMonth === null || this.currentMonth === undefined) {\n this.currentMonth = this.today.getMonth();\n }\n if (e.deltaY > 0) {\n if (this.currentMonth === 11) {\n this.currentMonth = 0;\n this.currentYear++;\n } else {\n this.currentMonth++;\n }\n } else {\n if (this.currentMonth === 0) {\n this.currentMonth = 11;\n this.currentYear--;\n } else {\n this.currentMonth--;\n }\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n scrollYear = (e: any) => {\n if (this.showPicker) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n if (!this._value) {\n return;\n }\n if (!this.currentYear) {\n this.currentYear = this.today.getFullYear();\n }\n if (!this.currentMonth) {\n this.currentMonth = this.today.getMonth();\n }\n if (e.deltaY > 0) {\n this.currentYear++;\n } else {\n this.currentYear--;\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n setMonth = (month: number) => {\n this.currentMonth = month;\n if (!this.currentYear) {\n this.currentYear = this.today.getFullYear();\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n setYear = (year: number) => {\n this.currentYear = year;\n if (!this.currentMonth) {\n this.currentMonth = this.today.getMonth();\n }\n const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {\n this.value = newDate;\n }\n };\n\n setToday = () => {\n const today = new Date();\n this.currentYear = today.getFullYear();\n this.currentMonth = today.getMonth();\n this.value = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);\n this.showPicker = false;\n };\n\n setMode(mode: DatePickerMode) {\n let result: DatePickerMode;\n if (mode === this.displayMode || mode === DatePickerMode.month) {\n result = DatePickerMode.month;\n } else {\n result = mode;\n }\n this.displayMode = result;\n }\n}\n","<teta-dropdown\n class=\"row row_auto\"\n [appendToBody]=\"appendToBody\"\n [(open)]=\"showPicker\"\n [disabled]=\"disabled\">\n <div tetaDropdownHead\n (wheel)=\"scrollMonth($event)\"\n class=\"datepicker-head font-body-3\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-2\"></teta-icon>\n <div class=\"row_auto\">\n <ng-container *ngIf=\"_value !==null && _value!==undefined\">\n {{locale.monthNames[_value.getMonth()]}} {{_value.getFullYear()}}\n </ng-container>\n </div>\n <teta-icon [name]=\"'closeBig'\" (click)=\"clearPicker()\" class=\"margin-left-2\"></teta-icon>\n </div>\n <div tetaDropdownContent class=\"datepicker-body scrollable padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.monthNames[_currentMonth || today.getMonth()]}}\n </button>\n <button teta-button\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{_currentYear || today.getFullYear()}}\n </button>\n </div>\n <button teta-button\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"_currentYear\"\n [today]=\"today\"\n [size]=\"8\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"_currentMonth\"\n [locale]=\"locale\"\n [currentYear]=\"_currentYear\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n </div>\n </div>\n</teta-dropdown>\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Inject,\n NgZone, OnDestroy,\n OnInit,\n Renderer2\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {DropdownBase} from './dropdown-base';\n\n@Directive({\n selector: '[tetaDropdown]'\n})\nexport class DropdownDirective extends DropdownBase implements OnInit, OnDestroy, AfterViewInit {\n constructor(protected override _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) protected override _document: any,\n protected override _elementRef: ElementRef<HTMLElement>,\n protected override _zone: NgZone,\n protected override _renderer: Renderer2) {\n super(_cdr, _document, _elementRef, _zone, _renderer);\n }\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n this._alive = false;\n }\n\n ngAfterViewInit(): void {\n if (this._content) {\n this._renderer.removeChild(this._content.nativeElement.parentNode, this._content.nativeElement);\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DropdownComponent} from './dropdown/dropdown.component';\nimport {DropdownHeadDirective} from './dropdown-head.directive';\nimport {DropdownContentDirective} from './dropdown-content.directive';\nimport {DropdownDirective} from './dropdown.directive';\n\n@NgModule({\n declarations: [\n DropdownComponent,\n DropdownHeadDirective,\n DropdownContentDirective,\n DropdownDirective\n ],\n exports: [\n DropdownComponent,\n DropdownHeadDirective,\n DropdownContentDirective,\n DropdownDirective\n ],\n imports: [\n CommonModule\n ]\n})\nexport class DropdownModule {\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input, NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport {DomUtil} from '../../common/util/dom-util';\n\n@Directive({\n selector: '[tetaClickOutside]',\n})\nexport class ClickOutsideDirective implements OnDestroy {\n @Output() clickOutside = new EventEmitter<MouseEvent>();\n @Input() rightClick = false;\n\n private _handleEvents = false;\n\n @Input()\n set tetaClickOutside(val: boolean) {\n this._handleEvents = val;\n if (this._handleEvents) {\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.addListener(this.rightClick);\n });\n });\n } else {\n this.removeListener();\n }\n }\n\n get tetaClickOutside(): boolean {\n return this._handleEvents;\n }\n\n constructor(private _elementRef: ElementRef, private _ngZone: NgZone) {\n }\n\n ngOnDestroy(): void {\n this.removeListener();\n }\n\n private addListener(handleRightClick: boolean): void {\n window.addEventListener('click', this.listener);\n console.log('handleRightClick', handleRightClick);\n if (handleRightClick) {\n window.addEventListener('contextmenu', this.listener);\n }\n }\n\n private removeListener(): void {\n window.removeEventListener('click', this.listener);\n window.removeEventListener('contextmenu', this.listener);\n }\n\n private listener = (click: MouseEvent) => {\n if (!this._handleEvents) {\n return;\n }\n const clickedInside = DomUtil.clickedInside(\n this._elementRef.nativeElement,\n click\n );\n if (!clickedInside) {\n console.log('clickedInside', clickedInside);\n this.clickOutside.emit(click);\n }\n };\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ClickOutsideDirective} from './click-outside.directive';\n\n@NgModule({\n declarations: [ClickOutsideDirective],\n exports: [ClickOutsideDirective],\n imports: [\n CommonModule\n ]\n})\nexport class ClickOutsideModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PrependZeroPipe } from './prepend-zero.pipe';\n\n@NgModule({\n declarations: [PrependZeroPipe],\n exports: [PrependZeroPipe],\n imports: [CommonModule],\n})\nexport class PrependZeroModule {}\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[tetaOnlyNumber]',\n})\nexport class OnlyNumberDirective {\n @Input() tetaOnlyNumber = true;\n @Input() allowDecimals = true;\n @Input() allowSign = true;\n @Input() decimalSeparator = '.';\n @Input() commaSeparator = ',';\n\n private _previousValue = '';\n\n private _integerUnsigned = '^[0-9]*$';\n private _integerSigned = '^-?[0-9]+$';\n private _decimalUnsigned = '^[0-9]+(.[0-9]+)?$';\n private _decimalSigned = '^-?[0-9]+(.[0-9]+)?$';\n\n private readonly _minusSign: string = '-';\n\n constructor(private _elementRef: ElementRef, private _control: NgControl) {\n }\n\n @HostListener('change', ['$event']) onChange(e: any) {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n this.validateValue(this._elementRef.nativeElement.value);\n }\n\n @HostListener('paste', ['$event']) onPaste(e: any) {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n this.validateValue(e.clipboardData.getData('text/plain'));\n e.preventDefault();\n }\n\n @HostListener('keydown', ['$event']) onKeyDown(e: KeyboardEvent) {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n const cursorPosition: number =\n (e.target as HTMLInputElement).selectionStart ?? 0;\n const originalValue: string = (e.target as HTMLInputElement).value;\n const controlOrCommand = e.ctrlKey === true || e.metaKey === true;\n const signExists = originalValue.includes('-');\n const separatorExists =\n originalValue.includes(this.decimalSeparator) ||\n originalValue.includes(this.commaSeparator);\n\n const allowedKeys = [\n 'Backspace',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n 'Escape',\n 'Tab',\n 'Home',\n 'End',\n ];\n\n const separatorIsCloseToSign = signExists && cursorPosition <= 1;\n if (this.allowDecimals && !separatorIsCloseToSign && !separatorExists) {\n // if (this.decimalSeparator === '.') {\n allowedKeys.push('.');\n // } else {\n // allowedKeys.push(',');\n // }\n }\n\n const firstCharacterIsSeparator =\n originalValue.charAt(0) !== this.decimalSeparator;\n if (\n this.allowSign &&\n !signExists &&\n firstCharacterIsSeparator &&\n cursorPosition === 0\n ) {\n allowedKeys.push('-');\n }\n\n if (\n allowedKeys.indexOf(e.key) !== -1 ||\n (e.code === 'KeyA' && controlOrCommand) ||\n (e.code === 'KeyC' && controlOrCommand) ||\n (e.code === 'KeyV' && controlOrCommand) ||\n (e.code === 'KeyZ' && controlOrCommand) ||\n (e.code === 'KeyX' && controlOrCommand)\n ) {\n return;\n }\n this._previousValue = originalValue;\n\n const isNumber = new RegExp(this._integerUnsigned).test(e.key);\n if (isNumber) {\n return;\n } else {\n if (e.key === ',' && originalValue.indexOf('.') < 0) {\n this._elementRef.nativeElement.value = originalValue + '.';\n }\n e.preventDefault();\n }\n }\n\n validateValue(value: string): void {\n if (this.tetaOnlyNumber === false) {\n return;\n }\n value = value.replace(',', '.').trim();\n let regex: string = this._integerUnsigned;\n if (!this.allowDecimals && !this.allowSign) {\n regex = this._integerUnsigned;\n }\n if (!this.allowDecimals && this.allowSign) {\n regex = this._integerSigned;\n }\n if (this.allowDecimals && !this.allowSign) {\n regex = this._decimalUnsigned;\n }\n if (this.allowDecimals && this.allowSign) {\n regex = this._decimalSigned;\n }\n\n let firstCharacter = value.charAt(0);\n if (firstCharacter === this.decimalSeparator) {\n value = 0 + value;\n }\n\n const lastCharacter = value.charAt(value.length - 1);\n if (lastCharacter === this.decimalSeparator) {\n value = value + 0;\n }\n\n let signedValue = false;\n if (firstCharacter === this._minusSign) {\n signedValue = true;\n value = value.substring(1);\n firstCharacter = value.charAt(0);\n }\n let secondChar = value.charAt(1);\n while (\n firstCharacter === '0' &&\n secondChar !== '' &&\n secondChar !== this.decimalSeparator\n ) {\n value = value.substring(1);\n firstCharacter = value.charAt(0);\n secondChar = value.charAt(1);\n }\n if (signedValue === true) {\n value = this._minusSign + value;\n }\n\n const valueParts = value.split(this.decimalSeparator);\n const naturalPart = valueParts?.[0];\n let decimalPart = valueParts?.[1];\n\n if (decimalPart != null && /^0+$/.test(decimalPart)) {\n decimalPart = '0';\n value = naturalPart + '.' + decimalPart;\n }\n if (value === '-0') {\n value = '0';\n }\n if (value === '-0.0') {\n value = '0.0';\n }\n const valid: boolean = new RegExp(regex).test(value.toString());\n this._control.control.setValue(valid ? value : this._previousValue ?? 0);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OnlyNumberDirective } from './only-number.directive';\n\n@NgModule({\n declarations: [OnlyNumberDirective],\n exports: [OnlyNumberDirective],\n imports: [CommonModule],\n})\nexport class OnlyNumberModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DatePickerComponent } from './date-picker/date-picker.component';\nimport { MonthPickerComponent } from './month-picker/month-picker.component';\nimport { DropdownModule } from '../dropdown/dropdown.module';\nimport { ClickOutsideModule } from '../../directive/click-outside/click-outside.module';\nimport { IconModule } from '../icon/icon.module';\nimport { DaySelectComponent } from './day-select/day-select.component';\nimport { YearSelectComponent } from './year-select/year-select.component';\nimport { MonthSelectComponent } from './month-select/month-select.component';\nimport { PrependZeroModule } from '../../pipe/prepend-zero/prepend-zero.module';\nimport { ButtonModule } from '../button/button.module';\nimport { OnlyNumberModule } from '../../directive/only-number/only-number.module';\nimport { FormsModule } from '@angular/forms';\nimport { TimePartControlComponent } from './time-part-control/time-part-control.component';\n\n@NgModule({\n declarations: [\n DatePickerComponent,\n MonthPickerComponent,\n DaySelectComponent,\n YearSelectComponent,\n MonthSelectComponent,\n TimePartControlComponent,\n ],\n exports: [DatePickerComponent, MonthPickerComponent],\n imports: [\n CommonModule,\n DropdownModule,\n ClickOutsideModule,\n FormsModule,\n IconModule,\n PrependZeroModule,\n ButtonModule,\n OnlyNumberModule,\n ],\n})\nexport class DatePickerModule {}\n","export class DatePeriod {\n start: Date;\n end: Date;\n\n constructor(start: Date, end: Date) {\n this.start = start;\n this.end = end;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-delimiter',\n templateUrl: './delimiter.component.html',\n styleUrls: ['./delimiter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DelimiterComponent implements OnInit {\n @Input() direction: 'vertical' | 'horizontal' = 'vertical';\n @Input() palette = 'text';\n @Input() height = 32;\n @Input() verticalMargin = 4;\n @Input() horizontalMargin = 8;\n\n @Input() class;\n\n @HostBinding('class')\n private get getClass(): string {\n return [\n this.class,\n 'delimiter',\n this.getBgColor(),\n this.direction === 'horizontal' ? 'display-flex' : 'display-inline-flex',\n ].join(' ');\n }\n\n @HostBinding('style.height')\n private get getHeight(): string {\n return this.direction === 'vertical' ? '' : '1px';\n }\n\n @HostBinding('style.width')\n private get getWidth(): string {\n return this.direction === 'horizontal' ? '' : '1px';\n }\n\n @HostBinding('style.margin')\n private get getMargin(): string {\n return this.direction === 'horizontal' ? '8px' : '0';\n }\n\n constructor() {}\n\n getBgColor() {\n return this.palette ? `bg-${this.palette}-10` : '';\n }\n\n ngOnInit(): void {}\n}\n","","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DelimiterComponent} from './delimiter/delimiter.component';\n\n@NgModule({\n declarations: [DelimiterComponent],\n exports: [DelimiterComponent],\n imports: [\n CommonModule\n ]\n})\nexport class DelimiterModule {\n}\n","export class ArrayUtil {\n public static asArray<T>(value: T | T[]): T[] {\n if (value === null || value === undefined) {\n return [];\n }\n if (value instanceof Array) {\n return value;\n }\n return [value];\n }\n\n public static flatten(\n data: any[],\n children?: string | ((item: any) => any[]),\n onlyLeafs?: boolean\n ): any[] {\n const result: any[] = [];\n data.forEach((child) => {\n let childItems: any[];\n if (children) {\n if (typeof children === 'string') {\n childItems = child[children];\n }\n if (typeof children === 'function') {\n childItems = children(child);\n }\n } else {\n childItems = child.children;\n }\n if (\n childItems !== null &&\n childItems !== undefined &&\n childItems.length > 0\n ) {\n if (!onlyLeafs) {\n result.push(child);\n }\n result.push(...ArrayUtil.flatten(childItems, children, onlyLeafs));\n } else {\n result.push(child);\n }\n });\n return result;\n }\n\n static findRecursive(\n tree: any[],\n comparer: (iterableNode: any) => boolean,\n children: string = 'children'\n ): any {\n const found = tree.find((x) => comparer(x));\n if (found !== null && found !== undefined) {\n return found;\n }\n for (let i = 0, l = tree.length; i < l; i++) {\n const item = tree[i];\n if (item[children] && item[children].length) {\n const res = ArrayUtil.findRecursive(item[children], comparer);\n if (res !== null && res !== undefined) {\n return res;\n }\n }\n }\n return null;\n }\n\n static filterRecursive(\n array: any[],\n filter: (item: any) => boolean,\n children: string = 'children',\n keepChildren: boolean = true\n ): any {\n const result = [];\n if (array && array.length) {\n for (const item of array) {\n const resultItem = Object.assign({}, item);\n if (filter(resultItem)) {\n result.push(resultItem);\n if (!keepChildren) {\n resultItem[children] = [];\n break;\n }\n } else if (item[children] && item[children].length > 0) {\n resultItem[children] = [];\n const found = ArrayUtil.filterRecursive(\n item[children],\n filter,\n children,\n keepChildren\n );\n if (found?.length > 0) {\n resultItem[children] = found;\n result.push(resultItem);\n }\n }\n }\n }\n return result;\n }\n\n static distinct<T>(array: T[], comparator: (item: T) => any): T[] {\n const result: T[] = [];\n if (array && array.length) {\n for (const item of array) {\n const found = result.find((_) => comparator(_) === comparator(item));\n if (!found) {\n result.push(item);\n }\n }\n }\n return result;\n }\n\n static findParents(tree: any[], item: any) {\n if (tree.indexOf(item) >= 0) {\n return tree;\n }\n if (Array.isArray(tree)) {\n for (const treeNode of tree) {\n const childResult = this.findParents(treeNode.children, item);\n if (Array.isArray(childResult)) {\n return [treeNode].concat(childResult);\n }\n }\n }\n }\n\n static moveItem(list: any[], sourceIndex, targetIndex) {\n const res = [...list];\n const item = list[sourceIndex];\n if (targetIndex > sourceIndex) {\n res.splice(targetIndex, 0, item);\n res.splice(sourceIndex, 1);\n } else {\n res.splice(sourceIndex, 1);\n res.splice(targetIndex, 0, item);\n }\n return res;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ArrayUtil } from '../../../common/util/array-util';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-popup-content',\n templateUrl: './popup-content.component.html',\n styleUrls: ['./popup-content.component.scss'],\n animations: [\n trigger('dialog', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(200, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(200, style({ opacity: '0' }))]),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopupContentComponent implements OnInit, OnDestroy {\n @HostBinding('@dialog') dialog = true;\n\n @Input() className: string | string[];\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [...ArrayUtil.asArray(this.className), 'popup-content'];\n return result.join(' ');\n }\n\n constructor() {}\n\n addClass(className: string) {\n if (this.className) {\n if (typeof this.className === 'string') {\n this.className = className;\n }\n if (this.className instanceof Array) {\n this.className.push(className);\n }\n } else {\n this.className = [className];\n }\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {}\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PopupContentComponent} from './popup-content/popup-content.component';\n\n@NgModule({\n declarations: [PopupContentComponent],\n exports: [PopupContentComponent],\n imports: [\n CommonModule\n ]\n})\nexport class DynamicComponentModule {\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[tetaExpandPanelContent]',\n})\nexport class ExpandPanelContentDirective {\n constructor(public template: TemplateRef<any>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[tetaExpandPanelHead]',\n})\nexport class ExpandPanelHeadDirective {\n constructor(public template: TemplateRef<any>) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToolbarComponent implements OnInit {\n @Input() palette: string;\n @Input() class;\n\n @HostBinding('class')\n private get getClass() {\n const result = [this.class, 'toolbar', 'toolbar_panel'];\n if (this.palette) {\n result.push(`toolbar-${this.palette}`);\n }\n return result.join(' ');\n }\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ExpandPanelContentDirective } from '../expand-panel-content.directive';\nimport { ExpandPanelHeadDirective } from '../expand-panel-head.directive';\n\n@Component({\n selector: 'teta-expand-panel',\n templateUrl: './expand-panel.component.html',\n styleUrls: ['./expand-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExpandPanelComponent implements OnInit {\n @ContentChild(ExpandPanelContentDirective, { static: false })\n content: ExpandPanelContentDirective;\n\n @ContentChild(ExpandPanelHeadDirective, { static: false })\n head: ExpandPanelHeadDirective;\n\n @Input() placeholder: string;\n @Input() open = true;\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Input() cookieName: string;\n @Input() direction: 'left' | 'right' = 'left';\n\n constructor() {}\n\n openPanel() {\n this.open = true;\n this.openChange.emit(true);\n this.saveCookie();\n }\n\n closePanel() {\n this.open = false;\n this.openChange.emit(false);\n this.saveCookie();\n }\n\n ngOnInit(): void {\n this.restoreCookie();\n }\n\n private saveCookie() {\n if (!this.cookieName?.length) {\n return;\n }\n localStorage.setItem(this.cookieName, JSON.stringify(this.open));\n }\n\n private restoreCookie() {\n if (!this.cookieName?.length) {\n return;\n }\n const cookie = localStorage.getItem(this.cookieName);\n this.open = cookie != null ? JSON.parse(cookie) : true;\n this.openChange.emit(this.open);\n }\n}\n","<ng-container *ngIf=\"open\">\n <teta-toolbar\n style=\"display: flex\"\n [style.justifyContent]=\"direction === 'right' ? 'space-between' : 'unset'\"\n [style.flexDirection]=\"direction === 'right' ? 'row-reverse' : 'row'\">\n <button\n teta-button\n [square]=\"true\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"closePanel()\"\n >\n <teta-icon [name]=\"direction === 'right' ? 'arrowRight' : 'arrowLeft'\"></teta-icon>\n </button>\n <span class=\"font-title-2\" style=\"display: contents\"><ng-container *ngTemplateOutlet=\"head?.template\"></ng-container></span>\n </teta-toolbar>\n <ng-container *ngTemplateOutlet=\"content?.template\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"!open\">\n <div class=\"width-10 overflow-hidden\" style=\"height: 100%;\">\n <button\n teta-button\n style=\"\n transform-origin: 0 0;\n transform: rotate(-90deg) translateX(-100%);\n margin: 8px;\n \"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"openPanel()\"\n >\n <div class=\"font-button-2 nowrap\">{{ placeholder }}</div>\n <teta-icon [name]=\"direction === 'right' ? 'arrowUp' : 'arrowDown'\"></teta-icon>\n </button>\n </div>\n</ng-container>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ToolbarComponent} from './toolbar/toolbar.component';\n\n@NgModule({\n declarations: [ToolbarComponent],\n exports: [ToolbarComponent],\n imports: [\n CommonModule\n ]\n})\nexport class ToolbarModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExpandPanelComponent } from './expand-panel/expand-panel.component';\nimport { DelimiterModule } from '../delimiter/delimiter.module';\nimport { ToolbarModule } from '../toolbar/toolbar.module';\nimport { ButtonModule } from '../button/button.module';\nimport { IconModule } from '../icon/icon.module';\nimport { ExpandPanelHeadDirective } from './expand-panel-head.directive';\nimport { ExpandPanelContentDirective } from './expand-panel-content.directive';\n\n@NgModule({\n declarations: [\n ExpandPanelComponent,\n ExpandPanelHeadDirective,\n ExpandPanelContentDirective,\n ],\n exports: [\n ExpandPanelComponent,\n ExpandPanelHeadDirective,\n ExpandPanelContentDirective,\n ],\n imports: [\n CommonModule,\n DelimiterModule,\n ToolbarModule,\n ButtonModule,\n IconModule,\n ],\n})\nexport class ExpandPanelModule {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-file-upload-area',\n templateUrl: './file-upload-area.component.html',\n styleUrls: ['./file-upload-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadAreaComponent implements OnInit {\n @HostBinding('class.file-upload') fileUpload = true;\n\n @HostBinding('class.file-upload_active')\n get fileUploadActive() {\n return this._asActive;\n }\n\n @Input() multiple = true;\n @Input() disabled: boolean;\n @Input() accept: string[];\n\n @Output() upload: EventEmitter<FileList> = new EventEmitter();\n\n @ViewChild('fileUpload', { static: false }) input: ElementRef;\n\n files: any;\n\n private _asActive: boolean;\n\n constructor() {}\n\n @HostListener('dragenter', ['$event']) dragEnter(event) {\n this.preventDefaults(event);\n this._asActive = true;\n }\n\n @HostListener('dragover', ['$event']) dragOver(event) {\n this.preventDefaults(event);\n this._asActive = true;\n }\n\n @HostListener('dragleave', ['$event']) dragLeave(event) {\n this.preventDefaults(event);\n this._asActive = false;\n }\n\n @HostListener('drop', ['$event']) drop(event) {\n this.upload.emit(event.dataTransfer.files);\n this.preventDefaults(event);\n }\n\n ngOnInit() {}\n\n fileChanged(event: any) {\n if (event.target && event.target.files) {\n this.upload.emit(event.target.files);\n this.input.nativeElement.value = null;\n }\n }\n\n private preventDefaults(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","<ng-content></ng-content>\n<label class=\"file-upload-label\">\n <input #fileUpload\n id=\"upload-input\"\n class=\"file-upload-input\"\n type=\"file\"\n name=\"fileUpload\"\n [attr.accept]=\"accept\"\n [attr.multiple]=\"multiple ? 'multiple' : null\"\n [disabled]=\"disabled\"\n (change)=\"fileChanged($event)\"/>\n <teta-button [palette]=\"'primary'\" type=\"button\">\n <teta-icon [name]=\"'upload'\"></teta-icon>\n Загрузить\n </teta-button>\n</label>\n","import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core';\n\n@Component({\n selector: 'teta-file-item',\n templateUrl: './file-item.component.html',\n styleUrls: ['./file-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileItemComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>file-item works!</p>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FileUploadAreaComponent } from './file-upload-area/file-upload-area.component';\nimport { FileItemComponent } from './file-item/file-item.component';\nimport { ButtonModule } from '../button/button.module';\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [FileUploadAreaComponent, FileItemComponent],\n exports: [FileUploadAreaComponent, FileItemComponent],\n imports: [CommonModule, ButtonModule, IconModule],\n})\nexport class FileUploadModule {}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-filter-panel',\n templateUrl: './filter-panel.component.html',\n styleUrls: ['./filter-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterPanelComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>filter-panel works!</p>\n","import {IFilter} from '../contarct/i-filter';\n\nexport class FilterBase implements IFilter {\n field: string;\n name: string;\n value: any;\n\n constructor(options?: {\n field: string;\n name: string;\n }) {\n if (options) {\n this.field = options.field;\n this.name = options.name;\n }\n }\n}\n","import {FilterBase} from '../base/filter-base';\nimport {NumericFilterValue} from './numeric-filter-value';\n\nexport class NumericFilter extends FilterBase {\n override value: NumericFilterValue;\n strict: boolean;\n\n constructor(options?: {\n value?: NumericFilterValue;\n strict?: boolean;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = options.value || this.value;\n this.strict = options.strict || false;\n }\n }\n}\n","import {FilterState} from '../contarct/filter-state';\nimport {EventEmitter} from '@angular/core';\nimport {FilterItem} from '../contarct/filter-item';\nimport {IFilter} from '../contarct/i-filter';\nimport {IIdName} from '../../../common/contract/i-id-name';\n\nexport abstract class FilterComponentBase {\n abstract column: FilterItem;\n abstract state: FilterState;\n abstract filterOptions: IIdName<any>[];\n\n abstract filterChanged: EventEmitter<IFilter>;\n}\n","export class NumericFilterValue {\n /**\n * Значение должно быть меньше чем\n */\n lessThan: number | null | undefined;\n /**\n * Значение должно быть больше чем\n */\n greaterThan: number | null | undefined;\n /**\n * Значение должно быть равно\n */\n equalsTo: number | null | undefined;\n\n constructor(options?: {\n lessThan?: number | null | undefined;\n greaterThan?: number | null | undefined;\n equalsTo?: number | null | undefined;\n }) {\n if (options) {\n this.lessThan = options.lessThan;\n this.greaterThan = options.greaterThan;\n this.equalsTo = options.equalsTo;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputComponent implements OnInit {\n @Input() label: string;\n\n @Input()\n @HostBinding('class.row')\n horizontal: boolean;\n\n @Input()\n required = false;\n\n @HostBinding('class.column')\n get column() {\n return !this.horizontal;\n }\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<div class=\"font-caption color-text-90 align-center row nowrap overflow-hidden text-overflow-ellipsis\"\n [class.row_6]=\"horizontal\"\n [class.text-field_required]=\"required\"\n *ngIf=\"label?.length > 0\">\n {{label}}\n</div>\n<div class=\"input-container\" [class.row_6]=\"horizontal\">\n <ng-content></ng-content>\n <div class=\"input-message font-error-message\">\n <ng-content select=\"message\"></ng-content>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { NumericFilter } from '../contarct/numeric-filter';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterItem } from '../contarct/filter-item';\nimport { NumericFilterValue } from '../contarct/numeric-filter-value';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-numeric-filter',\n templateUrl: './numeric-filter.component.html',\n styleUrls: ['./numeric-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumericFilterComponent\n extends FilterComponentBase\n implements OnInit\n{\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: NumericFilter;\n\n private state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n this.filter = this.getFilter();\n }\n\n private getFilter(): NumericFilter {\n let filter = this.state.numericFilters?.find(\n (f) => f.field === this.column.filterField\n );\n if (filter === null || filter === undefined) {\n filter = this.state.addNumericFilter(\n new NumericFilter({\n value: new NumericFilterValue(),\n field: this.column.filterField,\n name: this.column.name,\n strict: true,\n })\n );\n }\n return filter;\n }\n}\n","<div class=\"form-row padding-3\">\n <teta-input [label]=\"'От'\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [ngModel]=\"filter.value?.greaterThan\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"/>\n </teta-input>\n <teta-input [label]=\"'До'\">\n <input class=\"input\" type=\"text\"\n style=\"width: 110px\"\n [ngModel]=\"filter.value?.lessThan\"\n (ngModelChange)=\"filter.value.lessThan=$event\"/>\n </teta-input>\n</div>\n","export enum StringFilterType {\n /**\n * Строгое совпадение\n */\n Equals = 1,\n /**\n * Начинается с указанной подстроки\n */\n StartsWith = 2,\n /**\n * Оканчивается указанной подстрокой\n */\n EndsWith = 3,\n /**\n * Содержит указанную подстроку\n */\n Contains = 4,\n}\n","import {FilterBase} from '../base/filter-base';\nimport {StringFilterType} from '../enum/string-filter-type.enum';\n\nexport class StringFilter extends FilterBase {\n override value: string;\n type: StringFilterType;\n\n\n constructor(options?: {\n value?: string;\n type?: StringFilterType;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = options.value || this.value;\n this.type = options.type || StringFilterType.Contains;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { StringFilter } from '../contarct/string-filter';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-string-filter',\n templateUrl: './string-filter.component.html',\n styleUrls: ['./string-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StringFilterComponent\n extends FilterComponentBase\n implements OnInit\n{\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: StringFilter;\n state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {}\n\n setFilter() {\n this.filterChanged.emit(this.filter);\n }\n\n private getFilter(): StringFilter {\n let filter = this.state.stringFilters.find(\n (f) => f.field === this.column.filterField\n );\n if (!filter) {\n filter = this.state.addStringFilter(\n new StringFilter({\n value: '',\n field: this.column.filterField,\n type: this.column.stringFilterType,\n name: this.column.name,\n })\n );\n }\n filter.type = this.column.stringFilterType;\n return filter;\n }\n}\n","<div class=\"padding-3\">\n <teta-input [label]=\"'Поиск'\">\n <input type=\"text\" class=\"input\" [(ngModel)]=\"filter.value\" (blur)=\"setFilter()\" />\n </teta-input>\n</div>\n\n","export enum ListFilterType {\n None,\n Excluded\n}\n","import {FilterBase} from '../base/filter-base';\nimport {ListFilterType} from '../enum/list-filter-type.enum';\n\nexport class ListFilter extends FilterBase {\n override value: any[];\n type: ListFilterType;\n\n constructor(options?: {\n value?: any[];\n type?: ListFilterType;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = options.value || this.value;\n this.type = options.type || ListFilterType.None;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n ViewChild,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\n@Component({\n selector: 'teta-text-field',\n templateUrl: './text-field.component.html',\n styleUrls: ['./text-field.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextFieldComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextFieldComponent implements ControlValueAccessor {\n @Input() placeholder = '';\n @Input() leftIconName?: string;\n @HostBinding('class.text-field_disabled')\n @Input()\n disabled = false;\n @Input() onlyNumber = false;\n @HostBinding('class.text-field_invalid')\n @Input()\n invalid: boolean;\n @ViewChild('input', {static: false}) input: ElementRef;\n @HostBinding('attr.tabindex')\n private readonly tabindex = 0;\n @HostBinding('class.text-field')\n private readonly textField = true;\n value = '';\n\n constructor(private _cdr: ChangeDetectorRef) {\n }\n\n @HostListener('click') onFocus() {\n this.input.nativeElement.focus();\n }\n\n keyPress(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.keyCode === 13) {\n this.input.nativeElement.blur();\n }\n }\n\n emitBlur() {\n this.onTouched();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.detectChanges();\n }\n\n writeValue(input: string): void {\n this.value = input;\n this._cdr.detectChanges();\n }\n\n onChange(input: string): void {\n }\n\n onTouched(): void {\n }\n}\n","<teta-icon *ngIf=\"leftIconName\" [name]=\"leftIconName\"></teta-icon>\n<input\n #input\n [ngModel]=\"value\"\n [tetaOnlyNumber]=\"onlyNumber\"\n (ngModelChange)=\"value = $event; onChange($event);\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n (blur)=\"emitBlur()\"\n (keydown)=\"keyPress($event)\"\n autocomplete=\"off\"\n type=\"text\"\n/>\n<teta-icon\n *ngIf=\"value && !disabled\"\n class=\"close-icon\"\n [name]=\"'closeCircle'\"\n (click)=\"value = ''; onChange('');\"\n></teta-icon>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { ListFilter } from '../contarct/list-filter';\nimport { ListFilterType } from '../enum/list-filter-type.enum';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-list-filter',\n templateUrl: './list-filter.component.html',\n styleUrls: ['./list-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListFilterComponent extends FilterComponentBase implements OnInit {\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: ListFilter;\n state$: FilterState;\n search = '';\n\n get visibleOptions() {\n return this.filterOptions?.filter(\n (_) => _.name?.toString().indexOf(this.search) >= 0\n );\n }\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n excluded: boolean;\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {}\n\n all() {\n if (!this.filter?.value || this.filter?.value?.length === 0) {\n return false;\n }\n const notSet = this.visibleOptions?.find(\n (_) => this.filter?.value?.indexOf(_.id) < 0\n );\n if (!notSet) {\n return true;\n }\n return null;\n }\n\n setAll(value: boolean) {\n if (value) {\n this.setFilter(this.visibleOptions?.map((_) => _.id));\n } else {\n this.setFilter([]);\n }\n }\n\n setType() {\n this.excluded = !this.excluded;\n this.filter.type = this.excluded\n ? ListFilterType.Excluded\n : ListFilterType.None;\n }\n\n setFilter(value: any[]) {\n this.filter.value = value;\n this.filterChanged.emit(this.filter);\n }\n\n private getFilter(): ListFilter {\n let filter = this.state.listFilters?.find(\n (f) => f.field === this.column.filterField\n );\n if (!filter) {\n filter = this.state.addListFilter(\n new ListFilter({\n field: this.column.filterField,\n value: [],\n type: this.column.listFilterType,\n name: this.column.name,\n })\n );\n }\n this.excluded = filter.type === ListFilterType.Excluded;\n return filter;\n }\n}\n","<div class=\"padding-2\">\n <teta-text-field [(ngModel)]=\"search\"></teta-text-field>\n</div>\n<div class=\"list padding-v-2 scrollable\">\n <div class=\"list-item\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"all()\"\n (ngModelChange)=\"setAll($event)\">Все\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item\" *ngFor=\"let option of visibleOptions\">\n <teta-checkbox [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [value]=\"option.id\"\n [binary]=\"false\">\n {{option.name}}\n </teta-checkbox>\n </div>\n</div>\n","export class DateFilterValue {\n /**\n * Значение должно быть меньше чем\n */\n lessThan: Date | undefined | null;\n /**\n * Значение должно быть больше чем\n */\n greaterThan: Date | undefined | null;\n\n constructor(options?: {\n lessThan?: Date | undefined | null;\n greaterThan?: Date | undefined | null;\n }) {\n if (options) {\n this.lessThan = (typeof options.lessThan === 'string') ? new Date(options.lessThan) : options.lessThan;\n this.greaterThan = (typeof options.greaterThan === 'string') ? new Date(options.greaterThan) : options.greaterThan;\n }\n }\n}\n","import {FilterBase} from '../base/filter-base';\nimport {DateFilterValue} from './date-filter-value';\n\nexport class DateFilter extends FilterBase {\n override value: DateFilterValue;\n\n constructor(options?: {\n value?: DateFilterValue;\n field: string;\n name: string;\n }) {\n super(options);\n if (options) {\n this.value = new DateFilterValue(options.value);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { DateFilterValue } from '../contarct/date-filter-value';\nimport { DateFilter } from '../contarct/date-filter';\nimport { FilterState } from '../contarct/filter-state';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-date-filter',\n templateUrl: './date-filter.component.html',\n styleUrls: ['./date-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateFilterComponent extends FilterComponentBase implements OnInit {\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: DateFilter;\n state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n this.changeDetector.markForCheck();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {\n this.filter = this.getFilter();\n }\n\n private getFilter(): DateFilter {\n let filter = this.state.dateFilters.find(\n (f) => f.field === this.column.filterField\n );\n if (filter === null || filter === undefined) {\n filter = this.state.addDateFilter(\n new DateFilter({\n value: new DateFilterValue(),\n field: this.column.filterField,\n name: this.column.name,\n })\n );\n }\n return filter;\n }\n}\n","<div class=\"form-row padding-3\">\n <teta-input [label]=\"'От'\">\n <teta-date-picker style=\"width: 110px\"\n [ngModel]=\"filter.value?.greaterThan\"\n [appendToBody]=\"true\"\n (ngModelChange)=\"filter.value.greaterThan=$event\"></teta-date-picker>\n </teta-input>\n <teta-input [label]=\"'До'\">\n <teta-date-picker style=\"width: 110px\"\n [ngModel]=\"filter.value?.lessThan\"\n [appendToBody]=\"true\"\n (ngModelChange)=\"filter.value.lessThan=$event\"></teta-date-picker>\n </teta-input>\n</div>\n","export enum FilterType {\n string,\n number,\n date,\n list,\n boolean,\n custom,\n}\n","import { FilterBase } from '../base/filter-base';\n\nexport class BooleanFilter extends FilterBase {\n override value: boolean;\n\n constructor(options?: { value?: boolean; field: string; name: string }) {\n super(options);\n if (options) {\n this.value = options.value;\n }\n }\n}\n","import {\n Component,\n OnInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Input,\n forwardRef,\n HostBinding,\n HostListener,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { RadioButtonComponent } from '../radio-button/radio-button.component';\n\ntype ButtonOrNullOrUndefined = RadioButtonComponent | undefined | null;\n\n@Component({\n selector: 'teta-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioComponent implements OnInit, ControlValueAccessor {\n @HostBinding('tabindex') tabindex = 0;\n @HostBinding('class.radio') radioClass = true;\n\n /** Менять значение при изменении выбранного */\n @Input()\n @HostBinding('class.radio_inline')\n inline: boolean;\n\n @Input() checkChangeSelected = true;\n\n @Input() set disabled(val: boolean) {\n this.disabled$ = val;\n this.buttons$.forEach((b) => (b.disabled = this.disabled));\n }\n\n get disabled() {\n return this.disabled$;\n }\n\n @Input() get value(): any {\n if (this.checkedButton$) {\n return this.checkedButton$.value;\n }\n return null;\n }\n\n set value(val: any) {\n this.writeValue(val);\n }\n\n private buttons$: RadioButtonComponent[] = [];\n private checkedButton$: ButtonOrNullOrUndefined;\n private selectedButton$: ButtonOrNullOrUndefined;\n private disabled$ = false;\n\n constructor(private _cdr: ChangeDetectorRef) {}\n\n @HostListener('focus', ['$event'])\n focusHandler(event: FocusEvent) {\n this.selectFirst();\n }\n\n @HostListener('focusout', ['$event'])\n focusoutHandler(event: FocusEvent) {\n if (this.selectedButton$) {\n this.selectedButton$.selected = false;\n this.selectedButton$ = null;\n }\n }\n\n @HostListener('keydown', ['$event'])\n keyEvent(event: KeyboardEvent) {\n const key = event.code || event.key;\n switch (key) {\n case 'Space':\n case 'Enter':\n case 'Spacebar':\n this.checkSelected();\n break;\n\n case 'ArrowUp':\n case 'Up':\n case 'ArrowLeft':\n case 'Left':\n this.selectPrevious();\n break;\n\n case 'ArrowDown':\n case 'Down':\n case 'ArrowRight':\n case 'Right':\n this.selectNext();\n break;\n default:\n return;\n }\n\n event.cancelBubble = true;\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n return false;\n }\n\n ngOnInit() {}\n\n selectFirst() {\n if (!this.selectedButton$) {\n if (this.checkedButton$) {\n this.selectedButton$ = this.checkedButton$;\n this.selectedButton$.selected = true;\n return true;\n }\n\n for (const btn of this.buttons$) {\n if (!btn.disabled) {\n this.selectedButton$ = btn;\n this.selectedButton$.selected = true;\n return true;\n }\n }\n }\n return false;\n }\n _setChecked(btn: RadioButtonComponent) {\n if (this.checkedButton$) {\n this.checkedButton$.checked = false;\n }\n this.checkedButton$ = btn;\n this.checkedButton$.checked = true;\n if (this.selectedButton$) {\n this.selectedButton$.selected = false;\n }\n this.selectedButton$ = btn;\n this.selectedButton$.selected = true;\n this._onChange(this.value);\n this._cdr.markForCheck();\n }\n\n _addButton(btn: RadioButtonComponent) {\n if (this.disabled) {\n btn.disabled = this.disabled;\n }\n return this.buttons$.push(btn) - 1;\n }\n\n _removeButton(btn: RadioButtonComponent) {\n const index = this.buttons$.indexOf(btn);\n if (index > -1) {\n this.buttons$.splice(index, 1);\n }\n }\n\n /** Writes a new value to the element. */\n writeValue(obj: any): void {\n if (this.checkedButton$) {\n this.checkedButton$.checked = false;\n }\n\n this.checkedButton$ = this.buttons$.find((b) => b.value === obj);\n if (this.checkedButton$) {\n this.checkedButton$.checked = true;\n }\n this._cdr.markForCheck();\n }\n\n /** model callback вызовется когда модель измениться из ui */\n _onChange: (value: any) => void = () => {};\n\n /** Registers a callback function that should be called when the control's value changes in the UI */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n _onTouched = () => {};\n\n /** Registers a callback function that should be called when the control receives a blur event. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /** This function is called by the forms API when the control status changes to or from \"DISABLED\". */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n\n private selectBtn(btn: RadioButtonComponent) {\n if (this.selectedButton$) {\n this.selectedButton$.selected = false;\n }\n this.selectedButton$ = btn;\n this.selectedButton$.selected = true;\n if (this.checkChangeSelected) {\n this.checkSelected();\n }\n this._cdr.markForCheck();\n }\n\n private selectNext() {\n if (this.selectFirst()) {\n return;\n }\n\n const length = this.buttons$.length;\n let newIndex = this.selectedButton$\n ? this.buttons$.indexOf(this.selectedButton$)\n : 0;\n let firstCycle = true;\n do {\n newIndex++;\n if (firstCycle && newIndex === length) {\n newIndex = 0;\n firstCycle = false;\n }\n const btn = this.buttons$[newIndex];\n if (btn && !btn.disabled) {\n this.selectBtn(btn);\n return;\n }\n } while (newIndex < length);\n }\n\n private selectPrevious() {\n if (this.selectFirst()) {\n return;\n }\n\n let newIndex = this.selectedButton$\n ? this.buttons$.indexOf(this.selectedButton$)\n : 0;\n let firstCycle = true;\n do {\n newIndex--;\n if (firstCycle && newIndex === -1) {\n newIndex = this.buttons$.length - 1;\n firstCycle = false;\n }\n const btn = this.buttons$[newIndex];\n if (btn && !btn.disabled) {\n this.selectBtn(btn);\n return;\n }\n } while (newIndex >= 0);\n }\n\n private checkSelected() {\n if (this.selectFirst()) {\n return;\n }\n if (this.selectedButton$) {\n this._setChecked(this.selectedButton$);\n }\n }\n}\n","<ng-content></ng-content>","import {\n Component,\n OnInit,\n Host,\n OnDestroy,\n ViewContainerRef,\n Input,\n HostListener,\n HostBinding,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { RadioComponent } from '../radio/radio.component';\n\n@Component({\n selector: 'teta-radio-button',\n templateUrl: './radio-button.component.html',\n styleUrls: ['./radio-button.component.scss'],\n encapsulation: ViewEncapsulation.None,\n // changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioButtonComponent implements OnInit, OnDestroy {\n @HostBinding('class.radio-button')\n radioButton = true;\n\n @HostBinding('class.radio-button-selected')\n selected: boolean;\n\n @Input()\n @HostBinding('class.radio-button-checked')\n checked: boolean;\n\n @Input()\n @HostBinding('class.radio-button_disabled')\n disabled: boolean;\n\n @Input() set value(val: any) {\n this._value = val;\n }\n\n get value() {\n if (this._value === undefined) {\n if (this.container.element.nativeElement instanceof HTMLElement) {\n return this.container.element.nativeElement.innerText;\n }\n }\n return this._value;\n }\n\n private _value: any;\n\n constructor(\n private container: ViewContainerRef,\n @Host() public radio: RadioComponent\n ) {}\n\n @HostListener('click')\n hostClick() {\n if (!this.disabled) {\n this.radio._setChecked(this);\n }\n }\n\n ngOnInit() {\n this.radio._addButton(this);\n }\n\n ngOnDestroy(): void {\n this.radio._removeButton(this);\n }\n}\n","<div class=\"radio-button-icon\">\n <div *ngIf=\"checked\" class=\"radio-button-small-icon\"></div>\n</div>\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FilterComponentBase } from '../base/filter-component-base';\nimport { FilterItem } from '../contarct/filter-item';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { FilterBase } from '../base/filter-base';\nimport { FilterState } from '../contarct/filter-state';\nimport { BooleanFilter } from '../contarct/boolean-filter';\n\n@Component({\n selector: 'teta-boolean-filter',\n templateUrl: './boolean-filter.component.html',\n styleUrls: ['./boolean-filter.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BooleanFilterComponent\n extends FilterComponentBase\n implements OnInit\n{\n @Input() column: FilterItem;\n @Input() filterOptions: IIdName<any>[] = [];\n @Output() filterChanged: EventEmitter<FilterBase> =\n new EventEmitter<FilterBase>();\n\n filter: BooleanFilter;\n state$: FilterState;\n\n @Input()\n set state(val: FilterState) {\n this.state$ = val;\n this.filter = this.getFilter();\n this.changeDetector.detectChanges();\n }\n\n get state() {\n return this.state$;\n }\n\n constructor(private changeDetector: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit() {}\n\n setFilter() {\n this.filterChanged.emit(this.filter);\n }\n\n private getFilter(): BooleanFilter {\n let filter = this.state.booleanFilters.find(\n (f) => f.field === this.column.filterField\n );\n if (!filter) {\n filter = this.state.addBooleanFilter(\n new BooleanFilter({\n value: null,\n field: this.column.filterField,\n name: this.column.name,\n })\n );\n }\n return filter;\n }\n}\n","<div class=\"padding-3\">\n <teta-radio [ngModel]=\"filter.value\" (ngModelChange)=\"setFilter()\">\n <teta-radio-button [value]=\"null\">null</teta-radio-button>\n <teta-radio-button [value]=\"true\">true</teta-radio-button>\n <teta-radio-button [value]=\"false\">false</teta-radio-button>\n </teta-radio>\n</div>\n","import { FilterType } from '../enum/filter-type.enum';\nimport { Type } from '@angular/core';\nimport { NumericFilterComponent } from '../numeric-filter/numeric-filter.component';\nimport { DateFilterComponent } from '../date-filter/date-filter.component';\nimport { ListFilterComponent } from '../list-filter/list-filter.component';\nimport { StringFilterComponent } from '../string-filter/string-filter.component';\nimport { FilterItem } from './filter-item';\nimport { BooleanFilterComponent } from '../boolean-filter/boolean-filter.component';\n\nconst filterComponentsMap: Map<FilterType, Type<any>> = new Map<\n FilterType,\n Type<any>\n>()\n .set(FilterType.number, NumericFilterComponent)\n .set(FilterType.date, DateFilterComponent)\n .set(FilterType.list, ListFilterComponent)\n .set(FilterType.string, StringFilterComponent)\n .set(FilterType.boolean, BooleanFilterComponent)\n .set(FilterType.custom, StringFilterComponent);\n\nexport const getFilterComponent = (item: FilterItem): Type<any> =>\n filterComponentsMap.has(item.filterType)\n ? filterComponentsMap.get(item.filterType)\n : StringFilterComponent;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef,\n} from '@angular/core';\nimport {FilterState} from '../contarct/filter-state';\nimport {FilterItem} from '../contarct/filter-item';\nimport {FilterBase} from '../base/filter-base';\nimport {FilterComponentBase} from '../base/filter-component-base';\nimport {takeWhile} from 'rxjs/operators';\nimport {getFilterComponent} from '../contarct/filter-component-map';\nimport {IIdName} from '../../../common/contract/i-id-name';\n\n@Component({\n selector: 'teta-filter-host',\n template: '',\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterHostComponent implements OnInit, OnDestroy {\n @Input()\n set column(val: FilterItem) {\n this._column = val;\n if (this._init) {\n this._componentRef.instance.filterField = this._column;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n @Input()\n set state(val: FilterState) {\n this._state = val;\n if (this._init) {\n this._componentRef.instance.state = this._state;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n @Input()\n set filterOptions(val: IIdName<any>[]) {\n this._filterOptions = val;\n if (this._init) {\n this._componentRef.instance.filterOptions = this._filterOptions;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n @Output() filterChanged: EventEmitter<FilterBase> = new EventEmitter();\n\n private _alive = true;\n private _column: FilterItem;\n private _state: FilterState;\n private _filterOptions: IIdName<any>[];\n private _componentRef: ComponentRef<any>;\n private _init: boolean;\n\n constructor(\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n ngOnInit() {\n if (!FilterComponentBase.isPrototypeOf(this._column.filterComponent)) {\n this._column.filterComponent = getFilterComponent(this._column);\n }\n this._componentRef =\n this.viewContainerRef.createComponent<FilterComponentBase>(this._column.filterComponent);\n this._componentRef.instance.column = this._column;\n this._componentRef.instance.state = this._state;\n this._componentRef.instance.filterOptions = this._filterOptions;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n this._init = true;\n this._componentRef.instance.filterChanged\n .pipe(takeWhile((_) => this._alive))\n .subscribe((filter: FilterBase) => {\n this.filterChanged.emit(filter);\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaSelectOption]'\n})\nexport class SelectOptionDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaSelectValue]'\n})\nexport class SelectValueDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {Directive, ElementRef, Input} from '@angular/core';\n\n@Directive({\n selector: '[tetaHighlight]',\n})\nexport class HighlightDirective {\n @Input() set tetaHighlight(text: string) {\n setTimeout(() => {\n if (this._initialElement) {\n this.elementRef.nativeElement.innerHTML = this._initialElement;\n }\n if (!text) {\n return;\n }\n const pattern = /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;\n const searchWithOutRegExp = text\n .toLowerCase()\n .replace(pattern, '\\\\$&')\n .split(' ')\n .filter(t => t.length > 0)\n .join('|');\n this._initialElement = this.elementRef.nativeElement.innerHTML;\n this.recursiveReplaceNode(this.elementRef.nativeElement.childNodes, searchWithOutRegExp);\n }, 10);\n }\n\n private _initialElement = null;\n\n constructor(private elementRef: ElementRef) {\n }\n\n private recursiveReplaceNode(nodes: NodeListOf<ChildNode>, searchWithOutRegExp: string): boolean {\n let match = false;\n const cacheNodes: ChildNode[] = [];\n nodes.forEach((node: ChildNode) => {\n cacheNodes.push(node);\n });\n cacheNodes.forEach(node => {\n if (node.nodeType === 3) {\n if (node.nodeValue && node.nodeValue.search(new RegExp(searchWithOutRegExp, 'i')) > -1) {\n match = true;\n this.wrapNode(node, searchWithOutRegExp);\n }\n } else {\n match = this.recursiveReplaceNode(node.childNodes, searchWithOutRegExp) || match;\n }\n });\n\n return match;\n }\n\n private wrapNode(textNode: ChildNode, searchWithOutRegExp: string) {\n if (!textNode || !textNode.nodeValue) {\n return;\n }\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = textNode.nodeValue\n .replace(new RegExp(searchWithOutRegExp, 'gi'), match => `<mark>${match}</mark>`);\n\n const parentNode = textNode.parentNode;\n if (parentNode) {\n while (tempDiv.firstChild) {\n parentNode.insertBefore(tempDiv.firstChild, textNode);\n }\n parentNode.removeChild(textNode);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n forwardRef,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { Align } from '../../../common/enum/align.enum';\nimport { VerticalAlign } from '../../../common/enum/vertical-align.enum';\nimport { AutoCloseIgnoreCase } from '../../../common/contract/auto-close-ignore-case';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SelectOptionDirective } from '../select-option.directive';\nimport { SelectValueDirective } from '../select-value.directive';\n\n@Component({\n selector: 'teta-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent implements ControlValueAccessor, OnInit {\n @HostBinding('class.select_multiple')\n @Input()\n multiple: boolean;\n @Input() options: any[];\n @Input() invalid: boolean;\n @Input() align: Align = Align.minWidth;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Input() autoClose = true;\n @Input() autoCloseIgnore: Array<AutoCloseIgnoreCase> = ['inside'];\n @Input() disabled: boolean;\n @Input() itemSize = 32;\n @Input() virtual: boolean;\n @Input() icon: string;\n @Input() placeholder: string;\n @Input() appendToBody: boolean;\n @Input() allowNull = true;\n\n @Input() valueRef: ((item: any) => any) | string;\n @Input() textRef: ((item: any) => string) | string;\n @Input() searchRef: string | ((item: any) => string);\n\n @ContentChild(SelectOptionDirective, { static: true })\n optionDirective: SelectOptionDirective;\n\n @ContentChild(SelectValueDirective, { static: true })\n valueDirective: SelectValueDirective;\n\n @HostBinding('class.select_open') open = false;\n\n @HostBinding('class.select') private readonly selectClass = true;\n @HostBinding('tabindex') private readonly tabindex = 0;\n\n @HostBinding('class.select_disabled')\n get isDisabled() {\n return this.disabled;\n }\n\n value: any | any[];\n searchText: string;\n\n get visibleOptions(): any[] {\n if (!this.searchText) {\n return this.options;\n }\n return this.options?.filter(\n (option) =>\n this.getSearchString(option)\n .toLowerCase()\n .indexOf(this.searchText.toLowerCase()) >= 0\n );\n }\n\n constructor(\n private _cdr: ChangeDetectorRef,\n private _elementRef: ElementRef\n ) {}\n\n clear() {\n let val: any;\n if (this.multiple === true) {\n val = [];\n } else {\n val = null;\n }\n this.value = val;\n this.onChange(this.value);\n this.open = false;\n this._cdr.markForCheck();\n this._cdr.detectChanges();\n }\n\n clickOption(option: any, event: MouseEvent): void {\n if (this.multiple === true) {\n if (!this.value?.length) {\n this.value = [];\n }\n if (this.value.indexOf(option) >= 0) {\n this.removeItem(option);\n } else {\n this.value = [...this.value, option];\n }\n this.onChange(this.value.map((_) => this.getValue(_)));\n } else {\n this.value = option;\n this.onChange(this.getValue(this.value));\n this.open = false;\n }\n this._cdr.markForCheck();\n this._cdr.detectChanges();\n }\n\n itemSelected(option: any): boolean {\n if (this.multiple) {\n return this.value?.indexOf(option) >= 0;\n } else {\n return this.value === option;\n }\n }\n\n removeItemClick(option: any, event: MouseEvent): void {\n event.stopPropagation();\n this.removeItem(option);\n this.onChange(this.value.map((_) => this.getValue(_)));\n }\n\n removeItem(option: any): void {\n this.value = this.value.filter((_) => _ !== option);\n }\n\n search(text: string): void {\n this.searchText = text;\n }\n\n getText(option: any): string {\n if (option == null) {\n return '';\n }\n switch (typeof this.textRef) {\n case 'string':\n return option[this.textRef];\n case 'function':\n return this.textRef(option);\n default:\n return option;\n }\n }\n\n getValue(option: any): any {\n switch (typeof this.valueRef) {\n case 'string':\n return option[this.valueRef];\n case 'function':\n return this.valueRef(option);\n default:\n return option;\n }\n }\n\n getSearchString(option: any): string {\n switch (typeof this.searchRef) {\n case 'string':\n return option[this.searchRef];\n case 'function':\n return this.searchRef(option);\n default:\n return '';\n }\n }\n\n focus() {\n this._elementRef.nativeElement.focus();\n }\n\n ngOnInit(): void {}\n\n writeValue(value: any | any[]): void {\n if (this.multiple) {\n this.value =\n value && this.options\n ? this.options.filter(\n (option) => value.indexOf(this.getValue(option)) > -1\n )\n : [];\n } else {\n this.value =\n this.options &&\n this.options.find((option) => this.getValue(option) === value);\n }\n this._cdr.detectChanges();\n }\n\n onChange: (value: any) => void = () => {};\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n onTouched = () => {};\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdr.markForCheck();\n }\n\n private getSelectedValue() {}\n}\n","<teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n class=\"row row_auto select-head\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0) && placeholder\">\n {{placeholder}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-list scrollable row_auto\" (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search\">\n <teta-text-field [ngModel]=\"searchText\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"'Поиск'\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"clear()\"\n [class.list-item_active]=\"value==null\">\n Не выбрано\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"!virtual\">\n <div class=\"list-item list-item_interactive\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.list-item_active]=\"itemSelected(option)\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'primary'\"></teta-icon>\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n </div>\n </ng-container>\n <cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div class=\"select-list-item select-list-item_interactive\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'primary'\" class=\"margin-left-2\"></teta-icon>\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"chip\">\n <teta-icon [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n {{getText(item)}}\n </div>\n </div>\n </div>\n</teta-dropdown>\n\n<ng-template #optionDefault let-option>\n {{getText(option)}}\n</ng-template>\n<ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n <ng-container\n *ngFor=\"let item of value; let i = index\">{{getText(item) + (value.length === i + 1 ? '' : ', ') }}</ng-container>\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n</ng-template>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HighlightDirective} from './highlight.directive';\n\n@NgModule({\n declarations: [HighlightDirective],\n exports: [HighlightDirective],\n imports: [\n CommonModule\n ]\n})\nexport class HighlightModule {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n OnInit,\n} from '@angular/core';\n\n@Component({\n selector: 'teta-form-group-title',\n templateUrl: './form-group-title.component.html',\n styleUrls: ['./form-group-title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormGroupTitleComponent implements OnInit {\n @HostBinding('class.form-group-title') private readonly className = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<div class=\"font-overline form-group-title-text\">\n <ng-content></ng-content>\n</div>\n<div class=\"form-group-title-line\"></div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from './input/input.component';\nimport { TextFieldComponent } from './text-field/text-field.component';\nimport { IconModule } from '../icon/icon.module';\nimport { FormsModule } from '@angular/forms';\nimport { OnlyNumberModule } from '../../directive/only-number/only-number.module';\nimport { FormGroupTitleComponent } from './form-group-title/form-group-title.component';\n\n@NgModule({\n declarations: [InputComponent, TextFieldComponent, FormGroupTitleComponent],\n exports: [InputComponent, TextFieldComponent, FormGroupTitleComponent],\n imports: [CommonModule, IconModule, FormsModule, OnlyNumberModule],\n})\nexport class InputModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SelectComponent} from './select/select.component';\nimport {DropdownModule} from '../dropdown/dropdown.module';\nimport {SelectOptionDirective} from './select-option.directive';\nimport {SelectValueDirective} from './select-value.directive';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {FormsModule} from '@angular/forms';\nimport {IconModule} from '../icon/icon.module';\nimport {HighlightModule} from '../../directive/highlight/highlight.module';\nimport {InputModule} from '../input/input.module';\n\n@NgModule({\n declarations: [SelectComponent, SelectOptionDirective, SelectValueDirective],\n exports: [SelectComponent, SelectOptionDirective, SelectValueDirective],\n imports: [\n DropdownModule,\n CommonModule,\n ScrollingModule,\n FormsModule,\n IconModule,\n HighlightModule,\n InputModule,\n ],\n})\nexport class SelectModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RadioComponent } from './radio/radio.component';\nimport { RadioButtonComponent } from './radio-button/radio-button.component';\nimport { FormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [RadioComponent, RadioButtonComponent],\n exports: [RadioComponent, RadioButtonComponent],\n imports: [CommonModule, FormsModule],\n})\nexport class RadioModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FilterPanelComponent } from './filter-panel/filter-panel.component';\nimport { NumericFilterComponent } from './numeric-filter/numeric-filter.component';\nimport { StringFilterComponent } from './string-filter/string-filter.component';\nimport { ListFilterComponent } from './list-filter/list-filter.component';\nimport { DateFilterComponent } from './date-filter/date-filter.component';\nimport { FilterHostComponent } from './filter-host/filter-host.component';\nimport { SelectModule } from '../select/select.module';\nimport { FormsModule } from '@angular/forms';\nimport { DatePickerModule } from '../date-picker/date-picker.module';\nimport { BooleanFilterComponent } from './boolean-filter/boolean-filter.component';\nimport { RadioModule } from '../radio/radio.module';\nimport { InputModule } from '../input/input.module';\nimport { CheckboxModule } from '../checkbox/checkbox.module';\n\n@NgModule({\n declarations: [\n FilterPanelComponent,\n NumericFilterComponent,\n StringFilterComponent,\n ListFilterComponent,\n DateFilterComponent,\n FilterHostComponent,\n BooleanFilterComponent,\n ],\n exports: [\n FilterPanelComponent,\n NumericFilterComponent,\n StringFilterComponent,\n ListFilterComponent,\n DateFilterComponent,\n FilterHostComponent,\n BooleanFilterComponent,\n ],\n imports: [\n CommonModule,\n SelectModule,\n FormsModule,\n DatePickerModule,\n RadioModule,\n InputModule,\n CheckboxModule,\n ],\n})\nexport class FilterModule {}\n","import {FilterType} from '../enum/filter-type.enum';\nimport {StringFilterType} from '../enum/string-filter-type.enum';\nimport {ListFilterType} from '../enum/list-filter-type.enum';\n\nexport class FilterItem {\n /**\n * Порядковый номер\n */\n sortOrder: number = Number.MAX_VALUE;\n /**\n * Название столбца для заголовка таблицы\n */\n caption: string;\n /**\n * Подсказка\n */\n hint: string;\n /**\n * Название столбца в строке результатов\n */\n name: string;\n /**\n * Возможность сортировать поле\n */\n sortable = true;\n /**\n * Возможность фильтровать поле\n */\n filterable = true;\n /**\n * Поле для сортировки\n */\n sortField: string;\n /**\n * Поле для фильтрации\n */\n filterField: string;\n /**\n * Тип фильтра\n */\n filterType: FilterType | null;\n /**\n * Тип сравнения строкового фильтра\n */\n stringFilterType: StringFilterType;\n /**\n * Тип сравнения строкового фильтра\n */\n listFilterType: ListFilterType;\n /**\n * Строгое сравнение\n */\n strict: boolean;\n /**\n * Компонент для рендера фильтра\n */\n filterComponent: any;\n\n /**\n * Дочерние элементы\n */\n columns: FilterItem[];\n\n constructor(options?: {\n sortOrder?: number;\n name?: string;\n caption?: string;\n hint?: string;\n sortable?: boolean;\n sortField?: string;\n filterable?: boolean;\n filterField?: string;\n filterType?: FilterType | null;\n stringFilterType?: StringFilterType;\n listFilterType?: ListFilterType;\n strict?: boolean;\n filterComponent?: any;\n columns?: FilterItem[];\n }) {\n this.sortOrder = options?.sortOrder ?? Number.MAX_VALUE;\n this.name = options?.name ?? '';\n this.caption = options?.caption ?? this.name;\n this.hint = options?.hint ?? '';\n this.sortable = options?.sortable ?? true;\n this.filterable = options?.filterable ?? true;\n this.sortField = options?.sortField ?? this.name;\n this.filterField = options?.filterField ?? this.name;\n this.filterType = options?.filterType;\n this.stringFilterType = options?.stringFilterType ?? StringFilterType.Contains;\n this.listFilterType = options?.listFilterType ?? ListFilterType.None;\n this.strict = options?.strict ?? false;\n this.filterComponent = options?.filterComponent;\n this.columns = options?.columns?.map(_ => new FilterItem(_)) ?? [];\n }\n}\n","export class SortParam {\n /**\n * Поле сортировки\n */\n field: string;\n /**\n * Направление (true: Asc, false: Desc)\n */\n asc: boolean;\n /**\n * Порядок сортировки\n */\n order: number;\n\n /**\n * Инициализация из анонимного объекта\n */\n constructor(options?: {\n field?: string;\n asc?: boolean;\n order?: number;\n }) {\n if (options) {\n this.field = options.field || this.field;\n this.asc = options.asc || false;\n this.order = options.order || this.order;\n }\n }\n}\n","import { StringFilter } from './string-filter';\nimport { NumericFilter } from './numeric-filter';\nimport { DateFilter } from './date-filter';\nimport { ListFilter } from './list-filter';\nimport { SortParam } from './sort-param';\nimport { DateFilterValue } from './date-filter-value';\nimport { NumericFilterValue } from './numeric-filter-value';\nimport { ListFilterType } from '../enum/list-filter-type.enum';\nimport { BooleanFilter } from './boolean-filter';\n\nexport class FilterState {\n stringFilters: StringFilter[] = [];\n numericFilters: NumericFilter[] = [];\n dateFilters: DateFilter[] = [];\n listFilters: ListFilter[] = [];\n booleanFilters: BooleanFilter[] = [];\n sortParams: SortParam[] = [];\n\n constructor(options?: {\n stringFilters?: any[];\n booleanFilters?: any[];\n numericFilters?: any[];\n dateFilters?: any[];\n listFilters?: any[];\n sortParams?: any[];\n }) {\n if (options) {\n if (options.stringFilters && options.stringFilters.length) {\n this.stringFilters = options.stringFilters.map(\n (x: any) => new StringFilter(x)\n );\n }\n\n if (options.booleanFilters && options.booleanFilters.length) {\n this.booleanFilters = options.booleanFilters.map(\n (x: any) => new BooleanFilter(x)\n );\n }\n\n if (options.numericFilters && options.numericFilters.length) {\n this.numericFilters = options.numericFilters.map(\n (x: any) => new NumericFilter(x)\n );\n }\n\n if (options.dateFilters && options.dateFilters.length) {\n this.dateFilters = options.dateFilters.map(\n (x: any) => new DateFilter(x)\n );\n }\n\n if (options.listFilters && options.listFilters.length) {\n this.listFilters = options.listFilters.map(\n (x: any) => new ListFilter(x)\n );\n }\n\n if (options.sortParams && options.sortParams.length) {\n this.sortParams = options.sortParams.map((x: any) => new SortParam(x));\n }\n }\n }\n\n static restore(cookie: string): any {\n const state = localStorage.getItem(cookie) || 'null';\n return JSON.parse(state);\n }\n\n save(cookieName: string): void {\n if (cookieName) {\n localStorage.setItem(cookieName, JSON.stringify(this));\n }\n }\n\n addListFilter(value: ListFilter): ListFilter {\n if (this.listFilters === null || this.listFilters === undefined) {\n this.listFilters = [];\n }\n const filter = this.listFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.listFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addDateFilter(value: DateFilter): DateFilter {\n if (this.dateFilters === null || this.dateFilters === undefined) {\n this.dateFilters = [];\n }\n const filter = this.dateFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.dateFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addStringFilter(value: StringFilter): StringFilter {\n if (this.stringFilters === null || this.stringFilters === undefined) {\n this.stringFilters = [];\n }\n const filter = this.stringFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.stringFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addBooleanFilter(value: BooleanFilter): BooleanFilter {\n if (this.booleanFilters === null || this.booleanFilters === undefined) {\n this.booleanFilters = [];\n }\n const filter = this.booleanFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.booleanFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n addNumericFilter(value: NumericFilter): NumericFilter {\n if (this.numericFilters === null || this.numericFilters === undefined) {\n this.numericFilters = [];\n }\n const filter = this.numericFilters.find((f) => f.field === value.field);\n if (filter === null || filter === undefined) {\n this.numericFilters.push(value);\n return value;\n } else {\n filter.value = value.value;\n return filter;\n }\n }\n\n clear(): void {\n this.sortParams.length = 0;\n\n this.stringFilters.map((f: StringFilter) => {\n f.value = '';\n });\n this.booleanFilters.map((f: BooleanFilter) => {\n f.value = null;\n });\n this.dateFilters.map((f: DateFilter) => {\n f.value = new DateFilterValue({\n lessThan: null,\n greaterThan: null,\n });\n });\n this.numericFilters.map((f: NumericFilter) => {\n f.value = new NumericFilterValue({\n lessThan: null,\n greaterThan: null,\n equalsTo: null,\n });\n });\n this.listFilters.map((f: ListFilter) => {\n f.value = [];\n f.type = ListFilterType.None;\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {Message} from './model/message';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MessageService {\n message: Observable<Message>;\n clear: Observable<string>;\n\n private _message = new Subject<Message>();\n private _clear = new Subject<string>();\n\n\n constructor() {\n this.message = this._message.asObservable();\n this.clear = this._clear.asObservable();\n }\n\n add(message: Message) {\n if (message) {\n this._message.next(message);\n }\n }\n\n addMultiple(messages: Message[]) {\n if (messages && messages.length) {\n messages.forEach((n) => {\n this._message.next(n);\n });\n }\n }\n\n clearMessages(name: string) {\n this._clear.next(name);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { Message } from '../model/message';\n\n@Component({\n selector: 'teta-message',\n templateUrl: './message.component.html',\n styleUrls: ['./message.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MessageComponent implements AfterViewInit, OnDestroy {\n @Input() message: Message;\n @Input() index: number;\n @Output() closed: EventEmitter<any> = new EventEmitter();\n @Input() class;\n\n @HostBinding('class')\n private get getClass() {\n const result = ['message'];\n if (this.message.className?.length > 0) {\n result.push(...this.message.className);\n }\n if (this.message.palette) {\n result.push(`message-${this.message.palette}`);\n }\n return result.join(' ');\n }\n\n timeout: any;\n\n constructor() {}\n\n @HostListener('mouseleave')\n init() {\n if (!this.message.infinite) {\n this.timeout = setTimeout(() => {\n this.closed.emit({\n index: this.index,\n message: this.message,\n });\n }, this.message.duration);\n }\n }\n\n @HostListener('mouseenter')\n reset() {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n\n closeMe(event: MouseEvent) {\n this.reset();\n\n this.closed.emit({\n index: this.index,\n message: this.message,\n });\n\n event.preventDefault();\n }\n\n ngAfterViewInit() {\n this.init();\n }\n\n ngOnDestroy() {\n this.reset();\n }\n}\n","<div class=\"row align-center justify-content-between\">\n <div class=\"font-title-3 padding-left-1\">\n {{message.title}}\n </div>\n <button teta-button\n [square]=\"true\"\n [palette]=\"message.palette\"\n [view]=\"'primary'\"\n (click)=\"closeMe($event)\">\n <teta-icon [name]=\"'closeBig'\"></teta-icon>\n </button>\n</div>\n<div class=\"font-body-3 padding-v-1\" *ngIf=\"!message.template && message.text\">\n {{message.text}}\n</div>\n<ng-container *ngIf=\"message.template\">\n <ng-container *ngTemplateOutlet=\"message.template; context: {$implicit: message}\"></ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { MessageService } from '../message.service';\nimport { Message } from '../model/message';\nimport { Align } from '../../../common/enum/align.enum';\nimport { VerticalAlign } from '../../../common/enum/vertical-align.enum';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-message-host',\n templateUrl: './message-host.component.html',\n styleUrls: ['./message-host.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MessageHostComponent implements OnInit, OnDestroy {\n @Input() class;\n @Input() align: Align = Align.right;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Output() itemClose: EventEmitter<any> = new EventEmitter();\n\n messages: Message[] = [];\n private readonly _alignMap: Map<Align, string> = new Map<Align, string>()\n .set(Align.right, 'message-host_right')\n .set(Align.left, 'message-host_left')\n .set(Align.center, 'message-host_center');\n private readonly _valignMap: Map<VerticalAlign, string> = new Map<\n VerticalAlign,\n string\n >()\n .set(VerticalAlign.top, 'message-host_top')\n .set(VerticalAlign.center, 'message-host_vertical-center')\n .set(VerticalAlign.bottom, 'message-host_bottom');\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'message-host'];\n if (this._alignMap.has(this.align)) {\n result.push(this._alignMap.get(this.align));\n }\n if (this._valignMap.has(this.verticalAlign)) {\n result.push(this._valignMap.get(this.verticalAlign));\n }\n return result.join(' ');\n }\n\n private _alive = true;\n\n constructor(private _svc: MessageService, private _cdr: ChangeDetectorRef) {}\n\n ngOnInit() {\n this._svc.message\n .pipe(takeWhile((_) => this._alive))\n .subscribe((messages) => {\n if (messages) {\n if (!this.messages) {\n this.messages = [];\n }\n this.messages.push(messages);\n }\n this._cdr.markForCheck();\n });\n\n this._svc.clear\n .pipe(takeWhile((_) => this._alive))\n .subscribe((x: string) => {\n if (!x) {\n this.messages = [];\n } else {\n this.messages = this.messages?.filter((_) => _.name !== x);\n }\n this._cdr.markForCheck();\n });\n }\n\n closedItem(event: any) {\n this.messages.splice(event.index, 1);\n this.itemClose.emit({\n message: event.message,\n });\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","<teta-message\n *ngFor=\"let message of messages; let i=index\"\n (closed)=\"closedItem($event)\"\n [message]=\"message\"\n [index]=\"i\">\n</teta-message>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {MessageHostComponent} from './message-host/message-host.component';\nimport {MessageComponent} from './message/message.component';\nimport {IconModule} from '../icon/icon.module';\nimport {ButtonModule} from '../button/button.module';\n\n@NgModule({\n declarations: [MessageHostComponent, MessageComponent],\n exports: [MessageHostComponent, MessageComponent],\n imports: [\n CommonModule,\n IconModule,\n ButtonModule\n ]\n})\nexport class MessageModule {\n}\n","import { TemplateRef } from '@angular/core';\n\nexport class Message {\n name: string | null | undefined;\n title: string | null | undefined;\n text: string | null | undefined;\n infinite: boolean;\n duration = 10000;\n className: string[] | null | undefined;\n palette = 'primary';\n template: TemplateRef<any>;\n\n constructor(options?: {\n name?: string;\n title: string;\n text?: string;\n infinite?: boolean;\n duration?: number;\n palette?: string;\n className?: string[];\n template?: TemplateRef<any>;\n }) {\n if (options) {\n this.name = options.name;\n this.title = options.title;\n this.text = options.text;\n this.infinite = options.infinite || false;\n this.className = options.className;\n if (options.palette) {\n this.palette = options.palette;\n }\n this.template = options.template;\n if (options.duration && options.duration > 0) {\n this.duration = options.duration;\n }\n }\n }\n}\n","export enum ModalCloseReason {\n resolve,\n exit,\n backdrop,\n esc,\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { IModalConfig } from '../model/i-modal-config';\nimport { IModalResult } from '../model/i-modal-result';\nimport { ModalCloseReason } from '../model/modal-close-reason.enum';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-modal-container',\n templateUrl: './modal-container.component.html',\n styleUrls: ['./modal-container.component.scss'],\n animations: [\n trigger('dialog', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(150, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(150, style({ opacity: '0' }))]),\n ]),\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalContainerComponent {\n @Input() config: IModalConfig;\n @Output() closeEvent = new EventEmitter<IModalResult>();\n\n @HostBinding('attr.tabindex') tabindex = -1;\n @HostBinding('@dialog') dialog = true;\n\n @HostBinding('class')\n get classList(): string {\n const classList = ['modal__window'];\n if (this.config) {\n if (this.config && this.config.class) {\n classList.push(...this.config.class);\n }\n if (this.config.backdrop) {\n classList.push('modal__backdrop');\n }\n }\n return classList.join(' ');\n }\n\n constructor(private elRef$: ElementRef) {}\n\n @HostListener('keyup', ['$event']) keyup(event: KeyboardEvent): void {\n if (this.config && this.config.esc && !event.defaultPrevented) {\n const key = event.key || event.keyCode;\n\n if (key === 'Escape' || key === 'Esc' || key === 27) {\n this.closeEvent.emit({\n reason: ModalCloseReason.esc,\n });\n }\n }\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent): void {\n if (\n this.config.closeOnBackdropClick === true &&\n this.elRef$.nativeElement === event.target\n ) {\n this.closeEvent.emit({\n reason: ModalCloseReason.backdrop,\n });\n }\n }\n}\n","<div class=\"modal__container\" [class.modal__container_resize]=\"config?.resizable\">\n <ng-content></ng-content>\n</div>\n","import {IModalResult} from './i-modal-result';\n\nexport class CurrentModal {\n close: (result?: IModalResult) => void;\n}\n","export class DynamicData {\n [key: string]: any;\n\n constructor(value: { [key: string]: any }) {\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n this[key] = value[key];\n }\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CurrentModal } from '../model/current-modal';\nimport { DynamicData } from '../../../common/contract/dynamic-data';\nimport { ModalCloseReason } from '../model/modal-close-reason.enum';\n\n@Component({\n selector: 'teta-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.scss'],\n})\nexport class DialogComponent implements OnInit {\n @Input() message: string;\n @Input() buttonText: string;\n @Input() buttonIcon: string;\n @Input() buttonPalette: string;\n @Input() showCancelButton: boolean;\n\n constructor(public modal: CurrentModal, private data: DynamicData) {}\n\n cancel() {\n this.modal.close({\n reason: ModalCloseReason.exit,\n });\n }\n\n ok() {\n this.modal.close({\n reason: ModalCloseReason.resolve,\n });\n }\n\n ngOnInit(): void {}\n}\n","<div class=\"padding-2 font-body-2\">\n {{message | transloco}}\n</div>\n<teta-toolbar class=\"justify-content-end\">\n <button teta-button\n *ngIf=\"showCancelButton\"\n (click)=\"cancel()\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\">\n {{'common.cancel' | transloco}}\n </button>\n\n <button teta-button\n (click)=\"ok()\"\n [square]=\"!buttonText?.length\"\n [palette]=\"buttonPalette\">\n <teta-icon *ngIf=\"buttonIcon\" [name]=\"buttonIcon\"></teta-icon>\n <ng-container *ngIf=\"buttonText?.length > 0\">{{buttonText | transloco}}</ng-container>\n </button>\n</teta-toolbar>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ModalContainerComponent } from './modal-container/modal-container.component';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { ToolbarModule } from '../toolbar/toolbar.module';\nimport { ButtonModule } from '../button/button.module';\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@ngneat/transloco';\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [ModalContainerComponent, DialogComponent],\n exports: [ModalContainerComponent, DialogComponent],\n imports: [\n CommonModule,\n ToolbarModule,\n ButtonModule,\n TranslocoModule,\n IconModule,\n ],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: { scope: 'common', alias: 'common' },\n multi: true,\n },\n ],\n})\nexport class ModalModule {}\n","import { Observable, Subject } from 'rxjs';\nimport { IModalResult } from './i-modal-result';\nimport { ComponentRef } from '@angular/core';\nimport { TetaContentRef } from '../../../common/contract/teta-content-ref';\nimport { ModalContainerComponent } from '../modal-container/modal-container.component';\n\nexport class ModalInstance {\n onClose: Observable<IModalResult>;\n private _onClose: Subject<IModalResult> = new Subject<IModalResult>();\n\n constructor(\n private _window: ComponentRef<ModalContainerComponent>,\n private _content: TetaContentRef\n ) {\n this.onClose = this._onClose.asObservable();\n if (this._window && this._window.instance) {\n this._window.instance.closeEvent.subscribe((event: IModalResult) => {\n this.close(event);\n });\n }\n }\n\n get window(): ComponentRef<ModalContainerComponent> {\n return this._window;\n }\n\n get component(): ComponentRef<any> | null {\n return this._content.componentRef ? this._content.componentRef : null;\n }\n\n close = (event?: IModalResult) => {\n this._onClose.next(event);\n this._onClose.complete();\n this.destroy();\n };\n\n private destroy(): void {\n this._window.destroy();\n\n if (this._content && this._content.viewRef) {\n this._content.viewRef.destroy();\n }\n }\n}\n","import {ComponentRef, ViewRef} from '@angular/core';\n\nexport class TetaContentRef {\n constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef<any>) {\n }\n}\n","import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n Injectable,\n Injector,\n Renderer2,\n RendererFactory2,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { TetaContentRef } from '../contract/teta-content-ref';\nimport { DynamicData } from '../contract/dynamic-data';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DynamicComponentService {\n private _renderer: Renderer2;\n\n constructor(\n private _componentFactoryResolver: ComponentFactoryResolver,\n private _rendererFactory: RendererFactory2,\n private _appRef: ApplicationRef\n ) {\n this._renderer = this._rendererFactory.createRenderer(null, null);\n }\n\n createComponent<T>(\n component: Type<T>,\n contentRef: TetaContentRef,\n injector: Injector,\n container: any\n ): ComponentRef<T> {\n const componentRef = this._componentFactoryResolver\n .resolveComponentFactory(component)\n .create(injector, contentRef.nodes);\n this._appRef.attachView(componentRef.hostView);\n container.appendChild(componentRef.location.nativeElement);\n return componentRef;\n }\n\n createContent(\n content: string | TemplateRef<any> | Type<any>,\n injector: Injector,\n context?: any\n ): TetaContentRef {\n if (content === null || content === undefined) {\n throw new Error('Content is undefined');\n }\n if (typeof content === 'string') {\n return this.fromString(content);\n } else if (content instanceof TemplateRef) {\n return this.fromTemplate(content, context);\n } else {\n return this.fromComponent(content, injector, context);\n }\n }\n\n destroy<T>(\n component: ComponentRef<T>,\n content: TetaContentRef,\n container: HTMLElement\n ): void {\n if (component) {\n this._appRef.detachView(component.hostView);\n component.destroy();\n }\n if (content && content.viewRef) {\n content.viewRef.destroy();\n }\n content = null;\n }\n\n getContext(\n content: string | TemplateRef<any> | Type<any>,\n context: any\n ): any {\n if (content instanceof TemplateRef) {\n return {\n $implicit: context,\n data: context,\n };\n }\n return context;\n }\n\n getInjector(data: DynamicData, parent: Injector): Injector {\n return Injector.create({\n providers: [\n {\n provide: DynamicData,\n useValue: data,\n },\n ],\n parent,\n });\n }\n\n private fromString(content: string): TetaContentRef {\n return new TetaContentRef([[this._renderer.createText(`${content}`)]]);\n }\n\n private fromTemplate(\n content: TemplateRef<any>,\n context: any\n ): TetaContentRef {\n const viewRef = content.createEmbeddedView(context);\n this._appRef.attachView(viewRef);\n return new TetaContentRef([viewRef.rootNodes], viewRef);\n }\n\n private fromComponent(\n content: any,\n injector: Injector,\n context: any\n ): TetaContentRef {\n const componentFactory =\n this._componentFactoryResolver.resolveComponentFactory<any>(content);\n const componentRef = componentFactory.create(injector);\n for (const key in context) {\n if (context.hasOwnProperty(key)) {\n componentRef.instance[key] = context[key];\n }\n }\n const componentNativeEl = componentRef.location.nativeElement;\n this._appRef.attachView(componentRef.hostView);\n return new TetaContentRef(\n [[componentNativeEl]],\n componentRef.hostView,\n componentRef\n );\n }\n}\n","import { Inject, Injectable, Injector, TemplateRef, Type } from '@angular/core';\nimport { ModalInstance } from './model/modal-instance';\nimport { Subject } from 'rxjs';\nimport { DynamicComponentService } from '../../common/service/dynamic-component.service';\nimport { ModalCloseReason } from './model/modal-close-reason.enum';\nimport { IModalConfig } from './model/i-modal-config';\nimport { CurrentModal } from './model/current-modal';\nimport { DynamicData } from '../../common/contract/dynamic-data';\nimport { ModalContainerComponent } from './modal-container/modal-container.component';\nimport { IModalResult } from './model/i-modal-result';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n private _stack: ModalInstance[] = [];\n private _modalChanged = new Subject<void>();\n private readonly _container: any;\n\n constructor(\n @Inject(DOCUMENT)\n private _document: any,\n private _injector: Injector,\n private _factory: DynamicComponentService\n ) {\n this._container = this._document.body;\n\n this._modalChanged.subscribe(() => {\n if (this._stack && this._stack.length > 0) {\n this.focus(this._stack[this._stack.length - 1]);\n }\n });\n }\n\n closeAll(): void {\n if (this._stack && this._stack.length > 0) {\n this._stack.forEach((instance: ModalInstance) => {\n instance.close({\n reason: ModalCloseReason.exit,\n });\n });\n }\n }\n\n create(\n content: string | TemplateRef<any> | Type<any>,\n data?: any,\n config?: IModalConfig,\n injector?: Injector\n ): ModalInstance {\n if (content === null || content === undefined) {\n throw new Error('Specify template or component to render');\n }\n if (config === null || config === undefined) {\n config = Object.assign(\n {\n backdrop: true,\n class: [],\n esc: true,\n },\n config\n );\n }\n if (injector === null || injector === undefined) {\n injector = this._injector;\n }\n const currentModal = new CurrentModal();\n const modalData = new DynamicData(data);\n\n injector = this.getInjector(currentModal, modalData, injector);\n const contentInstance = this._factory.createContent(\n content,\n injector,\n this.getContext(content, modalData, currentModal)\n );\n const window = this._factory.createComponent(\n ModalContainerComponent,\n contentInstance,\n injector,\n this._container\n );\n window.instance.config = config;\n\n const instance = new ModalInstance(window, contentInstance);\n currentModal.close = instance.close;\n this.register(instance);\n return instance;\n }\n\n private getContext(\n content: string | TemplateRef<any> | Type<any>,\n context: any,\n currentModal: CurrentModal\n ): any {\n if (content instanceof TemplateRef) {\n return {\n $implicit: {\n modal: currentModal,\n data: context,\n },\n modal: currentModal,\n data: context,\n close: (result: IModalResult): void => {\n currentModal.close(result);\n },\n };\n }\n return context;\n }\n\n private getInjector(\n currentModal: CurrentModal,\n data: DynamicData,\n parent: Injector\n ): Injector {\n return Injector.create({\n providers: [\n {\n provide: CurrentModal,\n useValue: currentModal,\n },\n {\n provide: DynamicData,\n useValue: data,\n },\n ],\n parent,\n });\n }\n\n private register(instance: ModalInstance): void {\n this._stack.push(instance);\n this._modalChanged.next();\n instance.onClose.subscribe(() => this.unregister(instance));\n }\n\n private unregister = (instance: ModalInstance) => {\n const index = this._stack.indexOf(instance);\n if (index > -1) {\n this._stack.splice(index, 1);\n this._modalChanged.next();\n }\n };\n\n private focus(instance: ModalInstance): void {\n if (instance && instance.window && instance.window.location.nativeElement) {\n setTimeout(() => {\n instance.window.location.nativeElement.focus();\n }, 0);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from './modal.service';\nimport { Observable } from 'rxjs';\nimport { IModalResult } from './model/i-modal-result';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { map } from 'rxjs/operators';\nimport { ModalCloseReason } from './model/modal-close-reason.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n constructor(private _modal: ModalService) {}\n\n alert(message: string): void {\n this.createDialog(message, 'common.ok', null, 'primary', false);\n }\n\n confirm(\n message: string,\n buttonText: string = 'common.ok',\n buttonIcon: string = null,\n buttonPalette: string = 'primary'\n ): Observable<boolean> {\n return this.createDialog(\n message,\n buttonText,\n buttonIcon,\n buttonPalette,\n true\n ).pipe(\n map((result: IModalResult) => result.reason === ModalCloseReason.resolve)\n );\n }\n\n private createDialog(\n message: string,\n buttonText: string = 'common.ok',\n buttonIcon: string = null,\n buttonPalette: string = 'primary',\n showCancelButton: boolean = true\n ): Observable<IModalResult> {\n const dialog = this._modal.create(\n DialogComponent,\n {\n message,\n buttonText,\n buttonIcon,\n buttonPalette,\n showCancelButton,\n },\n {\n esc: true,\n backdrop: true,\n }\n );\n return dialog.onClose;\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-pager',\n templateUrl: './pager.component.html',\n styleUrls: ['./pager.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PagerComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>pager works!</p>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PagerComponent} from './pager/pager.component';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [PagerComponent],\n exports: [PagerComponent],\n imports: [\n CommonModule,\n IconModule\n ]\n})\nexport class PagerModule {\n}\n","export class PagerState {\n /**\n * Текущая страница\n */\n page = 0;\n\n /**\n * Количество записей на странице\n */\n pageSize = 30;\n /**\n * Количество страниц\n */\n count: number;\n /**\n * Количество записей\n */\n totalCount: number;\n /**\n * первая видимая страница\n */\n start: number;\n /**\n * Последняя видимая страница\n */\n end: number;\n /**\n * Список страниц\n */\n pages: number[];\n\n /**\n * Инициализация из анонимного объекта\n */\n constructor(options?: {\n page?: number;\n pageSize?: number;\n count?: number;\n totalCount?: number;\n }) {\n if (options) {\n this.pageSize = options.pageSize || 30;\n this.count = options.count !== null && options.count !== undefined ? options.count : this.count;\n this.totalCount = options.totalCount !== null && options.totalCount !== undefined ? options.totalCount : this.totalCount;\n this.page = options.page !== null && options.page !== undefined ? options.page : 0;\n this.createPages();\n }\n }\n\n createPages() {\n if (this.page > this.count) {\n this.page = this.count > 0 ? this.count - 1 : 0;\n }\n\n let start = 0;\n let end = this.count - 1;\n if (this.count > 5) {\n start = this.page - 2;\n end = this.page + 2;\n if (start < 0) {\n start = 0;\n end = 4;\n }\n const rightShift = this.count - 1 - end;\n if (rightShift < 0) {\n start = this.count - 5;\n end = this.count - 1;\n }\n }\n\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n\n this.start = start;\n this.end = end;\n this.pages = arr;\n }\n}\n","import {PagerState} from '../model/pager-state';\n\nexport class PagerUtil {\n static getPage<T>(data: T[], paging: PagerState): T[] {\n return data.slice(paging.page * paging.pageSize, (paging.page + 1) * paging.pageSize);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnInit,\n} from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-panel',\n templateUrl: './panel.component.html',\n styleUrls: ['./panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('panel', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(300, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(150, style({ opacity: '0' }))]),\n ]),\n ],\n})\nexport class PanelComponent implements OnInit {\n @Input() width = 500;\n\n @HostBinding('@panel')\n private get panel() {\n return {\n value: true,\n params: { width: this.width },\n };\n }\n\n @HostBinding('class.column') private readonly column = true;\n @HostBinding('class.column_fixed') private readonly auto = true;\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PanelComponent} from './panel/panel.component';\n\n@NgModule({\n declarations: [PanelComponent],\n exports: [PanelComponent],\n imports: [\n CommonModule\n ]\n})\nexport class PanelModule {\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnInit,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const SLIDER_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ProgressBarComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-progress-bar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss'],\n providers: [SLIDER_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressBarComponent implements OnInit, ControlValueAccessor {\n @Input() min = 0;\n @Input() max = 100;\n @Input() step = 0;\n\n @ViewChild('progressSlider', { static: true })\n private readonly slider: ElementRef;\n @HostBinding('class.progress') private readonly progressBar = true;\n\n percent: number;\n moving: boolean;\n\n set value(value: number) {\n this._value = value;\n this.percent = this.setPercentFromValue();\n this._cdr.detectChanges();\n }\n\n get value() {\n return this._value;\n }\n\n get containerPosition() {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n return { min: rect.x, max: rect.x + rect.width };\n }\n\n private _value;\n\n constructor(\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n private _cdr: ChangeDetectorRef,\n @Inject(DOCUMENT) private _document: any\n ) {}\n\n @HostListener('document:mouseup', ['$event']) mouseup() {\n this.moving = false;\n this.restoreGlobalMouseEvents();\n this.removeListener();\n }\n\n @HostListener('click', ['$event']) click = (event: MouseEvent) => {\n this.getMousePositionInPercents(event);\n };\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {}\n\n writeValue(value: number): void {\n this.value = value;\n }\n\n mousedown = () => {\n this.moving = true;\n this.preventGlobalMouseEvents();\n this.addListener();\n };\n\n ngOnInit(): void {}\n\n private mousemove = (event: MouseEvent) => {\n event.preventDefault();\n this.getMousePositionInPercents(event);\n };\n\n private getMousePositionInPercents = (event: MouseEvent) => {\n const position = event.clientX - this.containerPosition.min;\n let percent =\n (100 / (this.containerPosition.max - this.containerPosition.min)) *\n position;\n percent = percent <= 0 ? 0 : percent > 100 ? 100 : percent;\n this.setValue(this.getValueFromPercent(percent));\n };\n\n private setValue(value: number) {\n this.value = value;\n this.onChange(this.value);\n }\n\n private getValueFromPercent(percent: number): number {\n if (percent === 0) {\n return this.min;\n }\n if (percent === 100) {\n return this.max;\n }\n const exactValue = this.min + (percent * (this.max - this.min)) / 100;\n if (!this.step || this.step <= 0 || isNaN(this.step)) {\n return exactValue;\n }\n return (\n Math.round((exactValue - this.min) / this.step) * this.step + this.min\n );\n }\n\n private preventGlobalMouseEvents = () => {\n this._document.body.style['pointer-events'] = 'none';\n };\n\n private restoreGlobalMouseEvents = () => {\n this._document.body.style['pointer-events'] = 'auto';\n };\n\n private addListener() {\n this._document.addEventListener('mousemove', this.mousemove);\n }\n\n private removeListener() {\n this._document.removeEventListener('mousemove', this.mousemove);\n }\n\n private setPercentFromValue() {\n const range = this.max - this.min;\n return (100 / range) * (this.value - this.min);\n }\n}\n","<div class=\"progress-bar\" [style.width.%]=\"percent\"></div>\n<div class=\"progress-slider\"\n [class.progress-slider_visible]=\"moving\"\n #progressSlider\n (mousedown)=\"mousedown()\"\n (click)=\"click($event)\"\n [style.left.%]=\"percent\"></div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ProgressBarComponent} from './progress-bar/progress-bar.component';\n\n@NgModule({\n declarations: [ProgressBarComponent],\n exports: [ProgressBarComponent],\n imports: [\n CommonModule\n ]\n})\nexport class ProgressBarModule {\n}\n","import {\n AbstractControl,\n FormControl,\n FormGroup,\n ValidationErrors,\n Validators,\n} from '@angular/forms';\nimport { TableColumn } from '../component/table/contract/table-column';\nimport { ArrayUtil } from '../common/util/array-util';\n\nexport class FormsUtil {\n static validateAllFormFields(formGroup: FormGroup) {\n Object.keys(formGroup.controls).forEach((field) => {\n const control = formGroup.get(field);\n if (control instanceof FormControl) {\n control.markAsTouched({ onlySelf: true });\n control.markAsDirty({ onlySelf: true });\n } else if (control instanceof FormGroup) {\n this.validateAllFormFields(control);\n }\n });\n }\n\n static controlIsInvalid(formGroup: FormGroup, controlName: string) {\n return (\n formGroup.controls[controlName]?.invalid &&\n formGroup.controls[controlName]?.dirty\n );\n }\n\n static matchValuesValidator(\n matchTo: string\n ): (control: AbstractControl) => ValidationErrors | null {\n return (control: AbstractControl): ValidationErrors | null =>\n !!control.parent &&\n !!control.parent.value &&\n control.value === control.parent.controls[matchTo].value\n ? null\n : { isMatching: false };\n }\n\n static requiredIf(\n value: boolean\n ): (control: AbstractControl) => ValidationErrors | null {\n return (control: AbstractControl): ValidationErrors | null =>\n !!control.parent &&\n !!control.parent.value &&\n control.value != null &&\n value\n ? null\n : { isMatching: false };\n }\n\n static initFormFromColumns(columns: TableColumn[], dataItem: any) {\n const form = new FormGroup({});\n const flat = ArrayUtil.flatten(columns, 'columns');\n flat.forEach((column: TableColumn) => {\n const control = new FormControl(\n {\n value: dataItem ? dataItem[column.name] : undefined,\n disabled: !column.editable,\n },\n FormsUtil.getValidators(column)\n );\n form.registerControl(column.name, control);\n });\n return form;\n }\n\n static getValidators(column: TableColumn) {\n const validators = [];\n if (column.required) {\n validators.push(Validators.required);\n }\n if (column.minValue != null) {\n validators.push(Validators.min(column.minValue));\n }\n if (column.maxValue != null) {\n validators.push(Validators.max(column.maxValue));\n }\n return validators;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nexport const TOGGLE_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-toggle',\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n providers: [TOGGLE_CONTROL_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleComponent implements ControlValueAccessor, OnInit {\n @HostBinding('attr.tabindex') tabindex = 0;\n @HostBinding('class.toggle') toggleClass = true;\n\n get paletteClass() {\n if (this.palette) {\n return `toggle-button-${this.palette}`;\n }\n }\n\n @Input() palette = 'primary';\n @Input() noLabel: boolean;\n\n /**\n * компонент неактивен\n */\n @HostBinding('class.toggle_disabled')\n @Input()\n disabled: boolean;\n\n /**\n * Значение\n */\n private model$: boolean;\n\n get model(): any {\n return this.model$;\n }\n\n set model(v: any) {\n if (v !== this.model$) {\n this.model$ = v;\n this.onChange(v);\n }\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n @HostListener('click')\n changeValue() {\n if (this.disabled) {\n return;\n }\n this.model = !this.model;\n }\n\n writeValue(model: boolean) {\n this.model$ = model;\n this.cdr.markForCheck();\n }\n\n ngOnInit() {}\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","<span class=\"font-body-3 row_auto\" *ngIf=\"!noLabel\">\n <ng-content></ng-content>\n</span>\n<div class=\"toggle-button\" [class.toggle-button-on]=\"model\" [ngClass]=\"paletteClass\">\n <div class=\"toggle-button-circle\"></div>\n</div>\n","import {\n ChangeDetectorRef,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DynamicComponentService } from '../common/service/dynamic-component.service';\nimport { Align } from '../common/enum/align.enum';\nimport { VerticalAlign } from '../common/enum/vertical-align.enum';\nimport { filter, takeWhile } from 'rxjs/operators';\nimport { TetaContentRef } from '../common/contract/teta-content-ref';\nimport { PopupContentComponent } from '../component/dynamic-component/popup-content/popup-content.component';\n\n@Directive()\nexport abstract class DynamicContentBaseDirective implements OnInit, OnDestroy {\n @Input() data: any;\n @Input() className: string | string[];\n @Input() align: Align = Align.left;\n @Input() verticalAlign: VerticalAlign = VerticalAlign.bottom;\n @Input() appendToBody: boolean;\n @Input() set open(open: boolean) {\n this._open = open;\n if (this._open) {\n this.createContentRef();\n } else {\n this.destroyContentRef();\n }\n }\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n protected _alive = true;\n protected _componentRef: ComponentRef<any>;\n protected _content: TetaContentRef;\n protected _open = false;\n\n protected abstract get _dynamicContent():\n | string\n | TemplateRef<any>\n | Type<any>;\n\n protected constructor(\n protected _document: any,\n protected _elementRef: ElementRef,\n protected _service: DynamicComponentService,\n protected _injector: Injector,\n protected _zone: NgZone,\n protected _cdr: ChangeDetectorRef\n ) {\n this._zone.onStable\n .pipe(\n takeWhile((_) => this._alive),\n filter((_) => this._open)\n )\n .subscribe((_) => {\n this.setPosition();\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n this.destroyContentRef();\n }\n\n ngOnInit(): void {}\n\n protected createContentRef<T>(\n className?: string | string[]\n ): ComponentRef<T> {\n if (!this._componentRef) {\n this._open = true;\n const injector = this._service.getInjector(this.data, this._injector);\n const context = this._service.getContext(this._dynamicContent, this.data);\n this._content = this._service.createContent(\n this._dynamicContent,\n this._injector,\n context\n );\n this._componentRef = this._service.createComponent(\n PopupContentComponent,\n this._content,\n injector,\n this.appendToBody ? this._document.body : this._elementRef.nativeElement\n );\n if (className) {\n this._componentRef.instance.addClass(className);\n }\n }\n return this._componentRef;\n }\n\n protected destroyContentRef(): void {\n if (this._open) {\n this._open = false;\n this._service.destroy(\n this._componentRef,\n this._content,\n this.appendToBody ? this._document.body : this._elementRef.nativeElement\n );\n this._componentRef = null;\n }\n }\n\n protected abstract setPosition(): void;\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport {DynamicContentBaseDirective} from '../dynamic-content-base.directive';\nimport {DOCUMENT} from '@angular/common';\nimport {DynamicComponentService} from '../../common/service/dynamic-component.service';\nimport {PositionUtil} from '../../common/util/position-util';\nimport {ArrayUtil} from '../../common/util/array-util';\nimport {Align} from '../../common/enum/align.enum';\nimport {VerticalAlign} from '../../common/enum/vertical-align.enum';\nimport {DomUtil} from '../../common/util/dom-util';\nimport Timeout = NodeJS.Timeout;\n\n@Directive({\n selector: '[tetaHint]',\n})\nexport class HintDirective\n extends DynamicContentBaseDirective\n implements OnDestroy {\n /**\n * Строка, шаблон или компонент для создания контекстного меню\n */\n @Input() tetaHint: string | TemplateRef<any> | Type<any>;\n @Input() override align: Align = Align.center;\n @Input() override verticalAlign: VerticalAlign = VerticalAlign.top;\n @Input() delay = 300;\n\n get _dynamicContent() {\n return this.tetaHint;\n }\n\n private _timeout: Timeout;\n private _componentRect: any;\n\n constructor(\n @Inject(DOCUMENT)\n protected override _document: any,\n protected override _elementRef: ElementRef,\n protected override _service: DynamicComponentService,\n protected override _injector: Injector,\n protected override _zone: NgZone,\n protected override _cdr: ChangeDetectorRef\n ) {\n super(_document, _elementRef, _service, _injector, _zone, _cdr);\n }\n\n @HostListener('mouseenter', ['$event'])\n mouseenter(): void {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(() => {\n this.createHint();\n }, this.delay);\n }\n\n @HostListener('mouseleave', ['$event'])\n mouseleave(): void {\n clearTimeout(this._timeout);\n if (this._open && this._componentRef) {\n this._timeout = setTimeout(() => {\n this.destroyContentRef();\n }, this.delay);\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent): void {\n if (\n this._open &&\n this._componentRef &&\n DomUtil.clickedInside(this._componentRef.location.nativeElement, event)\n ) {\n event.stopPropagation();\n }\n }\n\n protected setPosition() {\n if (this._componentRef && this._open) {\n if (!this._componentRect) {\n this._componentRect =\n this._componentRef.location.nativeElement.getBoundingClientRect();\n }\n const position = PositionUtil.getPosition(\n this._elementRef.nativeElement.getBoundingClientRect(),\n this._componentRect,\n this.align,\n this.verticalAlign,\n 0,\n 4\n );\n PositionUtil.setElementPosition(\n this._componentRef.location.nativeElement,\n position\n );\n }\n }\n\n private createHint(): void {\n if (!this._dynamicContent) {\n return;\n }\n this._componentRef = this.createContentRef();\n this._componentRef.instance.className = [\n ...ArrayUtil.asArray(this.className),\n 'hint',\n ];\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableColumn } from '../../../table/contract/table-column';\nimport { IDictionary } from '../../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../../common/contract/i-id-name';\nimport { FilterType } from '../../../filter/enum/filter-type.enum';\nimport { FormGroup } from '@angular/forms';\nimport { FormsUtil } from '../../../../util/forms-util';\nimport { TranslocoService } from '@ngneat/transloco';\nimport { filter, takeWhile } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\nimport {Align} from '../../../../common/enum/align.enum';\n\n@Component({\n selector: 'teta-property-grid-item',\n templateUrl: './property-grid-item.component.html',\n styleUrls: ['./property-grid-item.component.scss'],\n})\nexport class PropertyGridItemComponent<T> implements OnInit, OnDestroy {\n @Input() column: TableColumn;\n @Input() hideNonEditable: boolean;\n @Input() dict: IDictionary<IIdName<any>[]>;\n\n @Input()\n set formGroup(form: FormGroup) {\n this._formGroup = form;\n this._formSub?.unsubscribe();\n this._formSub = this._formGroup.controls[this.column.name].valueChanges\n .pipe(\n takeWhile(() => this._alive),\n filter(\n (_) =>\n this.column.filterType !== FilterType.string &&\n this.column.filterType !== FilterType.number\n )\n )\n .subscribe((_) => {\n this.controlValueChange.emit({\n id: _,\n name: this.column.name,\n });\n });\n }\n\n get formGroup() {\n return this._formGroup;\n }\n\n @Input() horizontal: boolean;\n @Output() controlValueChange = new EventEmitter<IIdName<any>>();\n align = Align;\n filterTypeEnum = FilterType;\n\n private _formGroup: FormGroup;\n private _formSub: Subscription;\n\n get caption(): string {\n if (this.column.filterType === FilterType.boolean) {\n return '';\n }\n return `${this.column.caption}${\n this.column.unit ? `, ${this.column.unit}` : ''\n }`;\n }\n\n private _alive = true;\n\n constructor(private _transloco: TranslocoService) {}\n\n getDict() {\n const dict = this.dict[this.column.name];\n if (this.column.parentName?.length > 0) {\n return dict?.filter(\n (dictItem: IIdName<any>) =>\n dictItem.parentId ===\n this.formGroup.getRawValue()[this.column.parentName]\n );\n }\n return dict;\n }\n\n controlIsInvalid(controlName: string) {\n return FormsUtil.controlIsInvalid(this.formGroup, controlName);\n }\n\n getError(column: TableColumn): string {\n const control = this.formGroup.get(column.name);\n if (control?.hasError('required')) {\n return this._transloco.translate('errors.field_is_required');\n }\n if (control?.hasError('min')) {\n return this._transloco.translate('errors.min_value', {\n value: column.minValue,\n });\n }\n if (control?.hasError('max')) {\n return this._transloco.translate('errors.max_value', {\n value: column.maxValue,\n });\n }\n }\n\n valueChange() {\n this.controlValueChange.emit({\n id: this.formGroup.controls[this.column.name].value,\n name: this.column.name,\n });\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy() {\n this._alive = false;\n this._formSub?.unsubscribe();\n }\n}\n","<teta-input [label]=\"caption\"\n [tetaHint]=\"column.hint\"\n [align]=\"align.left\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n *ngIf=\"column.editable || !hideNonEditable\">\n <ng-container [ngSwitch]=\"column.filterType\">\n <teta-select class=\"row_auto\"\n *ngSwitchCase=\"filterTypeEnum.list\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n <teta-date-picker *ngSwitchCase=\"filterTypeEnum.date\"\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-date-picker>\n <teta-toggle *ngSwitchCase=\"filterTypeEnum.boolean\"\n [formControlName]=\"column.name\">{{column.caption}}</teta-toggle>\n <teta-text-field class=\"row_auto\"\n *ngSwitchDefault\n (focusout)=\"valueChange()\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"></teta-text-field>\n </ng-container>\n <div *ngIf=\"controlIsInvalid(column.name)\"\n ngProjectAs=\"message\"\n class=\"color-red-50\">\n {{getError(column)}}\n </div>\n</teta-input>\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableColumn } from '../../../table/contract/table-column';\nimport { IDictionary } from '../../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../../common/contract/i-id-name';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'teta-property-grid-group',\n templateUrl: './property-grid-group.component.html',\n styleUrls: ['./property-grid-group.component.scss'],\n})\nexport class PropertyGridGroupComponent<T> implements OnInit {\n @HostBinding('class.form-container') formClass = true;\n @Input() column: TableColumn;\n @Input() hideNonEditable: boolean;\n @Input() dict: IDictionary<IIdName<any>[]>;\n @Input() formGroup: FormGroup;\n @Input() horizontal: boolean;\n @Output() controlValueChange = new EventEmitter<IIdName<any>>();\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<div class=\"font-title-3\">{{column.caption}}</div>\n<ng-container *ngFor=\"let col of column.columns\">\n <ng-container *ngIf=\"col.columns?.length < 1\">\n <teta-property-grid-item *ngIf=\"column.editable || !hideNonEditable\"\n [dict]=\"dict\"\n [column]=\"col\"\n [hideNonEditable]=\"hideNonEditable\"\n (controlValueChange)=\"controlValueChange.emit($event)\"\n [horizontal]=\"horizontal\"\n [formGroup]=\"formGroup\"></teta-property-grid-item>\n </ng-container>\n <ng-container *ngIf=\"col.columns?.length > 0\">\n <teta-property-grid-group [dict]=\"dict\"\n [column]=\"col\"\n [hideNonEditable]=\"hideNonEditable\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"controlValueChange.emit($event)\"\n [formGroup]=\"formGroup\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n","import {\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableColumn } from '../../table/contract/table-column';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'teta-property-grid',\n templateUrl: './property-grid.component.html',\n styleUrls: ['./property-grid.component.scss'],\n})\nexport class PropertyGridComponent<T> implements OnInit, OnDestroy {\n @HostBinding('class.form-container') formClass = true;\n\n @Input() hideNonEditable: boolean;\n @Input() columns: TableColumn[];\n @Input() dict: IDictionary<IIdName<any>[]>;\n @Input() formGroup: FormGroup;\n @Input() horizontal: boolean;\n\n @Output() controlValueChange = new EventEmitter<IIdName<any>>();\n\n private _alive = true;\n\n constructor() {}\n\n onControlValueChange(event: IIdName<any>) {\n const affected = this.columns.filter((_) => _.parentName === event.name);\n if (affected?.length) {\n affected.forEach((item) => {\n const value = this.formGroup.getRawValue()[item.name];\n if (value) {\n const dictValue = this.getDictValue(value, item.name);\n if (dictValue && dictValue.parentId !== event.id) {\n const newObj = {};\n newObj[item.name] = null;\n this.formGroup.patchValue(newObj);\n }\n }\n });\n }\n this.controlValueChange.emit(event);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n private getDictValue(value: any, name: string) {\n return this.dict[name]?.find((_) => _.id === value);\n }\n}\n","<ng-container *ngIf=\"columns?.length\">\n <ng-container *ngFor=\"let column of columns\">\n <teta-property-grid-item *ngIf=\"column.columns?.length < 1 && (column.editable || !hideNonEditable)\"\n [dict]=\"dict\"\n [column]=\"column\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-item>\n <teta-property-grid-group *ngIf=\"column.columns?.length > 0\"\n [dict]=\"dict\"\n [column]=\"column\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-numeric-item-default',\n templateUrl: './numeric-item-default.component.html',\n styleUrls: ['./numeric-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumericItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>numeric-item-default works!</p>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-date-item-default',\n templateUrl: './date-item-default.component.html',\n styleUrls: ['./date-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>date-item-default works!</p>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-list-item-default',\n templateUrl: './list-item-default.component.html',\n styleUrls: ['./list-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>list-item-default works!</p>\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'teta-string-item-default',\n templateUrl: './string-item-default.component.html',\n styleUrls: ['./string-item-default.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StringItemDefaultComponent implements OnInit {\n constructor() {}\n\n ngOnInit(): void {}\n}\n","<p>string-item-default works!</p>\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {formatNumber} from '../util/number-helper';\n\n@Pipe({\n name: 'tetaNumber'\n})\nexport class NumberPipe implements PipeTransform {\n transform(value: number,\n decimalLength: number = 2,\n chunkDelimiter: string = '',\n decimalDelimiter: string = '.',\n chunkLength: number = 3): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (value !== value / 1) {\n return value.toString();\n }\n value /= 1;\n return formatNumber(value,\n decimalLength,\n chunkDelimiter,\n decimalDelimiter,\n chunkLength);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {NumberPipe} from './number.pipe';\n\n@NgModule({\n declarations: [NumberPipe],\n exports: [\n NumberPipe\n ],\n imports: [\n CommonModule\n ]\n})\nexport class NumberPipeModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToggleComponent } from './toggle/toggle.component';\nimport { IconModule } from '../icon/icon.module';\n\n@NgModule({\n declarations: [ToggleComponent],\n exports: [ToggleComponent],\n imports: [CommonModule, IconModule],\n})\nexport class ToggleModule {}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {HintDirective} from './hint.directive';\nimport {DynamicComponentModule} from '../../component/dynamic-component/dynamic-component.module';\n\n@NgModule({\n declarations: [HintDirective],\n exports: [HintDirective],\n imports: [\n CommonModule,\n DynamicComponentModule\n ]\n})\nexport class HintModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {PropertyGridComponent} from './property-grid/property-grid.component';\nimport {NumericItemDefaultComponent} from './default/numeric-item-default/numeric-item-default.component';\nimport {DateItemDefaultComponent} from './default/date-item-default/date-item-default.component';\nimport {ListItemDefaultComponent} from './default/list-item-default/list-item-default.component';\nimport {StringItemDefaultComponent} from './default/string-item-default/string-item-default.component';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {NumberPipeModule} from '../../pipe/number-pipe/number-pipe.module';\nimport {DatePickerModule} from '../date-picker/date-picker.module';\nimport {SelectModule} from '../select/select.module';\nimport {PropertyGridGroupComponent} from './property-grid/property-grid-group/property-grid-group.component';\nimport {PropertyGridItemComponent} from './property-grid/property-grid-item/property-grid-item.component';\nimport {OnlyNumberModule} from '../../directive/only-number/only-number.module';\nimport {InputModule} from '../input/input.module';\nimport {ToggleModule} from '../toggle/toggle.module';\nimport {TRANSLOCO_SCOPE, TranslocoModule} from '@ngneat/transloco';\nimport {HintModule} from '../../directive/hint/hint.module';\n\n@NgModule({\n declarations: [\n PropertyGridComponent,\n NumericItemDefaultComponent,\n DateItemDefaultComponent,\n ListItemDefaultComponent,\n StringItemDefaultComponent,\n PropertyGridGroupComponent,\n PropertyGridItemComponent,\n ],\n exports: [PropertyGridComponent],\n imports: [\n CommonModule,\n FormsModule,\n NumberPipeModule,\n DatePickerModule,\n SelectModule,\n OnlyNumberModule,\n InputModule,\n ToggleModule,\n ReactiveFormsModule,\n TranslocoModule,\n HintModule,\n ],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: {scope: 'errors', alias: 'errors'},\n multi: true,\n },\n ],\n})\nexport class PropertyGridModule {\n}\n","export enum SidebarPosition {\n left,\n right,\n bottom,\n top\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { SidebarPosition } from '../sidebar-position.enum';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'teta-sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('sidebar', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(300, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(300, style({ opacity: '0' }))]),\n ]),\n ],\n})\nexport class SidebarComponent implements OnInit {\n @Input() position: SidebarPosition = SidebarPosition.left;\n @Input() backdrop: boolean;\n @Input() open: boolean;\n @Output() openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Input() className: string | string[];\n\n @HostBinding('style.z-index') zIndex = 10;\n\n sidebarPosition = SidebarPosition;\n\n constructor() {}\n\n setOpen(value: boolean) {\n this.open = value;\n this.openChange.emit(this.open);\n }\n\n ngOnInit(): void {}\n}\n","<div *ngIf=\"backdrop && open\"\n [@sidebar]\n (click)=\"setOpen(false)\"\n class=\"sidebar-backdrop\"></div>\n<div class=\"sidebar\"\n [@sidebar]\n [ngClass]=\"className\"\n [class.sidebar-top]=\"position === sidebarPosition.top\"\n [class.sidebar-bottom]=\"position === sidebarPosition.bottom\"\n [class.sidebar-left]=\"position === sidebarPosition.left\"\n [class.sidebar-right]=\"position === sidebarPosition.right\"\n *ngIf=\"open\">\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport {ButtonModule} from '../button/button.module';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [SidebarComponent],\n exports: [SidebarComponent],\n imports: [\n CommonModule,\n ButtonModule,\n IconModule\n ]\n})\nexport class SidebarModule { }\n","import {Injectable} from '@angular/core';\nimport {Observable, ReplaySubject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SwitchService {\n readonly value: Observable<any>;\n private readonly value$: ReplaySubject<any> = new ReplaySubject<any>(1);\n\n constructor() {\n this.value = this.value$.asObservable();\n }\n\n setValue(value: any) {\n this.value$.next(value);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n HostBinding,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { SwitchService } from '../switch.service';\nimport { filter, takeWhile } from 'rxjs/operators';\n\nexport const SWITCH_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent),\n multi: true,\n};\n\n@Component({\n selector: 'teta-switch',\n templateUrl: './switch.component.html',\n styleUrls: ['./switch.component.scss'],\n providers: [SWITCH_CONTROL_VALUE_ACCESSOR, SwitchService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n @HostBinding('class.switch') switchClass = true;\n\n private _alive = true;\n private _value: any;\n\n constructor(private svc: SwitchService, private cdr: ChangeDetectorRef) {\n this.svc.value\n .pipe(\n takeWhile((_) => this._alive),\n filter((_) => _ !== this._value)\n )\n .subscribe((_) => {\n this.onChange(_);\n this._value = _;\n });\n }\n\n writeValue(model: any) {\n this._value = model;\n this.svc.setValue(model);\n this.cdr.markForCheck();\n }\n\n onChange(_: any) {}\n\n onTouched() {}\n\n registerOnChange(fn: (_: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { SwitchService } from '../switch.service';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-switch-button',\n templateUrl: './switch-button.component.html',\n styleUrls: ['./switch-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchButtonComponent implements OnInit, OnDestroy {\n @Input() value: any;\n @Input() class: string;\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'switch-button'];\n if (\n this.svcValue === this.value ||\n (this.svcValue instanceof Array && this.svcValue.indexOf(this.value) >= 0)\n ) {\n result.push('switch-button_active');\n }\n return result.join(' ');\n }\n\n private svcValue: any;\n private _alive = true;\n\n constructor(private svc: SwitchService, private cdr: ChangeDetectorRef) {\n this.svc.value.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.svcValue = _;\n this.cdr.markForCheck();\n });\n }\n\n @HostListener('click', ['$event']) click(event: MouseEvent): void {\n this.svc.setValue(this.value);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<ng-content></ng-content>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SwitchComponent} from './switch/switch.component';\nimport {SwitchButtonComponent} from './switch-button/switch-button.component';\n\n\n@NgModule({\n declarations: [SwitchComponent, SwitchButtonComponent],\n exports: [SwitchComponent, SwitchButtonComponent],\n imports: [\n CommonModule\n ]\n})\nexport class SwitchModule {\n}\n","import * as hash from 'object-hash';\n\nexport class TableRow<T> {\n set edit(value: boolean) {\n if (value !== this._edit) {\n this._edit = value;\n this._hash = null;\n }\n }\n\n get edit(): boolean {\n return this._edit;\n }\n\n expanded = false;\n showDetails = false;\n data: T;\n isGroup: boolean;\n level: number;\n path: any[] = [];\n groupColumn: string;\n groupValue: any[] = [];\n\n // children: GridRow<T>[] = [];\n // parents: GridRow<T>[];\n // private backup: any = {};\n private _edit = false;\n private _hash: string | null;\n\n constructor(data?: any) {\n if (data) {\n this.data = data;\n }\n }\n\n public get hash(): string {\n if (!this._hash) {\n const hashObj: any = { ...this.data };\n if (hashObj.children) {\n delete hashObj.children;\n }\n this._hash = hash.sha1(hashObj);\n }\n return this._hash;\n }\n\n public editData(items?: any): void {\n this.data = items;\n this._hash = null;\n }\n}\n","import {FilterItem} from '../../filter/contarct/filter-item';\nimport {FilterType} from '../../filter/enum/filter-type.enum';\nimport {StringFilterType} from '../../filter/enum/string-filter-type.enum';\nimport {ListFilterType} from '../../filter/enum/list-filter-type.enum';\nimport {TableRow} from './table-row';\nimport {AggregationType} from '../enum/aggregation-type.enum';\nimport {TemplateRef} from '@angular/core';\nimport {ICellCoordinates} from './i-cell-coordinates';\n\nexport class TableColumn extends FilterItem {\n /**\n * Ширина\n */\n width = 150;\n /**\n * Коэффициент растяжения ячейки\n */\n flex = 0;\n /**\n * Стобец закреплен\n */\n locked: boolean;\n /**\n * Название столбца в строке результатов\n */\n override name: string;\n /**\n * Название столбца родителя\n */\n parentName: string;\n /**\n * Название столбца для заголовка таблицы\n */\n override caption: string;\n /**\n * Единицы измерения\n */\n unit: string;\n /**\n * список style классов для шапки таблицы\n */\n headCellClass: string[];\n /**\n * список style классов для ячейки таблицы\n */\n cellClass: string[];\n /**\n * Дополнительные данные, свободное описание, доступны внутри компонета ячейки, можно прокинуть callback например\n */\n data: any;\n /**\n * Колонка доступна для редактирования\n */\n editable: boolean | ((coordinates: ICellCoordinates<any>) => boolean);\n /**\n * Компонент для рендера ячейки\n */\n cellComponent: any;\n /**\n * Компонент для рендера заголовка столбца ячейки\n */\n headCellComponent: any;\n /**\n * Custom head dropdown for column\n */\n headDropdownTemplate: TemplateRef<any>;\n /**\n * Группировать по этому столбцу\n */\n groupBy: boolean;\n /**\n * Порядок группировки\n */\n groupingOrder = 0;\n /**\n *\n */\n groupByFn: ((row: TableRow<any>) => string) | undefined;\n /**\n * Дочерние колонки\n */\n override columns: TableColumn[];\n\n /**\n * Aggregate type\n */\n aggregate: AggregationType;\n\n /**\n * Значение по умолчанию при создании записи\n */\n defaultValue: any;\n\n /**\n * Значение по умолчанию при создании записи\n */\n maxValue: number;\n\n /**\n * Значение по умолчанию при создании записи\n */\n minValue: number;\n\n /**\n * Поле обязательно для заполнения\n */\n required: boolean;\n\n /**\n * Инициализация из анонимного объекта\n */\n constructor(options?: {\n width?: number;\n flex?: number;\n sortOrder?: number;\n locked?: boolean;\n name?: string;\n parentName?: string;\n caption?: string;\n hint?: string;\n unit?: string;\n sortable?: boolean;\n sortField?: string;\n filterable?: boolean;\n filterField?: string;\n filterType?: FilterType | null;\n stringFilterType?: StringFilterType;\n listFilterType?: ListFilterType;\n strict?: boolean;\n headCellClass?: string[];\n cellClass?: string[];\n data?: any;\n editable?: boolean | ((coordinates: ICellCoordinates<any>) => boolean);\n objectType?: boolean;\n cellComponent?: any;\n headCellComponent?: any;\n headDropdownTemplate?: TemplateRef<any>;\n filterComponent?: any;\n groupBy?: boolean;\n groupingOrder?: number;\n groupByFn?: (row: TableRow<any>) => string;\n columns?: any[];\n aggregate?: AggregationType;\n defaultValue?: any;\n maxValue?: number;\n minValue?: number;\n required?: boolean;\n }) {\n super(options);\n this.width = options?.width ?? 150;\n this.flex = options?.flex ?? 0;\n this.headCellClass = options?.headCellClass ?? [];\n this.cellClass = options?.cellClass ?? [];\n this.locked = options?.locked ?? false;\n this.parentName = options?.parentName;\n this.unit = options?.unit ?? '';\n this.data = options?.data;\n this.editable = options?.editable ?? true;\n this.groupBy = options?.groupBy ?? false;\n this.groupingOrder = options?.groupingOrder ?? 0;\n this.groupByFn = options?.groupByFn;\n this.headCellComponent = options?.headCellComponent;\n this.headDropdownTemplate = options?.headDropdownTemplate;\n this.cellComponent = options?.cellComponent;\n this.aggregate = options?.aggregate;\n this.defaultValue = options?.defaultValue;\n this.maxValue = options?.maxValue;\n this.minValue = options?.minValue;\n this.required = options?.required;\n this.columns = options?.columns?.map((x) => new TableColumn(x)) ?? [];\n }\n}\n","import {TableColumn} from './table-column';\n\nexport class ColumnReorderEvent {\n source: TableColumn;\n target: TableColumn;\n\n constructor(source: TableColumn, target: TableColumn) {\n this.source = source;\n this.target = target;\n }\n}\n","import { FilterState } from '../../filter/contarct/filter-state';\nimport { TableColumn } from '../contract/table-column';\nimport { SortParam } from '../../filter/contarct/sort-param';\nimport { FilterType } from '../../filter/enum/filter-type.enum';\nimport { SortEvent } from '../contract/sort-event';\n\nexport class StateUtil {\n static hasSortedColumns(state: FilterState): boolean {\n return state.sortParams && state.sortParams.length > 0;\n }\n\n static hasFilteredColumns(state: FilterState): boolean {\n let hasFilters = false;\n if (\n state.stringFilters &&\n state.stringFilters.some((filter) => filter.value && filter.value.length)\n ) {\n hasFilters = true;\n }\n if (\n state.listFilters &&\n state.listFilters.some((filter) => filter.value && filter.value.length)\n ) {\n hasFilters = true;\n }\n if (\n state.numericFilters &&\n state.numericFilters.some(\n (filter) =>\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined) ||\n (filter.value.equalsTo !== null &&\n filter.value.equalsTo !== undefined))\n )\n ) {\n hasFilters = true;\n }\n if (\n state.dateFilters &&\n state.dateFilters.some(\n (filter) =>\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined))\n )\n ) {\n hasFilters = true;\n }\n\n return hasFilters;\n }\n\n static getSortState(\n state: FilterState,\n column: TableColumn\n ): SortParam | null {\n if (state?.sortParams && state.sortParams.length) {\n const param = state.sortParams.find((x) => x.field === column.sortField);\n if (param) {\n return param;\n }\n }\n return null;\n }\n\n static isColumnFiltered(state: FilterState, column: TableColumn): boolean {\n if (!column.filterable) {\n return;\n }\n let filtered = false;\n switch (column.filterType) {\n case FilterType.string:\n if (state?.stringFilters) {\n const filter = state.stringFilters.find(\n (x) => x.field === column.filterField\n );\n if (filter && filter.value && filter.value.length) {\n filtered = true;\n }\n }\n break;\n case FilterType.list:\n if (state?.listFilters) {\n const filter = state.listFilters.find(\n (x) => x.field === column.filterField\n );\n if (filter && filter.value && filter.value.length) {\n filtered = true;\n }\n }\n break;\n case FilterType.number:\n if (state?.numericFilters) {\n const filter = state.numericFilters.find(\n (x) => x.field === column.filterField\n );\n if (\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined) ||\n (filter.value.equalsTo !== null &&\n filter.value.equalsTo !== undefined))\n ) {\n filtered = true;\n }\n }\n break;\n case FilterType.date:\n if (state?.dateFilters) {\n const filter = state.dateFilters.find(\n (x) => x.field === column.filterField\n );\n if (\n filter &&\n filter.value &&\n ((filter.value.lessThan !== null &&\n filter.value.lessThan !== undefined) ||\n (filter.value.greaterThan !== null &&\n filter.value.greaterThan !== undefined))\n ) {\n filtered = true;\n }\n }\n break;\n }\n return filtered;\n }\n\n static sortColumn(sortEvent: SortEvent, state: FilterState): FilterState {\n const column = sortEvent.column;\n const shiftKey = sortEvent.shiftKey;\n const sort = state.sortParams.find(\n (sortParam: SortParam) => sortParam.field === column.sortField\n );\n if (sort === null || sort === undefined) {\n if (!shiftKey) {\n state.sortParams.length = 0;\n }\n state.sortParams.push(\n new SortParam({ field: column.sortField, asc: true, order: 0 })\n );\n } else {\n if (!sort.asc) {\n state.sortParams = StateUtil.clearSortParam(sort, state.sortParams);\n } else {\n sort.asc = !sort.asc;\n if (!shiftKey) {\n state.sortParams = [sort];\n }\n }\n }\n return new FilterState(state);\n }\n\n static clearSortParam(sort: SortParam, sortParams: SortParam[]) {\n const index = sortParams.indexOf(sort);\n sortParams.splice(index, 1);\n return sortParams;\n }\n\n static clearSort(column: TableColumn, state: FilterState): FilterState {\n state.sortParams = state.sortParams.filter(\n (_) => _.field !== column.sortField\n );\n return new FilterState(state);\n }\n\n static clearAllSort(state: FilterState): FilterState {\n state.sortParams = [];\n return new FilterState(state);\n }\n}\n","export enum SelectType {\n none,\n multiple,\n single\n}\n","export class TableColumnStore {\n width: number;\n flex: number;\n locked: boolean;\n name: string;\n columns: TableColumnStore[];\n\n constructor(options?: {\n width?: number;\n flex?: number;\n sortOrder?: number;\n locked?: boolean;\n name?: string;\n columns?: any[];\n }) {\n if (options) {\n this.width = options?.width;\n this.flex = options?.flex;\n this.locked = options?.locked;\n this.name = options?.name;\n this.columns = options?.columns?.map((x) => new TableColumnStore(x));\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {TableRow} from '../contract/table-row';\nimport {ICellCoordinates} from '../contract/i-cell-coordinates';\nimport {TableColumn} from '../contract/table-column';\nimport {FilterState} from '../../filter/contarct/filter-state';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {ColumnResizeEvent} from '../contract/column-resize-event';\nimport {ColumnReorderEvent} from '../contract/column-reorder-event';\nimport {SortEvent} from '../contract/sort-event';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {StateUtil} from '../util/state-util';\nimport {SelectType} from '../enum/select-type.enum';\nimport {EditType} from '../enum/edit-type.enum';\nimport {EditEvent} from '../enum/edit-event.enum';\nimport {ListFilterType} from '../../filter/enum/list-filter-type.enum';\nimport {ListFilter} from '../../filter/contarct/list-filter';\nimport {FilterType} from '../../filter/enum/filter-type.enum';\nimport {NumericFilterValue} from '../../filter/contarct/numeric-filter-value';\nimport {NumericFilter} from '../../filter/contarct/numeric-filter';\nimport {StringFilter} from '../../filter/contarct/string-filter';\nimport {DateFilterValue} from '../../filter/contarct/date-filter-value';\nimport {DateFilter} from '../../filter/contarct/date-filter';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {DateUtil} from '../../../util/date-util';\nimport objectHash from 'object-hash';\nimport {TableColumnStore} from '../contract/table-column-store';\nimport {ICellValue} from '../contract/i-cell-value';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TableService<T> {\n columns: Observable<TableColumn[]>;\n displayData: Observable<TableRow<T>[]>;\n dict: Observable<IDictionary<IIdName<any>[]>>;\n state: Observable<FilterState>;\n selectType: SelectType;\n editRowStart: Observable<ICellCoordinates<T>>;\n editRowStop: Observable<ICellCoordinates<T>>;\n\n editCellStart: Observable<ICellCoordinates<T>>;\n editCellStop: Observable<ICellCoordinates<T>>;\n valueChanged: Observable<ICellCoordinates<T>>;\n valueSet: Observable<ICellValue<T>>;\n stateChanged: Observable<FilterState>;\n filterClear: Observable<TableColumn>;\n groupToggle: Observable<TableRow<T>>;\n selectedRows: Observable<TableRow<T>[]>;\n activeRow: Observable<TableRow<T>>;\n hiddenColumns: Observable<string[]>;\n scrollIndex: Observable<number>;\n\n editType: EditType;\n editEvent: EditEvent;\n rowEditable: boolean | ((row: TableRow<T>) => boolean);\n // cellEditable: boolean | ((row: ICellCoordinates<T>) => boolean);\n\n get dragSource() {\n return this._dragSource;\n }\n\n private initialColumnsHash: string;\n private initialColumns: TableColumn[] = [];\n private displayColumns: TableColumn[] = [];\n private _columns: BehaviorSubject<TableColumn[]> = new BehaviorSubject<TableColumn[]>([]);\n private initialData: TableRow<T>[] = [];\n private _displayData: BehaviorSubject<TableRow<T>[]> = new BehaviorSubject<TableRow<T>[]>([]);\n private _dict: BehaviorSubject<IDictionary<IIdName<any>[]>> =\n new BehaviorSubject<IDictionary<IIdName<any>[]>>({});\n private _state: BehaviorSubject<FilterState> =\n new BehaviorSubject<FilterState>(new FilterState());\n private _cookieName: string;\n private _hiddenCookieName: string;\n private _columnsCookieName: string;\n private _editRowStart = new Subject<ICellCoordinates<T> | null>();\n private _editRowStop = new Subject<ICellCoordinates<T> | null>();\n private _editCellStart = new Subject<ICellCoordinates<T> | null>();\n private _editCellStop = new Subject<ICellCoordinates<T> | null>();\n private _valueChanged = new Subject<ICellCoordinates<T> | null>();\n private _valueSet = new Subject<ICellValue<T>>();\n private _stateChanged = new Subject<FilterState>();\n private _filterClear = new Subject<TableColumn>();\n private _dragSource: TableColumn;\n private _groupToggle = new Subject<TableRow<T>>();\n private _selectedRows = new BehaviorSubject<TableRow<T>[]>([]);\n private _activeRow = new BehaviorSubject<TableRow<T>>(null);\n private _hiddenColumns = new BehaviorSubject<string[]>([]);\n private _scrollIndex = new Subject<number>();\n\n private _currentEditRow: ICellCoordinates<T>;\n private _currentEditCell: ICellCoordinates<T>;\n\n constructor() {\n this.columns = this._columns.asObservable();\n this.displayData = this._displayData.asObservable();\n this.dict = this._dict.asObservable();\n this.state = this._state.asObservable();\n this.editRowStart = this._editRowStart.asObservable();\n this.editRowStop = this._editRowStop.asObservable();\n this.editCellStart = this._editCellStart.asObservable();\n this.editCellStop = this._editCellStop.asObservable();\n this.valueChanged = this._valueChanged.asObservable();\n this.valueSet = this._valueSet.asObservable();\n this.stateChanged = this._stateChanged.asObservable();\n this.filterClear = this._filterClear.asObservable();\n this.groupToggle = this._groupToggle.asObservable();\n this.selectedRows = this._selectedRows.asObservable();\n this.activeRow = this._activeRow.asObservable();\n this.hiddenColumns = this._hiddenColumns.asObservable();\n this.scrollIndex = this._scrollIndex.asObservable();\n }\n\n setData(data: T[]): void {\n this.initialData = data?.map((_) => new TableRow<T>(_));\n this._displayData.next(this.initialData);\n }\n\n setDict(dict: IDictionary<IIdName<any>[]>): void {\n this._dict.next(dict);\n }\n\n setColumns(columns: TableColumn[]): void {\n this.initialColumns = columns ? columns.map((_) => new TableColumn(_)) : [];\n this.initialColumnsHash = objectHash(this.initialColumns, {\n algorithm: 'sha1',\n ignoreUnknown: true,\n excludeKeys: key => key === 'headDropdownTemplate',\n });\n const restored = this.restoreColumns();\n\n if (restored) {\n this.setDisplayColumns(restored);\n } else {\n this.setDisplayColumns(this.initialColumns);\n }\n }\n\n restoreDefaultColumns() {\n this.setDisplayColumns(this.initialColumns);\n this.clearColumnsState();\n }\n\n updateColumns(columns: TableColumn[]): void {\n this.setDisplayColumns(columns);\n this.saveColumnsState();\n }\n\n saveColumnsState() {\n if (this._cookieName) {\n localStorage.setItem(\n this._columnsCookieName,\n JSON.stringify({\n hash: this.initialColumnsHash,\n columns: this.displayColumns.map((_) => new TableColumnStore(_)),\n })\n );\n }\n }\n\n clearColumnsState() {\n localStorage.removeItem(this._columnsCookieName);\n }\n\n setDisplayColumns(columns: TableColumn[]): void {\n this.displayColumns = columns ? columns.map((_) => new TableColumn(_)) : [];\n this._columns.next(this.displayColumns);\n }\n\n restoreColumns() {\n const savedColumns = JSON.parse(\n localStorage.getItem(this._columnsCookieName)\n );\n if (savedColumns && savedColumns.hash === this.initialColumnsHash) {\n return this.restoreColumnsState(savedColumns.columns);\n }\n return null;\n }\n\n restoreColumnsState(columns: TableColumnStore[]) {\n return columns.map((column: TableColumnStore) => {\n const found = ArrayUtil.findRecursive(\n this.initialColumns,\n (item) => item.name === column.name,\n 'columns'\n );\n const resultColumn = new TableColumn(found);\n resultColumn.width = column.width;\n resultColumn.flex = column.flex;\n resultColumn.locked = column.locked;\n if (column.columns?.length > 0) {\n resultColumn.columns = this.restoreColumnsState(column.columns);\n }\n return resultColumn;\n });\n }\n\n setState(state: FilterState): void {\n state.save(this._cookieName);\n this._state.next(state);\n }\n\n setCookieName(name: string): void {\n this._cookieName = name;\n this._hiddenCookieName = `${this._cookieName}_hidden_columns`;\n this._columnsCookieName = `${this._cookieName}_columns`;\n }\n\n restoreState(): void {\n let state: FilterState;\n if (this._cookieName?.length > 0 && FilterState.restore(this._cookieName)) {\n let newState = Object.assign(\n this._state.value,\n FilterState.restore(this._cookieName)\n );\n newState = DateUtil.convertDateStringsToDates(newState);\n state = new FilterState(newState);\n } else {\n state = new FilterState();\n }\n this.setState(state);\n }\n\n saveHiddenColumns(hiddenColumns: string[]): void {\n localStorage.setItem(this._hiddenCookieName, JSON.stringify(hiddenColumns));\n }\n\n restoreHiddenColumns(): void {\n const hiddenColumns = localStorage.getItem(this._hiddenCookieName) || '[]';\n this._hiddenColumns.next(JSON.parse(hiddenColumns));\n }\n\n sort(sortEvent: SortEvent): void {\n if (sortEvent.column.sortable) {\n this.setState(StateUtil.sortColumn(sortEvent, this._state.value));\n }\n }\n\n clearSort(column: TableColumn): void {\n this.setState(StateUtil.clearSort(column, this._state.value));\n }\n\n clearAllSort(): void {\n this.setState(StateUtil.clearAllSort(this._state.value));\n }\n\n clearFilter(column: TableColumn) {\n const state = this._state.value;\n if (column !== null && column !== undefined && column.filterable) {\n switch (column.filterType) {\n case FilterType.date:\n state.addDateFilter(\n new DateFilter({\n name: column.name,\n field: column.filterField,\n value: new DateFilterValue(),\n })\n );\n break;\n case FilterType.string:\n state.addStringFilter(\n new StringFilter({\n name: column.name,\n field: column.filterField,\n value: '',\n })\n );\n break;\n case FilterType.number:\n state.addNumericFilter(\n new NumericFilter({\n name: column.name,\n field: column.filterField,\n value: new NumericFilterValue(),\n })\n );\n break;\n case FilterType.list:\n state.addListFilter(\n new ListFilter({\n name: column.name,\n field: column.filterField,\n value: [],\n type: ListFilterType.None,\n })\n );\n break;\n }\n this.setState(new FilterState(state));\n }\n }\n\n clearAllFilters() {\n const state = this._state.value;\n state.stringFilters = [];\n state.listFilters = [];\n state.numericFilters = [];\n state.dateFilters = [];\n this.setState(new FilterState(state));\n }\n\n pinColumn(column: TableColumn): void {\n this.displayColumns.forEach((col: TableColumn) => {\n if (col.name === column.name) {\n col.locked = !col.locked;\n }\n });\n this.updateColumns(this.displayColumns);\n }\n\n dragStart(column: TableColumn): void {\n this._dragSource = column;\n }\n\n lockPreviousColumns(column: TableColumn, element: HTMLElement) {\n const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true).sort(\n (a, b) => Number(b.locked) - Number(a.locked)\n );\n const index = flat.indexOf(column);\n const previous = flat.slice(0, index).filter((_) => _.flex > 0);\n if (previous?.length > 0) {\n const tableElement = this.getTableElement(element);\n previous.forEach((item: TableColumn) => {\n const itemCol = tableElement.querySelector(\n `teta-head-cell[data-column=${item.name}]`\n ) as HTMLElement;\n if (itemCol) {\n item.flex = 0;\n item.width = itemCol.clientWidth;\n }\n });\n }\n }\n\n resizeColumn(event: ColumnResizeEvent) {\n if (event.column !== null && event.column !== undefined) {\n event.column.width = event.newWidth < 50 ? 50 : event.newWidth;\n event.column.flex = 0;\n }\n this._columns.next(this.displayColumns);\n this.saveColumnsState();\n }\n\n autosizeColumn(column: TableColumn, target: HTMLElement) {\n const tableElement = this.getTableElement(target);\n this.setColumnAutoWidth(column, tableElement as HTMLElement);\n this._columns.next(this.displayColumns);\n this.saveColumnsState();\n }\n\n autosizeAllColumns(target: HTMLElement) {\n const tableElement = this.getTableElement(target);\n const flat = ArrayUtil.flatten(this.displayColumns, 'columns', true);\n flat.forEach((col) =>\n this.setColumnAutoWidth(col, tableElement as HTMLElement)\n );\n this._columns.next(this.displayColumns);\n this.saveColumnsState();\n }\n\n reorderColumn(column: TableColumn, insertBefore: boolean): void {\n const event = new ColumnReorderEvent(this._dragSource, column);\n if (event.source !== event.target) {\n const sourceParent = this.findParent(event.source, this.displayColumns);\n const targetParent = this.findParent(event.target, this.displayColumns);\n\n if (sourceParent && targetParent) {\n const sourceIndex = sourceParent.indexOf(event.source);\n sourceParent.splice(sourceIndex, 1);\n let targetIndex = targetParent.indexOf(event.target);\n if (!insertBefore) {\n targetIndex = targetIndex + 1;\n }\n targetParent.splice(targetIndex, 0, event.source);\n event.source.locked = event.target.locked;\n\n this.updateColumns(this.displayColumns);\n }\n }\n }\n\n startEditRow(cellCoordinates: ICellCoordinates<T>): void {\n if (this._currentEditRow?.row !== cellCoordinates?.row) {\n if (this._currentEditRow != null) {\n this._editRowStop.next(this._currentEditRow);\n }\n if (cellCoordinates === null) {\n this._editRowStart.next(cellCoordinates);\n this._currentEditRow = cellCoordinates;\n } else {\n if (\n this.boolOrFuncCallback<TableRow<T>>(this.rowEditable)(\n cellCoordinates.row\n )\n ) {\n this._editRowStart.next(cellCoordinates);\n this._currentEditRow = cellCoordinates;\n }\n }\n }\n }\n\n startEditCell(cellCoordinates: ICellCoordinates<T>): void {\n if (\n this._currentEditCell?.column.name !== cellCoordinates?.column.name ||\n this._currentEditCell?.row !== cellCoordinates?.row\n ) {\n if (this._currentEditCell != null) {\n this._editCellStop.next(this._currentEditCell);\n }\n if (\n this.boolOrFuncCallback<ICellCoordinates<T>>(cellCoordinates.column.editable)(\n cellCoordinates\n )\n ) {\n this._editCellStart.next(cellCoordinates);\n this._currentEditCell = cellCoordinates;\n }\n }\n }\n\n setActiveRow(row: TableRow<T>): void {\n this._activeRow.next(row);\n }\n\n selectRows(rows: TableRow<T>[]): void {\n this._selectedRows.next(rows);\n }\n\n selectRow(row: TableRow<T>): void {\n if (this.selectType === SelectType.none) {\n return;\n }\n if (this.selectType === SelectType.single) {\n this._selectedRows.next([row]);\n } else {\n this._selectedRows.next([...this._selectedRows.value, row]);\n }\n }\n\n deselectRow(row: TableRow<T>): void {\n if (this.selectType === SelectType.none) {\n return;\n }\n if (this.selectType === SelectType.single) {\n this._selectedRows.next([]);\n } else {\n this._selectedRows.next(\n this._selectedRows.value.filter((_) => _ !== row)\n );\n }\n }\n\n selectAll() {\n this._selectedRows.next(this._displayData.value);\n }\n\n deselectAll() {\n this._selectedRows.next([]);\n }\n\n allRowsSelected(): boolean | null {\n if (\n this._displayData.value?.length &&\n this._selectedRows.value?.length &&\n this._displayData.value.every(\n (_) => this._selectedRows.value.indexOf(_) >= 0\n )\n ) {\n return true;\n } else if (\n this._selectedRows.value == null ||\n this._selectedRows.value.length === 0\n ) {\n return false;\n }\n return null;\n }\n\n setHiddenColumns(value: string[]) {\n this.saveHiddenColumns(value);\n this._hiddenColumns.next(value);\n }\n\n columnIsHidden(column: TableColumn) {\n return this._hiddenColumns.value.indexOf(column.name) >= 0;\n }\n\n toggleGroup(row: TableRow<T>): void {\n this._groupToggle.next(row);\n }\n\n changeValue(coordinates: ICellCoordinates<T>): void {\n this._valueChanged.next(coordinates);\n }\n\n setValue(cellValue: ICellValue<T>): void {\n this._valueSet.next(cellValue);\n }\n\n getRowByIndex(rowIndex: string) {\n return this._displayData.value[parseInt(rowIndex, 10)];\n }\n\n getColumnByName(columnName: string) {\n return ArrayUtil.findRecursive(\n this.displayColumns,\n (iterableNode) => columnName === iterableNode.name,\n 'columns'\n );\n }\n\n scrollToIndex(index: number) {\n this._scrollIndex.next(null);\n this._scrollIndex.next(index);\n }\n\n boolOrFuncCallback<M>(variable: boolean | ((row: M) => boolean)) {\n return (args: M) => {\n if (typeof variable === 'boolean') {\n return variable;\n } else if (this.isFunction(variable)) {\n return (variable as (row: M) => boolean)(args);\n }\n return true;\n };\n }\n\n private findParent(\n column: TableColumn,\n columns: TableColumn[]\n ): TableColumn[] | null {\n const found = columns.find((x) => x.name === column.name);\n if (found !== null && found !== undefined) {\n return columns;\n }\n for (let i = 0, l = columns.length; i < l; i++) {\n const col = columns[i];\n if (col.columns && col.columns.length) {\n const result = this.findParent(column, col.columns);\n if (result !== null && result !== undefined) {\n return result;\n }\n }\n }\n return null;\n }\n\n private getTableElement(element: HTMLElement) {\n return element.closest('teta-table');\n }\n\n private isFunction(obj: any) {\n return !!(obj && obj?.constructor && obj?.call && obj?.apply);\n }\n\n private setColumnAutoWidth(column: TableColumn, table: HTMLElement) {\n const cells = table.querySelectorAll(\n `teta-cell[data-column=${column.name}] .cell-text`\n );\n let maxWidth = 0;\n cells.forEach((cell) => {\n if (cell.scrollWidth > maxWidth) {\n maxWidth = cell.scrollWidth;\n }\n });\n column.flex = 0;\n column.width = maxWidth + 20;\n }\n}\n","import {TableRow} from '../contract/table-row';\nimport {TableColumn} from '../contract/table-column';\n\nexport abstract class GroupRowComponentBase<T> {\n /**\n * The row details are displayed for\n */\n abstract row: TableRow<T>;\n /**\n * displayed columns\n */\n abstract columns: TableColumn[];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { GroupRowComponentBase } from '../../base/group-row-component-base';\nimport { TableRow } from '../../contract/table-row';\nimport { TableColumn } from '../../contract/table-column';\n\n@Component({\n selector: 'teta-group-row',\n templateUrl: './group-row.component.html',\n styleUrls: ['./group-row.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class GroupRowComponent<T>\n extends GroupRowComponentBase<T>\n implements OnInit\n{\n @Input() row: TableRow<T>;\n @Input() columns: TableColumn[];\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {}\n}\n","<span>{{row.groupValue[row.level]}} ()</span>\n<!--<span>{{row.groupValue[row.level]}} ({{row.children.length}})</span>-->\n","export enum EditType {\n cell,\n row\n}\n","export enum EditEvent {\n click,\n focus,\n doubleClick\n}\n","export class TableContextMenuConfig {\n contextMenu = true;\n copy = true;\n delete = true;\n add = true;\n paste = true;\n\n constructor(options?: {\n contextMenu?: boolean;\n copy?: boolean;\n delete?: boolean;\n add?: boolean;\n paste?: boolean;\n }) {\n if (options) {\n this.contextMenu = options?.contextMenu;\n this.copy = options?.copy;\n this.delete = options?.delete;\n this.add = options?.add;\n this.paste = options?.paste;\n }\n }\n}\n","import {TableColumn} from '../contract/table-column';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {SortParam} from '../../filter/contarct/sort-param';\nimport {ListFilterType} from '../../filter/enum/list-filter-type.enum';\nimport {ListFilter} from '../../filter/contarct/list-filter';\nimport {NumericFilter} from '../../filter/contarct/numeric-filter';\nimport {DateFilter} from '../../filter/contarct/date-filter';\nimport {StringFilterType} from '../../filter/enum/string-filter-type.enum';\nimport {StringFilter} from '../../filter/contarct/string-filter';\nimport {FilterState} from '../../filter/contarct/filter-state';\n\nexport class TableUtil {\n public static getColumnLeaves(column: TableColumn): TableColumn[] | null {\n if (column?.columns?.length > 0) {\n return ArrayUtil.flatten(column.columns, 'columns', true);\n }\n return null;\n }\n\n public static getGridTemplateColumns(columns: TableColumn[]): string {\n const res = columns?.map((column: TableColumn) =>\n column.flex > 0 ? `minmax(${column.width}px, ${column.flex}fr)` : `${column.width}px`).join(' ');\n return res;\n }\n\n static getData<T>(data: T[], state: FilterState): T[] {\n let result: T[] = data;\n result = TableUtil.filterData(result, state);\n result = TableUtil.sortData(result, state);\n return result;\n }\n\n static sortData<T>(data: T[], state: FilterState): T[] {\n let result: T[] = data;\n const func = (sortParam: SortParam) => {\n result = TableUtil.sort(result, sortParam);\n };\n if (state?.sortParams?.length > 0) {\n state.sortParams.forEach(func);\n }\n return result;\n }\n\n static filterData<T>(data: T[], state: FilterState): T[] {\n let result: T[] = data;\n if (state?.stringFilters?.length) {\n const stringFilter = (filter: StringFilter) => {\n result = TableUtil.filterString(result, filter);\n };\n state.stringFilters.forEach(stringFilter);\n }\n if (state?.dateFilters?.length) {\n const dateFilter = (filter: DateFilter) => {\n result = TableUtil.filterDate(result, filter);\n };\n state.dateFilters.forEach(dateFilter);\n }\n if (state?.numericFilters?.length) {\n const numericFilter = (filter: NumericFilter) => {\n result = TableUtil.filterNumber(result, filter);\n };\n state.numericFilters.forEach(numericFilter);\n }\n if (state?.listFilters?.length) {\n const listFilter = (filter: ListFilter) => {\n result = TableUtil.filterList(result, filter);\n };\n state.listFilters.forEach(listFilter);\n }\n return result;\n }\n\n static filterString<T>(data: T[], filter: StringFilter): T[] {\n if (filter.value === null || filter.value === undefined) {\n return data;\n }\n const filterString = (row: T) => {\n const item = row as any;\n if (filter.type === StringFilterType.EndsWith) {\n return item[filter.field].endsWith(filter.value);\n }\n if (filter.type === StringFilterType.Equals) {\n return item[filter.field] === filter.value;\n }\n if (filter.type === StringFilterType.StartsWith) {\n return item[filter.field].startsWith(filter.value);\n }\n return item[filter.field].indexOf(filter.value) >= 0;\n };\n return data.filter(filterString);\n }\n\n static filterDate<T>(data: T[], filter: DateFilter): T[] {\n const filterDate = (row: T) => {\n const item = row as any;\n return (filter.value.lessThan === null || filter.value.lessThan === undefined\n ? true\n : filter.value.lessThan.getTime() > item[filter.field].getTime()) &&\n (filter.value.greaterThan === null || filter.value.greaterThan === undefined\n ? true\n : filter.value.greaterThan.getTime() < item[filter.field].getTime());\n };\n return data.filter(filterDate);\n }\n\n static filterNumber<T>(data: T[], filter: NumericFilter): T[] {\n const filterNumber = (row: T) => {\n const item = row as any;\n return (filter.value.lessThan === null || filter.value.lessThan === undefined\n ? true\n : filter.value.lessThan > item[filter.field]) &&\n (filter.value.greaterThan === null || filter.value.greaterThan === undefined\n ? true\n : filter.value.greaterThan < item[filter.field]) &&\n (filter.value.equalsTo === null || filter.value.equalsTo === undefined\n ? true\n : filter.value.equalsTo === item[filter.field]);\n };\n return data.filter(filterNumber);\n }\n\n static filterList<T>(data: T[], filter: ListFilter): T[] {\n if (filter.value === null || filter.value === undefined || filter.value.length < 1) {\n return data;\n }\n const filterList = (row: T) => {\n const item = row as any;\n if (filter.type === ListFilterType.Excluded) {\n return filter.value.indexOf(item[filter.field]) < 0;\n }\n return filter.value.indexOf(item[filter.field]) >= 0;\n };\n return data.filter(filterList);\n }\n\n static sort<T>(data: T[], sortParam: SortParam): T[] {\n const res = data.sort(sortParam.asc ? TableUtil.asc(sortParam.field) : TableUtil.desc(sortParam.field));\n return res;\n }\n\n static desc(field: string) {\n const res = (a: any, b: any) => a[field] > b[field] ? -1 : 1;\n return res;\n }\n\n static asc(field: string) {\n const res = (a: any, b: any) => a[field] < b[field] ? -1 : 1;\n return res;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableService } from '../service/table.service';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-selection-head-cell',\n templateUrl: './selection-head-cell.component.html',\n styleUrls: ['./selection-head-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectionHeadCellComponent<T> implements OnInit, OnDestroy {\n @HostBinding('class.table-head__group') private readonly tableCellClass =\n true;\n\n private _alive = true;\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {}\n\n selectAll(value: boolean) {\n if (value) {\n this._svc.selectAll();\n } else {\n this._svc.deselectAll();\n }\n }\n\n allSelected() {\n return this._svc.allRowsSelected();\n }\n\n ngOnInit(): void {\n this._svc.selectedRows\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this._cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"allSelected()\"\n (ngModelChange)=\"selectAll($event)\"></teta-checkbox>\n","import { TableColumn } from './table-column';\n\nexport class ColumnResizeEvent {\n column: TableColumn;\n newWidth: number;\n\n constructor(column: TableColumn, newWidth: number) {\n this.column = column;\n this.newWidth = newWidth;\n }\n}\n","import {TableColumn} from './table-column';\n\nexport class SortEvent {\n column: TableColumn;\n shiftKey: boolean;\n\n constructor(column: TableColumn, shiftKey: boolean) {\n this.column = column;\n this.shiftKey = shiftKey;\n }\n}\n","import {Component, HostBinding} from '@angular/core';\nimport {TableColumn} from '../contract/table-column';\n\n@Component({\n template: ''\n})\n// eslint-disable-next-line @angular-eslint/component-class-suffix\nexport abstract class HeadCellComponentBase {\n @HostBinding('class.table-head__cell__component')\n\n abstract column: TableColumn;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { HeadCellComponentBase } from '../../base/head-cell-component-base';\nimport { TableColumn } from '../../contract/table-column';\n\n@Component({\n selector: 'teta-default-head-cell',\n templateUrl: './default-head-cell.component.html',\n styleUrls: ['./default-head-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultHeadCellComponent\n extends HeadCellComponentBase\n implements OnInit\n{\n private _column: TableColumn;\n\n @Input()\n set column(val: TableColumn) {\n this._column = val;\n this._cdr.detectChanges();\n }\n\n get column(): TableColumn {\n return this._column;\n }\n\n constructor(private _cdr: ChangeDetectorRef) {\n super();\n }\n\n ngOnInit(): void {}\n}\n","<div class=\"column column_auto align-center\" [tetaHint]=\"column.hint || column.caption\">\n <div class=\"table-head__cell__text align-center\">\n {{column.caption}}\n </div>\n <div *ngIf=\"column.unit\" class=\"table-head__cell__text align-center color-text-70\" style=\"overflow: visible;\">\n [{{column.unit}}]\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n Input,\n OnInit,\n ViewContainerRef,\n} from '@angular/core';\nimport {HeadCellComponentBase} from '../base/head-cell-component-base';\nimport {TableColumn} from '../contract/table-column';\nimport {DefaultHeadCellComponent} from '../default/default-head-cell/default-head-cell.component';\n\n@Component({\n selector: 'teta-head-cell-host',\n template: '',\n styleUrls: ['./head-cell-host.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeadCellHostComponent implements OnInit {\n private _column: TableColumn;\n private componentRef: ComponentRef<HeadCellComponentBase>;\n private init: boolean;\n\n @Input()\n set column(column: TableColumn) {\n this._column = column;\n if (this.init) {\n this.componentRef.instance.column = this._column;\n }\n }\n\n get column(): TableColumn {\n return this._column;\n }\n\n constructor(\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n ngOnInit(): void {\n if (!HeadCellComponentBase.isPrototypeOf(this.column.headCellComponent)) {\n this.column.headCellComponent = DefaultHeadCellComponent;\n }\n this.componentRef =\n this.viewContainerRef.createComponent<HeadCellComponentBase>(this.column.headCellComponent);\n this.componentRef.instance.column = this.column;\n this.init = true;\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaTabContent]'\n})\nexport class TabContentDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaTabTitle]'\n})\nexport class TabTitleDirective {\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n Input,\n QueryList,\n} from '@angular/core';\nimport { TabContentDirective } from '../tab-content.directive';\nimport { TabTitleDirective } from '../tab-title.directive';\n\nlet nextId = 0;\n\n@Component({\n selector: 'teta-tab',\n template: '',\n styleUrls: ['./tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent implements AfterContentChecked {\n /**\n * Unique tab identifier. Must be unique for the entire document for proper accessibility support.\n */\n @Input() id = `teta-tab-${nextId++}`;\n /**\n * Simple (string only) title. Use the \"ItskTabTitleDirective\" directive for more complex use-cases.\n */\n @Input() title: string;\n /**\n * Allows toggling disabled state of a given state. Disabled tabs can't be selected.\n */\n @Input() disabled = false;\n\n @ContentChild(TabTitleDirective, { static: false })\n titleTpl: TabTitleDirective;\n @ContentChild(TabContentDirective, { static: false })\n contentTpl: TabContentDirective;\n // titleTpl: TabTitleDirective | null;\n // contentTpl: TabContentDirective | null;\n\n ngAfterContentChecked(): void {\n // this.titleTpl = this.titleTemplates.first;\n // this.contentTpl = this.contentTemplates.first;\n }\n}\n","import {\n AfterContentChecked,\n Component,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n QueryList,\n} from '@angular/core';\nimport { TabComponent } from '../tab/tab.component';\n\nexport interface ITabChangeEvent {\n activeId: string | null;\n nextId: string;\n preventDefault: () => void;\n}\n\n@Component({\n selector: 'teta-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent implements AfterContentChecked {\n @HostBinding('class.tabs') classTabs = true;\n /**\n * An identifier of an initially selected (active) tab. Use the \"select\" method to switch a tab programmatically.\n */\n @Input() activeId: string | null;\n\n /**\n * Whether the closed tabs should be hidden without destroying them\n */\n @Input() destroyOnHide = true;\n\n /**\n * A tab change event fired right before the tab selection happens. See NgbTabChangeEvent for payload details\n */\n @Output() tabChange = new EventEmitter<ITabChangeEvent>();\n\n @ContentChildren(TabComponent) tabs: QueryList<TabComponent>;\n\n constructor() {}\n\n /**\n * Selects the tab with the given id and shows its associated pane.\n * Any other tab that was previously selected becomes unselected and its associated pane is hidden.\n */\n select(tabId: string): void {\n const selectedTab = this._getTabById(tabId);\n if (\n selectedTab &&\n !selectedTab.disabled &&\n this.activeId !== selectedTab.id\n ) {\n let defaultPrevented = false;\n\n this.tabChange.emit({\n activeId: this.activeId,\n nextId: selectedTab.id,\n preventDefault: () => {\n defaultPrevented = true;\n },\n });\n\n if (!defaultPrevented) {\n this.activeId = selectedTab.id;\n }\n }\n }\n\n ngAfterContentChecked(): void {\n const activeTab = this._getTabById(this.activeId);\n this.activeId = activeTab\n ? activeTab.id\n : this.tabs.length\n ? this.tabs.first.id\n : null;\n }\n\n private _getTabById(id: string | null): TabComponent | null {\n const tabsWithId: TabComponent[] = this.tabs.filter((tab) => tab.id === id);\n return tabsWithId.length ? tabsWithId[0] : null;\n }\n}\n","<div class=\"tabs-head\" role=\"tablist\">\n <div class=\"tabs-head-item\"\n *ngFor=\"let tab of tabs\"\n (click)=\"select(tab.id);\"\n [class.tabs-head-item_active]=\"tab.id === activeId\"\n [class.tabs-head-item_disabled]=\"tab.disabled\">\n <span [id]=\"tab.id\" class=\"tabs-title\"\n role=\"tab\"\n [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\n [attr.aria-expanded]=\"tab.id === activeId\"\n [attr.aria-disabled]=\"tab.disabled\">\n {{tab.title}}\n <ng-template [ngTemplateOutlet]=\"tab.titleTpl?.template\"></ng-template>\n </span>\n </div>\n</div>\n<div class=\"tabs-content\">\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\n <ng-container *ngIf=\"!destroyOnHide || tab.id === activeId\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl?.template\"></ng-template>\n </ng-container>\n </ng-template>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ITreeData } from '../../common/contract/i-tree-data';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TreeService {\n openItems: Observable<ITreeData[]>;\n private _openItems: BehaviorSubject<ITreeData[]> = new BehaviorSubject<\n ITreeData[]\n >([]);\n\n constructor() {\n this.openItems = this._openItems.asObservable();\n }\n\n compareItems: (item: ITreeData) => any = (item: ITreeData) => item;\n\n openItem(item: ITreeData) {\n const newValue = this.addOrRemove(item, this._openItems.value);\n this.setOpenItems(newValue);\n }\n\n setOpenItems(items: ITreeData[]) {\n this._openItems.next(items);\n }\n\n private addOrRemove<G>(needle: G, list: G[]): G[] {\n const found = list?.find(\n (x) => this.compareItems(x) === this.compareItems(needle)\n );\n if (found) {\n return list.filter(\n (x) => this.compareItems(x) !== this.compareItems(needle)\n );\n } else {\n return [...list, needle];\n }\n }\n}\n","import {Directive, Input, TemplateRef} from '@angular/core';\n\n@Directive({\n selector: '[tetaTemplate]'\n})\nexport class TetaTemplateDirective {\n @Input('tetaTemplate') id: string;\n\n constructor(public template: TemplateRef<any>) {\n }\n\n getId(): string {\n return this.id;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { TreeService } from '../tree.service';\nimport { takeWhile } from 'rxjs/operators';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\n/**\n * TODO: Lazy загрузка дочерних элементов, Output onExpand, шаблон для иконки expand\n */\n@Component({\n selector: 'teta-tree-item',\n templateUrl: './tree-item.component.html',\n styleUrls: ['./tree-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('children', [\n transition('void => *', [\n style({ opacity: '0' }),\n animate(200, style({ opacity: '1' })),\n ]),\n transition('* => void', [animate(200, style({ opacity: '0' }))]),\n ]),\n ],\n})\nexport class TreeItemComponent implements OnInit, OnChanges, OnDestroy {\n @Input() item: ITreeData;\n @Input() depth = 0;\n @Input() padding = 16;\n @Input() childNodeName = 'children';\n @Input() template: TemplateRef<any>;\n @Input() noChildMode: boolean;\n\n @HostBinding('class.tree__item-container') private readonly treeItemClass =\n true;\n\n itemIsOpen = false;\n\n private _alive = true;\n\n get computedDepth(): number {\n return (\n this.depth +\n (this.item[this.childNodeName]?.length > 0 ? 0 : this.noChildMode ? 1 : 2)\n );\n }\n\n constructor(public service: TreeService, private _cdr: ChangeDetectorRef) {}\n\n openItem() {\n this.service.openItem(this.item);\n }\n\n ngOnInit(): void {\n this.service.openItems\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n const found = _?.find(\n (x) =>\n this.service.compareItems(x) ===\n this.service.compareItems(this.item)\n );\n this.itemIsOpen = found != null;\n this._cdr.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<div class=\"tree__item_content\" [ngClass]=\"'tree__item_content-' + computedDepth\" (click)=\"openItem()\">\n <ng-container\n *ngTemplateOutlet=\"template; context: {$implicit: item, item: item, open: itemIsOpen, service: service, depth: depth}\"></ng-container>\n</div>\n<div [@children] class=\"tree__children\" *ngIf=\"itemIsOpen && item[childNodeName]?.length > 0\">\n <teta-tree-item *ngFor=\"let child of item[childNodeName];\"\n [item]=\"child\"\n [template]=\"template\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [depth]=\"depth + 1\"></teta-tree-item>\n</div>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { TreeService } from '../tree.service';\nimport { TetaTemplateDirective } from '../../../directive/teta-template/teta-template.directive';\nimport { filter, takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-tree',\n templateUrl: './tree.component.html',\n styleUrls: ['./tree.component.scss'],\n providers: [TreeService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeComponent\n implements OnInit, AfterContentInit, OnChanges, OnDestroy\n{\n @Input() data: ITreeData[];\n @Output() service: EventEmitter<TreeService> =\n new EventEmitter<TreeService>();\n @Input() class;\n @Input() padding = 8;\n @Input() childNodeName = 'children';\n\n @Input()\n set openItems(items: ITreeData[]) {\n this._openItems = items;\n this._service.setOpenItems(items);\n }\n\n get noChildMode(): boolean {\n const hasChildren = this.data.find(\n (_) => _[this.childNodeName]?.length > 0\n );\n return !hasChildren;\n }\n\n @Output() openItemsChange = new EventEmitter();\n\n @ContentChild(TetaTemplateDirective, { static: true })\n template: TetaTemplateDirective;\n\n private _openItems: ITreeData[];\n private _alive = true;\n\n constructor(private _service: TreeService, private _cdr: ChangeDetectorRef) {\n this._service.openItems\n .pipe(\n takeWhile((_) => this._alive),\n filter((_) => this._openItems !== _)\n )\n .subscribe((_) => this.openItemsChange.emit(_));\n }\n\n @Input()\n set compareItems(func: (item: ITreeData) => any) {\n this._service.compareItems = func;\n }\n\n @HostBinding('class')\n private get getClass(): string {\n const result = [this.class, 'tree'];\n return result.join(' ');\n }\n\n ngOnInit(): void {\n this.service.emit(this._service);\n }\n\n ngAfterContentInit(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this._cdr.detectChanges();\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n}\n","<ng-container *ngFor=\"let item of data\">\n <teta-tree-item [item]=\"item\"\n [depth]=\"0\"\n [padding]=\"padding\"\n [childNodeName]=\"childNodeName\"\n [noChildMode]=\"noChildMode\"\n [template]=\"template?.template\"></teta-tree-item>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { TreeService } from '../tree.service';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'teta-tree-item-toggle',\n templateUrl: './tree-item-toggle.component.html',\n styleUrls: ['./tree-item-toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TreeItemToggleComponent implements OnInit {\n @Input() item: ITreeData;\n open: Observable<boolean>;\n\n constructor(public service: TreeService, private _cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.open = this.service.openItems.pipe(\n map((_) => {\n const found = _?.find(\n (x) =>\n this.service.compareItems(x) ===\n this.service.compareItems(this.item)\n );\n return found != null;\n })\n );\n }\n}\n","<teta-icon [name]=\"(open | async) ? 'arrowDownKey' : 'arrowRightKey'\"\n class=\"tree__icon\"></teta-icon>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TableService } from '../service/table.service';\nimport { TableColumn } from '../contract/table-column';\nimport { FilterState } from '../../filter/contarct/filter-state';\nimport { StateUtil } from '../util/state-util';\nimport { ITreeData } from '../../../common/contract/i-tree-data';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { Observable } from 'rxjs';\nimport { map, takeWhile } from 'rxjs/operators';\nimport { ArrayUtil } from '../../../common/util/array-util';\nimport {SortParam} from '../../filter/contarct/sort-param';\n\n@Component({\n selector: 'teta-head-cell-dropdown',\n templateUrl: './head-cell-dropdown.component.html',\n styleUrls: ['./head-cell-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeadCellDropdownComponent<T> implements OnInit, OnDestroy {\n @Input() columns: ITreeData[];\n @Input() column: TableColumn;\n @Input() state: FilterState;\n @Input() dropDownOpen: boolean;\n @Output() dropDownOpenChange: EventEmitter<boolean> =\n new EventEmitter<boolean>();\n\n @Output() autosize: EventEmitter<void> = new EventEmitter<void>();\n @Output() autosizeAll: EventEmitter<void> = new EventEmitter<void>();\n\n @HostBinding('class.shadow-2') private readonly shadow = true;\n @HostBinding('class.bg-background-50') private readonly bg = true;\n\n dict: Observable<IDictionary<IIdName<any>[]>>;\n hiddenColumns: string[];\n\n get sortParam(): SortParam {\n return StateUtil.getSortState(this.state, this.column);\n }\n\n get filtered() {\n return StateUtil.isColumnFiltered(this.state, this.column);\n }\n\n get openItems() {\n if (this._openItems == null) {\n this._openItems = this.columns.map((_) => _);\n }\n return this._openItems;\n }\n\n set openItems(openItems: ITreeData[]) {\n this._openItems = openItems;\n }\n\n get childMode() {\n return this.columns.find((_: any) => _.columns?.length > 0);\n }\n\n private _openItems: ITreeData[];\n private _alive = true;\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n this.dict = this._svc.dict;\n this._svc.hiddenColumns\n .pipe(\n takeWhile((_) => this._alive),\n map((_) => [..._])\n )\n .subscribe((_) => {\n this.hiddenColumns = _;\n });\n }\n\n clearFilter() {\n this._svc.clearFilter(this.column);\n this.dropDownOpenChange.emit(false);\n this._cdr.markForCheck();\n }\n\n applyFilter() {\n this._svc.setState(new FilterState(this.state));\n this.dropDownOpenChange.emit(false);\n this._cdr.markForCheck();\n }\n\n pinColumn() {\n this._svc.pinColumn(this.column);\n }\n\n clearSort(): void {\n this._svc.clearSort(this.column);\n }\n\n clearAllSort(): void {\n this._svc.clearAllSort();\n }\n\n hasFilteredColumns() {\n return StateUtil.hasFilteredColumns(this.state);\n }\n\n hasSortedColumns() {\n return StateUtil.hasSortedColumns(this.state);\n }\n\n restoreDefaultColumns() {\n this._svc.restoreDefaultColumns();\n }\n\n clearAllFilters() {\n this._svc.clearAllFilters();\n this.dropDownOpen = false;\n this._cdr.markForCheck();\n }\n\n columnIsHidden(column: TableColumn) {\n return this.hiddenColumns.indexOf(column.name) >= 0;\n }\n\n allColumnsVisible() {\n if (this.hiddenColumns?.length <= 0) {\n return true;\n }\n const columns = ArrayUtil.flatten(this.columns, 'columns');\n const notHidden = columns.find(\n (_) => this.hiddenColumns.indexOf(_.name) < 0\n );\n if (!notHidden) {\n return false;\n }\n return null;\n }\n\n setAllColumns(value: boolean) {\n if (value) {\n this.hiddenColumns = [];\n } else {\n this.hiddenColumns = ArrayUtil.flatten(this.columns, 'columns').map(\n (_) => _.name\n );\n }\n }\n\n setColumnsVisibility() {\n this._svc.setHiddenColumns(this.hiddenColumns);\n }\n\n compareItems = (item: TableColumn) => item.name;\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n setColumnVisibility(item: TableColumn, visible: boolean) {\n this.setChildrenVisibility(item, visible, this.hiddenColumns);\n this.setParentsVisibility(item, visible, this.hiddenColumns);\n }\n\n setChildrenVisibility = (\n column: TableColumn,\n visible: boolean,\n hiddenColumns: string[]\n ) => {\n if (visible) {\n this.showColumn(column, hiddenColumns);\n } else {\n this.hideColumn(column, hiddenColumns);\n }\n if (column.columns) {\n column.columns.forEach((x) => {\n this.setChildrenVisibility(x, visible, hiddenColumns);\n });\n }\n };\n\n setParentsVisibility = (\n column: TableColumn,\n visible: boolean,\n hiddenColumns: string[]\n ) => {\n if (!visible) {\n this.hideParents(column, hiddenColumns);\n } else {\n this.showParents(column, hiddenColumns);\n }\n };\n\n showParents(column: TableColumn, hiddenColumns: string[]) {\n const parent = this.findParentColumn(column, this.columns as TableColumn[]);\n if (parent && this.columnIsHidden(parent)) {\n this.showColumn(parent, hiddenColumns);\n this.showParents(parent, hiddenColumns);\n }\n }\n\n hideParents(column: TableColumn, hiddenColumns: string[]) {\n const parent = this.findParentColumn(column, this.columns as TableColumn[]);\n if (\n parent &&\n !this.columnIsHidden(parent) &&\n parent.columns &&\n parent.columns.every((_) => this.columnIsHidden(_))\n ) {\n this.hideColumn(parent, hiddenColumns);\n this.hideParents(parent, hiddenColumns);\n }\n }\n\n hideColumn(column: TableColumn, hiddenColumns: string[]) {\n hiddenColumns.push(column.name);\n }\n\n showColumn(column: TableColumn, hiddenColumns: string[]) {\n hiddenColumns.splice(hiddenColumns.indexOf(column.name), 1);\n }\n\n private findParentColumn(\n column: TableColumn,\n columns: TableColumn[]\n ): TableColumn | null {\n return ArrayUtil.findRecursive(\n columns,\n (iterableNode) => iterableNode.columns?.indexOf(column) >= 0,\n 'columns'\n );\n }\n}\n","<teta-tabs class=\"column_auto\">\n <teta-tab *ngIf=\"column.filterable\">\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'filter'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <teta-filter-host [column]=\"column\" [state]=\"state\"\n *ngIf=\"dict | async as d\"\n [filterOptions]=\"d[column.name]\"></teta-filter-host>\n <teta-toolbar class=\"justify-content-between\">\n <button teta-button [palette]=\"'text'\" [view]=\"'ghost'\" (click)=\"clearFilter()\">\n Очистить\n </button>\n <button teta-button [palette]=\"'primary'\" (click)=\"applyFilter()\">\n <teta-icon [name]=\"'tick'\"></teta-icon>\n Применить\n </button>\n </teta-toolbar>\n </ng-template>\n </teta-tab>\n <teta-tab *ngIf=\"column.headDropdownTemplate\">\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'measurement'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <ng-container\n *ngTemplateOutlet=\"column.headDropdownTemplate; context: {$implicit: column, column: column}\"></ng-container>\n </ng-template>\n </teta-tab>\n <teta-tab>\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'menu'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <div class=\"list column_auto\">\n <div class=\"list-item list-item_interactive\" (click)=\"pinColumn()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"column.locked ? 'unpin' : 'pin'\"\n class=\"margin-right-2\"></teta-icon>\n {{column.locked ? 'Открепить' : 'Закрепить'}}\n </div>\n <div class=\"list-divider\"></div>\n <ng-container *ngIf=\"hasSortedColumns()\">\n <div class=\"list-item list-item_interactive\"\n *ngIf=\"sortParam\"\n (click)=\"clearSort()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\" class=\"margin-right-2\"></teta-icon>\n Сбросить сортировку\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"clearAllSort()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\"\n class=\"margin-right-2\"></teta-icon>\n Сбросить все сортировки\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"hasFilteredColumns()\">\n <div class=\"list-item list-item_interactive\"\n *ngIf=\"filtered\"\n (click)=\"clearFilter()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\"\n class=\"margin-right-2\"></teta-icon>\n Очистить фильтр\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"clearAllFilters()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'pin'\"\n class=\"margin-right-2\"></teta-icon>\n Очистить все фильтры\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <div class=\"list-item list-item_interactive\" (click)=\"autosize.emit()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'autoSize'\"\n class=\"margin-right-2\"></teta-icon>\n Авторазмер колонки\n </div>\n <div class=\"list-item list-item_interactive\" (click)=\"autosizeAll.emit()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'autoSizeAll'\"\n class=\"margin-right-2\"></teta-icon>\n Авторазмер всех колонок\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"list-item list-item_interactive\" (click)=\"restoreDefaultColumns()\">\n <teta-icon [palette]=\"'text'\"\n [name]=\"'undo'\"\n class=\"margin-right-2\"></teta-icon>\n Отменить все изменения\n </div>\n </div>\n </ng-template>\n </teta-tab>\n <teta-tab>\n <ng-template tetaTabTitle>\n <teta-icon [name]=\"'eye'\"></teta-icon>\n </ng-template>\n <ng-template tetaTabContent>\n <div class=\"list-item padding-left-6 padding-top-2\" [class.padding-left-9]=\"childMode\">\n <teta-checkbox [binary]=\"true\"\n [allowNull]=\"true\"\n [ngModel]=\"allColumnsVisible()\"\n (ngModelChange)=\"setAllColumns($event)\">\n Все\n </teta-checkbox>\n </div>\n <div class=\"list-divider\"></div>\n <div class=\"padding-v-2 column column_auto scrollable\">\n <teta-tree [data]=\"columns\"\n [openItems]=\"openItems\"\n (openItemsChange)=\"openItems = $event\"\n [childNodeName]=\"'columns'\"\n [compareItems]=\"compareItems\">\n <ng-template tetaTemplate let-item>\n <div class=\"tree__item\">\n <teta-tree-item-toggle [item]=\"item\" *ngIf=\"item.columns?.length > 0\"></teta-tree-item-toggle>\n <teta-checkbox\n [ngModel]=\"!columnIsHidden(item)\"\n (ngModelChange)=\"setColumnVisibility(item, $event)\"\n (click)=\"$event.stopPropagation()\"\n [binary]=\"true\"\n >\n {{item.caption}}\n </teta-checkbox>\n </div>\n </ng-template>\n </teta-tree>\n </div>\n <teta-toolbar class=\"justify-content-end\">\n <button teta-button\n [disabled]=\"allColumnsVisible() === false\"\n [palette]=\"'primary'\"\n (click)=\"setColumnsVisibility()\">\n Применить\n </button>\n </teta-toolbar>\n </ng-template>\n </teta-tab>\n</teta-tabs>\n","import {\n Directive,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n Output,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n selector: '[tetaResizeDrag]',\n})\nexport class ResizeDragDirective {\n @Input() tetaResizeDrag: 'horizontal' | 'vertical' = 'vertical';\n\n @Output() resizeStart = new EventEmitter<MouseEvent>();\n @Output() resizeProcess = new EventEmitter<MouseEvent>();\n @Output() resizeEnd = new EventEmitter<MouseEvent>();\n\n @HostBinding('class.resize-drag_active')\n private _active: boolean;\n\n @HostBinding('class.resize-drag_horizontal')\n private get horizontal() {\n return this.tetaResizeDrag === 'horizontal';\n }\n\n @HostBinding('class.resize-drag_vertical')\n private get vertical() {\n return this.tetaResizeDrag === 'vertical';\n }\n\n constructor(@Inject(DOCUMENT) private _document: any) {}\n\n @HostListener('mousedown', ['$event']) mouseDown(event: MouseEvent) {\n this.resizeStart.emit(event);\n this.addListeners();\n }\n\n private addListeners() {\n this._active = true;\n this._document.addEventListener('mouseup', this.handleMouseUp);\n this._document.addEventListener('mousemove', this.handleMouseMove);\n }\n\n private removeListeners() {\n this._active = false;\n this._document.removeEventListener('mouseup', this.handleMouseUp);\n this._document.removeEventListener('mousemove', this.handleMouseMove);\n }\n\n private handleMouseUp = (event: MouseEvent) => {\n this.resizeEnd.emit(event);\n this.removeListeners();\n };\n\n private handleMouseMove = (event: MouseEvent) => {\n this.resizeProcess.emit(event);\n };\n}\n","import {\n ApplicationRef,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { ColumnResizeEvent } from '../contract/column-resize-event';\nimport { FilterState } from '../../filter/contarct/filter-state';\nimport { TableService } from '../service/table.service';\nimport { SortEvent } from '../contract/sort-event';\nimport { map } from 'rxjs/operators';\nimport { SortParam } from '../../filter/contarct/sort-param';\nimport { StateUtil } from '../util/state-util';\nimport { VerticalAlign } from '../../../common/enum/vertical-align.enum';\nimport { Align } from '../../../common/enum/align.enum';\nimport { combineLatest, Observable } from 'rxjs';\n\n@Component({\n selector: 'teta-head-cell',\n templateUrl: './head-cell.component.html',\n styleUrls: ['./head-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeadCellComponent<T> implements OnInit, OnDestroy {\n @Input() column: TableColumn;\n @Input() showHeadCellMenu: boolean;\n verticalAlign = VerticalAlign;\n align = Align;\n state: Observable<FilterState>;\n columns: Observable<TableColumn[]>;\n filtered: Observable<boolean>;\n sortParam: Observable<SortParam>;\n iconName: Observable<string>;\n dropDownOpen: boolean;\n showDrag: 'left' | 'right' | null = null;\n private rect: any;\n\n private _alive = true;\n private _startPosition: number;\n\n constructor(\n private _svc: TableService<T>,\n private _app: ApplicationRef,\n private _elementRef: ElementRef\n ) {}\n\n @HostListener('dragstart', ['$event']) dragstart(event: DragEvent): void {\n if (event && event.dataTransfer) {\n event.dataTransfer.setData('text', 'move');\n }\n this._svc.dragStart(this.column);\n }\n\n @HostListener('dragenter', ['$event']) dragenter(event: DragEvent): void {\n this.rect = this._elementRef.nativeElement.getBoundingClientRect();\n }\n\n @HostListener('dragover', ['$event']) allowDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.rect && this._svc.dragSource) {\n this.showDrag =\n event.clientX >= this.rect.x + this.rect.width / 2 ? 'right' : 'left';\n }\n }\n\n @HostListener('dragleave', ['$event']) dragleave(event: DragEvent): void {\n event.preventDefault();\n this.showDrag = null;\n }\n\n @HostListener('dragend', ['$event']) dragend(event: DragEvent): void {\n this.showDrag = null;\n }\n\n @HostListener('drop', ['$event']) drop(event: DragEvent): void {\n const move = event.dataTransfer && event.dataTransfer.getData('text');\n if (move === 'move') {\n this._svc.reorderColumn(this.column, this.showDrag === 'left');\n }\n this.showDrag = null;\n }\n\n ngOnInit(): void {\n this.columns = this._svc.columns;\n this.state = this._svc.state;\n this.sortParam = this.state.pipe(\n map((_) => StateUtil.getSortState(_, this.column))\n );\n this.filtered = this.state.pipe(\n map((_) => StateUtil.isColumnFiltered(_, this.column))\n );\n this.iconName = combineLatest([this.sortParam, this.filtered]).pipe(\n map((data: [SortParam, boolean]) => {\n const [sortParam, filtered] = data;\n if (sortParam && filtered) {\n return sortParam.asc ? 'filterSortUpColor' : 'filterSortDownColor';\n }\n if (sortParam) {\n return sortParam.asc ? 'sortUpColor' : 'sortDownColor';\n }\n if (filtered) {\n return 'filterColor';\n }\n return '';\n })\n );\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n autosizeColumn() {\n this._svc.autosizeColumn(this.column, this._elementRef.nativeElement);\n }\n\n autosizeAllColumns() {\n this._svc.autosizeAllColumns(this._elementRef.nativeElement);\n }\n\n sortColumn(column: TableColumn, event: MouseEvent): void {\n if (!event.defaultPrevented) {\n this._svc.sort(new SortEvent(this.column, event.shiftKey));\n }\n }\n\n resizeStart(event: MouseEvent): void {\n const rect = this._elementRef.nativeElement.getBoundingClientRect();\n this._startPosition = rect.x;\n this._svc.lockPreviousColumns(this.column, this._elementRef.nativeElement);\n }\n\n resizeProcess(event: MouseEvent): void {\n if (this._startPosition && event.pageX > 0) {\n this._svc.resizeColumn(\n new ColumnResizeEvent(this.column, event.pageX - this._startPosition)\n );\n this._app.tick();\n }\n }\n\n resizeEnd() {\n this._startPosition = null;\n }\n}\n","<div draggable=\"true\" class=\"row row_auto\">\n <div class=\"table-head__cell__wrapper\"\n [ngClass]=\"column.headCellClass\"\n (click)=\"sortColumn(column, $event)\">\n <teta-icon *ngIf=\"iconName | async as icon\"\n [palette]=\"'text'\"\n [name]=\"icon\"></teta-icon>\n <teta-head-cell-host [column]=\"column\"></teta-head-cell-host>\n <teta-dropdown *ngIf=\"showHeadCellMenu\"\n [verticalAlign]=\"verticalAlign.bottom\"\n [appendToBody]=\"true\"\n [(open)]=\"dropDownOpen\"\n [align]=\"align.right\"\n (click)=\"$event.preventDefault()\"\n [class.table-head__cell__menu_open]=\"dropDownOpen\"\n class=\"table-head__cell__menu\">\n <button tetaDropdownHead teta-button\n [square]=\"true\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\">\n <teta-icon [palette]=\"'text'\" [name]=\"'menu'\"></teta-icon>\n </button>\n <teta-head-cell-dropdown tetaDropdownContent\n (autosize)=\"autosizeColumn()\"\n (autosizeAll)=\"autosizeAllColumns()\"\n [column]=\"column\"\n [columns]=\"columns | async\"\n [state]=\"state | async\"\n [(dropDownOpen)]=\"dropDownOpen\"></teta-head-cell-dropdown>\n </teta-dropdown>\n </div>\n <div class=\"drop-area\"\n draggable=\"false\"\n [class.drop-area_left]=\"showDrag === 'left'\"\n [class.drop-area_right]=\"showDrag === 'right'\"\n *ngIf=\"showDrag\"></div>\n</div>\n<div class=\"table-head__cell__resize\"\n draggable=\"false\"\n (dragstart)=\"$event.preventDefault();$event.stopPropagation()\"\n (drag)=\"$event.preventDefault();$event.stopPropagation()\"\n [tetaResizeDrag]=\"'vertical'\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd()\"></div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { TableUtil } from '../util/table-util';\nimport { TableService } from '../service/table.service';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-table-head-group',\n templateUrl: './table-head-group.component.html',\n styleUrls: ['./table-head-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeadGroupComponent<T> implements OnInit, OnDestroy {\n @Input() showHeadCellMenu: boolean;\n\n @Input()\n set column(column: TableColumn) {\n this._column = column;\n }\n\n get column(): TableColumn {\n return this._column;\n }\n\n private _alive = true;\n private _column: TableColumn;\n private _hiddenColumns: string[];\n\n private get _leaves() {\n return TableUtil.getColumnLeaves(this._column)?.filter(\n (_) => this._hiddenColumns.indexOf(_.name) < 0\n );\n }\n\n @HostBinding('style.grid-column-end')\n get gridColumnEnd(): string {\n if (this._leaves?.length > 0) {\n return `span ${this._leaves.length}`;\n }\n return null;\n }\n\n get gridTemplateColumns(): string {\n return TableUtil.getGridTemplateColumns(this._leaves);\n }\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n this._svc.hiddenColumns\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this._hiddenColumns = _;\n this._cdr.markForCheck();\n });\n }\n\n columnIsHidden(column: TableColumn) {\n return this._svc.columnIsHidden(column);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<ng-container *ngIf=\"column.columns && column.columns.length > 0\">\n <div class=\"table-head__group__container\">\n <div class=\"table-head__group__caption\">\n {{column.caption}}\n </div>\n <div class=\"table-head__group__children\" [style.grid-template-columns]=\"gridTemplateColumns\">\n <ng-container *ngFor=\"let col of column.columns\">\n <teta-table-head-group\n class=\"table-head__group\"\n *ngIf=\"!columnIsHidden(col)\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"col\"></teta-table-head-group>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"!column.columns || column.columns.length === 0\">\n <teta-head-cell\n *ngIf=\"!columnIsHidden(column)\"\n class=\"table-head__cell\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"></teta-head-cell>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { FilterState } from '../../filter/contarct/filter-state';\nimport { TableService } from '../service/table.service';\nimport { takeWhile } from 'rxjs/operators';\nimport { TableUtil } from '../util/table-util';\nimport { SelectType } from '../enum/select-type.enum';\nimport { combineLatest } from 'rxjs';\nimport { ArrayUtil } from '../../../common/util/array-util';\n\n@Component({\n selector: 'teta-table-head',\n templateUrl: './table-head.component.html',\n styleUrls: ['./table-head.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeadComponent<T> implements OnInit, OnDestroy {\n @Input() selectType: SelectType;\n @Input() showHeadCellMenu: boolean;\n @HostBinding('class.table-head') private readonly tableHeadClass = true;\n gridTemplateColumns: string;\n\n @HostBinding('style.grid-template-columns')\n get getTemplateColumns() {\n let template = this.gridTemplateColumns;\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n state: FilterState;\n selectTypeEnum = SelectType;\n\n private _alive = true;\n private _columns: TableColumn[] = [];\n private _hiddenColumns: string[] = [];\n\n set columns(columns: TableColumn[]) {\n this._columns = columns;\n this._cdr.markForCheck();\n }\n\n get columns(): TableColumn[] {\n return this._columns;\n }\n\n get locked(): TableColumn[] {\n return this._columns.filter(\n (_) => _.locked === true && this._hiddenColumns.indexOf(_.name) < 0\n );\n }\n\n get unlocked(): TableColumn[] {\n return this._columns.filter(\n (_) => _.locked === false && this._hiddenColumns.indexOf(_.name) < 0\n );\n }\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n combineLatest([this._svc.columns, this._svc.hiddenColumns])\n .pipe(takeWhile((_) => this._alive))\n .subscribe((values: [TableColumn[], string[]]) => {\n const [columns, hiddenColumns] = values;\n this._hiddenColumns = hiddenColumns;\n this.columns = columns;\n\n this.gridTemplateColumns = TableUtil.getGridTemplateColumns(\n ArrayUtil.flatten(columns, 'columns', true)\n .filter((_) => this._hiddenColumns.indexOf(_.name) < 0)\n .sort((a, b) => Number(b.locked) - Number(a.locked))\n );\n this._cdr.markForCheck();\n });\n\n this._svc.state.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.state = _;\n this._cdr.markForCheck();\n });\n }\n\n getSpan(): string {\n if (this.locked?.length > 0) {\n let span = this.locked.length;\n if (this.selectType !== SelectType.none) {\n span += 1;\n }\n return `span ${span}`;\n }\n return null;\n }\n\n getLockedGridTemplateColumns(columns: TableColumn[]) {\n let template = TableUtil.getGridTemplateColumns(columns);\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n track(index: number, item: TableColumn): any {\n return item.name;\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<div class=\"table-head_locked\"\n *ngIf=\"locked?.length\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-head-cell *ngIf=\"selectType !== selectTypeEnum.none\"></teta-selection-head-cell>\n <ng-container *ngFor=\"let column of locked; trackBy: track\">\n <teta-table-head-group\n class=\"table-head__group\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"></teta-table-head-group>\n </ng-container>\n</div>\n<ng-container *ngIf=\"unlocked?.length\">\n <teta-selection-head-cell *ngIf=\"selectType !== selectTypeEnum.none && locked?.length < 1\"></teta-selection-head-cell>\n <ng-container *ngFor=\"let column of unlocked; trackBy: track\">\n <teta-table-head-group\n class=\"table-head__group\"\n [showHeadCellMenu]=\"showHeadCellMenu\"\n [column]=\"column\"></teta-table-head-group>\n </ng-container>\n</ng-container>\n","export enum AggregationType {\n none,\n sum,\n avg,\n min,\n max,\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableService } from '../service/table.service';\nimport { TableRow } from '../contract/table-row';\nimport { takeWhile } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-selection-cell',\n templateUrl: './selection-cell.component.html',\n styleUrls: ['./selection-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectionCellComponent<T> implements OnInit, OnDestroy {\n @Input() row: TableRow<T>;\n\n @HostBinding('class.cell') private readonly tableCellClass = true;\n selectedRows: TableRow<T>[] = [];\n\n private _alive = true;\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {}\n\n selectRow(value: boolean) {\n if (value) {\n this._svc.selectRow(this.row);\n } else {\n this._svc.deselectRow(this.row);\n }\n }\n\n ngOnInit(): void {\n this._svc.selectedRows\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this.selectedRows = _;\n this._cdr.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","<teta-checkbox [binary]=\"true\"\n [noLabel]=\"true\"\n [ngModel]=\"selectedRows?.indexOf(row) >= 0\"\n (ngModelChange)=\"selectRow($event)\"></teta-checkbox>\n","import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport {TableService} from '../service/table.service';\nimport {TableRow} from '../contract/table-row';\nimport {takeWhile} from 'rxjs/operators';\nimport {ICellCoordinates} from '../contract/i-cell-coordinates';\nimport {TableColumn} from '../contract/table-column';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {ICellValue} from '../contract/i-cell-value';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\n\n@Component({\n template: '',\n})\nexport abstract class CellComponentBase<T> implements OnInit, OnDestroy {\n @HostBinding('class.cell-component')\n private readonly tableCellComponent = true;\n\n get edit() {\n return (\n this._edit &&\n this.svc.boolOrFuncCallback(this.column.editable)({\n column: this.column,\n row: this.row,\n })\n );\n }\n\n _edit: boolean;\n column: TableColumn;\n filterOptions: IIdName<any>[] = [];\n dict: IDictionary<IIdName<any>[]> = {};\n row: TableRow<T>;\n\n protected _alive = true;\n\n protected constructor(\n protected svc: TableService<T>,\n protected cdr: ChangeDetectorRef\n ) {\n }\n\n valueChanged(): void {\n this.svc.changeValue({\n column: this.column,\n row: this.row,\n });\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n ngOnInit(): void {\n this.init();\n }\n\n private init(): void {\n this.svc.editRowStart\n .pipe(\n takeWhile((_) => this._alive)\n )\n .subscribe((cell: ICellCoordinates<T>) => {\n if (\n this.row === cell?.row &&\n !this._edit\n // &&\n // this.svc.boolOrFuncCallback(this.svc.cellEditable)({\n // column: this.column,\n // row: this.row,\n // })\n ) {\n this.start(cell, 'row');\n }\n if (this.row !== cell?.row && this._edit) {\n this.stop();\n }\n });\n\n this.svc.editCellStart\n .pipe(\n takeWhile((_) => this._alive)\n )\n .subscribe((cell: ICellCoordinates<T>) => {\n if (\n this.row === cell.row &&\n this.column.name === cell.column.name &&\n !this._edit\n ) {\n this.start(cell, 'cell');\n }\n if (\n (this.row !== cell.row || this.column.name !== cell.column.name) &&\n this._edit\n ) {\n this.stop();\n }\n });\n\n this.svc.valueSet\n .pipe(takeWhile((_) => this._alive))\n .subscribe((cellValue: ICellValue<T>) => {\n if (\n this.row === cellValue.cell.row\n && this.column.name === cellValue.cell.column.name\n ) {\n this.row.data[this.column.name] = cellValue.value;\n this.cdr.detectChanges();\n }\n });\n\n this.svc.valueChanged\n .pipe(takeWhile((_) => this._alive))\n .subscribe((cellValue: ICellCoordinates<T>) => {\n if (\n this.row === cellValue.row\n ) {\n this.cdr.detectChanges();\n }\n });\n }\n\n private start(initiator: ICellCoordinates<T>, type: 'cell' | 'row') {\n this._edit = true;\n this.startEdit(initiator, type);\n this.cdr.markForCheck();\n }\n\n private stop() {\n this._edit = false;\n this.stopEdit();\n this.cdr.markForCheck();\n }\n\n abstract startEdit(\n initiator: ICellCoordinates<T>,\n type: 'cell' | 'row'\n ): void;\n\n abstract stopEdit(): void;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { TableService } from '../../service/table.service';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\n\n@Component({\n selector: 'teta-numeric-cell',\n templateUrl: './numeric-cell.component.html',\n styleUrls: ['./numeric-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumericCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @ViewChild('input', { static: false }) input: ElementRef;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n setValue(): void {\n this.valueChanged();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input?.nativeElement.focus();\n this.input?.nativeElement.select();\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text cell-text_numeric\">\n {{row.data[column.name] | tetaNumber : 2}}\n</span>\n<input #input\n *ngIf=\"edit\"\n tetaOnlyNumber\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"row.data[column.name]=$event;\"/>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {CellComponentBase} from '../../base/cell-component-base';\nimport {TableColumn} from '../../contract/table-column';\nimport {TableRow} from '../../contract/table-row';\nimport {TableService} from '../../service/table.service';\nimport {ICellCoordinates} from '../../contract/i-cell-coordinates';\nimport {DatePickerComponent} from '../../../date-picker/date-picker/date-picker.component';\n\n@Component({\n selector: 'teta-date-cell',\n templateUrl: './date-cell.component.html',\n styleUrls: ['./date-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit {\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n\n @ViewChild('input', {static: false}) input: DatePickerComponent;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n setValue(value: Date): void {\n this.row.data[this.column.name] = value ? new Date(value) : value;\n this.valueChanged();\n this.cdr.detectChanges();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input?.focus();\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{row.data[column.name] | date : 'dd.MM.yyyy'}}\n</span>\n<teta-date-picker class=\"datepicker-table\"\n #input\n *ngIf=\"edit\"\n [appendToBody]=\"true\"\n [showTime]=\"false\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\"\n></teta-date-picker>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { TableService } from '../../service/table.service';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { SelectComponent } from '../../../select/select/select.component';\nimport { IIdName } from '../../../../common/contract/i-id-name';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\nimport { VerticalAlign } from '../../../../common/enum/vertical-align.enum';\n\n@Component({\n selector: 'teta-list-cell',\n templateUrl: './list-cell.component.html',\n styleUrls: ['./list-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ListCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @Input() override filterOptions: IIdName<any>[] = [];\n\n get value() {\n return this.getValue();\n }\n\n @ViewChild('input', { static: false }) input: SelectComponent;\n\n verticalAlign = VerticalAlign;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n setValue(value: any): void {\n this.row.data[this.column.name] = value;\n this.valueChanged();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input?.focus();\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit() {\n this.cdr.markForCheck();\n }\n\n override ngOnInit() {\n super.ngOnInit();\n }\n\n private getValue() {\n if (\n this.filterOptions === null ||\n this.filterOptions === undefined ||\n !(this.filterOptions instanceof Array)\n ) {\n return '';\n }\n const item = this.filterOptions.find(\n (option) => option.id === this.row.data[this.column.name]\n );\n if (item === null || item === undefined) {\n return '';\n }\n return item.name;\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{value}}\n</span>\n<teta-select #input\n class=\"row_auto select-table\"\n *ngIf=\"edit\"\n [allowNull]=\"!column.required\"\n [verticalAlign]=\"verticalAlign.auto\"\n [appendToBody]=\"true\"\n [options]=\"filterOptions\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\">\n</teta-select>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { TableService } from '../../service/table.service';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\n\n@Component({\n selector: 'teta-string-cell',\n templateUrl: './string-cell.component.html',\n styleUrls: ['./string-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StringCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @ViewChild('input', { static: false }) input: ElementRef;\n\n constructor(public override svc: TableService<T>, public override cdr: ChangeDetectorRef) {\n super(svc, cdr);\n }\n\n setValue(): void {\n this.valueChanged();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n this.cdr.markForCheck();\n setTimeout(() => {\n this.input.nativeElement?.focus();\n this.input.nativeElement?.select();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{row.data[column.name]}}\n</span>\n<input #input\n *ngIf=\"edit\"\n type=\"text\"\n class=\"input row_auto border-radius-0\"\n (blur)=\"setValue()\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"row.data[column.name]=$event\"/>\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { CellComponentBase } from '../../base/cell-component-base';\nimport { TableColumn } from '../../contract/table-column';\nimport { TableRow } from '../../contract/table-row';\nimport { TableService } from '../../service/table.service';\nimport { ICellCoordinates } from '../../contract/i-cell-coordinates';\n\n@Component({\n selector: 'teta-boolean-cell',\n templateUrl: './boolean-cell.component.html',\n styleUrls: ['./boolean-cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BooleanCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit\n{\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n @ViewChild('input', { static: false }) input: ElementRef;\n\n constructor(public override svc: TableService<T>, public override cdr: ChangeDetectorRef) {\n super(svc, cdr);\n }\n\n setValue(): void {\n this.valueChanged();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n this.cdr.markForCheck();\n setTimeout(() => {\n this.input?.nativeElement.focus();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{ row.data[column.name] }}\n</span>\n<teta-checkbox\n #input\n *ngIf=\"edit\"\n [binary]=\"true\"\n [(ngModel)]=\"row.data[column.name]\"\n (blur)=\"setValue()\"\n></teta-checkbox>\n","import { FilterType } from '../../filter/enum/filter-type.enum';\nimport { Type } from '@angular/core';\nimport { NumericCellComponent } from '../default/numeric-cell/numeric-cell.component';\nimport { DateCellComponent } from '../default/date-cell/date-cell.component';\nimport { ListCellComponent } from '../default/list-cell/list-cell.component';\nimport { StringCellComponent } from '../default/string-cell/string-cell.component';\nimport { TableColumn } from './table-column';\nimport { BooleanCellComponent } from '../default/boolean-cell/boolean-cell.component';\n\nconst cellComponentsMap: Map<FilterType, Type<any>> = new Map<\n FilterType,\n Type<any>\n>()\n .set(FilterType.number, NumericCellComponent)\n .set(FilterType.date, DateCellComponent)\n .set(FilterType.list, ListCellComponent)\n .set(FilterType.string, StringCellComponent)\n .set(FilterType.boolean, BooleanCellComponent)\n .set(FilterType.custom, StringCellComponent);\n\nexport const getCellComponent = (column: TableColumn): Type<any> =>\n cellComponentsMap.has(column.filterType)\n ? cellComponentsMap.get(column.filterType)\n : StringCellComponent;\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\nimport { CellComponentBase } from '../base/cell-component-base';\nimport { TableColumn } from '../contract/table-column';\nimport { TableRow } from '../contract/table-row';\nimport { getCellComponent } from '../contract/cell-components-map';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\n\n@Component({\n selector: 'teta-cell-host',\n template: '',\n styleUrls: ['./cell-host.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CellHostComponent<T> implements OnInit, OnDestroy, OnChanges {\n @Input() column: TableColumn;\n @Input() row: TableRow<T>;\n @Input() filterOptions: IIdName<any>[];\n @Input() dict: IDictionary<IIdName<any>[]>;\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n if (!CellComponentBase.isPrototypeOf(this.column.cellComponent)) {\n this.column.cellComponent = getCellComponent(this.column);\n }\n this._componentRef = this.viewContainerRef.createComponent(\n this.column.cellComponent\n );\n this._componentRef.instance.column = this.column;\n this._componentRef.instance.row = this.row;\n this._componentRef.instance.filterOptions = this.filterOptions;\n this._componentRef.instance.dict = this.dict;\n this._init = true;\n }\n\n ngOnDestroy(): void {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n this._init &&\n (changes.hasOwnProperty('row') ||\n changes.hasOwnProperty('column') ||\n changes.hasOwnProperty('filterOptions') ||\n changes.hasOwnProperty('dict'))\n ) {\n this._componentRef.instance.row = this.row;\n this._componentRef.instance.column = this.column;\n this._componentRef.instance.filterOptions = this.filterOptions;\n this._componentRef.instance.dict = this.dict;\n this._componentRef.injector.get(ChangeDetectorRef).markForCheck();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { TableColumn } from '../contract/table-column';\nimport { TableRow } from '../contract/table-row';\nimport { TableService } from '../service/table.service';\nimport { IIdName } from '../../../common/contract/i-id-name';\nimport { IDictionary } from '../../../common/contract/i-dictionary';\n\n@Component({\n selector: 'teta-cell',\n templateUrl: './cell.component.html',\n styleUrls: ['./cell.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CellComponent<T> implements OnInit, OnDestroy {\n @Input() column: TableColumn;\n @Input() filterOptions: IIdName<any>[];\n @Input() dict: IDictionary<IIdName<any>[]>;\n @Input() row: TableRow<T>;\n @HostBinding('class.cell') private readonly tableCellClass = true;\n\n private alive = true;\n\n constructor(protected _svc: TableService<T>) {}\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n this.alive = false;\n }\n}\n","<teta-cell-host [row]=\"row\"\n [column]=\"column\"\n [filterOptions]=\"filterOptions\"\n [dict]=\"dict\"></teta-cell-host>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Type,\n ViewChild,\n} from '@angular/core';\nimport {TableRow} from '../contract/table-row';\nimport {TableColumn} from '../contract/table-column';\nimport {GroupRowComponentBase} from '../base/group-row-component-base';\nimport {TableService} from '../service/table.service';\nimport {DetailComponentBase} from '../base/detail-component-base';\nimport {takeWhile} from 'rxjs/operators';\nimport {TableUtil} from '../util/table-util';\nimport {SelectType} from '../enum/select-type.enum';\nimport {combineLatest} from 'rxjs';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {AggregationType} from '../enum/aggregation-type.enum';\nimport {Datasource, IDatasource, SizeStrategy} from 'ngx-ui-scroll';\nimport {CdkVirtualScrollViewport} from '@angular/cdk/scrolling';\n\n@Component({\n selector: 'teta-table-body',\n templateUrl: './table-body.component.html',\n styleUrls: ['./table-body.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableBodyComponent<T> implements OnInit, OnDestroy {\n @Input() virtual: boolean;\n @Input() activeRow: TableRow<T>;\n @Input() rowHeight: number;\n @Input() additionalComponent: Type<DetailComponentBase<T>>;\n @Input() tree: boolean;\n @Input() aggregate: boolean;\n @Input() grouping: boolean;\n @Input() groupRowComponent: Type<GroupRowComponentBase<T>>;\n @Input() openLevels: number;\n @Input() selectType: SelectType;\n @Input() rowClass: (row: TableRow<T>, index?: number) => string;\n\n @ViewChild(CdkVirtualScrollViewport, {static: false}) viewport: CdkVirtualScrollViewport;\n\n @HostBinding('class.table-body') private readonly tableBodyClass = true;\n\n set data(data: TableRow<T>[]) {\n this._data = data;\n if (!this.dataSource) {\n this.createAdapter();\n }\n this.resetAdapter();\n }\n\n get data() {\n return this._data;\n }\n\n dict: IDictionary<IIdName<any>[]>;\n\n gridTemplateColumns: string;\n selectedRows: TableRow<T>[] = [];\n locked: TableColumn[] = [];\n unlocked: TableColumn[] = [];\n\n selectTypeEnum = SelectType;\n dataSource: IDatasource<TableRow<T>>;\n\n private _columns: TableColumn[] = [];\n private _alive = true;\n private _data: TableRow<T>[];\n private _hiddenColumns: string[] = [];\n private _index: number;\n\n set columns(columns: TableColumn[]) {\n this._columns = columns;\n this.locked = this._columns?.filter((_) => _.locked === true);\n this.unlocked = this._columns?.filter((_) => _.locked === false);\n }\n\n get columns(): TableColumn[] {\n return this._columns;\n }\n\n constructor(private _svc: TableService<T>, private _cdr: ChangeDetectorRef) {\n combineLatest([this._svc.columns, this._svc.hiddenColumns])\n .pipe(takeWhile((_) => this._alive))\n .subscribe((values: [TableColumn[], string[]]) => {\n const [columns, hiddenColumns] = values;\n this._hiddenColumns = hiddenColumns;\n this.columns = ArrayUtil.flatten(columns, 'columns', true).filter(\n (_) => this._hiddenColumns.indexOf(_.name) < 0\n );\n this.gridTemplateColumns = TableUtil.getGridTemplateColumns(\n this.columns.sort((a, b) => Number(b.locked) - Number(a.locked))\n );\n this._cdr.markForCheck();\n });\n\n this._svc.displayData.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.data = _;\n this._cdr.markForCheck();\n });\n\n this._svc.dict.pipe(takeWhile((_) => this._alive)).subscribe((_) => {\n this.dict = _;\n this._cdr.markForCheck();\n });\n\n this._svc.scrollIndex\n .pipe(takeWhile((_) => this._alive))\n .subscribe(async (_) => {\n // if (this.viewport && this.dataSource && _ !== null) {\n // await this.dataSource.adapter.relax();\n // await this.dataSource.adapter.fix({\n // scrollPosition: (_ + 1) * 24,\n // });\n // }\n if (this.viewport) {\n this.viewport.scrollToIndex(_, 'smooth');\n }\n this._cdr.markForCheck();\n });\n\n this._svc.activeRow\n .pipe(takeWhile((_) => this._alive))\n .subscribe(async (_) => {\n this.activeRow = _;\n this._cdr.markForCheck();\n });\n }\n\n setActiveRow(row: TableRow<T>) {\n this._svc.setActiveRow(row);\n }\n\n getData = (index, count, success) => {\n const data = [];\n if (this.data?.length > 0) {\n const start = Math.max(0, index);\n const end = Math.min(index + count - 1, this.data.length - 1);\n for (let i = start; i <= end; i++) {\n data.push(this.data[i]);\n }\n }\n return success(data);\n };\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n\n getAggregateValue(column: TableColumn): number {\n if (column.aggregate === AggregationType.sum) {\n return this.getSum(column.name);\n }\n if (column.aggregate === AggregationType.avg) {\n return this.getSum(column.name) / this.data.length;\n }\n if (column.aggregate === AggregationType.min) {\n return this.getMin(column.name);\n }\n if (column.aggregate === AggregationType.max) {\n return this.getMax(column.name);\n }\n }\n\n getAggregateText(column: TableColumn): string {\n if (column.aggregate === AggregationType.sum) {\n return 'Сумма=';\n }\n if (column.aggregate === AggregationType.avg) {\n return 'Среднее=';\n }\n if (column.aggregate === AggregationType.min) {\n return 'Мин=';\n }\n if (column.aggregate === AggregationType.max) {\n return 'Макс=';\n }\n return '';\n }\n\n getSpan(): string {\n if (this.locked?.length > 0) {\n let span = this.locked.length;\n if (this.selectType !== SelectType.none) {\n span += 1;\n }\n return `span ${span}`;\n }\n return null;\n }\n\n getTemplateColumns() {\n let template = this.gridTemplateColumns;\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n getLockedGridTemplateColumns(columns: TableColumn[]) {\n let template = TableUtil.getGridTemplateColumns(columns);\n if (this.selectType !== SelectType.none) {\n template = `48px ${template}`;\n }\n return template;\n }\n\n trackRow(index: number, row: TableRow<T>): any {\n return index;\n }\n\n trackColumns(index: number, column: TableColumn): any {\n return column.name;\n }\n\n private getSum(columnName) {\n return this.data?.reduce((accum, current) => {\n const val = parseFloat(current.data[columnName]);\n return accum + (isNaN(val) ? 0 : val);\n }, 0);\n }\n\n private getMin(columnName) {\n return this.data?.reduce(\n (accum, current) =>\n accum != null && accum <= current.data[columnName]\n ? accum\n : current.data[columnName],\n null\n );\n }\n\n private getMax(columnName) {\n return this.data?.reduce(\n (accum, current) =>\n accum != null && accum >= current.data[columnName]\n ? accum\n : current.data[columnName],\n null\n );\n }\n\n private async resetAdapter() {\n await this.dataSource.adapter.relax();\n await this.dataSource.adapter.reset({\n get: this.getData,\n settings: {\n minIndex: 0,\n maxIndex: this._data?.length ? this._data.length - 1 : 0,\n startIndex: 0,\n itemSize: 24,\n sizeStrategy: SizeStrategy.Constant,\n },\n });\n await this.dataSource.adapter.check();\n }\n\n private createAdapter() {\n this.dataSource = new Datasource<TableRow<T>>({\n get: this.getData,\n settings: {\n startIndex: 0,\n bufferSize: 2,\n sizeStrategy: SizeStrategy.Constant,\n itemSize: 24,\n },\n });\n }\n}\n","<!--<div #viewport class=\"table-body-container table-body-container-virtual\"-->\n<!-- *ngIf=\"virtual\"-->\n<!-- [style.grid-template-columns]=\"getTemplateColumns()\"-->\n<!-- style=\"height: 100%;\">-->\n<!-- <ng-container-->\n<!-- *uiScroll=\"let row of dataSource; let rowIndex = index; let last = last;\" style=\"display: flex;flex-grow: 1\">-->\n<!-- <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>-->\n<!-- </ng-container>-->\n<!-- <ng-container *ngIf=\"aggregate\">-->\n<!-- <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>-->\n<!-- </ng-container>-->\n<!--</div>-->\n\n<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"24\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n\n\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\"\n [style.grid-template-rows]=\"rowHeight + 'px'\"\n [style.grid-auto-rows]=\"rowHeight + 'px'\"\n [style.grid-template-columns]=\"getTemplateColumns()\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row)\"\n [attr.data-row]=\"rowIndex\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\"\n [class.table-row_active]=\"row === activeRow || selectedRows.indexOf(row) >= 0\">\n <ng-container *ngIf=\"!grouping\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.zIndex]=\"row === activeRow ? 1 : 'unset'\"\n [style.grid-column-end]=\"getSpan()\">\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\"\n [row]=\"row\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict[column.name]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n ></teta-cell>\n </ng-container>\n <ng-container *ngIf=\"grouping\">\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.grid-template-columns]=\"virtual ? getTemplateColumns() : ''\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.grid-template-columns]=\"getLockedGridTemplateColumns(locked)\"\n [style.grid-column-end]=\"getSpan()\">\n <div class=\"cell align-center justify-content-center\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n *ngIf=\"selectType !== selectTypeEnum.none && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component justify-content-end\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{getAggregateText(column)}}\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n</ng-template>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n Type,\n ViewChild,\n} from '@angular/core';\nimport {TableRow} from '../contract/table-row';\nimport {TableService} from '../service/table.service';\nimport {TableColumn} from '../contract/table-column';\nimport {FilterState} from '../../filter/contarct/filter-state';\nimport {DetailComponentBase} from '../base/detail-component-base';\nimport {ICellEvent} from '../contract/i-cell-event';\nimport {ICellCoordinates} from '../contract/i-cell-coordinates';\nimport {GroupRowComponentBase} from '../base/group-row-component-base';\nimport {GroupRowComponent} from '../default/group-row/group-row.component';\nimport {filter, takeWhile, withLatestFrom} from 'rxjs/operators';\nimport {EditType} from '../enum/edit-type.enum';\nimport {EditEvent} from '../enum/edit-event.enum';\nimport {SelectType} from '../enum/select-type.enum';\nimport {IIdName} from '../../../common/contract/i-id-name';\nimport {IDictionary} from '../../../common/contract/i-dictionary';\nimport {of} from 'rxjs';\nimport {ArrayUtil} from '../../../common/util/array-util';\nimport {PositionUtil} from '../../../common/util/position-util';\nimport {Align} from '../../../common/enum/align.enum';\nimport {VerticalAlign} from '../../../common/enum/vertical-align.enum';\nimport {FilterType} from '../../filter/enum/filter-type.enum';\nimport {TableContextMenuConfig} from '../contract/table-context-menu-config';\n\n@Component({\n selector: 'teta-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TableService],\n})\nexport class TableComponent<T>\n implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n @Input() data: T[] = [];\n @Input() columns: TableColumn[] = [];\n @Input() dict: IDictionary<IIdName<any>[]>;\n\n @Input()\n set state(state: FilterState) {\n this._state = state;\n }\n\n @Input() rowHeight = 24;\n @Input() cookieName: string;\n @Input() virtual: boolean;\n @Input() detailComponent: Type<DetailComponentBase<T>>;\n @Input() activeRow: TableRow<T>;\n @Input() selectedRows: TableRow<T>[];\n @Input() selectType: SelectType = SelectType.none;\n @Input() aggregate: boolean;\n @Input() grouping: boolean;\n @Input() groupRowComponent: Type<GroupRowComponentBase<T>> =\n GroupRowComponent;\n @Input() openLevels: number;\n @Input() tree: boolean;\n @Input() trackBy: (row: TableRow<T>) => any;\n @Input() editType: EditType;\n @Input() editEvent: EditEvent;\n @Input() rowEditable: boolean | ((row: TableRow<T>) => boolean);\n @Input() rowClass: (row: TableRow<T>, index?: number) => string;\n\n @Input() set scrollToIndex(index: number) {\n this._svc.scrollToIndex(index);\n }\n\n @Input() contextMenuConfig: TableContextMenuConfig =\n new TableContextMenuConfig();\n\n @Input() showHeadCellMenu = true;\n\n @Output()\n stateChange: EventEmitter<FilterState> = new EventEmitter<FilterState>();\n @Output() bodyLeft = new EventEmitter<TableRow<T>>();\n @Output() activeRowChange: EventEmitter<TableRow<T>> = new EventEmitter();\n @Output() selectedRowsChange: EventEmitter<TableRow<T>[]> =\n new EventEmitter();\n @Output() rowLeft = new EventEmitter<TableRow<T>>();\n @Output() rowEditStart = new EventEmitter<TableRow<T>>();\n @Output() rowEditEnd = new EventEmitter<TableRow<T>>();\n @Output() cellClick = new EventEmitter<ICellEvent<T>>();\n @Output() cellDoubleClick = new EventEmitter<ICellEvent<T>>();\n @Output() cellFocus = new EventEmitter<ICellEvent<T>>();\n @Output() cellEditStart = new EventEmitter<ICellCoordinates<T>>();\n @Output() cellEditEnd = new EventEmitter<ICellCoordinates<T>>();\n @Output() valueChange = new EventEmitter<ICellCoordinates<T>>();\n @Output() cellKeyUp = new EventEmitter<ICellEvent<T>>();\n\n @Output() pasteRows = new EventEmitter<any[]>();\n @Output() addRow = new EventEmitter<void>();\n @Output() deleteRows = new EventEmitter<TableRow<T>[]>();\n @Output() tableService = new EventEmitter<TableService<T>>();\n\n @ViewChild('contextMenu', {static: true}) menu: ElementRef;\n @HostBinding('class.table') private readonly tableClass = true;\n\n showContextMenu: boolean;\n selectedRowsList: TableRow<T>[];\n contextMenuTarget: ICellCoordinates<T>;\n\n private _alive = true;\n private _bodyElement: HTMLElement;\n private _headElement: HTMLElement;\n\n private _state: FilterState;\n\n constructor(private _svc: TableService<T>, private _elementRef: ElementRef) {\n this._svc.state\n .pipe(\n takeWhile((_) => this._alive),\n filter((state) => state !== this._state)\n )\n .subscribe((state: FilterState) => this.stateChange.next(state));\n\n this._svc.editCellStart\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) => this.cellEditStart.emit(item));\n\n this._svc.editCellStop\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) => this.cellEditEnd.emit(item));\n\n this._svc.editRowStart\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) =>\n this.rowEditStart.emit(item?.row)\n );\n\n this._svc.editRowStop\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: ICellCoordinates<T>) =>\n this.rowEditEnd.emit(item?.row)\n );\n\n this._svc.selectedRows\n .pipe(takeWhile((_) => this._alive))\n .subscribe((items: TableRow<T>[]) => {\n this.selectedRowsList = items;\n this.selectedRowsChange.emit(items);\n });\n\n this._svc.activeRow\n .pipe(takeWhile((_) => this._alive))\n .subscribe((item: TableRow<T>) => this.activeRowChange.emit(item));\n\n this._svc.valueChanged\n .pipe(takeWhile((_) => this._alive))\n .subscribe((coordinates: ICellCoordinates<T>) => {\n this.valueChange.emit(coordinates);\n });\n }\n\n @HostListener('document:click', ['$event']) handleClickOutsideAnyRow(\n event: MouseEvent\n ) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellClick.emit(coordinates);\n if (this.editEvent === EditEvent.click) {\n this.startEditRowOrCell(coordinates);\n }\n }\n if (!this.eventIsOnRow(event) && !event.defaultPrevented) {\n this._svc.startEditRow(null);\n }\n }\n\n @HostListener('focusin', ['$event']) focusIn(event: any) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellFocus.emit(coordinates);\n if (this.editEvent === EditEvent.focus) {\n this.startEditRowOrCell(coordinates);\n }\n }\n }\n\n @HostListener('dblclick', ['$event'])\n dblclick(event: MouseEvent) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellDoubleClick.emit(coordinates);\n if (this.editEvent === EditEvent.doubleClick) {\n this.startEditRowOrCell(coordinates);\n }\n }\n }\n\n @HostListener('window:keyup', ['$event'])\n keyup(event: KeyboardEvent) {\n const coordinates = this.getCoordinates(event);\n if (coordinates) {\n this.cellKeyUp.emit(coordinates);\n }\n switch (event.key) {\n case 'Enter':\n this._svc.startEditRow(null);\n break;\n case 'Escape':\n this._svc.startEditRow(null);\n break;\n default:\n break;\n }\n }\n\n @HostListener('mousedown', ['$event']) mousedown(event: MouseEvent) {\n if (event.button === 2) {\n event.preventDefault();\n }\n }\n\n @HostListener('contextmenu', ['$event']) contextMenu(event: MouseEvent) {\n if (\n this.getSelectedText() ||\n this.contextMenuConfig?.contextMenu === false\n ) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.contextMenuTarget = this.getCoordinates(event);\n this.showContextMenu = true;\n this.setPosition(event);\n }\n\n rowAdd() {\n this.addRow.emit();\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n }\n\n copy(rows: TableRow<T>[]) {\n of(1)\n .pipe(withLatestFrom(this._svc.columns, this._svc.hiddenColumns))\n .subscribe((data: [number, TableColumn[], string[]]) => {\n const [, columns, hidden] = data;\n navigator.clipboard.writeText(\n this.toClipboardString(rows, this.getVisibleColumns(columns, hidden))\n );\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n });\n }\n\n delete(rows: TableRow<T>[]) {\n this.deleteRows.emit(rows);\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n }\n\n async pasteData() {\n const result = await navigator.clipboard.readText();\n of(1)\n .pipe(withLatestFrom(this._svc.columns, this._svc.hiddenColumns))\n .subscribe((data: [number, TableColumn[], string[]]) => {\n const [, columns, hidden] = data;\n this.pasteRows.emit(\n this.fromClipboard(result, this.getVisibleColumns(columns, hidden))\n );\n });\n this.contextMenuTarget = null;\n this.showContextMenu = false;\n }\n\n ngOnInit(): void {\n this._svc.restoreState();\n this._svc.restoreHiddenColumns();\n this.tableService.emit(this._svc);\n }\n\n ngAfterViewInit(): void {\n this._headElement =\n this._elementRef.nativeElement.querySelector('.table-head');\n this._bodyElement = this._elementRef.nativeElement.querySelector(\n '.table-body-container'\n );\n this._bodyElement.addEventListener('scroll', this.onScroll);\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n this._bodyElement.removeEventListener('scroll', this.onScroll);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.hasOwnProperty('editType')) {\n this._svc.editType = this.editType;\n }\n if (changes.hasOwnProperty('selectType')) {\n this._svc.selectType = this.selectType;\n }\n if (changes.hasOwnProperty('selectedRows')) {\n this._svc.selectRows(this.selectedRows);\n }\n if (changes.hasOwnProperty('rowEditable')) {\n this._svc.rowEditable = this.rowEditable;\n }\n if (changes.hasOwnProperty('cookieName')) {\n this._svc.setCookieName(this.cookieName);\n }\n if (changes.hasOwnProperty('columns')) {\n if (this.columns !== null && this.columns !== undefined) {\n this._svc.setColumns(this.columns);\n }\n }\n if (changes.hasOwnProperty('data')) {\n this._svc.setData(this.data);\n this._svc.selectRows([]);\n }\n if (changes.hasOwnProperty('dict')) {\n this._svc.setDict(this.dict);\n }\n }\n\n private startEditRowOrCell(coordinates: ICellCoordinates<T>): void {\n if (this.editType === EditType.row) {\n this._svc.startEditRow(coordinates);\n }\n if (this.editType === EditType.cell) {\n this._svc.startEditCell(coordinates);\n }\n }\n\n private getEventCell(event: Event): HTMLElement | null {\n return event.composedPath().find((target: HTMLElement) => {\n return target.tagName?.toLowerCase() === 'teta-cell';\n }) as HTMLElement;\n }\n\n private eventIsOnRow(event: Event): boolean {\n const row = event.composedPath().find((target: HTMLElement) => {\n return target?.getAttribute && target?.getAttribute('data-row');\n });\n return row && this._elementRef.nativeElement.contains(row);\n }\n\n private getCoordinates(event: Event): ICellEvent<T> | null {\n const cell = this.getEventCell(event);\n if (cell) {\n const rowIndex = cell.getAttribute('data-row');\n const columnName = cell.getAttribute('data-column');\n if (rowIndex && columnName) {\n const row = this._svc.getRowByIndex(rowIndex);\n const column = this._svc.getColumnByName(columnName);\n return {\n row,\n column: column ? column : new TableColumn(),\n event,\n };\n }\n }\n return null;\n }\n\n private onScroll = () => {\n this._headElement.scrollLeft = this._bodyElement.scrollLeft;\n };\n\n private getSelectedText() {\n let text = '';\n if (typeof window.getSelection != 'undefined') {\n text = window.getSelection().toString();\n }\n return text;\n }\n\n private setPosition(event: MouseEvent) {\n const position = PositionUtil.getPosition(\n {\n top: event.y,\n bottom: event.y,\n left: event.x,\n right: event.x,\n },\n this.menu.nativeElement.getBoundingClientRect(),\n Align.left,\n VerticalAlign.auto\n );\n PositionUtil.setElementPosition(this.menu.nativeElement, position);\n }\n\n private toClipboardString(rows: TableRow<T>[], columns: TableColumn[]) {\n return rows.reduce(\n (res: string, currentRow: TableRow<T>, i: number) =>\n `${res}${i === 0 ? '' : '\\n'}${columns.reduce(\n (columnResult: string, column: TableColumn, j: number) =>\n `${columnResult}${j === 0 ? '' : '\\t'}${\n currentRow.data[column.name] ?? ''\n }`,\n ''\n )}`,\n ''\n );\n }\n\n private fromClipboard(data: string, columns: TableColumn[]) {\n const rows = data.split('\\n').filter((_) => _?.length > 0);\n const result = rows.map((_) =>\n _.replace('\\r', '').replace('\\n', '').split('\\t')\n );\n return result.map((row: string[]) =>\n row.reduce((res, item, index) => {\n let value: any = item;\n if (\n columns[index]?.filterType === FilterType.number ||\n columns[index]?.filterType === FilterType.list\n ) {\n value = parseFloat(item);\n }\n if (columns[index]?.filterType === FilterType.boolean) {\n value = Boolean(JSON.parse(item.toLowerCase()));\n }\n if (columns[index]) {\n res[columns[index].name] = value;\n }\n return res;\n }, {})\n );\n }\n\n private getVisibleColumns(columns: TableColumn[], hidden: string[]) {\n const visible = ArrayUtil.flatten(columns, 'columns', true).filter(\n (_) => hidden.indexOf(_.name) < 0\n );\n return visible.sort((a, b) => Number(b.locked) - Number(a.locked));\n }\n}\n","<div class=\"column column_auto\">\n <teta-table-head [selectType]=\"selectType\" [showHeadCellMenu]=\"showHeadCellMenu\"></teta-table-head>\n <teta-table-body\n [aggregate]=\"aggregate\"\n [virtual]=\"virtual\"\n [activeRow]=\"activeRow\"\n [additionalComponent]=\"detailComponent\"\n [grouping]=\"grouping\"\n [groupRowComponent]=\"groupRowComponent\"\n [openLevels]=\"openLevels\"\n [selectType]=\"selectType\"\n [rowHeight]=\"rowHeight\"\n [rowClass]=\"rowClass\"\n [tree]=\"tree\"></teta-table-body>\n</div>\n\n<div #contextMenu\n class=\"list shadow-1\"\n style=\"position: fixed; z-index: 2;\"\n [style.visibility]=\"showContextMenu ? 'visible ' : 'hidden'\"\n [tetaClickOutside]=\"showContextMenu\"\n (clickOutside)=\"showContextMenu = false\">\n <ng-container *ngIf=\"contextMenuConfig?.add\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"rowAdd()\">\n <teta-icon [name]=\"'add'\" [palette]=\"'text'\"></teta-icon>\n Добавить строку\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"contextMenuConfig?.copy\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"copy(selectedRowsList)\"\n *ngIf=\"selectedRowsList?.length > 0\">\n <teta-icon [name]=\"'copySelected'\" [palette]=\"'text'\"></teta-icon>\n Копировать выделенные строки\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"copy([contextMenuTarget.row])\"\n *ngIf=\"contextMenuTarget\">\n <teta-icon [name]=\"'copy'\" [palette]=\"'text'\"></teta-icon>\n Копировать строку\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"contextMenuConfig?.paste\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"pasteData()\">\n <teta-icon [name]=\"'paste'\" [palette]=\"'text'\"></teta-icon>\n Вставить\n </div>\n <div class=\"list-divider\"></div>\n </ng-container>\n <ng-container *ngIf=\"contextMenuConfig?.delete\">\n <div class=\"list-item list-item_interactive\"\n (click)=\"delete(selectedRowsList)\"\n *ngIf=\"selectedRowsList?.length > 0\">\n <teta-icon [name]=\"'deleteSelected'\" [palette]=\"'text'\"></teta-icon>\n Удалить выделенные строки\n </div>\n <div class=\"list-item list-item_interactive\"\n (click)=\"delete([contextMenuTarget.row])\"\n *ngIf=\"contextMenuTarget\">\n <teta-icon [name]=\"'delete'\" [palette]=\"'text'\"></teta-icon>\n Удалить строку\n </div>\n </ng-container>\n</div>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TabContentDirective} from './tab-content.directive';\nimport {TabTitleDirective} from './tab-title.directive';\nimport {TabComponent} from './tab/tab.component';\nimport {TabsComponent} from './tabs/tabs.component';\n\n@NgModule({\n declarations: [\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabsComponent\n ],\n exports: [\n TabContentDirective,\n TabTitleDirective,\n TabComponent,\n TabsComponent\n ],\n imports: [\n CommonModule\n ]\n})\nexport class TabsModule {\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {TetaTemplateDirective} from './teta-template.directive';\n\n\n@NgModule({\n declarations: [\n TetaTemplateDirective\n ],\n exports: [\n TetaTemplateDirective\n ],\n imports: [\n CommonModule\n ]\n})\nexport class TetaTemplateModule {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TreeComponent } from './tree/tree.component';\nimport { TreeItemComponent } from './tree-item/tree-item.component';\nimport { TetaTemplateModule } from '../../directive/teta-template/teta-template.module';\nimport { IconModule } from '../icon/icon.module';\nimport { TreeItemToggleComponent } from './tree-item-toggle/tree-item-toggle.component';\n\n@NgModule({\n declarations: [TreeComponent, TreeItemComponent, TreeItemToggleComponent],\n exports: [TreeComponent, TetaTemplateModule, TreeItemToggleComponent],\n imports: [CommonModule, IconModule, TetaTemplateModule],\n})\nexport class TreeModule {}\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport {CellComponentBase} from '../../base/cell-component-base';\nimport {TableColumn} from '../../contract/table-column';\nimport {TableRow} from '../../contract/table-row';\nimport {TableService} from '../../service/table.service';\nimport {ICellCoordinates} from '../../contract/i-cell-coordinates';\nimport {DatePickerComponent} from '../../../date-picker/date-picker/date-picker.component';\n\n@Component({\n selector: 'teta-date-time-cell',\n templateUrl: './date-time-cell.component.html',\n styleUrls: ['./date-time-cell.component.scss'],\n})\nexport class DateTimeCellComponent<T>\n extends CellComponentBase<T>\n implements OnInit {\n @Input() override column: TableColumn;\n @Input() override row: TableRow<T>;\n\n @ViewChild('input', {static: false}) input: DatePickerComponent;\n\n constructor(\n protected override svc: TableService<T>,\n protected override cdr: ChangeDetectorRef\n ) {\n super(svc, cdr);\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n }\n\n setValue(value: Date): void {\n this.row.data[this.column.name] = value;\n this.valueChanged();\n }\n\n startEdit(initiator: ICellCoordinates<T>, type: 'cell' | 'row'): void {\n if (initiator?.column.name === this.column.name) {\n setTimeout(() => {\n this.input.openPicker(true);\n this.cdr.markForCheck();\n }, 0);\n }\n }\n\n stopEdit(): void {\n this.cdr.markForCheck();\n }\n}\n","<span [style.display]=\"edit ? 'none' : 'block'\" class=\"cell-text\">\n {{row.data[column.name] | date : 'dd.MM.yyyy HH:mm:ss'}}\n</span>\n<teta-date-picker class=\"datepicker-table\" #input\n *ngIf=\"edit\"\n [appendToBody]=\"true\"\n [showTime]=\"true\"\n [ngModel]=\"row.data[column.name]\"\n (ngModelChange)=\"setValue($event)\"\n></teta-date-picker>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizeDragDirective } from './resize-drag.directive';\n\n@NgModule({\n declarations: [ResizeDragDirective],\n exports: [ResizeDragDirective],\n imports: [CommonModule],\n})\nexport class ResizeDragModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableComponent } from './table/table.component';\nimport { FilterModule } from '../filter/filter.module';\nimport { NumericCellComponent } from './default/numeric-cell/numeric-cell.component';\nimport { ListCellComponent } from './default/list-cell/list-cell.component';\nimport { DateCellComponent } from './default/date-cell/date-cell.component';\nimport { StringCellComponent } from './default/string-cell/string-cell.component';\nimport { HeadCellHostComponent } from './head-cell-host/head-cell-host.component';\nimport { TableHeadComponent } from './table-head/table-head.component';\nimport { TableBodyComponent } from './table-body/table-body.component';\nimport { CellComponent } from './cell/cell.component';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxModule } from '../checkbox/checkbox.module';\nimport { CellHostComponent } from './cell-host/cell-host.component';\nimport { GroupRowComponent } from './default/group-row/group-row.component';\nimport { TableHeadGroupComponent } from './table-head-group/table-head-group.component';\nimport { HeadCellComponent } from './head-cell/head-cell.component';\nimport { DefaultHeadCellComponent } from './default/default-head-cell/default-head-cell.component';\nimport { IconModule } from '../icon/icon.module';\nimport { DropdownModule } from '../dropdown/dropdown.module';\nimport { TabsModule } from '../tabs/tabs.module';\nimport { SelectModule } from '../select/select.module';\nimport { NumberPipeModule } from '../../pipe/number-pipe/number-pipe.module';\nimport { DatePickerModule } from '../date-picker/date-picker.module';\nimport { ButtonModule } from '../button/button.module';\nimport { SelectionCellComponent } from './selection-cell/selection-cell.component';\nimport { SelectionHeadCellComponent } from './selection-head-cell/selection-head-cell.component';\nimport { HintModule } from '../../directive/hint/hint.module';\nimport { TreeModule } from '../tree/tree.module';\nimport { HeadCellDropdownComponent } from './head-cell-dropdown/head-cell-dropdown.component';\nimport { DateTimeCellComponent } from './default/date-time-cell/date-time-cell.component';\nimport { OnlyNumberModule } from '../../directive/only-number/only-number.module';\nimport { BooleanCellComponent } from './default/boolean-cell/boolean-cell.component';\nimport { UiScrollModule } from 'ngx-ui-scroll';\nimport { ToolbarModule } from '../toolbar/toolbar.module';\nimport { ClickOutsideModule } from '../../directive/click-outside/click-outside.module';\nimport {ResizeDragModule} from '../../directive/resize-drag/resize-drag.module';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\n\n@NgModule({\n declarations: [\n TableComponent,\n NumericCellComponent,\n ListCellComponent,\n DateCellComponent,\n StringCellComponent,\n HeadCellHostComponent,\n TableHeadComponent,\n TableBodyComponent,\n CellComponent,\n CellHostComponent,\n GroupRowComponent,\n TableHeadGroupComponent,\n HeadCellComponent,\n DefaultHeadCellComponent,\n SelectionCellComponent,\n SelectionHeadCellComponent,\n HeadCellDropdownComponent,\n DateTimeCellComponent,\n BooleanCellComponent,\n ],\n exports: [\n TableComponent,\n NumericCellComponent,\n ListCellComponent,\n DateCellComponent,\n StringCellComponent,\n HeadCellHostComponent,\n TableHeadComponent,\n TableBodyComponent,\n CellComponent,\n CellHostComponent,\n GroupRowComponent,\n DateTimeCellComponent,\n BooleanCellComponent,\n ],\n imports: [\n CommonModule,\n FilterModule,\n FormsModule,\n CheckboxModule,\n IconModule,\n DropdownModule,\n TabsModule,\n SelectModule,\n NumberPipeModule,\n DatePickerModule,\n ButtonModule,\n HintModule,\n TreeModule,\n OnlyNumberModule,\n UiScrollModule,\n ToolbarModule,\n ClickOutsideModule,\n ResizeDragModule,\n ScrollingModule,\n ],\n})\nexport class TableModule {}\n","import {TableRow} from '../contract/table-row';\nimport {TableColumn} from '../contract/table-column';\n\nexport abstract class DetailComponentBase<T> {\n /**\n * The row details are displayed for\n */\n abstract row: TableRow<T>;\n /**\n * displayed columns\n */\n abstract columns: TableColumn[];\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeSwitchService {\n theme: Observable<boolean>;\n private theme$: BehaviorSubject<boolean>;\n\n constructor() {\n const value = this.restoreTheme();\n this.theme$ = new BehaviorSubject<boolean>(value);\n this.theme = this.theme$.asObservable();\n }\n\n switchTheme() {\n const value = !this.theme$.value;\n this.saveTheme(value);\n this.theme$.next(value);\n }\n\n saveTheme(value: boolean) {\n localStorage.setItem('theme', value.toString());\n }\n\n restoreTheme(): boolean {\n const theme = localStorage.getItem('theme');\n if (theme) {\n return JSON.parse(theme);\n }\n return true;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { ThemeSwitchService } from '../theme-switch.service';\nimport { Observable } from 'rxjs';\nimport {ButtonViewType} from '../../button/button/button.component';\n\n@Component({\n selector: 'teta-theme-switch',\n templateUrl: './theme-switch.component.html',\n styleUrls: ['./theme-switch.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThemeSwitchComponent implements OnInit {\n @Input() palette = 'text';\n @Input() view: ButtonViewType = 'ghost';\n theme: Observable<boolean>;\n\n constructor(private _svc: ThemeSwitchService) {\n this.theme = this._svc.theme;\n }\n\n ngOnInit(): void {}\n\n switchTheme() {\n this._svc.switchTheme();\n }\n}\n","<button teta-button [palette]=\"palette\" [view]=\"view\" [square]=\"true\" (click)=\"switchTheme()\">\n <teta-icon [name]=\"'lamp'\" [palette]=\"'text'\"></teta-icon>\n</button>\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ThemeSwitchComponent} from './theme-switch/theme-switch.component';\nimport {ButtonModule} from '../button/button.module';\nimport {IconModule} from '../icon/icon.module';\n\n@NgModule({\n declarations: [ThemeSwitchComponent],\n exports: [ThemeSwitchComponent],\n imports: [\n CommonModule,\n ButtonModule,\n IconModule\n ]\n})\nexport class ThemeSwitchModule {\n}\n","export enum Scale {\n time = 'time',\n number = 'number',\n category = 'category',\n}\n","export enum SeriesType {\n area,\n bar,\n line,\n pie,\n scatter,\n spline,\n contour,\n custom,\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\n\nexport class AreaDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data;\n\n const path = d3\n .area()\n .x1((d: any) => (d.x1 != null ? scaleX(d.x1) : scaleX(0)))\n .x0((d: any) => scaleX(d.x))\n .y((d: any) => scaleY(d.y));\n\n context\n .append('path')\n .attr('transform', `translate(${0}, 0)`)\n .attr('fill', series.color)\n .attr('stroke', series.color)\n .attr('stroke-width', series.strokeWidth ? series.strokeWidth : 1)\n .datum(points)\n .attr('d', path as any);\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { BarPoint } from '../model/point/bar-point';\n\nexport class BarDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BarPoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data.filter((_) => _.visible);\n\n const barScale = d3\n .scaleBand<number>()\n .domain(d3.range(points.length))\n .range(scaleX.range())\n .paddingInner(0.2)\n .paddingOuter(0.2);\n\n const u = context.selectAll('rect').data(points) as any;\n\n u.enter()\n .append('rect')\n .merge(u as any)\n .attr('x', (d: BasePoint, i) => barScale(i))\n .attr('y', (d: BasePoint) => scaleY(d.y))\n .attr('width', barScale.bandwidth())\n .attr('height', (d: BasePoint) => Math.abs(scaleY(0) - scaleY(d.y)))\n .attr('fill', (d: BasePoint) => d.color);\n\n u.exit().remove();\n }\n}\n","export enum DispatchType {\n moveLine = 'moveLine',\n movePoint = 'movePoint',\n}\n","export enum DragPointType {\n x,\n y,\n xy,\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { ChartOptions } from '../model/chart-options';\nimport { IDragEvent } from '../model/i-drag-event';\nimport { DispatchType } from '../model/enum/dispatch-type';\nimport { DragPointType } from '../model/enum/drag-point-type';\n\nexport class LineDrawer implements IDrawer<BasePoint> {\n dispatch: d3.Dispatch<IDragEvent<Series<BasePoint>>>;\n\n constructor() {\n this.dispatch = d3.dispatch(DispatchType.moveLine, DispatchType.movePoint);\n }\n\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any,\n options: ChartOptions\n ): void {\n const points = series.data;\n\n const markerPoints = points.filter((_) => _.marker);\n\n const path = d3\n .line<BasePoint>()\n .curve(series.curveType)\n .defined((d) => d.x != null && d.y != null)\n .x((d) => scaleX(d.x))\n .y((d) => scaleY(d.y));\n\n const seriesIndex = options.series.findIndex((_) => _.id === series.id);\n\n context\n .append('path')\n .attr('class', (d: BasePoint) =>\n series?.drag.enable ? 'draggable' : `series-${seriesIndex}`\n )\n .attr('data-draggable-id', seriesIndex)\n .attr('fill', 'none')\n .attr('stroke', series.color)\n .attr('stroke-dasharray', series?.strokeDasharray)\n .attr('stroke-width', series.strokeWidth ? series.strokeWidth : 1)\n .style('cursor', series?.drag?.enable ? 'move' : 'default')\n .datum(points)\n .attr('d', path);\n\n const u = context.append('g').attr('class', 'grabbers');\n\n const emit = (event: DragEvent, target: Series<BasePoint>) => {\n this.dispatch.apply(DispatchType.moveLine, {\n target,\n event,\n });\n };\n\n if (series.drag.enable) {\n u.selectAll('circle')\n .data(points)\n .enter()\n .append('circle')\n .attr('data-grabber-id', seriesIndex)\n .attr('stroke', series?.drag?.grabbers?.stroke ?? series?.color)\n .attr('stroke-width', series?.drag?.grabbers?.strokeWidth ?? 1)\n .attr('fill', series?.drag?.grabbers?.fill ?? series?.color)\n .attr('r', series?.drag?.grabbers?.radius ?? 4)\n .attr('cx', function (d) {\n return scaleX(d.x);\n })\n .attr('cy', function (d) {\n return scaleY(d.y);\n })\n .style('cursor', 'move')\n .call(\n d3.drag().on('start drag end', function (event, d: BasePoint) {\n d.x = scaleX.invert(event.sourceEvent?.offsetX);\n d.y = scaleY.invert(event.sourceEvent?.offsetY);\n d3.select(this).attr('cx', scaleX(d.x)).attr('cy', scaleY(d.y));\n\n context\n .select(`[data-draggable-id='${seriesIndex}']`)\n .attr('d', path);\n\n emit(event, series);\n\n if (series?.drag?.extendLine) {\n drawExtendedLine();\n }\n })\n );\n\n u.exit().remove();\n }\n\n const drawExtendedLine = () => {\n context.selectAll(`[data-extended-id='${seriesIndex}']`).remove();\n\n const p1 = points[0];\n const p2 = points[points.length - 1];\n\n const distance = Math.sqrt(\n Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p2.y, 2)\n );\n\n if (distance <= 0) {\n return;\n }\n\n const extendLength = 50;\n\n const extendedEndX = p2.x + ((p2.x - p1.x) / distance) * extendLength;\n const extendedEndY = p2.y + ((p2.y - p1.y) / distance) * extendLength;\n\n const extendedStartX = p1.x - ((p2.x - p1.x) / distance) * extendLength;\n const extendedStartY = p1.y - ((p2.y - p1.y) / distance) * extendLength;\n\n context\n .append('line')\n .attr('class', 'extendedLine')\n .attr('data-extended-id', seriesIndex)\n .attr('stroke', series?.color)\n .attr('stroke-width', series?.strokeWidth)\n .attr('stroke-dasharray', series?.strokeDasharray)\n .attr('x1', scaleX(p1.x))\n .attr('y1', scaleY(p1.y))\n .attr('x2', scaleX(extendedStartX))\n .attr('y2', scaleY(extendedStartY));\n\n context\n .append('line')\n .attr('class', 'extendedLine')\n .attr('data-extended-id', seriesIndex)\n .attr('stroke', series?.color)\n .attr('stroke-width', series?.strokeWidth)\n .attr('stroke-dasharray', series?.strokeDasharray)\n .attr('x1', scaleX(p2.x))\n .attr('y1', scaleY(p2.y))\n .attr('x2', scaleX(extendedEndX))\n .attr('y2', scaleY(extendedEndY));\n };\n\n if (series?.drag?.extendLine && points?.length) {\n drawExtendedLine();\n }\n\n if (markerPoints?.length) {\n const emit = (event: DragEvent, target: BasePoint) => {\n this.dispatch.apply(DispatchType.movePoint, {\n target: series,\n point: {\n ...target,\n },\n event,\n });\n };\n\n context\n .selectAll(`draggable-marker-${seriesIndex}`)\n .data(markerPoints)\n .enter()\n .append('circle')\n .attr('class', `draggable-marker-${seriesIndex}`)\n .attr('r', (d) => d.marker?.style?.radius || 5)\n .attr('cx', function (d) {\n return scaleX(d.x);\n })\n .attr('cy', function (d) {\n return scaleY(d.y);\n })\n .style('cursor', 'pointer')\n .style('fill', (d) => d.marker?.style?.color || 'none')\n .attr('stroke', (d) => d.marker?.style?.stroke || 'none')\n .attr('stroke-width', (d) => d.marker?.style?.strokeWidth || 0);\n\n context.selectAll(`.draggable-marker-${seriesIndex}`).call(\n d3.drag().on('drag start end', function dragged(event, d: BasePoint) {\n const node = d3.select(this);\n\n if (event.type === 'start') {\n node.raise().classed('active', true);\n }\n\n if (d.marker?.dragType === DragPointType.x) {\n d.x = scaleX.invert(event.sourceEvent?.offsetX);\n node.attr('cx', scaleX(d.x));\n }\n\n if (d.marker?.dragType === DragPointType.y) {\n d.y = scaleY.invert(event.sourceEvent?.offsetY);\n node.attr('cy', scaleY(d.y));\n }\n\n context.select(`.series-${seriesIndex}`).attr('d', path);\n\n emit(event, d);\n })\n );\n }\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\n\nexport class PieDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {}\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\n\nexport class SplineDrawer implements IDrawer<BasePoint> {\n draw(\n series: Series<BasePoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data;\n\n const path = d3\n .line()\n .curve(d3.curveCatmullRom)\n .defined((d: any) => d.x != null && d.y != null)\n .x((d: any) => scaleX(d.x))\n .y((d: any) => scaleY(d.y));\n\n context\n .append('path')\n .attr('transform', `translate(${0}, 0)`)\n .attr('fill', 'none')\n .attr('stroke', series.color)\n .attr('stroke-width', series.strokeWidth ? series.strokeWidth : 1)\n .datum(points)\n .attr('d', path as any)\n .transition()\n .duration(750);\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { ScatterPoint } from '../model/point/scatter-point';\nimport { ChartOptions } from '../model/chart-options';\n\nexport class ScatterDrawer implements IDrawer<ScatterPoint> {\n private _virtualCanvas: any;\n private _colorToData = {};\n private _options: ChartOptions;\n private _context:\n | d3.Selection<SVGElement, unknown, null, undefined>\n | d3.Selection<HTMLCanvasElement, unknown, null, undefined>;\n\n draw(\n series: Series<ScatterPoint>,\n context:\n | d3.Selection<SVGElement, unknown, null, undefined>\n | d3.Selection<HTMLCanvasElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any,\n options: ChartOptions\n ): void {\n this._options = options;\n\n d3.select(context.node().parentNode as any).select('.virtual-canvas').remove();\n\n if (series.renderTo === 'canvas') {\n this._context = context;\n\n const height = context.node().clientHeight;\n const width = context.node().clientWidth;\n\n const points = series.data;\n\n const context2D = (context.node() as HTMLCanvasElement).getContext('2d');\n this._virtualCanvas = d3\n .select(context.node().parentNode as any)\n .append('canvas')\n .attr('class', 'virtual-canvas')\n .style('display', 'none');\n\n this._virtualCanvas.attr('width', width).attr('height', height);\n const virtualContext = this._virtualCanvas.node().getContext('2d');\n\n context.on('mouseout', () => {\n d3.select(this._context.node().parentNode as any)\n .select('.tooltip-chart')\n .style('display', 'none');\n\n context.on('mousemove', null);\n });\n\n context.on('mouseenter', () => {\n d3.select(this._context.node().parentNode as any)\n .select('.tooltip-chart')\n .style('display', null);\n context.on('mousemove', (e) => this.handleMouseMove(e));\n });\n\n points.forEach((d: any, idx) => {\n const color = this.getColor(idx);\n this._colorToData[color] = d;\n virtualContext.fillStyle = color;\n context2D.fillStyle = d.color;\n\n const cx = scaleX(d.x);\n const cy = scaleY(d.y);\n\n context2D.beginPath();\n context2D.arc(cx, cy, d.radius, 0, 2 * Math.PI);\n context2D.closePath();\n context2D.fill();\n\n virtualContext.beginPath();\n virtualContext.arc(cx, cy, d.radius, 0, 2 * Math.PI);\n virtualContext.closePath();\n virtualContext.fill();\n });\n }\n }\n\n private getColor(index) {\n return d3\n .rgb(\n Math.floor(index / 256 / 256) % 256,\n Math.floor(index / 256) % 256,\n index % 256\n )\n .toString();\n }\n\n private tooltipPosition(event) {\n const centerX = this._context.node().clientWidth / 2;\n const centerY = this._context.node().clientHeight / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n private handleMouseMove(event: MouseEvent) {\n const mouse = d3.pointer(event);\n\n const virtualContext = this._virtualCanvas.node().getContext('2d');\n\n const image = virtualContext.getImageData(mouse[0], mouse[1], 1, 1);\n const color = d3.rgb.apply(null, image.data).toString();\n const possibleDatum = this._colorToData[color];\n\n const { top, right, bottom, left } = this.tooltipPosition(event);\n\n if (possibleDatum) {\n const formatted = this._options.tooltip?.format([possibleDatum]);\n d3.select(this._context.node().parentNode as any)\n .select('.tooltip-chart')\n .style('z-index', 3)\n .style('top', top)\n .style('right', right)\n .style('bottom', bottom)\n .style('left', left)\n .html(formatted);\n }\n }\n}\n","import { IDrawer } from '../model/i-drawer';\nimport { Series } from '../model/series';\nimport * as d3 from 'd3';\nimport { tricontour } from 'd3-tricontour';\nimport { ContourPoint } from '../model/point/contour-point';\n\nexport class ContourDrawer implements IDrawer<ContourPoint> {\n draw(\n series: Series<ContourPoint>,\n context: d3.Selection<SVGElement, unknown, null, undefined>,\n scaleX: any,\n scaleY: any\n ): void {\n const points = series.data;\n\n const tricontourFn = tricontour()\n .x((d) => scaleX(d.x))\n .y((d) => scaleY(d.y))\n .value((d) => d.value)\n .thresholds(30);\n\n let contours = tricontourFn(points);\n\n const geoFn = d3.geoPath();\n\n const color = series?.colorScale.domain(\n d3.extent(contours, (d: ContourPoint) => d.value) as any\n );\n\n contours = contours.map((_) => ({\n ..._,\n color: color(_.value),\n }));\n\n const u = context.selectAll('path').data(contours) as any;\n\n u.enter()\n .append('path')\n .merge(u as any)\n .attr('d', (_: any) => geoFn(_))\n .attr('stroke', 'rgba(255, 255,255,0.5)')\n .attr('stroke-width', 0.5)\n .attr('fill', (_: ContourPoint) => _.color);\n\n u.exit().remove();\n }\n}\n","import { SeriesType } from '../model/enum/series-type';\nimport { IDrawer } from '../model/i-drawer';\nimport { BasePoint } from '../model/point/base-point';\nimport { AreaDrawer } from './area-drawer';\nimport { BarDrawer } from './bar-drawer';\nimport { LineDrawer } from './line-drawer';\nimport { PieDrawer } from './pie-drawer';\nimport { SplineDrawer } from './spline-drawer';\nimport { ScatterDrawer } from './scatter-drawer';\nimport { ContourDrawer } from './contour-drawer';\n\nexport const defaultDrawerMapping = new Map<SeriesType, IDrawer<BasePoint>>()\n .set(SeriesType.area, new AreaDrawer())\n .set(SeriesType.bar, new BarDrawer())\n .set(SeriesType.line, new LineDrawer())\n .set(SeriesType.pie, new PieDrawer())\n .set(SeriesType.scatter, new ScatterDrawer())\n .set(SeriesType.spline, new SplineDrawer())\n .set(SeriesType.contour, new ContourDrawer());\n","export enum LegendType {\n swatches,\n gradient,\n}\n","import * as d3 from 'd3';\nimport { SeriesType } from '../model/enum/series-type';\nimport { ILegendDrawer, LegendDrawOptions } from '../model/i-drawer-legend';\nimport { BasePoint } from '../model/point/base-point';\nimport { BarPoint } from '../model/point/bar-point';\n\nconst classTypeLegendMapping = new Map<SeriesType, string>()\n .set(SeriesType.line, 'line')\n .set(SeriesType.spline, 'line');\n\nexport class SwatchDrawer implements ILegendDrawer {\n draw(options: LegendDrawOptions<BasePoint | BarPoint>): void {\n d3.select(options.context.parentElement)\n .select('.legend-container')\n .selectAll('.legend')\n .remove();\n\n const defaultData = options.series?.filter(\n (serie) => serie.type !== SeriesType.bar\n );\n const barData = options?.series\n ?.filter((serie) => serie.type === SeriesType.bar)\n .reduce((acc, serie) => {\n const data = serie.data.map((_) => ({\n ..._,\n serieType: serie.type,\n serieIndex: serie.id,\n }));\n\n return acc.concat(data);\n }, []);\n\n const legendContainer = d3\n .select(options.context.parentElement)\n .select('.legend-container')\n .append('div')\n .attr('class', 'legend padding-bottom-4');\n\n const defaultLegend = legendContainer\n .selectAll('div')\n .data(defaultData)\n .enter()\n .append('div')\n .attr('class', 'item')\n .style('user-select', 'none');\n\n const barLegend = legendContainer\n .selectAll('.bar')\n .data(barData)\n .enter()\n .append('div')\n .attr('class', 'item bar')\n .style('user-select', 'none');\n\n defaultLegend\n .append('div')\n .attr('class', (_) => classTypeLegendMapping.get(_.type) || 'swatch')\n .style('background', (_) =>\n _.visible ? _.color ?? 'black' : 'var(--color-text-10)'\n );\n\n defaultLegend\n .append('div')\n .attr('class', 'label')\n .text((_) => _.name ?? 'Без названия')\n .style('text-decoration', (_) => (_.visible ? 'unset' : 'line-through'));\n\n barLegend\n .append('div')\n .attr('class', 'swatch')\n .style('background', (_) =>\n _.visible ? _.color ?? 'black' : 'var(--color-text-10)'\n );\n\n barLegend\n .append('div')\n .attr('class', 'label')\n .text((_) => _.label ?? 'Без названия')\n .style('text-decoration', (_) => (_.visible ? 'unset' : 'line-through'));\n }\n}\n","import * as d3 from 'd3';\nimport { ILegendDrawer, LegendDrawOptions } from '../model/i-drawer-legend';\nimport { BasePoint } from '../model/point/base-point';\n\nexport class GradientDrawer implements ILegendDrawer {\n draw(options: LegendDrawOptions<BasePoint>): void {\n const container = d3\n .select(options.context.parentElement)\n .select('.legend-container');\n\n container.selectAll('.gradient-legend').remove();\n\n const svg = container\n .append('svg')\n .attr('class', 'gradient-legend')\n .attr('width', options.width)\n .attr('height', 32);\n\n svg.selectAll('.legend-defs').remove();\n\n const extent = d3.extent(\n options.series[0]?.data as any,\n (d: any) => d.value\n ) as any;\n\n const defs = svg.append('defs').attr('class', 'legend-defs') as any;\n\n const linearGradient = defs\n .append('linearGradient')\n .attr('id', 'legend-gradient');\n\n linearGradient\n .selectAll('stop')\n .data([...options.series[0]?.data].reverse())\n .enter()\n .append('stop')\n .attr(\n 'offset',\n (d) => ((d.value - extent[0]) / (extent[1] - extent[0])) * 100 + '%'\n )\n .attr('stop-color', (d) => d.color);\n\n const g = svg.append('g').attr('class', 'gradient-legend');\n\n g.append('rect')\n .attr('width', options.width - 80)\n .attr('transform', 'translate(40, 0)')\n .attr('height', 4)\n .style('fill', 'url(#legend-gradient)');\n\n const xScale = d3\n .scaleLinear()\n .range([80, options.width - 80])\n .domain(extent)\n .nice();\n const tickCount = options.width / 80;\n\n const xAxis = d3.axisBottom(xScale).tickSize(8).ticks(tickCount);\n\n g.call(xAxis).call((node) => {\n node.select('.domain').remove();\n node.selectAll('line').remove();\n });\n }\n}\n","import { ILegendDrawer } from '../model/i-drawer-legend';\nimport { LegendType } from '../model/enum/legend-type';\nimport { SwatchDrawer } from './swatch-drawer';\nimport { GradientDrawer } from './gradient-drawer';\n\nexport const defaultLegendDrawerMapping = new Map<LegendType, ILegendDrawer>()\n .set(LegendType.swatches, new SwatchDrawer())\n .set(LegendType.gradient, new GradientDrawer());\n","export enum AxisType {\n abscissa,\n ordinatus,\n}\n","import * as d3 from 'd3';\nimport {AxisType} from '../model/enum/axis-type';\nimport {Series} from '../model/series';\nimport {BasePoint} from '../model/point/base-point';\nimport {ChartOptions} from '../model/chart-options';\nimport {AxisOptions} from '../model/axis-options';\n\nexport class Axis {\n public static offsetFactor = 22;\n public readonly width: number;\n\n private _type: AxisType;\n private _chartOptions: ChartOptions;\n private _extents: [number, number] = [0, 0];\n private _index: number;\n private _height: number;\n private _offset: number;\n private _ticks: any;\n\n constructor(options: {\n type: AxisType;\n index: number;\n chartOptions: ChartOptions;\n height?: number;\n }) {\n this._type = options?.type;\n this._index = options?.index || 0;\n this._chartOptions = options?.chartOptions;\n this._height = options?.height;\n\n if (this._chartOptions == null) {\n throw new Error(`No chartOptions for axis ${AxisType[this._type]}`);\n }\n\n this.createExtents();\n this.width = this.calculateAxisWidth();\n }\n\n get index() {\n return this._index;\n }\n\n get options(): AxisOptions {\n return this._type === AxisType.abscissa\n ? this._chartOptions.xAxis[this.index]\n : this._chartOptions.yAxis[this.index];\n }\n\n get extent(): [number, number] {\n return this._extents;\n }\n\n get type(): AxisType {\n return this._type;\n }\n\n get offset(): number {\n return this._offset;\n }\n\n get ticks() {\n return this._ticks;\n }\n\n setOffset(offset: number) {\n this._offset = offset;\n }\n\n private calculateAxisWidth(): number {\n if (this.type === AxisType.abscissa) {\n return 0;\n }\n\n const y = d3\n .scaleLinear()\n .domain([this.extent[0], this.extent[1]])\n .range([0, this._height])\n .nice();\n\n const body = d3\n .select('body')\n .append('svg')\n .attr('class', 'calculate-offset')\n .style('position', 'absolute')\n .style('left', '-9999px');\n const axis = d3.axisRight(y).tickValues(this.ticks);\n const element = body.append('g').attr('class', 'font-caption').call(axis);\n\n const bBox = element.node().getBBox();\n\n d3.selectAll('.calculate-offset').remove();\n\n return bBox.width;\n }\n\n private createExtents() {\n const hasMin = this.options?.min != null;\n const hasMax = this.options?.max != null;\n\n if (!hasMin || !hasMax) {\n const filtered = this._chartOptions?.series?.filter(\n (serie: Series<BasePoint>) =>\n this._index ===\n serie[this._type === AxisType.abscissa ? 'xAxisIndex' : 'yAxisIndex']\n );\n\n const raw = filtered.map((series: Series<BasePoint>) =>\n d3.extent(series?.data, (point: BasePoint) =>\n this._type === AxisType.abscissa ? point.x : point.y\n )\n );\n\n const merged = [].concat(...(raw ?? []));\n\n const abs = (num) => Math.abs(num);\n\n this._extents = this.options.negative\n ? [-Math.abs(d3.max(merged.map(abs))), d3.max(merged.map(abs))]\n : [d3.min(merged), d3.max(merged)];\n }\n\n if (hasMin) {\n this._extents[0] = this.options?.min;\n }\n\n if (hasMax) {\n this._extents[1] = this.options?.max;\n }\n }\n}\n","export enum ScaleType {\n linear,\n log,\n pow,\n sqrt,\n time,\n}\n","export enum ZoomType {\n x,\n y,\n xy,\n}\n","import { ElementRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport * as d3 from 'd3';\nimport { D3ZoomEvent, zoomIdentity, ZoomTransform } from 'd3';\nimport * as d3annotation from 'd3-svg-annotation';\nimport { Scale } from '../model/enum/scale';\nimport { ChartOptions } from '../model/chart-options';\nimport { AxisOptions } from '../model/axis-options';\nimport { Series } from '../model/series';\nimport { BasePoint } from '../model/point/base-point';\nimport { SeriesType } from '../model/enum/series-type';\nimport { defaultDrawerMapping } from '../drawer/default-drawer-mapping';\nimport { defaultLegendDrawerMapping } from '../legend-drawer/default-drawer-legend-mapping';\nimport { LegendType } from '../model/enum/legend-type';\nimport { Axis } from './axis-creator';\nimport { AxisType } from '../model/enum/axis-type';\nimport { PlotLine } from '../model/plot-line';\nimport { PlotBand } from '../model/plot-band';\nimport { ScaleType } from '../model/enum/scale-type';\nimport { ZoomType } from '../model/enum/zoom-type';\nimport { IDragEvent } from '../model/i-drag-event';\nimport { DispatchType } from '../model/enum/dispatch-type';\nimport { IZoomEvent } from '../model/i-zoom-event';\n\ntype ChartSize = { width: number; height: number };\n\nexport class TetaChart {\n plotLinesMove: Observable<IDragEvent<PlotLine>>;\n plotBandsMove: Observable<IDragEvent<PlotBand>>;\n\n zoom: Observable<IZoomEvent>;\n seriesMove: Observable<IDragEvent<Series<BasePoint>>>;\n pointMove: Observable<IDragEvent<Series<BasePoint>>>;\n\n private plotLinesMove$: Subject<IDragEvent<PlotLine>> = new Subject<\n IDragEvent<PlotLine>\n >();\n private plotBandsMove$: Subject<IDragEvent<PlotBand>> = new Subject<\n IDragEvent<PlotBand>\n >();\n\n private seriesMove$: Subject<IDragEvent<Series<BasePoint>>> = new Subject<\n IDragEvent<Series<BasePoint>>\n >();\n\n private pointMove$: Subject<IDragEvent<Series<BasePoint>>> = new Subject<\n IDragEvent<Series<BasePoint>>\n >();\n\n private zoom$: Subject<IZoomEvent> = new Subject<IZoomEvent>();\n\n private _container: ElementRef = null;\n private _canvas: any;\n private _width = 0;\n private _height = 0;\n\n private _zoomYCache: Map<number, ZoomTransform> = new Map<\n number,\n ZoomTransform\n >();\n\n private _zoomXCache: Map<number, ZoomTransform> = new Map<\n number,\n ZoomTransform\n >();\n\n private _zoom = d3.zoom();\n private _commonZoomTransform: ZoomTransform;\n\n private visibleChartWindowWidth = 0;\n\n private _options: ChartOptions;\n private _xAxisList: Axis[];\n private _yAxisList: Axis[];\n private _xScales: Map<number, any> = new Map<number, any>();\n private _yScales: Map<number, any> = new Map<number, any>();\n\n private _clonedX = new Map<number, any>();\n private _clonedY = new Map<number, any>();\n\n private _chart: d3.Selection<any, unknown, null, undefined>;\n\n private offsetOpposite = 0;\n private offsetNonOpposite = 0;\n\n private uniqId: string;\n private _zoomAdded = false;\n\n constructor(options: ChartOptions, element: ElementRef) {\n this._options = options;\n this.selectNode(element);\n this.createTooltip();\n\n this.plotLinesMove = this.plotLinesMove$.asObservable();\n this.plotBandsMove = this.plotBandsMove$.asObservable();\n this.seriesMove = this.seriesMove$.asObservable();\n this.pointMove = this.pointMove$.asObservable();\n this.zoom = this.zoom$.asObservable();\n }\n\n public redraw(options?: ChartOptions) {\n if (options) {\n this._options = options;\n }\n\n this.createAxis();\n this.createScales();\n this.createMarkers();\n this.createVisibleWindow();\n this._redraw();\n this.drawLegend();\n\n if (this._commonZoomTransform) {\n this._chart.call(this._zoom.transform, this._commonZoomTransform);\n }\n\n if (!this._zoomAdded) {\n this.addZoom();\n this._zoomAdded = true;\n }\n\n this.addAxesZoom();\n }\n\n public setZoom(zoom: IZoomEvent) {\n if (!this._zoom) {\n return;\n }\n this._chart.call(this._zoom.transform, zoom?.zoomTransform ?? zoomIdentity);\n }\n\n public setSize(size: ChartSize = { width: 0, height: 0 }) {\n this._height = size.height;\n this._width = size.width;\n\n this._chart.attr('width', this._width).attr('height', this._height);\n this._canvas.attr('width', this._width).attr('height', this._height);\n\n const extent = [\n [\n this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left,\n this._options.bounds.top,\n ],\n [\n this._width -\n (this.offsetOpposite\n ? this.offsetOpposite\n : this._options.bounds.right),\n this._height - this._options.bounds.bottom,\n ],\n ] as any;\n\n this._zoom\n .scaleExtent([1, Infinity])\n .translateExtent(extent)\n .extent(extent);\n }\n\n private createVisibleWindow() {\n this.uniqId = (Date.now() + Math.random()).toString(36);\n\n this._chart.selectAll('defs').remove();\n\n this._chart\n .append('defs')\n .append('clipPath')\n .attr('id', `draw-window-${this.uniqId}`)\n .append('rect')\n .attr(\n 'x',\n this.offsetNonOpposite === 0\n ? this._options.bounds.left\n : this.offsetNonOpposite\n )\n .attr('y', this._options.bounds.top)\n .attr('width', this.visibleChartWindowWidth + 1)\n .attr(\n 'height',\n this._height -\n this._options.bounds.bottom -\n this._options.bounds.top +\n 1 >\n 0\n ? this._height -\n this._options.bounds.bottom -\n this._options.bounds.top +\n 1\n : 0\n );\n }\n\n private createAxis() {\n this._xAxisList = this._options.xAxis.map(\n (_, index) =>\n new Axis({\n type: AxisType.abscissa,\n index,\n chartOptions: this._options,\n })\n );\n\n this._yAxisList = this._options.yAxis.map((_, index) => {\n const axis = new Axis({\n type: AxisType.ordinatus,\n index,\n chartOptions: this._options,\n height: this._height,\n });\n return axis;\n });\n\n const nonTitleOffset = 6;\n\n this.offsetNonOpposite = d3.reduce(\n this._yAxisList.filter(\n (_) => _.options?.opposite !== true && _.options?.visible\n ),\n (sum, axis) => {\n const offset =\n sum +\n axis.width +\n (axis?.options?.title ? Axis.offsetFactor : nonTitleOffset);\n axis.setOffset(offset);\n return offset;\n },\n 0\n );\n\n this.offsetOpposite = d3.reduce(\n this._yAxisList.filter(\n (_) => _.options?.opposite === true && _.options?.visible\n ),\n (sum, axis) => {\n const offset =\n sum +\n axis.width +\n (axis?.options?.title ? Axis.offsetFactor : nonTitleOffset);\n axis.setOffset(offset);\n return offset;\n },\n 0\n );\n\n this.visibleChartWindowWidth = this.caluclateChartWidth();\n }\n\n private _redraw() {\n this.drawPlotBands();\n this.drawPlotLines();\n\n this.drawChart();\n this.drawAxis();\n this.drawGridLines();\n\n this.drawAnnotations();\n }\n\n private addZoom() {\n if (this._options?.zoom?.enable) {\n const hasXZoom = [ZoomType.x, ZoomType.xy].includes(\n this._options.zoom.zoomType\n );\n const hasYZoom = [ZoomType.y, ZoomType.xy].includes(\n this._options.zoom.zoomType\n );\n\n this._chart.call(\n this._zoom.on('start end zoom', (event) => {\n if (hasXZoom) {\n for (const [key, value] of this._clonedX.entries()) {\n const rescaled = event.transform.rescaleX(value);\n this._xScales.set(key, rescaled);\n\n if (event.sourceEvent) {\n this.zoom$.next({\n domain: rescaled.domain(),\n zoomTransform: event.transform,\n zoomType: ZoomType.x,\n event,\n });\n }\n }\n }\n\n if (hasYZoom) {\n for (const [key, value] of this._clonedY.entries()) {\n const rescaled = event.transform.rescaleY(value);\n this._yScales.set(key, rescaled);\n\n if (event.type === 'zoom') {\n if (event.sourceEvent) {\n this.zoom$.next({\n domain: rescaled.domain(),\n zoomTransform: event.transform,\n zoomType: ZoomType.y,\n event,\n });\n }\n }\n }\n }\n\n if (event.type === 'end') {\n this._commonZoomTransform = event.transform;\n }\n\n this._redraw();\n })\n );\n }\n }\n\n private addAxesZoom() {\n this._chart.selectAll('.zoom-behavior').remove();\n\n [...this._yAxisList, ...this._xAxisList]\n .filter((axis) => axis.options.visible && axis.options.zoom)\n .forEach((axis) => {\n const foundNode = this._chart\n .select(\n `[data-${axis.type === AxisType.abscissa ? 'x' : 'y'}-scale-id='${\n axis.index\n }']`\n )\n .node() as any;\n\n if (!foundNode) {\n return;\n }\n\n const bBox = foundNode.getBBox();\n\n const translateX =\n axis.type === AxisType.abscissa\n ? this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left + this.offsetNonOpposite\n : axis.options.opposite\n ? this._width - axis.offset\n : axis.offset - bBox.width;\n\n const zoom = d3\n .zoom()\n .scaleExtent([1, Infinity])\n .on('zoom end', (event: D3ZoomEvent<any, any>) => {\n if (axis.type === AxisType.abscissa) {\n const scale = this._clonedX.get(axis.index);\n this._xScales.set(axis.index, event.transform.rescaleX(scale));\n } else {\n const scale = this._clonedY.get(axis.index);\n this._yScales.set(axis.index, event.transform.rescaleY(scale));\n }\n\n if (event.type === 'end') {\n if (axis.type === AxisType.ordinatus) {\n this._zoomYCache.set(axis.index, event.transform);\n }\n\n if (axis.type === AxisType.abscissa) {\n this._zoomXCache.set(axis.index, event.transform);\n this._chart.call(this._zoom.transform, event.transform);\n }\n }\n\n this._redraw();\n });\n\n const restoredTransform: ZoomTransform =\n axis.type === AxisType.ordinatus\n ? this._zoomYCache.get(axis.index)\n : this._zoomXCache.get(axis.index);\n\n this._chart\n .append('rect')\n .attr('class', 'zoom-behavior')\n .attr('height', bBox.height)\n .attr('width', bBox.width)\n .attr(\n 'transform',\n `translate(${translateX}, ${\n axis.type === AxisType.abscissa\n ? this._height - this._options.bounds.bottom\n : this._options.bounds.top\n })`\n )\n .style('opacity', '0')\n .style('pointer-events', 'all')\n .call(zoom.transform, restoredTransform ?? d3.zoomIdentity)\n .call(zoom);\n });\n }\n\n private selectNode(element: ElementRef) {\n this._container = element;\n\n d3.select(element.nativeElement).selectAll('.tooltip-chart').remove();\n\n d3.select(element.nativeElement).selectAll('svg').remove();\n d3.select(element.nativeElement).selectAll('canvas').remove();\n\n this._chart = d3\n .select(element.nativeElement)\n .append('svg')\n .attr('position', 'relative')\n .style('z-index', 0);\n\n this._canvas = d3\n .select(element.nativeElement)\n .append('canvas')\n .attr('class', 'main-canvas')\n .style('transform', 'translate(35, 0)')\n .style('position', 'absolute')\n .style('z-index', 1);\n }\n\n private drawAnnotations() {\n this._chart.selectAll('.annotations').remove();\n\n const annotations = this._options.annotations?.map((annotation) => {\n const x = this._xScales.get(annotation.xAxisIndex);\n const y = this._yScales.get(annotation.yAxisIndex);\n\n return {\n note: annotation.note,\n connector: annotation.connector,\n x: x(annotation.point?.x),\n y: y(annotation.point?.y),\n dx: annotation.dx,\n dy: annotation.dy,\n type: annotation.type,\n className: annotation.className,\n };\n });\n\n const makeAnnotations = d3annotation\n .annotation()\n .annotations(annotations ?? []);\n\n this._chart\n .append('g')\n .attr('class', 'annotations')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`)\n .call(makeAnnotations as any)\n .lower();\n }\n\n private drawPlotLines() {\n this._chart.selectAll('.plotlines').remove();\n\n const plotlineGroup = this._chart\n .append('g')\n .attr('class', 'plotlines')\n .style('shape-rendering', 'crispEdges')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`);\n\n this._xAxisList\n .filter((_) => _.options.plotLines.length > 0)\n .forEach((axis) => {\n const [min, max] = axis.extent;\n const x = this._xScales.get(axis.index);\n\n const plotlinesPoints = axis.options.plotLines;\n\n const getTextCenterPointPx = (d: PlotLine, idx: number) =>\n x(\n (d?.value +\n (plotlinesPoints[idx - 1]\n ? plotlinesPoints[idx - 1]?.value\n : 0)) /\n 2\n );\n\n const opacity = (d: PlotLine, idx: number) => {\n const displayWidth = 20;\n\n const width =\n x(d?.value) -\n x(plotlinesPoints[idx - 1] ? plotlinesPoints[idx - 1]?.value : 0);\n return width <= displayWidth ? 0 : 1;\n };\n\n plotlineGroup\n .selectAll('.label')\n .data(plotlinesPoints)\n .join('text')\n .attr('class', 'label font-body-3 fill-text-70')\n .attr('x', getTextCenterPointPx)\n .attr('y', (d) => this._height / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'central')\n .attr(\n 'transform',\n (d, idx) =>\n `rotate(-90, ${getTextCenterPointPx(d, idx)}, ${\n this._height / 2\n })`\n )\n .text((d) => d?.label ?? '')\n .style('opacity', opacity);\n\n plotlineGroup\n .selectAll('.plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'plotline')\n .attr('data-plotline-id', (d) => d.id)\n .attr('x1', (d) => x(d.value))\n .attr('x2', (d) => x(d.value))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', (d) => d.width)\n .style('stroke', (d) => d.color)\n .style('stroke-dasharray', (d) => (d.dashed ? '8, 8' : '0, 0'));\n\n const emit = (event: DragEvent, plotLine: PlotLine) => {\n this.plotLinesMove$.next({ event, target: plotLine });\n };\n\n plotlineGroup\n .selectAll('.drag-plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'drag-plotline')\n .attr('x1', (d) => x(d.value))\n .attr('x2', (d) => x(d.value))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'col-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event, d: PlotLine) {\n const group = d3.select(this).node().parentElement;\n\n const draggedPlotLine = d3\n .select(group)\n .select(`[data-plotline-id='${d.id}']`);\n\n d.value = x.invert(event.x);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\n const borderLeftReached = d.value <= minValue;\n const borderRightReached = d.value >= maxValue;\n\n if (borderLeftReached) {\n d.value = minValue;\n }\n\n if (borderRightReached) {\n d.value = maxValue;\n }\n\n d3.select(this).attr('x1', x(d.value)).attr('x2', x(d.value));\n\n draggedPlotLine.attr('x1', x(d.value)).attr('x2', x(d.value));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotLine) => {\n emit(event, d);\n }) as any\n );\n });\n\n this._yAxisList\n .filter((_) => _.options.plotLines.length > 0)\n .forEach((axis) => {\n const [min, max] = axis.extent;\n const y = this._yScales.get(axis.index);\n\n const plotlinesPoints = axis.options.plotLines;\n\n plotlineGroup\n .selectAll('.plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'plotline')\n .attr('data-plotline-id', (d) => d.id)\n .attr('y1', (d) => y(d.value))\n .attr('y2', (d) => y(d.value))\n .attr('x1', 0)\n .attr(\n 'x2',\n this._width - this._options.bounds.left - this._options.bounds.right\n )\n .attr('transform', `translate(${this._options.bounds.left}, 0)`)\n .style('stroke-width', (d) => d.width)\n .style('stroke', (d) => d.color)\n .style('stroke-dasharray', (d) => (d.dashed ? '8, 8' : '0, 0'));\n\n const emit = (event: DragEvent, plotLine: PlotLine) => {\n this.plotLinesMove$.next({ event, target: plotLine });\n };\n\n plotlineGroup\n .selectAll('.drag-plotline')\n .data(plotlinesPoints)\n .join('line')\n .attr('class', 'drag-plotline')\n .attr('y1', (d) => y(d.value))\n .attr('y2', (d) => y(d.value))\n .attr('x1', 0)\n .attr(\n 'x2',\n this._width - this._options.bounds.left - this._options.bounds.right\n )\n .attr('transform', `translate(${this._options.bounds.left}, 0)`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'row-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event, d: PlotLine) {\n const group = d3.select(this).node().parentElement;\n\n const draggedPlotLine = d3\n .select(group)\n .select(`[data-plotline-id='${d.id}']`);\n\n d.value = y.invert(event.y);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\n const borderTopReached = d.value <= minValue;\n const borderBottomReached = d.value >= maxValue;\n\n if (borderTopReached) {\n d.value = minValue;\n }\n\n if (borderBottomReached) {\n d.value = maxValue;\n }\n\n d3.select(this).attr('y1', y(d.value)).attr('y2', y(d.value));\n\n draggedPlotLine.attr('y1', y(d.value)).attr('y2', y(d.value));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotLine) => {\n emit(event, d);\n }) as any\n );\n });\n }\n\n private drawPlotBands() {\n this._chart.selectAll('.plotbands').remove();\n\n const plotBandGroup = this._chart\n .append('g')\n .attr('class', 'plotbands')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`);\n\n this._xAxisList\n .filter((_) => _.options.plotBands.length > 0)\n .forEach((axis) => {\n const x = this._xScales.get(axis.index);\n\n const [min, max] = axis.extent;\n\n const plotband = plotBandGroup\n .append('g')\n .style('shape-rendering', 'crispEdges');\n\n const plotBandHeight =\n this._height - this._options.bounds.top - this._options.bounds.bottom;\n\n const emit = (event: DragEvent, plotBand: PlotBand) => {\n this.plotBandsMove$.next({\n event,\n target: plotBand,\n });\n };\n\n plotband\n .selectAll('rect')\n .data(axis.options.plotBands)\n .on('start', (_) => {\n this._chart.selectAll('.marker').style('display', 'none');\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('display', 'none');\n })\n .join('rect')\n .attr('data-plotband-id', (d) => d.id)\n .attr('x', (d) => x(d.from))\n .attr('y', 0)\n .attr('width', (d) => Math.abs(x(d.to) - x(d.from)))\n .attr('fill', (d) => {\n if (d.image) {\n return `url(#${d.image})`;\n }\n return d.color;\n })\n .style('opacity', (d) => d.opacity ?? 1)\n .attr('height', plotBandHeight > 0 ? plotBandHeight : 0)\n .attr('transform', `translate(0, ${this._options.bounds.top})`);\n\n plotband\n .selectAll('.line-left')\n .data(axis.options.plotBands)\n .join('line')\n .attr('data-line-left-id', (d) => d.id)\n .attr('class', 'line-left')\n .attr('x1', (d) => x(d.from))\n .attr('x2', (d) => x(d.from))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-left')\n .data(axis.options.plotBands)\n .join('line')\n .attr('x1', (d) => x(d.from))\n .attr('x2', (d) => x(d.from))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .style('display', (d) => (d?.resizable ? 'unset' : 'none'))\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'col-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-left-id='${d.id}']`);\n\n d.from = x.invert(event.x);\n\n const minValue = d.min ?? min;\n\n const borderReached = d.from <= minValue;\n\n if (borderReached) {\n d.from = minValue;\n }\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n d3.select(this).attr('x1', x(d.from)).attr('x2', x(d.from));\n\n draggedBand\n .attr('x', x(d.from))\n .attr('width', x(d.to) - x(d.from));\n\n draggedLine.attr('x1', x(d.from)).attr('x2', x(d.from));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) =>\n emit(event, d)\n ) as any\n );\n\n plotband\n .selectAll('.line-right')\n .data(axis.options.plotBands)\n .join('line')\n .attr('data-line-right-id', (d) => d.id)\n .attr('class', 'line-right')\n .attr('x1', (d) => x(d.to))\n .attr('x2', (d) => x(d.to))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-right')\n .data(axis.options.plotBands)\n .join('line')\n .attr('class', 'drag-right')\n .style('display', (d) => (d?.resizable ? 'unset' : 'none'))\n .attr('x1', (d) => x(d.to))\n .attr('x2', (d) => x(d.to))\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', 'col-resize')\n .call(\n d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-right-id='${d.id}']`);\n\n d.to = x.invert(event.x);\n\n const maxValue = d.max ?? max;\n\n const borderReached = d.to >= maxValue;\n\n if (borderReached) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n\n d3.select(this).attr('x1', x(d.to)).attr('x2', x(d.to));\n draggedBand.attr('width', x(d.to) - x(d.from));\n draggedLine.attr('x1', x(d.to)).attr('x2', x(d.to));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) =>\n emit(event, d)\n ) as any\n );\n });\n\n this._yAxisList\n .filter((_) => _.options.plotBands.length > 0)\n .forEach((axis) => {\n const y = this._yScales.get(axis.index);\n\n const [min, max] = axis.extent;\n\n const plotband = plotBandGroup\n .append('g')\n .style('shape-rendering', 'crispEdges');\n\n const plotBandWidth =\n this._width - this._options.bounds.left - this._options.bounds.right; // TODO add multiaxis support width\n\n const emit = (event: DragEvent, plotBand: PlotBand) => {\n this.plotBandsMove$.next({\n event,\n target: plotBand,\n });\n };\n\n const dragPlotband = d3\n .drag()\n .subject(function () {\n const element = d3.select(this);\n return { y: element.attr('y') };\n })\n .on('start drag end', function (event: any, d: PlotBand) {\n const element = d3.select(this);\n\n const height = parseFloat(element.attr('height'));\n\n d.to = y.invert(event.y + height);\n d.from = y.invert(event.y);\n\n const minValue = d.min ?? min;\n const maxValue = d.max ?? max;\n\n const borderReachedMin = d.from <= minValue;\n const borderReachedMax = d.to >= maxValue;\n\n if (borderReachedMin) {\n d.to = y.invert(y(minValue) + height);\n d.from = minValue;\n }\n\n if (borderReachedMax) {\n d.to = maxValue;\n d.from = y.invert(y(maxValue) - height);\n }\n\n element.attr('y', y(d.from));\n\n const group = element.node().parentElement;\n\n d3.select(group)\n .select(`[data-line-left-id='${d.id}']`)\n .attr('y1', y(d.from))\n .attr('y2', y(d.from));\n\n d3.select(group)\n .select(`[data-grab-left-id='${d.id}']`)\n .attr('y1', y(d.from))\n .attr('y2', y(d.from));\n\n d3.select(group)\n .select(`[data-line-right-id='${d.id}']`)\n .attr('y1', y(d.to))\n .attr('y2', y(d.to));\n\n d3.select(group)\n .select(`[data-grab-right-id='${d.id}']`)\n .attr('y1', y(d.to))\n .attr('y2', y(d.to));\n\n emit(event, d);\n }) as any;\n\n const leftGrabDrag = d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-left-id='${d.id}']`);\n\n d.from = y.invert(event.y);\n\n const minValue = d.min ?? min;\n\n const borderReached = d.from <= minValue;\n\n if (borderReached) {\n d.from = minValue;\n }\n\n if (d.from >= d.to) {\n d.from = d.to;\n }\n\n d3.select(this).attr('y1', y(d.from)).attr('y2', y(d.from));\n\n draggedBand\n .attr('y', y(d.from))\n .attr('height', Math.abs(y(d.to) - y(d.from)));\n draggedLine.attr('y1', y(d.from)).attr('y2', y(d.from));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) => emit(event, d)) as any;\n\n const rightGrabDrag = d3\n .drag()\n .on('drag', function (event: DragEvent, d: PlotBand) {\n const group = d3.select(this).node().parentElement;\n\n const draggedBand = d3\n .select(group)\n .select(`[data-plotband-id='${d.id}']`);\n\n const draggedLine = d3\n .select(group)\n .select(`[data-line-right-id='${d.id}']`);\n\n d.to = y.invert(event.y);\n\n const maxValue = d.max ?? max;\n\n const borderReached = d.to >= maxValue;\n\n if (borderReached) {\n d.to = maxValue;\n }\n\n if (d.to <= d.from) {\n d.to = d.from;\n }\n\n d3.select(this).attr('y1', y(d.to)).attr('y2', y(d.to));\n\n draggedBand\n .attr('y', y(d.from))\n .attr('height', Math.abs(y(d.to) - y(d.from)));\n draggedLine.attr('y1', y(d.to)).attr('y2', y(d.to));\n\n emit(event, d);\n })\n .on('end', (event: DragEvent, d: PlotBand) => emit(event, d)) as any;\n\n plotband\n .selectAll('rect')\n .data(axis.options.plotBands)\n .join('rect')\n .attr('data-plotband-id', (d) => d.id)\n .attr('x', 0)\n .attr('y', (d) => y(d.from))\n .attr('width', (d) => plotBandWidth)\n .attr('fill', (d) => {\n if (d.image) {\n return `url(#${d.image})`;\n }\n return d.color;\n })\n .style('opacity', (d) => d.opacity ?? 1)\n .attr('height', (d) => Math.abs(y(d.to) - y(d.from)))\n .attr('cursor', (d) => (d.draggable ? 'move' : 'default'));\n\n plotband\n .selectAll('.line-left')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('data-line-left-id', (d) => d.id)\n .attr('class', 'line-left')\n .attr('y1', (d) => y(d.from))\n .attr('y2', (d) => y(d.from))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-left')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('data-grab-left-id', (d) => d.id)\n .attr('y1', (d) => y(d.from))\n .attr('y2', (d) => y(d.from))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', (d) => (d.resizable ? 'row-resize' : 'default'));\n\n plotband\n .selectAll('.line-right')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('data-line-right-id', (d) => d.id)\n .attr('class', 'line-right')\n .attr('y1', (d) => y(d.to))\n .attr('y2', (d) => y(d.to))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 1)\n .style('stroke-dasharray', '8, 8')\n .style('stroke', 'var(--color-text-90)')\n .style('opacity', (d) => (d.showGrabbers ? 1 : 0));\n\n plotband\n .selectAll('.drag-right')\n .data(axis.options.plotBands.filter((d) => d.resizable))\n .join('line')\n .attr('class', 'drag-right')\n .attr('data-grab-right-id', (d) => d.id)\n .attr('y1', (d) => y(d.to))\n .attr('y2', (d) => y(d.to))\n .attr('x1', 0)\n .attr('x2', plotBandWidth)\n .style('stroke-width', 8)\n .style('stroke', 'rgba(0, 0, 0, 0)')\n .style('cursor', (d) => (d.resizable ? 'row-resize' : 'default'));\n\n axis.options.plotBands.forEach((_) => {\n if (_.draggable) {\n plotband.select(`[data-plotband-id='${_.id}']`).call(dragPlotband);\n }\n\n if (_.resizable) {\n plotband.select(`[data-grab-left-id='${_.id}']`).call(leftGrabDrag);\n plotband\n .select(`[data-grab-right-id='${_.id}']`)\n .call(rightGrabDrag);\n }\n });\n });\n }\n\n private drawChart() {\n const series = this._options.series?.filter((_) => _.visible);\n\n this._chart.selectAll('.series').remove();\n\n if (!series || series.length < 1) {\n d3.select(this._container.nativeElement)\n .select('canvas')\n .style('display', 'none');\n }\n\n const group = this._chart\n .append('g')\n .attr('class', 'series')\n .attr('clip-path', `url(#draw-window-${this.uniqId})`);\n\n series?.forEach((seriesItem: Series<BasePoint>, index) => {\n if (seriesItem.renderTo === 'canvas') {\n d3.select(this._container.nativeElement)\n .select('canvas')\n .style('display', null);\n\n d3.select(this._container.nativeElement)\n .select('svg')\n .style('position', 'absolute');\n } else {\n d3.select(this._container.nativeElement)\n .select('canvas')\n .style('display', 'none');\n }\n if (\n !this._xScales.has(seriesItem.xAxisIndex) ||\n !this._yScales.has(seriesItem.yAxisIndex)\n ) {\n return;\n }\n\n const foundX = this._xScales.get(seriesItem.xAxisIndex);\n const foundY = this._yScales.get(seriesItem.yAxisIndex);\n\n const drawer =\n seriesItem.drawer != null\n ? seriesItem.drawer\n : defaultDrawerMapping.get(seriesItem.type);\n\n if (!drawer) {\n throw new Error(\n `No drawer for series ${seriesItem.name}, type ${\n SeriesType[seriesItem.type]\n }`\n );\n }\n\n if (seriesItem.renderTo === 'canvas') {\n const context = this._canvas.node().getContext('2d');\n context.clearRect(0, 0, this._width, this._height);\n }\n\n let [xMin, xMax] = foundX.domain();\n let [yMin, yMax] = foundY.domain();\n\n xMin = xMin instanceof Date ? xMin.getTime() : xMin;\n xMax = xMax instanceof Date ? xMax.getTime() : xMax;\n\n yMin = yMin instanceof Date ? yMin.getTime() : yMin;\n yMax = yMax instanceof Date ? yMax.getTime() : yMax;\n\n const visiblePoints = (\n point: BasePoint,\n idx: number,\n arr: Array<BasePoint>\n ) =>\n (point.x <= xMax ||\n point.x1 <= xMax ||\n (arr[idx - 1] && arr[idx - 1].x <= xMax) ||\n (arr[idx - 1] && arr[idx - 1].x1 <= xMax)) &&\n (point.x >= xMin ||\n point.x1 >= xMin ||\n (arr[idx + 1] && arr[idx + 1].x >= xMin) ||\n (arr[idx + 1] && arr[idx + 1].x1 >= xMin)) &&\n (point.y <= yMax ||\n point.y1 <= yMax ||\n (arr[idx - 1] && arr[idx - 1].y <= yMax) ||\n (arr[idx - 1] && arr[idx - 1].y1 <= yMax)) &&\n (point.y >= yMin ||\n point.y1 >= yMin ||\n (arr[idx + 1] && arr[idx + 1].y >= yMin) ||\n (arr[idx + 1] && arr[idx + 1].y1 >= yMin));\n\n const filteredData = seriesItem.data; //.filter(visiblePoints);\n\n const serie = {\n ...seriesItem,\n data: filteredData,\n };\n\n drawer.draw(\n serie,\n seriesItem.renderTo === 'canvas' ? this._canvas : group,\n foundX,\n foundY,\n this._options\n );\n\n const emit = (event: IDragEvent<Series<BasePoint>>) => {\n this.seriesMove$.next(event);\n };\n\n const emitPoint = (event: IDragEvent<Series<BasePoint>>) => {\n this.pointMove$.next(event);\n };\n\n drawer?.dispatch?.on(DispatchType.moveLine, function () {\n emit(this);\n });\n\n drawer?.dispatch?.on(DispatchType.movePoint, function () {\n emitPoint(this);\n });\n });\n }\n\n private createTooltip() {\n d3.select(this._container.nativeElement)\n .append('div')\n .attr('class', 'tooltip-chart color-text-90 bg-background-50 shadow-2')\n .style('position', 'fixed')\n .style('top', 'unset')\n .style('right', 'unset')\n .style('bottom', 'unset')\n .style('left', 'unset')\n .style('pointer-events', 'none')\n .style('display', 'none');\n }\n\n private handleMouseMove(options) {\n const mouse = d3.pointer(options.event);\n const { top, right, bottom, left } = this.tooltipPosition(options.event);\n\n const tooltipsData = [];\n\n this._chart\n .select('.marker-line')\n .attr('transform', `translate(${0}, ${mouse[1] - 2})`);\n\n this._chart\n .selectAll('.marker')\n .attr('transform', (d: Series<BasePoint>) => {\n if (!d.data.length) {\n return;\n }\n\n if (\n !this._xScales.has(d.xAxisIndex) ||\n !this._yScales.has(d.yAxisIndex)\n ) {\n return;\n }\n\n const foundX = this._xScales.get(d.xAxisIndex);\n const foundY = this._yScales.get(d.yAxisIndex);\n\n if (this._options.tooltip.tracking === 'x') {\n const [min, max] = foundX.domain();\n const filteredData = d.data.filter(\n (point) => point.x <= max && point.x >= min\n );\n\n const sorted = [...filteredData].sort((a, b) =>\n d3.ascending(a.x, b.x)\n );\n\n const bisect = d3.bisector((dd: any) => dd.x).left;\n const x0 = foundX.invert(mouse[0]);\n\n const index = bisect(sorted, x0);\n\n const data = sorted[index] ? sorted[index] : sorted[index - 1];\n\n tooltipsData.push({\n point: data,\n color: d.color,\n name: d.name,\n });\n\n return `translate(${\n !isNaN(data?.x) && data?.x != null ? foundX(data.x) : -10\n }, ${!isNaN(data?.y) && data?.y != null ? foundY(data.y) : -10})`;\n }\n\n if (this._options.tooltip.tracking === 'y') {\n const sorted = [...d.data].sort((a, b) => d3.ascending(a.y, b.y));\n const bisect = d3.bisector((dd: any) => dd.y).left;\n const y0 = foundY.invert(mouse[1]);\n\n const index = bisect(sorted, y0, 0);\n\n const data = sorted[index] ? sorted[index] : sorted[index - 1];\n\n tooltipsData.push({\n point: data,\n color: d.color,\n name: d.name,\n });\n\n return `translate(${\n !isNaN(data?.x) && data?.x != null ? foundX(data.x) : -10\n }, ${!isNaN(data?.y) && data?.y != null ? foundY(data.y) : -10})`;\n }\n });\n\n if (this._options.tooltip?.format) {\n const formatted = this._options.tooltip?.format(tooltipsData);\n\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('top', top)\n .style('right', right)\n .style('bottom', bottom)\n .style('left', left)\n .html(formatted);\n }\n }\n\n private tooltipPosition(event) {\n const centerX = this._width / 2;\n const centerY = this._height / 2;\n\n const padding = { x: 10, y: 10 };\n\n const scene = {\n left: event.pageX > centerX ? 'initial' : `${event.pageX + padding.x}px`,\n top: event.pageY > centerY ? 'initial' : `${event.pageY + padding.y}px`,\n bottom:\n event.pageY > centerY\n ? `${window.innerHeight - event.pageY}px`\n : 'initial',\n right:\n event.pageX > centerX\n ? `${window.innerWidth - event.pageX + padding.x}px`\n : 'initial',\n };\n\n return scene;\n }\n\n private createMarkers() {\n if (this._options.tooltip === undefined) {\n return;\n }\n\n if (!this._options.tooltip.enable) {\n return;\n }\n\n this._chart.selectAll('.marker').remove();\n this._chart.select('.marker-line').remove();\n\n this._chart\n .append('line')\n .attr('class', 'marker-line')\n .attr('x1', 35)\n .attr('x2', this._width)\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-40)')\n .style('display', 'none');\n\n const { series } = this._options;\n\n if (!series) {\n return;\n }\n\n const markers = this._chart\n .selectAll()\n .data(series.filter((_) => _.visible));\n\n markers\n .enter()\n .append('circle')\n .attr('class', 'marker')\n .attr('pointer-events', 'none')\n .attr('r', 3)\n .attr('fill', (_, i) => _.color)\n .style('display', 'none');\n\n const mouseoutEvent = () => {\n this._chart.selectAll('.marker').style('display', 'none');\n this._chart.select('.marker-line').style('display', 'none');\n\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('display', 'none');\n };\n\n const mouseMoveEvent = (event) => {\n const options = {\n event,\n series,\n };\n\n this.handleMouseMove(options);\n };\n\n const mouseOverEvent = () => {\n if (this._options.tooltip.showMarkers) {\n this._chart\n .selectAll('.marker')\n .style('display', (d: Series<BasePoint>) => {\n if (d.data.length) {\n return null;\n }\n return 'none';\n });\n }\n\n if (this._options.tooltip.showLine) {\n this._chart.select('.marker-line').style('display', null);\n }\n\n d3.select(this._container.nativeElement)\n .select('.tooltip-chart')\n .style('display', null);\n };\n\n this._chart\n .on('mouseover', mouseOverEvent)\n .on('mousemove', mouseMoveEvent)\n .on('mouseleave', mouseoutEvent);\n }\n\n private drawLegend() {\n if (this._options.legend?.visible === false) {\n return;\n }\n\n this._chart.selectAll('.legend').remove();\n\n const drawer = this._options.legend?.type\n ? defaultLegendDrawerMapping.get(this._options.legend.type)\n : defaultLegendDrawerMapping.get(LegendType.swatches);\n\n const context = this._container.nativeElement as HTMLElement;\n\n if (!drawer) {\n throw new Error(\n `No drawer for legend\n }`\n );\n }\n\n drawer.draw({\n context,\n series: this._options.series.filter((_) => _.showInLegend),\n width: this._width,\n height: this._height,\n });\n }\n\n private caluclateChartWidth() {\n let width = -this._width;\n\n if (this.offsetOpposite > 0) {\n width = -this._width + this.offsetOpposite + this.offsetNonOpposite;\n }\n\n if (this.offsetNonOpposite > 0) {\n width =\n -this._width + this._options.bounds.right + this.offsetNonOpposite;\n }\n\n if (\n this.offsetOpposite >= Axis.offsetFactor &&\n this.offsetNonOpposite === 0\n ) {\n width = -this._width + this.offsetOpposite + this._options.bounds.left;\n }\n\n if (this.offsetOpposite > 0 && this.offsetNonOpposite > 0) {\n width = -this._width + this.offsetOpposite + this.offsetNonOpposite;\n }\n\n return Math.abs(width);\n }\n\n private drawGridLines() {\n if (this._options.gridLines === false) {\n return;\n }\n\n const translateX =\n this.offsetNonOpposite > 0\n ? this.offsetNonOpposite\n : this._options.bounds.left + this.offsetNonOpposite;\n\n this._chart.selectAll('.grid').remove();\n\n const yList = this._yAxisList.filter(\n (_) => _.options.visible && !_.options.opposite\n );\n\n const y: any =\n yList?.length > 0\n ? this._yScales.get(yList[yList.length - 1].index)\n : this._yScales.get(0);\n\n const x = this._xScales.get(0);\n\n if (!y || !x) {\n return;\n }\n\n const TICK_HEIGHT = 40;\n const TICK_WIDTH = 60;\n\n const tickCount = Math.round(this._height / TICK_HEIGHT);\n const tickCountX = Math.round(this._width / TICK_WIDTH);\n\n const gridY = this._chart\n .append('g')\n .attr('class', 'grid color-text-10')\n .style('shape-rendering', 'crispEdges');\n\n const gridlinesY = d3\n .axisLeft(y)\n .tickFormat('' as any)\n .tickSize(-this.visibleChartWindowWidth);\n\n const hasBarSeriesType = this._options.series.some(\n (_) => _.type === SeriesType.bar\n );\n\n if (!hasBarSeriesType) {\n const gridX = this._chart\n .append('g')\n .attr('class', 'grid color-text-10')\n .style('shape-rendering', 'crispEdges');\n\n const gridlinesX = d3\n .axisBottom(x)\n .ticks(tickCountX)\n .tickFormat('' as any)\n .tickSize(\n this._height - this._options.bounds.bottom - this._options.bounds.top\n );\n\n gridX\n .call(gridlinesX)\n .attr('transform', `translate(0, ${this._options.bounds.top})`)\n .lower();\n }\n\n gridY\n .call(gridlinesY)\n .attr('transform', `translate(${translateX}, ${0})`)\n .lower();\n\n this._chart.selectAll('.grid path').remove();\n }\n\n private createScales() {\n this._xScales.clear();\n this._yScales.clear();\n\n const defaultScaleMapping: Map<ScaleType, any> = new Map<ScaleType, any>()\n .set(ScaleType.linear, d3.scaleLinear)\n .set(ScaleType.log, d3.scaleLog)\n .set(ScaleType.sqrt, d3.scaleSqrt)\n .set(ScaleType.pow, d3.scalePow);\n\n const xRange = [\n this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left,\n this._width -\n (this.offsetOpposite\n ? this.offsetOpposite\n : this._options.bounds.right),\n ];\n\n const yRange = [\n this._height - this._options.bounds.bottom,\n this._options.bounds.top,\n ];\n\n this._xAxisList.forEach((axis, index) => {\n let scale = null;\n\n if (axis.options.type === Scale.time) {\n scale = d3\n .scaleTime()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...xRange].reverse() : xRange);\n }\n\n if (axis.options.type === Scale.number) {\n scale = defaultScaleMapping\n .get(axis.options.scaleOptions.type)()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...xRange].reverse() : xRange);\n }\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleOptions.type === ScaleType.log) {\n scale.base(axis.options.scaleOptions.base);\n }\n\n if (axis.options.scaleOptions.type === ScaleType.pow) {\n scale.exponent(axis.options.scaleOptions.base);\n }\n\n this._xScales.set(index, scale);\n });\n\n this._yAxisList.forEach((axis, index) => {\n let scale = null;\n\n if (axis.options.type === Scale.number) {\n scale = defaultScaleMapping\n .get(axis.options.scaleOptions.type)()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...yRange].reverse() : yRange);\n }\n\n if (axis.options.type === Scale.time) {\n scale = d3\n .scaleTime()\n .domain(axis.extent)\n .range(axis.options.inverted ? [...yRange].reverse() : yRange);\n }\n\n if (axis.options.niceTicks) {\n scale.nice();\n }\n\n if (axis.options.scaleOptions.type === ScaleType.log) {\n scale.base(axis.options.scaleOptions.base);\n }\n\n if (axis.options.scaleOptions.type === ScaleType.pow) {\n scale.exponent(axis.options.scaleOptions.base);\n }\n\n this._yScales.set(index, scale);\n });\n\n for (const [key, value] of this._yScales) {\n this._clonedY.set(key, value.copy());\n }\n\n for (const [key, value] of this._xScales) {\n this._clonedX.set(key, value.copy());\n }\n }\n\n private drawAxis() {\n const hasVisibleAxis = [...this._xAxisList, ...this._yAxisList].filter(\n (axis) => axis.options.visible\n );\n\n if (!hasVisibleAxis) {\n return;\n }\n\n const negative = false;\n\n this._chart.selectAll('.axes').remove();\n\n const axes = this._chart\n .append('g')\n .attr('class', 'axes')\n .style('shape-rendering', 'crispEdges');\n\n const TICK_HEIGHT = 40;\n const TICK_WIDTH = 60;\n\n const tickCount = Math.round(this._height / TICK_HEIGHT);\n const tickCountX = Math.round(this._width / TICK_WIDTH);\n\n this._xAxisList.forEach((axis) => {\n const options: AxisOptions = axis.options;\n\n const translate = `translate(${0}, ${\n this._height - this._options.bounds.bottom\n })`;\n\n const x = this._xScales.get(axis.index);\n\n const xAxis = d3.axisBottom(x).ticks(tickCountX);\n\n if (axis.options?.tickFormat) {\n xAxis.tickFormat(axis.options.tickFormat);\n }\n\n if (options.visible !== false) {\n const translateX = this.offsetNonOpposite\n ? this.offsetNonOpposite\n : this._options.bounds.left + this.offsetNonOpposite;\n\n axes\n .append('g')\n .attr('class', 'x-axis-label')\n .append('text')\n .style('fill', 'var(--color-text-50)')\n .attr(\n 'transform',\n 'translate(' +\n this._width / 2 +\n ' ,' +\n (this._height - this._options.bounds.bottom) +\n ')'\n )\n .style('text-anchor', 'middle')\n .attr('dy', '3em')\n .text(options.title ?? '');\n\n axes\n .append('g')\n .attr('class', 'x-axis font-caption')\n .attr('data-x-scale-id', axis.index)\n .attr('transform', translate)\n .style('pointer-events', 'none')\n .call(xAxis)\n .call((_) => {\n _.select('.domain').remove();\n _.selectAll('.tick').attr('class', 'color-text-50');\n\n if (negative) {\n _.append('line')\n .attr('y1', 0)\n .attr('y2', this._height)\n .attr('transform', `translate(${x(0)}, -${this._height})`)\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-50)');\n }\n\n _.append('line')\n .attr('x1', 0)\n .attr('x2', this.visibleChartWindowWidth)\n .attr('transform', `translate(${translateX}, ${0})`)\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-50)');\n });\n }\n });\n\n this._yAxisList.forEach((axis) => {\n const translate = axis.options.opposite\n ? `translate(${this._width - axis.offset}, ${0})`\n : `translate(${axis.offset}, ${0})`;\n\n const y = this._yScales.get(axis.index);\n\n const yAxis = axis.options.opposite ? d3.axisRight(y) : d3.axisLeft(y);\n\n if (axis.options.visible !== false) {\n const labelOffset = axis.options.opposite\n ? this._width - axis.offset + axis.width\n : axis.offset - axis.width;\n\n axes\n .append('g')\n .attr('class', 'y-axis-label')\n .append('text')\n .style('fill', 'var(--color-text-50)')\n .attr('transform', 'rotate(-90)')\n .attr('y', labelOffset)\n .attr('x', 0 - this._height / 2)\n .attr('dy', axis.options.opposite ? '12px' : '-3px')\n .style('text-anchor', 'middle')\n .text(axis.options.title ?? '');\n\n axes\n .append('g')\n .attr('class', 'y-axis font-caption')\n .attr('data-y-scale-id', axis.index)\n .attr('transform', translate)\n .call(yAxis)\n .style('pointer-events', 'none')\n .call((_) => {\n _.select('.domain').remove();\n _.selectAll('.tick').attr('class', 'color-text-50');\n\n if (!negative) {\n _.append('line')\n .attr('y1', 0)\n .attr(\n 'y2',\n this._height -\n this._options.bounds.top -\n this._options.bounds.bottom\n )\n .attr(\n 'transform',\n `translate(${0}, ${this._options.bounds.top})`\n )\n .style('stroke-width', 0.5)\n .style('stroke', 'var(--color-text-50)');\n }\n });\n }\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { map, takeWhile, throttleTime } from 'rxjs/operators';\nimport { TetaChart } from '../core/chart';\nimport { ChartOptions } from '../model/chart-options';\nimport { BasePoint } from '../model/point/base-point';\nimport { Series } from '../model/series';\nimport { PlotLine } from '../model/plot-line';\nimport { PlotBand } from '../model/plot-band';\nimport { IDragEvent } from '../model/i-drag-event';\nimport { IZoomEvent } from '../model/i-zoom-event';\nimport { SeriesType } from '../model/enum/series-type';\nimport { BarPoint } from '../model/point/bar-point';\n\n@Component({\n selector: 'teta-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent\n implements OnInit, AfterViewInit, OnDestroy, OnChanges\n{\n @Input() zoom: IZoomEvent;\n\n @Input() config: ChartOptions;\n\n @Output()\n plotLinesMove: EventEmitter<IDragEvent<PlotLine>> = new EventEmitter<\n IDragEvent<PlotLine>\n >();\n\n @Output()\n plotBandsMove: EventEmitter<IDragEvent<PlotBand>> = new EventEmitter<\n IDragEvent<PlotBand>\n >();\n\n @Output()\n seriesMove: EventEmitter<IDragEvent<Series<BasePoint>>> = new EventEmitter<\n IDragEvent<Series<BasePoint>>\n >();\n\n @Output()\n pointMove: EventEmitter<IDragEvent<Series<BasePoint>>> = new EventEmitter<\n IDragEvent<Series<BasePoint>>\n >();\n\n @Output()\n zoomChange: EventEmitter<IZoomEvent> = new EventEmitter<IZoomEvent>();\n\n @ViewChild('chart', {\n static: true,\n })\n chart: ElementRef;\n hasSeriesData: boolean;\n\n private _config: ChartOptions;\n private _alive = true;\n private size$ = new Subject<any>();\n private _observer: ResizeObserver;\n private _chart: TetaChart;\n private _zoom: IZoomEvent;\n\n constructor(private _zone: NgZone) {}\n\n @HostListener('click', ['$event']) click(event: any): void {\n const composedPath = event.composedPath();\n const triggerToken = 'legend';\n\n const isLegend = composedPath.some((_) =>\n _.classList?.contains(triggerToken)\n );\n\n if (isLegend) {\n const clickedElement: any = event.target?.__data__;\n\n if (!clickedElement) {\n return;\n }\n\n const serieIndex = this._config?.series?.indexOf(clickedElement);\n\n if (clickedElement.serieType === SeriesType.bar) {\n const foundSerie = this._config.series[clickedElement.serieIndex];\n\n this._config.series[foundSerie.id].data = this._config.series[\n foundSerie.id\n ].data.map((_: BasePoint & BarPoint) => {\n if (clickedElement.id === _.id) {\n return {\n ..._,\n visible: !_.visible,\n };\n }\n\n return _;\n });\n\n this.redraw(this._config);\n }\n\n if (serieIndex !== -1) {\n const foundSerie = this._config.series[serieIndex];\n\n const yAxisIndex = foundSerie?.yAxisIndex;\n\n this._config.series[serieIndex].visible = !foundSerie.visible;\n\n const attachedYAxes = this._config.series\n ?.filter((_) => _.visible)\n .map((_) => _.yAxisIndex);\n\n const shouldVisibleYAxis = attachedYAxes?.includes(yAxisIndex);\n\n this._config.yAxis[yAxisIndex].visible = shouldVisibleYAxis;\n this.redraw(this._config);\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.config && changes.hasOwnProperty('config')) {\n this.setConfig(this.config);\n\n if (this.zoom) {\n this._chart?.setZoom(this.zoom);\n }\n }\n\n if (this.zoom && changes.hasOwnProperty('zoom')) {\n this._chart?.setZoom(this.zoom);\n }\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit(): void {\n this._observer = new ResizeObserver((entries) => {\n const { contentRect } = entries[0];\n this.size$.next(contentRect);\n });\n\n this._observer.observe(this.chart.nativeElement);\n\n this.size$\n .pipe(throttleTime(100, undefined, { trailing: true }))\n .pipe(\n takeWhile((_) => this._alive),\n map((_) => {\n this.resize(_);\n this.redraw(this._config);\n })\n )\n .subscribe();\n }\n\n get showLegend(): boolean {\n return this._config?.legend?.visible;\n }\n\n ngOnDestroy() {\n this._alive = false;\n this._observer?.unobserve(this.chart.nativeElement);\n }\n\n private redraw(config: any) {\n if (config) {\n this._chart.redraw(config);\n }\n }\n\n private resize(contentRect: any) {\n const { width, height } = contentRect;\n this._chart.setSize({\n width,\n height,\n });\n }\n\n private setConfig(config: ChartOptions) {\n if (config) {\n this._config = config;\n this.hasSeriesData = !!this._config?.series?.some((_) => _.data.length);\n\n if (!this._chart) {\n this._chart = new TetaChart(this._config, this.chart);\n\n this._chart.plotLinesMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => this.plotLinesMove.emit(_));\n\n this._chart.plotBandsMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => this.plotBandsMove.emit(_));\n\n this._chart.seriesMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => this.seriesMove.emit(_));\n\n this._chart.pointMove\n .pipe(takeWhile((_) => this._alive))\n .subscribe((_) => {\n this.pointMove.emit(_);\n });\n\n this._chart.zoom\n .pipe(\n takeWhile((_) => this._alive),\n map((_) => {\n this.zoomChange.emit(_);\n })\n )\n .subscribe();\n }\n\n if (this.chart) {\n if (this.hasSeriesData) {\n if (!this._zoom || this._zoom?.event?.type === 'end') {\n this.redraw(this._config);\n }\n }\n }\n }\n }\n}\n","<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div *ngIf=\"showLegend\" class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">Данные отсутствуют</span>\n</div>\n\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ChartComponent } from './chart/chart.component';\n\n@NgModule({\n declarations: [ChartComponent],\n exports: [ChartComponent],\n imports: [CommonModule],\n})\nexport class ChartModule {}\n","import { PlotLine } from './plot-line';\nimport { PlotBand } from './plot-band';\nimport { ScaleType } from './enum/scale-type';\n\nexport class AxisOptions {\n title: string;\n min: number;\n max: number;\n visible: boolean;\n tickFormat: (d: any) => string;\n transform: string;\n type: 'time' | 'number' | 'category';\n zoom?: boolean;\n scaleOptions: {\n type?: ScaleType;\n base?: number;\n };\n inverted?: boolean;\n negative?: boolean;\n opposite?: boolean;\n niceTicks = true;\n plotLines: PlotLine[];\n plotBands: PlotBand[];\n\n constructor(options?: {\n title?: string;\n min?: number;\n max?: number;\n visible?: boolean;\n tickFormat?: (d: any) => string;\n transform?: string;\n type?: 'time' | 'number' | 'category';\n zoom?: boolean;\n scaleOptions?: {\n type?: ScaleType;\n base?: number;\n };\n inverted?: boolean;\n negative?: boolean;\n opposite?: boolean;\n niceTicks?: boolean;\n plotLines?: PlotLine[];\n plotBands?: PlotBand[];\n }) {\n this.title = options?.title;\n this.min = options?.min;\n this.max = options?.max;\n this.visible = options?.visible ?? true;\n this.tickFormat = options?.tickFormat;\n this.transform = options?.transform;\n this.zoom = options?.zoom;\n this.type = options?.type ?? 'number';\n this.scaleOptions = {\n type: ScaleType.linear,\n base: 10,\n ...options?.scaleOptions,\n };\n this.inverted = options?.inverted;\n this.negative = options?.negative;\n this.opposite = options?.opposite;\n this.niceTicks = options?.niceTicks == null ? true : options.niceTicks;\n this.plotLines = options?.plotLines || [];\n this.plotBands = options?.plotBands || [];\n }\n}\n","import {BasePoint} from './point/base-point';\nimport {SeriesType} from './enum/series-type';\nimport {IDrawer} from './i-drawer';\nimport * as d3 from 'd3';\n\nexport class Series<T extends BasePoint> {\n id?: number;\n renderTo?: 'canvas' | 'svg';\n type: SeriesType;\n curveType?: d3.CurveFactoryLineOnly | d3.CurveFactory;\n data: T[];\n axisFormat?: () => void;\n name?: string;\n xAxisIndex?: number;\n yAxisIndex?: number;\n drawer?: IDrawer<T>;\n strokeWidth?: number;\n strokeDasharray?: string;\n visible?: boolean;\n color?: string;\n colorScale?: d3.ScaleSequential<any, any>;\n drag?: {\n enable?: boolean;\n extendLine?: boolean;\n grabbers?: {\n radius?: number;\n stroke?: string;\n fill?: string;\n strokeWidth?: string;\n };\n };\n extend?: boolean;\n showInLegend?: boolean;\n\n constructor(options?: {\n id?: number;\n renderTo?: 'canvas' | 'svg';\n type?: SeriesType;\n curveType?: d3.CurveFactoryLineOnly | d3.CurveFactory;\n data?: T[];\n axisFormat?: () => void;\n name?: string;\n xAxisIndex?: number;\n yAxisIndex?: number;\n drawer?: IDrawer<T>;\n strokeWidth?: number;\n strokeDasharray?: string;\n visible?: boolean;\n color?: string;\n colorScale?: d3.ScaleSequential<any, any>;\n drag?: {\n enable?: boolean;\n extendLine?: boolean;\n grabbers?: {\n radius?: number;\n stroke?: string;\n fill?: string;\n strokeWidth?: string;\n };\n };\n extend?: boolean;\n showInLegend?: boolean;\n }) {\n this.id = options?.id;\n this.renderTo = options?.renderTo ?? 'svg';\n this.type = options?.type != null ? options?.type : SeriesType.line;\n this.curveType =\n options?.curveType != null ? options?.curveType : d3.curveLinear;\n this.data = options?.data?.filter((_) => !isNaN(_.x) && !isNaN(_.y));\n this.axisFormat = options?.axisFormat;\n this.name = options?.name;\n this.xAxisIndex = options?.xAxisIndex != null ? options?.xAxisIndex : 0;\n this.yAxisIndex = options?.yAxisIndex != null ? options?.yAxisIndex : 0;\n this.drawer = options?.drawer;\n this.strokeWidth = options?.strokeWidth;\n this.strokeDasharray = options?.strokeDasharray ?? null;\n this.visible = options?.visible || true;\n this.color = options?.color ?? 'cyan';\n this.colorScale = options?.colorScale;\n this.drag = {enable: false, extendLine: false, ...options?.drag};\n this.showInLegend =\n options?.showInLegend != null ? options?.showInLegend : true;\n this.extend = options?.extend != null ? options?.extend : false;\n }\n}\n","export class TooltipOptions {\n enable?: boolean;\n showMarkers?: boolean;\n showLine?: boolean;\n tracking?: 'x' | 'y' | 'both';\n format?: (data: any) => any;\n\n constructor(options?: {\n enable?: boolean;\n showMarkers?: boolean;\n showLine?: boolean;\n tracking?: 'x' | 'y' | 'both';\n format?: (data: any) => any;\n }) {\n const defaultFormatter = (tooltips) => {\n let html = '';\n\n tooltips\n .filter((_) => _.point)\n .forEach((_) => {\n html += `<div>${_.name ?? 'Без названия'} x: ${_.point?.x?.toFixed(\n 2\n )} y: ${_.point?.y?.toFixed(2)}</div>`;\n });\n\n return html;\n };\n\n this.enable = options?.enable ?? true;\n this.showMarkers = options?.showMarkers ?? true;\n this.showLine = options?.showLine ?? false;\n this.tracking = options?.tracking ?? 'x';\n this.format = options?.format ?? defaultFormatter;\n }\n}\n","export class ChartBounds {\n top = 35;\n right = 50;\n bottom = 50;\n left = 35;\n\n constructor(options?: {\n top?: number;\n right?: number;\n bottom?: number;\n left: number;\n }) {\n this.top = options?.top || this.top;\n this.right = options?.right || this.right;\n this.bottom = options?.bottom || this.bottom;\n this.left = options?.left || this.left;\n }\n}\n","import { AxisOptions } from './axis-options';\nimport { Series } from './series';\nimport { BasePoint } from './point/base-point';\nimport { TooltipOptions } from './tooltip-options';\nimport { ChartBounds } from './chart-bounds';\nimport { LegendType } from './enum/legend-type';\nimport { ZoomType } from './enum/zoom-type';\nimport { ZoomTransform } from 'd3';\nimport { Annotation } from './annotation';\n\nexport class ChartOptions {\n name: string;\n series?: Series<BasePoint>[];\n legend?: {\n type?: LegendType;\n visible?: boolean;\n };\n zoom?: {\n enable?: boolean;\n zoomType?: ZoomType;\n zoomTransform?: ZoomTransform;\n };\n tooltip?: TooltipOptions;\n xAxis: AxisOptions[];\n yAxis: AxisOptions[];\n gridLines?: boolean;\n width?: number;\n height?: number;\n bounds = new ChartBounds();\n annotations?: Annotation[];\n\n constructor(options?: {\n name?: string;\n series?: Series<BasePoint>[];\n zoom?: {\n enable?: boolean;\n zoomType?: ZoomType;\n zoomTransform?: ZoomTransform;\n };\n tooltip?: TooltipOptions;\n xAxis: AxisOptions[];\n yAxis: AxisOptions[];\n gridLines?: boolean;\n width?: number;\n height?: number;\n legend?: {\n type?: LegendType;\n visible?: boolean;\n };\n bounds?: ChartBounds;\n annotations?: Annotation[];\n }) {\n this.name = options?.name;\n this.zoom = {\n enable: false,\n zoomType: ZoomType.x,\n ...options?.zoom,\n };\n this.series = options?.series?.map((series, idx) => ({\n ...series,\n id: idx,\n }));\n this.zoom = { enable: false, zoomType: ZoomType.x, ...options?.zoom };\n this.series = options?.series?.map((series, idx) => new Series(series));\n this.tooltip = new TooltipOptions({ ...options?.tooltip });\n this.xAxis = options?.xAxis?.map((_) => new AxisOptions(_));\n this.yAxis = options?.yAxis?.map((_) => new AxisOptions(_));\n this.gridLines = options?.gridLines == null ? true : options.gridLines;\n this.width = options?.width;\n this.height = options?.height;\n this.legend = {\n visible: true,\n type: LegendType.swatches,\n ...options?.legend,\n };\n this.bounds = { ...this.bounds, ...options?.bounds };\n this.annotations = options?.annotations;\n }\n}\n","import {\n annotationBadge,\n annotationCallout,\n annotationCalloutCircle,\n annotationCalloutCurve,\n annotationCalloutElbow,\n annotationCalloutRect,\n annotationCustomType,\n annotationLabel,\n annotationXYThreshold,\n} from 'd3-svg-annotation';\nimport { BasePoint } from './point/base-point';\n\nconst annotationMap = [\n annotationBadge,\n annotationLabel,\n annotationCallout,\n annotationCalloutCircle,\n annotationCalloutCurve,\n annotationCalloutElbow,\n annotationCalloutRect,\n annotationCustomType,\n annotationXYThreshold,\n] as const;\n\ntype AnnotationTypes = typeof annotationMap[number];\n\nexport class Annotation {\n point: BasePoint;\n yAxisIndex: number;\n xAxisIndex: number;\n type?: AnnotationTypes;\n enabled?: boolean;\n fillColor?: string;\n borderWidth?: number;\n borderColor?: string;\n dx?: number;\n dy?: number;\n className?: string;\n connector?: {\n end: string;\n };\n note?: {\n label?: string;\n title?: string;\n bgPadding?: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n };\n bgRadius?: boolean;\n };\n\n constructor(options?: {\n point: BasePoint;\n type?: AnnotationTypes;\n yAxisIndex: number;\n xAxisIndex: number;\n enabled?: boolean;\n fillColor?: string;\n borderWidth?: number;\n borderColor?: string;\n dx?: number;\n dy?: number;\n className?: string;\n connector?: {\n end: string;\n };\n note?: {\n label?: string;\n title?: string;\n bgPadding?: {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n };\n bgRadius?: boolean;\n };\n }) {\n this.point = options?.point;\n this.yAxisIndex = options?.yAxisIndex;\n this.xAxisIndex = options?.xAxisIndex;\n this.type = options?.type || annotationLabel;\n this.enabled = options?.enabled;\n this.className = options?.className;\n this.fillColor = options?.fillColor;\n this.borderColor = options?.borderColor;\n this.borderWidth = options?.borderWidth;\n this.note = options?.note;\n this.connector = options?.connector;\n this.dx = options?.dx;\n this.dy = options?.dy;\n }\n}\n","export class PlotLine {\n id: number;\n width?: number;\n value: number;\n label?: string;\n color?: string;\n dashed?: boolean;\n min?: number;\n max?: number;\n\n constructor(options?: {\n id: number;\n width?: number;\n value: number;\n label?: string;\n color?: string;\n dashed?: boolean;\n min?: number;\n max?: number;\n }) {\n this.id = options?.id;\n this.width = options?.width || 1;\n this.value = options?.value;\n this.label = options?.label;\n this.dashed = options?.dashed || false;\n this.color = options?.color || 'var(--color-text-70)';\n this.min = options?.min;\n this.max = options?.max;\n }\n}\n","export class PlotBand {\n id: any;\n from: number;\n to: number;\n label?: string;\n color?: string;\n image?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n opacity?: number;\n\n constructor(options?: {\n id: any;\n from: number;\n to: number;\n label?: string;\n color?: string;\n image?: string;\n showGrabbers?: boolean;\n draggable?: boolean;\n resizable?: boolean;\n min?: number;\n max?: number;\n opacity?: number;\n }) {\n this.id = options?.id;\n this.from = options?.from;\n this.to = options?.to;\n this.label = options?.label;\n this.color = options?.color || '#59AE501A';\n this.image = options?.image;\n this.showGrabbers =\n options?.showGrabbers != null ? options.showGrabbers : true;\n this.draggable = options?.draggable != null ? options?.draggable : false;\n this.resizable = options?.resizable != null ? options?.resizable : true;\n this.min = options?.min;\n this.max = options?.max;\n this.opacity = options?.opacity;\n }\n}\n","import {\n AfterViewInit, ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\nimport * as d3 from 'd3';\nimport { Chart3dOptions } from '../model/chart-3d-options';\nimport { Base3dPoint } from '../model/base-3d-point';\nimport { Series3d } from '../model/series-3d';\nimport { ThemeSwitchService } from '../../theme-switch/theme-switch.service';\nimport { takeWhile, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'teta-chart3d',\n templateUrl: './chart3d.component.html',\n styleUrls: ['./chart3d.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Chart3dComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('canvas') canvasRef: ElementRef;\n\n private _scene: THREE.Scene;\n private _camera: THREE.PerspectiveCamera;\n private _renderer: THREE.Renderer;\n private _controls: OrbitControls;\n private _obs: ResizeObserver;\n private _config: Chart3dOptions;\n\n private SIDE_SIZE = 100;\n private gridColor: any;\n\n private _alive = true;\n\n constructor(\n private _elementRef: ElementRef,\n private _themeService: ThemeSwitchService\n ) {}\n\n @Input() set config(config: Chart3dOptions) {\n if (config) {\n this._config = config;\n this.init();\n }\n }\n\n get config() {\n return this._config;\n }\n\n private get canvas(): HTMLCanvasElement {\n return this.canvasRef.nativeElement;\n }\n\n ngOnInit(): void {\n this._themeService.theme\n .pipe(\n takeWhile((_) => this._alive),\n tap((_) => {\n this.gridColor = _ ? '#474751' : '#d7dee3';\n this.init();\n })\n )\n .subscribe();\n }\n\n ngAfterViewInit() {\n this.addResizeObserver();\n this.createScene();\n this.startRenderingLoop();\n }\n\n ngOnDestroy() {\n this._alive = false;\n }\n\n private init() {\n if (!this._scene) {\n return;\n }\n\n while (this._scene.children.length > 0) {\n this._scene.remove(this._scene.children[0]);\n }\n\n const { x, y, z } = this.getScales(this._config.series);\n\n this.config.series.forEach((data, idx) => {\n const geometry = new THREE.BufferGeometry().setFromPoints(\n data.points.map((_) => new THREE.Vector3(x(_.x), z(_.z), y(_.y)))\n );\n\n const color = d3.scaleOrdinal(d3.schemeTableau10);\n\n const material = new THREE.LineBasicMaterial({\n color: data?.color ?? color(idx.toString()),\n });\n\n const line = new THREE.Line(geometry, material);\n\n line.computeLineDistances();\n line.scale.set(1, 1, 1);\n this._scene.add(line);\n });\n\n const plane = new THREE.GridHelper(\n this.SIDE_SIZE,\n this.SIDE_SIZE / 10,\n this.gridColor,\n this.gridColor\n );\n\n plane.position.set(this.SIDE_SIZE / 2, 0, this.SIDE_SIZE / 2);\n this._scene.add(plane);\n\n const gridX = new THREE.GridHelper(\n this.SIDE_SIZE,\n this.SIDE_SIZE / 10,\n this.gridColor,\n this.gridColor\n );\n gridX.geometry.rotateX(-Math.PI / 2);\n gridX.position.set(this.SIDE_SIZE / 2, this.SIDE_SIZE / 2, 0);\n this._scene.add(gridX);\n\n const gridY = new THREE.GridHelper(\n this.SIDE_SIZE,\n this.SIDE_SIZE / 10,\n this.gridColor,\n this.gridColor\n );\n gridY.geometry.rotateZ(Math.PI / 2);\n gridY.position.set(0, this.SIDE_SIZE / 2, this.SIDE_SIZE / 2);\n this._scene.add(gridY);\n\n this.drawTicks(x, y, z);\n\n this._controls = new OrbitControls(this._camera, this._renderer.domElement);\n\n this._controls.enableDamping = true;\n this._controls.enablePan = true;\n this._controls.dampingFactor = 0.25;\n this._controls.screenSpacePanning = true;\n this._controls.minDistance = 0;\n this._controls.maxDistance = 10000;\n this._controls.maxPolarAngle = Math.PI / 2;\n\n this._controls.enableZoom = true;\n }\n\n private createScene() {\n this._scene = new THREE.Scene();\n\n const aspectRatio =\n this._elementRef.nativeElement.clientWidth /\n this._elementRef.nativeElement.clientHeight;\n\n const fieldOfView = 10;\n const nearClippingPane = 1;\n const farClippingPane = 10000;\n\n this._camera = new THREE.PerspectiveCamera(\n fieldOfView,\n aspectRatio,\n nearClippingPane,\n farClippingPane\n );\n\n this._camera.position.set(1300, 1300, 1300).setLength(1300);\n this._scene.add(this._camera);\n }\n\n private setSize(width: number, height: number) {\n this._camera.aspect = width / height;\n this._renderer.setSize(width, height);\n\n this._camera.updateProjectionMatrix();\n }\n\n private render() {\n this._renderer.render(this._scene, this._camera);\n }\n\n private startRenderingLoop() {\n this._renderer = new THREE.WebGLRenderer({\n antialias: true,\n canvas: this.canvas,\n alpha: true,\n preserveDrawingBuffer: true,\n });\n\n const animate = () => {\n requestAnimationFrame(animate);\n this._controls?.update();\n this.render();\n };\n\n animate();\n }\n\n private addResizeObserver() {\n this._obs = new ResizeObserver((_) => {\n this.setSize(_[0]?.contentRect.width, _[0]?.contentRect.height);\n });\n\n this._obs.observe(this._elementRef.nativeElement);\n }\n\n private makeSprite(text: string, opts?: { fontSize?: number }): THREE.Sprite {\n const fontSize = 20;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const textWidth = text.length * 50;\n canvas.height = 50;\n canvas.width = 50;\n\n if(ctx) {\n ctx.font = `${fontSize}px Arial`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillStyle = '#A0A0A0';\n ctx.fillText(text, 25, 25);\n }\n\n const texture = new THREE.Texture(canvas);\n texture.minFilter = THREE.LinearFilter;\n texture.needsUpdate = true;\n const spriteMaterial = new THREE.SpriteMaterial({\n map: texture,\n });\n\n const sprite = new THREE.Sprite(spriteMaterial);\n sprite.scale.set(5, 5, 5);\n\n return sprite;\n }\n\n private drawTicks(x: any, y: any, z: any) {\n const ticks = new THREE.Object3D();\n const scalesExtrems: any[] = [];\n\n [x, y, z].forEach((scale, idx) => {\n const generatedTicks = scale.ticks(this.SIDE_SIZE / 10);\n\n scalesExtrems.push(d3.max(generatedTicks));\n\n generatedTicks.forEach((_: any) => {\n const sprite = this.makeSprite(_);\n\n if (idx === 0) {\n sprite.position.set(x(_), z(0), -5);\n }\n\n if (idx === 1) {\n sprite.position.set(-5, z(0), y(_));\n }\n\n if (idx === 2) {\n sprite.position.set(0, z(_), -5);\n }\n\n ticks.add(sprite);\n });\n });\n\n const northLabel = this.makeSprite('North', { fontSize: 28 });\n const westLabel = this.makeSprite('West', { fontSize: 28 });\n const tvdLabel = this.makeSprite('TVD', { fontSize: 28 });\n\n northLabel.position.set(x(scalesExtrems[0]) + 10, 0, 0);\n westLabel.position.set(0, 0, y(scalesExtrems[1]) + 10);\n tvdLabel.position.set(0, z(scalesExtrems[2]), 0);\n\n ticks.add(northLabel, westLabel, tvdLabel);\n\n this._scene.add(ticks);\n }\n\n private getScales(series: Series3d<Base3dPoint>[]) {\n const extrems = series.map((_) => ({\n x: d3.extent(_.points, (p: any) => p.x),\n y: d3.extent(_.points, (p: any) => p.y),\n z: d3.extent(_.points, (p: any) => p.z),\n }));\n\n const flattenExtrems = extrems.reduce(\n (acc: any, _): { x: [number]; y: [number]; z: [number] } => {\n acc.x = acc.x.concat(_.x);\n acc.y = acc.y.concat(_.y);\n acc.z = acc.z.concat(_.z);\n return acc as any;\n },\n { x: [], y: [], z: [] }\n );\n\n const x = d3\n .scaleLinear()\n .domain([\n d3.min(flattenExtrems.x) as any,\n this._config?.axes?.max == null\n ? d3.max(flattenExtrems.x)\n : this._config.axes.max,\n ])\n .range([0, this.SIDE_SIZE])\n .nice();\n\n const y = d3\n .scaleLinear()\n .domain([\n d3.min(flattenExtrems.y) as any,\n this._config?.axes?.max == null\n ? d3.max(flattenExtrems.y)\n : this._config.axes.max,\n ])\n .range([0, this.SIDE_SIZE])\n .nice();\n\n const z = d3\n .scaleLinear()\n .domain([\n d3.min(flattenExtrems.z) as any,\n this._config?.axes?.max == null\n ? d3.max(flattenExtrems.z)\n : this._config.axes.max,\n ])\n .range([this.SIDE_SIZE, 0])\n .nice();\n\n return { x, y, z };\n }\n}\n","<canvas #canvas></canvas>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Chart3dComponent } from './chart3d/chart3d.component';\n\n@NgModule({\n declarations: [Chart3dComponent],\n exports: [Chart3dComponent],\n imports: [CommonModule],\n})\nexport class Chart3dModule {}\n","import { Base3dPoint } from './base-3d-point';\nimport { Series3d } from './series-3d';\n\nexport class Chart3dOptions {\n axes?: {\n max?: number;\n };\n\n series: Series3d<Base3dPoint>[];\n\n constructor(options?: Chart3dOptions) {\n this.axes = { ...options?.axes };\n this.series = options?.series || [];\n }\n}\n","/* accordion */\nexport * from './accordion/public-api';\n\n/* button */\nexport * from './button/public-api';\n\n/* checkbox */\nexport * from './checkbox/public-api';\n\n/* datepicker */\nexport * from './date-picker/public-api';\n\n/* delimiter */\nexport * from './delimiter/public-api';\n\n/* dropdown */\nexport * from './dropdown/public-api';\n\n/* dynamic-component */\nexport * from './dynamic-component/public-api';\n\n/* expand-panel */\nexport * from './expand-panel/public-api';\n\n/* file */\nexport * from './file-upload/public-api';\n\n/* filter */\nexport * from './filter/public-api';\n\n/* icon */\nexport * from './icon/public-api';\n\n/* input */\nexport * from './input/public-api';\n\n/* message */\nexport * from './message/public-api';\n\n/* modal */\nexport * from './modal/public-api';\n\n/* pager */\nexport * from './pager/public-api';\n\n/* panel */\nexport * from './panel/public-api';\n\n/* progress-bar */\nexport * from './progress-bar/public-api';\n\n/* property-grid */\nexport * from './property-grid/public-api';\n\n/* radio */\nexport * from './radio/public-api';\n\n/* select */\nexport * from './select/public-api';\n\n/* sidebar */\nexport * from './sidebar/public-api';\n\n/* switch */\nexport * from './switch/public-api';\n\n/* table */\nexport * from './table/public-api';\n\n/* tabs */\nexport * from './tabs/public-api';\n\n/* theme-switch */\nexport * from './theme-switch/public-api';\n\n/* toggle */\nexport * from './toggle/public-api';\n\n/* toolbar */\nexport * from './toolbar/public-api';\n\n/* tree */\nexport * from './tree/public-api';\n\n/* chart */\nexport * from './chart/public-api';\n\n/* 3d-chart */\nexport * from './chart-3d/public-api';\n","import { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { fromEvent, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ClickService {\n click: Observable<MouseEvent>;\n contextMenu: Observable<MouseEvent>;\n\n constructor(@Inject(DOCUMENT) protected _document: any) {\n this.click = fromEvent(this._document, 'click');\n this.contextMenu = fromEvent(this._document, 'contextmenu');\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DynamicComponentService } from '../../common/service/dynamic-component.service';\nimport { DOCUMENT } from '@angular/common';\nimport { ArrayUtil } from '../../common/util/array-util';\nimport { DomUtil } from '../../common/util/dom-util';\nimport { PositionUtil } from '../../common/util/position-util';\nimport { DynamicContentBaseDirective } from '../dynamic-content-base.directive';\nimport { ClickService } from '../../common/service/click.service';\nimport { merge } from 'rxjs';\nimport { filter, takeWhile, tap } from 'rxjs/operators';\n\n@Directive({\n selector: '[tetaContextMenu]',\n})\nexport class ContextMenuDirective\n extends DynamicContentBaseDirective\n implements OnDestroy, OnInit\n{\n /**\n * Строка, шаблон или компонент для создания контекстного меню\n */\n @Input() tetaContextMenu: string | TemplateRef<any> | Type<any>;\n\n get _dynamicContent() {\n return this.tetaContextMenu;\n }\n\n private _eventPoint: {\n x: number;\n y: number;\n };\n\n constructor(\n @Inject(DOCUMENT)\n protected override _document: any,\n protected override _elementRef: ElementRef,\n protected override _service: DynamicComponentService,\n protected override _injector: Injector,\n protected override _zone: NgZone,\n protected override _cdr: ChangeDetectorRef,\n private _click: ClickService\n ) {\n super(_document, _elementRef, _service, _injector, _zone, _cdr);\n }\n\n @HostListener('contextmenu', ['$event'])\n showContent(event: MouseEvent): void {\n event.preventDefault();\n setTimeout(() => {\n this.createMenu(event);\n });\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent): void {\n if (\n this._componentRef &&\n DomUtil.clickedInside(this._componentRef.location.nativeElement, event)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n override ngOnInit() {\n super.ngOnInit();\n merge(this._click.click, this._click.contextMenu)\n .pipe(\n takeWhile(() => this._alive),\n filter(() => this._open),\n filter(() => this._componentRef != null),\n filter(\n (event: MouseEvent) =>\n !DomUtil.clickedInside(\n this._componentRef.location.nativeElement,\n event\n )\n ),\n tap((_) => {\n this.destroyContentRef();\n this.openChange.emit(false);\n })\n )\n .subscribe();\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n }\n\n protected setPosition() {\n if (this._componentRef && this._open) {\n const position = PositionUtil.getPosition(\n {\n top: this._eventPoint.y,\n bottom: this._eventPoint.y,\n left: this._eventPoint.x,\n right: this._eventPoint.x,\n },\n this._componentRef.location.nativeElement.getBoundingClientRect(),\n this.align,\n this.verticalAlign\n );\n PositionUtil.setElementPosition(\n this._componentRef.location.nativeElement,\n position\n );\n }\n }\n\n private createMenu(event: MouseEvent): void {\n if (this.tetaContextMenu == null) {\n return;\n }\n this._eventPoint = event;\n this._componentRef = this.createContentRef();\n this._componentRef.instance.className = [\n ...ArrayUtil.asArray(this.className),\n 'context-menu',\n ];\n this.openChange.emit(true);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {ContextMenuDirective} from './context-menu.directive';\nimport {DynamicComponentModule} from '../../component/dynamic-component/dynamic-component.module';\n\n@NgModule({\n declarations: [ContextMenuDirective],\n exports: [ContextMenuDirective],\n imports: [\n CommonModule,\n DynamicComponentModule\n ]\n})\nexport class ContextMenuModule {\n}\n","import {Directive, Input} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\n@Directive({\n selector: '[tetaDisableControl]'\n})\nexport class DisableControlDirective {\n @Input() set tetaDisableControl(val: boolean) {\n if (this.ngControl.control) {\n if (val) {\n this.ngControl.control.disable();\n } else {\n this.ngControl.control.enable();\n }\n }\n }\n\n constructor(private ngControl: NgControl) {\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DisableControlDirective} from './disable-control.directive';\n\n\n@NgModule({\n declarations: [DisableControlDirective],\n imports: [\n CommonModule\n ],\n exports: [\n DisableControlDirective\n ]\n})\nexport class DisableControlModule {\n}\n","import {\n // ContentChildren,\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n // QueryList,\n} from '@angular/core';\nimport {DragSortEvent} from './drag-sort-event';\n// import {DragSortItemDirective} from './drag-sort-item.directive';\n\n@Directive({\n selector: '[tetaDragSortContainer]',\n})\nexport class DragSortContainerDirective<T> {\n @Input() dragSortList: T[];\n @Output() dragSorted: EventEmitter<DragSortEvent<T>> = new EventEmitter<DragSortEvent<T>>();\n\n // @ContentChildren(DragSortItemDirective, {descendants: true})\n // private items: QueryList<DragSortItemDirective<T>>;\n private _dragItem: T;\n\n constructor() {\n }\n\n @HostListener('drop', ['$event']) drop(event: DragEvent): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n setDragItem(item: T) {\n this._dragItem = item;\n }\n\n getDragItem(): T {\n return this._dragItem;\n }\n\n getList(): T[] {\n return this.dragSortList;\n }\n\n setList(list: T[]) {\n this.dragSortList = list;\n }\n\n updateSortOrder(source: T, target: T, insertBefore: boolean) {\n if (source === target) {\n return;\n }\n const list = this.getList();\n const sourceIndex = list.indexOf(source);\n const targetIndex = list.indexOf(target);\n if (\n (insertBefore && sourceIndex + 1 === targetIndex) ||\n (!insertBefore && sourceIndex === targetIndex + 1)\n ) {\n return;\n }\n const newIndex = list.indexOf(target) + (insertBefore ? 0 : 1);\n\n this.dragSorted.emit({\n list,\n source,\n target,\n newIndex,\n previousIndex: sourceIndex,\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Host,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport {DragSortContainerDirective} from './drag-sort-container.directive';\n\n@Directive({\n selector: '[tetaDragSortItem]',\n})\nexport class DragSortItemDirective<T> implements OnInit, OnDestroy {\n @Input() tetaDragSortItem: T;\n @Input() dragSortDirection: 'horizontal' | 'vertical' = 'horizontal';\n\n @HostBinding('attr.draggable') private readonly draggable = true;\n @HostBinding('class.position-relative') private readonly relative = true;\n\n private _dragElement: HTMLElement;\n\n private rect: any;\n\n constructor(\n @Host() private _container: DragSortContainerDirective<T>,\n private _elementRef: ElementRef,\n private _renderer: Renderer2\n ) {\n }\n\n @HostListener('dragstart', ['$event']) dragstart(event: DragEvent): void {\n this._container.setDragItem(this.tetaDragSortItem);\n }\n\n @HostListener('dragenter', ['$event']) dragenter(event: DragEvent): void {\n this.rect = this._elementRef.nativeElement.getBoundingClientRect();\n }\n\n @HostListener('dragover', ['$event']) dragover(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (this.rect && this._container.getDragItem()) {\n this.showDrag(this.getDropPosition(event));\n }\n }\n\n @HostListener('dragleave', ['$event']) dragleave(event: DragEvent): void {\n event.preventDefault();\n this.hideDrag();\n }\n\n @HostListener('dragend', ['$event']) dragend(event: DragEvent): void {\n this._container.setDragItem(null);\n this.hideDrag();\n }\n\n @HostListener('drop', ['$event']) drop(event: DragEvent): void {\n event.stopPropagation();\n this._container.updateSortOrder(\n this._container.getDragItem(),\n this.tetaDragSortItem,\n this.getDropPosition(event) === 'start'\n );\n this.hideDrag();\n }\n\n ngOnInit() {\n this.createDrag();\n }\n\n ngOnDestroy() {\n this.destroyDrag();\n }\n\n private showDrag(position: 'start' | 'end') {\n this.hideDrag();\n this._renderer.addClass(this._dragElement, `drop-direction-${position}`);\n }\n\n private hideDrag() {\n this._renderer.removeClass(this._dragElement, 'drop-direction-start');\n this._renderer.removeClass(this._dragElement, 'drop-direction-end');\n }\n\n private createDrag() {\n this._dragElement = this._renderer.createElement('div');\n this._renderer.appendChild(\n this._elementRef.nativeElement,\n this._dragElement\n );\n this._renderer.addClass(this._dragElement, 'drop-direction');\n this._renderer.addClass(\n this._dragElement,\n this.dragSortDirection === 'horizontal'\n ? 'drop-direction-horizontal'\n : 'drop-direction-vertical'\n );\n }\n\n private destroyDrag() {\n this._renderer.removeChild(this._renderer, this._dragElement);\n }\n\n private getDropPosition(event: DragEvent) {\n if (this.dragSortDirection === 'horizontal') {\n return event.clientX >= this.rect.x + this.rect.width / 2\n ? 'end'\n : 'start';\n } else {\n return event.clientY >= this.rect.y + this.rect.height / 2\n ? 'end'\n : 'start';\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragSortContainerDirective } from './drag-sort-container.directive';\nimport { DragSortItemDirective } from './drag-sort-item.directive';\n\n@NgModule({\n declarations: [DragSortContainerDirective, DragSortItemDirective],\n exports: [DragSortContainerDirective, DragSortItemDirective],\n imports: [CommonModule],\n})\nexport class DragSortModule {}\n","import {\n Directive,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n selector: '[tetaLoader]',\n})\nexport class LoaderDirective implements OnDestroy {\n @Input() appendToBody = false;\n\n @Input()\n set tetaLoader(value: boolean) {\n this._loading = value;\n if (this._loading) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n get tetaLoader() {\n return this._loading;\n }\n\n private _element: HTMLElement;\n private _loader: any;\n private _alive = true;\n private _loading: boolean;\n\n constructor(\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n this._element = this._elementRef.nativeElement;\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n this.hide();\n }\n\n private show() {\n if (this._loader === null || this._loader === undefined) {\n this._loader = this._renderer.createElement('div');\n this._loader.setAttribute('class', 'loader');\n }\n this._renderer.appendChild(\n this.appendToBody ? this._document.body : this._element,\n this._loader\n );\n this.setPosition();\n }\n\n private hide() {\n if (this._loader && this._loader.parentElement) {\n this._renderer.removeChild(this._loader.parentElement, this._loader);\n }\n }\n\n private setPosition() {\n const position = this._element.getBoundingClientRect();\n this._renderer.setStyle(\n this._loader,\n 'top',\n `${position.y + position.height / 2}px`\n );\n this._renderer.setStyle(\n this._loader,\n 'left',\n `${position.x + +position.width / 2}px`\n );\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {LoaderDirective} from './loader.directive';\n\n@NgModule({\n declarations: [LoaderDirective],\n exports: [LoaderDirective],\n imports: [\n CommonModule\n ]\n})\nexport class LoaderModule {\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n@Component({\n selector: 'teta-resize-panel',\n templateUrl: './resize-panel.component.html',\n styleUrls: ['./resize-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResizePanelComponent implements OnInit, OnDestroy {\n @Input()\n set direction(val: 'vertical' | 'horizontal') {\n this._direction = val;\n }\n\n get direction() {\n return this._direction;\n }\n\n @Input()\n set grabPosition(val: 'top' | 'left' | 'bottom' | 'right') {\n this._grabPosition = val;\n }\n\n get grabPosition() {\n if (this.direction === 'vertical') {\n if (['left', 'right'].includes(this._grabPosition)) {\n return this._grabPosition;\n }\n return 'left';\n }\n if (['top', 'bottom'].includes(this._grabPosition)) {\n return this._grabPosition;\n }\n return 'bottom';\n }\n\n @Input() name: string;\n @Input() minSize: number;\n @Input() maxSize: number;\n @HostBinding('class.resize-panel') private readonly resizePanelClass = true;\n\n private _direction: 'vertical' | 'horizontal' = 'horizontal';\n private _grabPosition: 'top' | 'left' | 'bottom' | 'right' = 'left';\n private _startSize: number;\n private _startPosition: number;\n\n private _positionMap: Map<string, string> = new Map<string, string>()\n .set('left', 'resize-grab_left')\n .set('right', 'resize-grab_right')\n .set('top', 'resize-grab_top')\n .set('bottom', 'resize-grab_bottom');\n\n constructor(\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n @Inject(DOCUMENT) private _document: any\n ) {\n }\n\n resizeStart(event: MouseEvent) {\n this.setStartPosition();\n if (this.direction === 'vertical') {\n this._startSize = this._elementRef.nativeElement.clientWidth;\n this._startPosition = event.clientX;\n } else {\n this._startSize = this._elementRef.nativeElement.clientHeight;\n this._startPosition = event.clientY;\n }\n }\n\n resizeProcess(event: MouseEvent) {\n event.preventDefault();\n if (this.direction === 'vertical') {\n this.manageVertical(event);\n } else {\n this.manageHorizontal(event);\n }\n }\n\n resizeEnd(event: MouseEvent) {\n window.dispatchEvent(new Event('resize'));\n }\n\n ngOnInit() {\n this.restorePosition();\n }\n\n ngOnDestroy(): void {\n }\n\n getClassName() {\n return this._positionMap.get(this.grabPosition) || '';\n }\n\n private setStartPosition() {\n if (this.direction === 'vertical') {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'width',\n `${this._elementRef.nativeElement.offsetWidth}px`\n );\n } else {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'height',\n `${this._elementRef.nativeElement.offsetHeight}px`\n );\n }\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex-grow', `0`);\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex-shrink', `0`);\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex', `none`);\n }\n\n private manageHorizontal(event: MouseEvent) {\n let newSize =\n this.grabPosition === 'bottom'\n ? this._startSize + (event.clientY - this._startPosition)\n : this._startSize - (event.clientY - this._startPosition);\n if (this.maxSize && newSize > this.maxSize) {\n newSize = this.maxSize;\n }\n if (this.minSize && newSize < this.minSize) {\n newSize = this.minSize;\n }\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'height',\n `${newSize}px`\n );\n this.save();\n }\n\n private manageVertical(event: MouseEvent) {\n let newSize =\n this.grabPosition === 'right'\n ? this._startSize + (event.clientX - this._startPosition)\n : this._startSize - (event.clientX - this._startPosition);\n if (this.maxSize && newSize > this.maxSize) {\n newSize = this.maxSize;\n }\n if (this.minSize && newSize < this.minSize) {\n newSize = this.minSize;\n }\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'width',\n `${newSize}px`\n );\n this.save();\n }\n\n private restore() {\n if (this.name?.length > 0) {\n return JSON.parse(localStorage.getItem(`resize-panel${this.name}`));\n }\n }\n\n private restorePosition() {\n const savedSize = this.restore();\n if (savedSize) {\n if (this.direction === 'vertical') {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'width',\n `${savedSize}px`\n );\n } else {\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'height',\n `${savedSize}px`\n );\n }\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex-grow', `0`);\n this._renderer.setStyle(\n this._elementRef.nativeElement,\n 'flex-shrink',\n `0`\n );\n this._renderer.setStyle(this._elementRef.nativeElement, 'flex', `none`);\n }\n }\n\n private save() {\n if (this.name?.length > 0) {\n if (this.direction === 'vertical') {\n localStorage.setItem(\n `resize-panel${this.name}`,\n this._elementRef.nativeElement.clientWidth\n );\n } else {\n localStorage.setItem(\n `resize-panel${this.name}`,\n this._elementRef.nativeElement.clientHeight\n );\n }\n }\n }\n}\n","<ng-content></ng-content>\n<div #grab class=\"resize-grab\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd($event)\"\n [tetaResizeDrag]=\"direction\"\n [ngClass]=\"getClassName()\">\n <teta-icon [name]=\"direction\"></teta-icon>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizePanelComponent } from './resize-panel/resize-panel.component';\nimport { IconModule } from '../icon/icon.module';\nimport { ResizeDragModule } from '../../directive/resize-drag/resize-drag.module';\n\n@NgModule({\n declarations: [ResizePanelComponent],\n exports: [ResizePanelComponent],\n imports: [CommonModule, IconModule, ResizeDragModule],\n})\nexport class ResizePanelModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { DynamicContentBaseDirective } from '../dynamic-content-base.directive';\nimport { DOCUMENT } from '@angular/common';\nimport { DynamicComponentService } from '../../common/service/dynamic-component.service';\nimport { DomUtil } from '../../common/util/dom-util';\nimport { PositionUtil } from '../../common/util/position-util';\nimport { Align } from '../../common/enum/align.enum';\nimport { VerticalAlign } from '../../common/enum/vertical-align.enum';\nimport { merge } from 'rxjs';\nimport { filter, takeWhile, tap } from 'rxjs/operators';\nimport { ClickService } from '../../common/service/click.service';\n\n@Directive({\n selector: '[tetaTooltip]',\n})\nexport class TooltipDirective\n extends DynamicContentBaseDirective\n implements OnDestroy, OnInit\n{\n /**\n * Строка, шаблон или компонент для создания контекстного меню\n */\n @Input() tetaTooltip: string | TemplateRef<any> | Type<any>;\n @Input() override align: Align = Align.center;\n @Input() override verticalAlign: VerticalAlign = VerticalAlign.top;\n private _componentRect: any;\n\n get _dynamicContent() {\n return this.tetaTooltip;\n }\n\n constructor(\n @Inject(DOCUMENT)\n protected override _document: any,\n protected override _elementRef: ElementRef,\n protected override _service: DynamicComponentService,\n protected override _injector: Injector,\n protected override _zone: NgZone,\n protected override _cdr: ChangeDetectorRef,\n private _click: ClickService\n ) {\n super(_document, _elementRef, _service, _injector, _zone, _cdr);\n }\n\n @HostListener('click', ['$event'])\n showContent(event: MouseEvent): void {\n event.preventDefault();\n this.createTooltip();\n }\n\n override ngOnInit() {\n super.ngOnInit();\n merge(this._click.click, this._click.contextMenu)\n .pipe(\n takeWhile(() => this._alive),\n filter(() => this._open),\n filter(() => this._componentRef != null),\n filter(\n (event: MouseEvent) =>\n !DomUtil.clickedInside(this._elementRef.nativeElement, event)\n ),\n filter(\n (event: MouseEvent) =>\n !DomUtil.clickedInside(\n this._componentRef.location.nativeElement,\n event\n )\n ),\n tap((_) => this.destroyContentRef())\n )\n .subscribe();\n }\n\n protected setPosition() {\n if (this._componentRef && this._open) {\n if (!this._componentRect) {\n this._componentRect =\n this._componentRef.location.nativeElement.getBoundingClientRect();\n }\n const containerPosition =\n this._elementRef.nativeElement.getBoundingClientRect();\n const position = PositionUtil.getPosition(\n containerPosition,\n this._componentRect,\n this.align,\n this.verticalAlign,\n 0,\n 12\n );\n PositionUtil.setElementPosition(\n this._componentRef.location.nativeElement,\n position\n );\n const verticalClass =\n containerPosition.top < position.top ? 'tooltip_bottom' : 'tooltip_top';\n this._componentRef.instance.addClass(verticalClass);\n }\n }\n\n private createTooltip(): void {\n this._componentRef = this.createContentRef('tooltip');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TooltipDirective } from './tooltip.directive';\nimport { DynamicComponentModule } from '../../component/dynamic-component/dynamic-component.module';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\n@NgModule({\n declarations: [TooltipDirective],\n exports: [TooltipDirective],\n imports: [CommonModule, DynamicComponentModule, BrowserAnimationsModule],\n})\nexport class TooltipModule {}\n","import { Directive, ElementRef, OnInit, Renderer2 } from '@angular/core';\n\n@Directive({\n selector: '[tetaNoAutofill]',\n})\n\n/**\n * Disable autofill inputs in Chrome. Append hidden inputs with text/password type, to element.\n */\nexport class NoAutofillDirective implements OnInit {\n constructor(private _renderer: Renderer2, private _elementRef: ElementRef) {}\n\n ngOnInit() {\n const inputsTypes = ['text', 'password'];\n\n inputsTypes.forEach((_) => {\n const inputElement = this._renderer.createElement('input');\n this._renderer.setAttribute(inputElement, 'type', _);\n this._renderer.setAttribute(inputElement, 'class', 'position-absolute');\n this._renderer.setStyle(inputElement, 'left', '-9999px');\n this._renderer.insertBefore(\n this._elementRef.nativeElement,\n inputElement,\n this._elementRef.nativeElement.firstChild\n );\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NoAutofillDirective } from './no-autofill.directive';\n\n@NgModule({\n exports: [NoAutofillDirective],\n declarations: [NoAutofillDirective],\n imports: [CommonModule],\n})\nexport class NoAutofillModule {}\n","import {Inject, Injectable, OnDestroy} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OverlayContainerService implements OnDestroy {\n private _containerClass = 'overlay-container';\n private _container: HTMLElement;\n\n constructor(@Inject(DOCUMENT) private document$: any) {\n }\n\n getContainer(): HTMLElement {\n if (!this._container) {\n this.createContainer();\n }\n return this._container;\n }\n\n private createContainer(): void {\n const container = this.document$.createElement('div');\n container.classList.add(this._containerClass);\n this.document$.body.appendChild(container);\n this._container = container;\n }\n\n private removeContainer(): void {\n if (this._container && this._container.parentNode) {\n this._container.parentNode.removeChild(this._container);\n }\n }\n\n ngOnDestroy(): void {\n this.removeContainer();\n }\n}\n","export class StringUtil {\n static firstLetterToLower(input: string) {\n return input.charAt(0).toLocaleLowerCase() + input.slice(1);\n };\n}\n","/**\n * Components\n */\n\nexport * from './component/public-api';\n\n/**\n * Directives\n */\nexport * from './directive/public-api';\n\n/**\n * Pipes\n */\nexport * from './pipe/public-api';\n\n/**\n * Common\n */\nexport * from './common/public-api';\n\n/**\n * Util\n */\nexport * from './util/public-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["objectHash"],"mappings":"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"}
|