tool-dom-ang15 0.0.6 → 0.0.7

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.
@@ -0,0 +1,22 @@
1
+ // tool-dom-ang15-routing.module.ts
2
+ import { NgModule } from '@angular/core';
3
+ import { RouterModule } from '@angular/router';
4
+ import { ToolDomAng15Component } from './tool-dom-ang15.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ const routes = [
8
+ { path: '', component: ToolDomAng15Component },
9
+ ];
10
+ export class ToolDomAng15RoutingModule {
11
+ }
12
+ ToolDomAng15RoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
13
+ ToolDomAng15RoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, imports: [i1.RouterModule], exports: [RouterModule] });
14
+ ToolDomAng15RoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, decorators: [{
16
+ type: NgModule,
17
+ args: [{
18
+ imports: [RouterModule.forChild(routes)],
19
+ exports: [RouterModule],
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1kb20tYW5nMTUtcm91dGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b29sLWRvbS1hbmcxNS9zcmMvbGliL3Rvb2wtZG9tLWFuZzE1LXJvdXRpbmcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBRW5FLE1BQU0sTUFBTSxHQUFXO0lBQ25CLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Q0FDakQsQ0FBQztBQU1GLE1BQU0sT0FBTyx5QkFBeUI7O3VIQUF6Qix5QkFBeUI7d0hBQXpCLHlCQUF5Qix3Q0FGeEIsWUFBWTt3SEFFYix5QkFBeUIsWUFIeEIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDN0IsWUFBWTs0RkFFYix5QkFBeUI7a0JBSnJDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRvb2wtZG9tLWFuZzE1LXJvdXRpbmcubW9kdWxlLnRzXHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSwgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9vbERvbUFuZzE1Q29tcG9uZW50IH0gZnJvbSAnLi90b29sLWRvbS1hbmcxNS5jb21wb25lbnQnO1xyXG5cclxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAgICB7IHBhdGg6ICcnLCBjb21wb25lbnQ6IFRvb2xEb21BbmcxNUNvbXBvbmVudCB9LFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXHJcbiAgICBleHBvcnRzOiBbUm91dGVyTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvb2xEb21BbmcxNVJvdXRpbmdNb2R1bGUge31cclxuIl19
@@ -1,18 +1,19 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from "@angular/common";
3
+ import { ToolDomAng15RoutingModule } from './tool-dom-ang15-routing.module';
3
4
  import { ToolDomAng15Component } from './tool-dom-ang15.component';
4
5
  import * as i0 from "@angular/core";
5
6
  export class ToolDomAng15Module {
6
7
  }
7
8
  ToolDomAng15Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- ToolDomAng15Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, declarations: [ToolDomAng15Component], imports: [CommonModule], exports: [ToolDomAng15Component] });
9
- ToolDomAng15Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, imports: [CommonModule] });
9
+ ToolDomAng15Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, declarations: [ToolDomAng15Component], imports: [CommonModule, ToolDomAng15RoutingModule], exports: [ToolDomAng15Component] });
10
+ ToolDomAng15Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, imports: [CommonModule, ToolDomAng15RoutingModule] });
10
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, decorators: [{
11
12
  type: NgModule,
12
13
  args: [{
13
14
  declarations: [ToolDomAng15Component],
14
- imports: [CommonModule],
15
+ imports: [CommonModule, ToolDomAng15RoutingModule],
15
16
  exports: [ToolDomAng15Component]
16
17
  }]
17
18
  }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1kb20tYW5nMTUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9vbC1kb20tYW5nMTUvc3JjL2xpYi90b29sLWRvbS1hbmcxNS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7O0FBUWpFLE1BQU0sT0FBTyxrQkFBa0I7O2dIQUFsQixrQkFBa0I7aUhBQWxCLGtCQUFrQixpQkFKWixxQkFBcUIsYUFDMUIsWUFBWSxhQUNaLHFCQUFxQjtpSEFFdEIsa0JBQWtCLFlBSGpCLFlBQVk7NEZBR2Isa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQge1Rvb2xEb21BbmcxNUNvbXBvbmVudH0gZnJvbSAnLi90b29sLWRvbS1hbmcxNS5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtUb29sRG9tQW5nMTVDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgICBleHBvcnRzOiBbVG9vbERvbUFuZzE1Q29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9vbERvbUFuZzE1TW9kdWxlIHtcclxufVxyXG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1kb20tYW5nMTUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9vbC1kb20tYW5nMTUvc3JjL2xpYi90b29sLWRvbS1hbmcxNS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7O0FBUWpFLE1BQU0sT0FBTyxrQkFBa0I7O2dIQUFsQixrQkFBa0I7aUhBQWxCLGtCQUFrQixpQkFKWixxQkFBcUIsYUFDMUIsWUFBWSxFQUFFLHlCQUF5QixhQUN2QyxxQkFBcUI7aUhBRXRCLGtCQUFrQixZQUhqQixZQUFZLEVBQUUseUJBQXlCOzRGQUd4QyxrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSx5QkFBeUIsQ0FBQztvQkFDbEQsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5pbXBvcnQgeyBUb29sRG9tQW5nMTVSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi90b29sLWRvbS1hbmcxNS1yb3V0aW5nLm1vZHVsZSc7XHJcbmltcG9ydCB7VG9vbERvbUFuZzE1Q29tcG9uZW50fSBmcm9tICcuL3Rvb2wtZG9tLWFuZzE1LmNvbXBvbmVudCc7XHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1Rvb2xEb21BbmcxNUNvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUb29sRG9tQW5nMTVSb3V0aW5nTW9kdWxlXSxcclxuICAgIGV4cG9ydHM6IFtUb29sRG9tQW5nMTVDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb29sRG9tQW5nMTVNb2R1bGUge1xyXG59XHJcbiJdfQ==
@@ -4,6 +4,8 @@ import { __awaiter, __decorate, __param } from 'tslib';
4
4
  import * as i1 from '@angular/common';
5
5
  import { DOCUMENT, CommonModule } from '@angular/common';
6
6
  import { green } from 'tool-log';
7
+ import * as i1$1 from '@angular/router';
8
+ import { RouterModule } from '@angular/router';
7
9
 
8
10
  class ToolDomAng15Service {
9
11
  constructor() {
@@ -776,16 +778,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
776
778
  args: ['dynamicHost', { static: true }]
777
779
  }] } });
778
780
 
781
+ // tool-dom-ang15-routing.module.ts
782
+ const routes = [
783
+ { path: '', component: ToolDomAng15Component },
784
+ ];
785
+ class ToolDomAng15RoutingModule {
786
+ }
787
+ ToolDomAng15RoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
788
+ ToolDomAng15RoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, imports: [i1$1.RouterModule], exports: [RouterModule] });
789
+ ToolDomAng15RoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
790
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, decorators: [{
791
+ type: NgModule,
792
+ args: [{
793
+ imports: [RouterModule.forChild(routes)],
794
+ exports: [RouterModule],
795
+ }]
796
+ }] });
797
+
779
798
  class ToolDomAng15Module {
780
799
  }
781
800
  ToolDomAng15Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
782
- ToolDomAng15Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, declarations: [ToolDomAng15Component], imports: [CommonModule], exports: [ToolDomAng15Component] });
783
- ToolDomAng15Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, imports: [CommonModule] });
801
+ ToolDomAng15Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, declarations: [ToolDomAng15Component], imports: [CommonModule, ToolDomAng15RoutingModule], exports: [ToolDomAng15Component] });
802
+ ToolDomAng15Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, imports: [CommonModule, ToolDomAng15RoutingModule] });
784
803
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, decorators: [{
785
804
  type: NgModule,
786
805
  args: [{
787
806
  declarations: [ToolDomAng15Component],
788
- imports: [CommonModule],
807
+ imports: [CommonModule, ToolDomAng15RoutingModule],
789
808
  exports: [ToolDomAng15Component]
790
809
  }]
791
810
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"tool-dom-ang15.mjs","sources":["../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.service.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-element.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-class.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-style.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.html","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.module.ts","../../../projects/tool-dom-ang15/src/public-api.ts","../../../projects/tool-dom-ang15/src/tool-dom-ang15.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToolDomAng15Service {\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {DOCUMENT} from '@angular/common';\r\nimport {Inject} from '@angular/core';\r\n\r\nimport {TAllEvents, TSelector, TTypeAppend} from './dom.interface';\r\n\r\n\r\n/**\r\n * Предоставляет методы для манипуляции DOM элементами\r\n *\r\n * Класс включает функционал для:\r\n * - Создания элементов\r\n * - Добавления и удаления элементов из DOM\r\n * - Поиска элементов с повторными попытками\r\n * - Навигации по DOM дереву\r\n * - Работы с data-атрибутами\r\n */\r\nexport class DomElement {\r\n\r\n private _countGetElement = 0;\r\n\r\n constructor(@Inject(DOCUMENT) public document: Document) {\r\n }\r\n\r\n /**\r\n * Создает новый DOM элемент с указанным тегом и CSS классом\r\n *\r\n * @param tagName - HTML тег создаваемого элемента (div, span, button и т.д.)\r\n * @param className - CSS класс для элемента (опционально)\r\n * @returns Новый DOM элемент\r\n *\r\n * @example\r\n * const div = worker.createElement('div', 'container');\r\n * const span = worker.createElement('span');\r\n */\r\n createElement(tagName: string, className?: string): HTMLElement {\r\n const element = this.document.createElement(tagName);\r\n if (className) {\r\n element.className = className;\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * Создает и добавляет новый HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент, к которому будет добавлен новый\r\n * @param newElement - HTML тег создаваемого элемента\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param strInnerHTML - Внутреннее HTML содержимое (опционально)\r\n * @param dataId - Значение для атрибута data-id (опционально)\r\n * @param eventName - Тип события для добавления слушателя\r\n * @param fn - Функция-обработчик события (опционально)\r\n *\r\n * @example\r\n * worker.elementCreate(\r\n * this.document.body,\r\n * 'button',\r\n * 'appendChild',\r\n * 'Click me',\r\n * 123,\r\n * 'click',\r\n * () => console.log('Clicked')\r\n * );\r\n */\r\n elementCreate(\r\n parentElement: HTMLElement,\r\n newElement: string,\r\n typeAppend: TTypeAppend,\r\n strInnerHTML: string = '',\r\n dataId: number | string = '',\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null = null\r\n ): void {\r\n if (!parentElement || !newElement) {\r\n return;\r\n }\r\n\r\n const el$ = this.document.createElement(newElement);\r\n\r\n if (dataId !== null) {\r\n el$.setAttribute('data-id', String(dataId));\r\n }\r\n\r\n if (strInnerHTML) {\r\n el$.innerHTML = strInnerHTML;\r\n }\r\n\r\n this.elementAdd(parentElement, typeAppend, dataId, eventName, fn, el$);\r\n }\r\n\r\n /**\r\n * Добавляет существующий HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param dataId - Идентификатор для атрибута data-id\r\n * @param eventName - Тип события для слушателя\r\n * @param fn - Функция-обработчик события\r\n * @param el$ - Добавляемый DOM элемент\r\n *\r\n * @remarks\r\n * Если typeAppend равен 'insertBefore', элемент добавляется в начало родителя.\r\n * В противном случае элемент добавляется в конец.\r\n */\r\n elementAdd(\r\n parentElement: HTMLElement,\r\n typeAppend: TTypeAppend,\r\n dataId: number | string,\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null,\r\n el$: HTMLElement\r\n ): void {\r\n if ('firstChild' in parentElement) {\r\n if (typeAppend === 'insertBefore') {\r\n (parentElement as Node).insertBefore(el$, parentElement.firstChild);\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n\r\n if (fn) {\r\n el$.addEventListener(eventName, event => {\r\n fn.call(null, event, null, el$, dataId);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Удаляет HTML элемент из DOM\r\n *\r\n * @param parentElement - Родительский элемент, содержащий удаляемый элемент\r\n * @param el$ - Удаляемый DOM элемент\r\n *\r\n * @remarks\r\n * Метод безопасно завершается, если parentElement или el$ отсутствуют\r\n */\r\n elementRemove(parentElement: HTMLElement, el$: HTMLElement): void {\r\n if (parentElement && el$) {\r\n (parentElement as Node).removeChild(el$);\r\n }\r\n }\r\n\r\n /**\r\n * Асинхронно получает HTML элемент с повторными попытками\r\n *\r\n * @param identifier - Селектор для поиска элемента\r\n * @param selector - Метод поиска ('querySelector' или 'querySelectorAll')\r\n * @param node - DOM узел для поиска (по умолчанию this.document)\r\n * @param time - Задержка между попытками в мс (по умолчанию 300)\r\n * @param max - Максимальное количество попыток (по умолчанию 10)\r\n * @returns Промис с найденным DOM элементом\r\n *\r\n * @remarks\r\n * Метод полезен для ожидания появления динамически создаваемых элементов\r\n */\r\n async elementGet(\r\n identifier: string,\r\n selector: TSelector = 'querySelector',\r\n node: Document | HTMLElement | null = this.document,\r\n time: number = 300,\r\n max: number = 10\r\n ): Promise<HTMLElement> {\r\n let result = await this._getElementResult(identifier, selector, node, time);\r\n\r\n if ((!result || (result instanceof NodeList && result.length < 1)) && this._countGetElement < max) {\r\n this._countGetElement++;\r\n result = await this.elementGet(identifier, selector, node, time, max);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Находит элементы по data-атрибуту или его значению\r\n *\r\n * @param elementToSelect - Название data-атрибута (например, 'data-id')\r\n * @param dataValue - Значение атрибута для фильтрации (опционально)\r\n * @returns Массив найденных элементов\r\n * @throws {Error} Если elementToSelect не указан\r\n *\r\n * @example\r\n * // Найти все элементы с data-id\r\n * const items = worker.getElementByDataAttribute('data-id');\r\n *\r\n * // Найти элемент с конкретным значением\r\n * const item = worker.getElementByDataAttribute('data-id', '123');\r\n */\r\n getElementByDataAttribute(elementToSelect: string, dataValue: string | null = null): HTMLElement[] {\r\n if (!elementToSelect) {\r\n throw new Error('elementToSelect is required for getElementByDataAttribute');\r\n }\r\n const selector = dataValue ? `[${elementToSelect}='${dataValue}']` : `[${elementToSelect}]`;\r\n const elements = this.document.querySelectorAll(selector);\r\n return Array.from(elements) as HTMLElement[];\r\n }\r\n\r\n /**\r\n * Внутренний метод для получения элемента с задержкой\r\n *\r\n * @param identifier - Селектор элемента\r\n * @param selector - Метод поиска\r\n * @param node - Корневой узел\r\n * @param time - Время задержки в мс\r\n * @returns Промис с результатом поиска\r\n * @private\r\n */\r\n private async _getElementResult(\r\n identifier: string,\r\n selector: TSelector,\r\n node: Document | HTMLElement | null,\r\n time: number\r\n ): Promise<HTMLElement> {\r\n return this._setDelay(time)\r\n .then(_ => {\r\n if (!node) {\r\n return null;\r\n }\r\n // Используем type assertion для вызова метода\r\n const result = (node as any)[selector](identifier);\r\n return result || null;\r\n })\r\n .catch(error => console.log('Ошибка в _getElementResult', error));\r\n }\r\n\r\n /**\r\n * Создает Promise с задержкой\r\n *\r\n * @param ms - Время задержки в миллисекундах\r\n * @returns Promise, который разрешается через указанное время\r\n * @private\r\n */\r\n private _setDelay(ms: number): Promise<unknown> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Возвращает размеры элемента и его положение относительно viewport\r\n *\r\n * @param element - Целевой DOM элемент\r\n * @returns DOMRect объект с координатами (top, left, right, bottom) и размерами (width, height)\r\n * @throws {Error} Если element не указан\r\n *\r\n * @example\r\n * const rect = worker.getCoordinates(buttonElement);\r\n * console.log(rect.top, rect.left, rect.width);\r\n */\r\n getCoordinates(element: HTMLElement): DOMRect {\r\n if (!element) {\r\n throw new Error('Element is required for getCoordinates');\r\n }\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n /**\r\n * Возвращает родительский элемент указанного DOM узла\r\n *\r\n * @param el - DOM элемент или NodeList\r\n * @returns Родительский элемент или null, если родителя нет\r\n */\r\n elementGetParent(el: Element | NodeList): Node & ParentNode | null {\r\n if (el && 'parentNode' in el) {\r\n return el.parentNode as Node & ParentNode;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Возвращает все соседние элементы (включая сам элемент)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив всех элементов в текущей ветке DOM дерева\r\n *\r\n * @remarks\r\n * Метод собирает все элементы на одном уровне вложенности\r\n */\r\n elementsGetSiblingAll(el: Element | NodeList): Element[] {\r\n if (el && 'parentNode' in el) {\r\n const parent = el.parentNode as Node & ParentNode;\r\n const firstElement = parent.firstChild as Element;\r\n return this.elementGetSiblingNext(firstElement);\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Возвращает все следующие соседние элементы (nextElementSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив элементов, начиная с указанного и включая все следующие\r\n *\r\n * @example\r\n * const nextElements = worker.elementGetSiblingNext(currentElement);\r\n * // Возвращает [currentElement, nextElement, nextNextElement, ...]\r\n */\r\n elementGetSiblingNext(el: Element | NodeList): Element[] {\r\n const result: Element[] = [];\r\n\r\n while (el) {\r\n if ('nextElementSibling' in el) {\r\n result.push(el as Element);\r\n el = (el as Element).nextElementSibling as Element;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все предыдущие соседние элементы (previousSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив предыдущих элементов\r\n *\r\n * @remarks\r\n * Возвращает все элементы, включая указанный, в обратном порядке\r\n */\r\n elementGetSiblingPrevious(el: Element | NodeList | Node): Element[] {\r\n const result: Element[] = [];\r\n let current: Node | null = el as Node;\r\n\r\n while (current) {\r\n result.push(current as Element);\r\n current = current.previousSibling;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все прямые дочерние элементы указанного родителя\r\n *\r\n * @param el - Родительский DOM элемент\r\n * @returns Массив дочерних элементов\r\n *\r\n * @example\r\n * const children = worker.elementGetChildren(parentElement);\r\n * children.forEach(child => console.log(child.tagName));\r\n */\r\n elementGetChildren(el: Element): Element[] {\r\n return Array.from(el.children) as Element[];\r\n }\r\n}\r\n","import {ElementRef, Inject} from '@angular/core';\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport {DomElement} from \"./dom-element\";\r\n\r\n/**\r\n * Класс для работы с классами DOM\r\n */\r\nexport class DomClass {\r\n public dom: DomElement;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) public document: Document,\r\n ) {\r\n this.dom = new DomElement(this.document)\r\n }\r\n\r\n //region Управление классами\r\n /**\r\n * Проверяет наличие класса у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс присутствует\r\n */\r\n hasClass(element: HTMLElement, className: string): boolean {\r\n return !!(className && element?.classList.contains(className));\r\n }\r\n\r\n /**\r\n * Добавляет класс элементу\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс добавили\r\n */\r\n addClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.add(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Массовое добавление CSS-классов\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param classNames - Массив названий CSS-классов для добавления\r\n */\r\n addClasses(element: HTMLElement | null, classNames: string[]): void {\r\n if (!element || !classNames || classNames.length === 0) {\r\n return;\r\n }\r\n\r\n classNames.forEach(className => {\r\n if (className && className.trim() !== '') {\r\n this.addClass(element, className.trim());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n * Классы генерируются для всех направлений (top, right, bottom, left).\r\n *\r\n * @param elementRef - Элемент для которого будут создаваться классы.\r\n * @param {number[]} arrVars - Значения для генерации классов.\r\n *\r\n */\r\n addClassMarginPadding(elementRef: ElementRef<HTMLElement>, arrVars: number[] = []): void {\r\n const root = this.dom.elementGetParent(elementRef.nativeElement);\r\n\r\n if (!root) {\r\n console.error('Root element not found');\r\n return;\r\n }\r\n\r\n const properties = ['m', 'p']; // margin, padding\r\n const directions = ['t', 'r', 'b', 'l']; // top, right, bottom, left\r\n let style = this.document.querySelector('style[data-dynamic-style]');\r\n\r\n if (!style) {\r\n style = this.document.createElement('style');\r\n style.setAttribute('data-dynamic-style', '');\r\n root.appendChild(style);\r\n }\r\n\r\n let cssContent = '';\r\n\r\n // Добавляем классы для arrVars (если массив не пустой)\r\n if (arrVars && arrVars.length > 0) {\r\n arrVars.forEach(value => {\r\n properties.forEach(prop => {\r\n directions.forEach(dir => {\r\n const className = `.evo-${prop}${dir}-${value}`;\r\n const cssProperty = prop === 'm' ? 'margin' : 'padding';\r\n const cssDirection = this._getCssDirection(dir);\r\n\r\n cssContent += `${className} { ${cssProperty}-${cssDirection}: var(--evo${value}); }\\n`;\r\n });\r\n });\r\n });\r\n }\r\n\r\n style.textContent = cssContent;\r\n }\r\n\r\n /**\r\n * Удаление всех классов созданных в addClassMarginPadding (<style data-dynamic-style=\"\">)\r\n * @see {@link addClassMarginPadding} - Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n */\r\n deleteClassMarginPadding(): void {\r\n this.document.querySelector('style[data-dynamic-style]')?.remove();\r\n }\r\n\r\n /**\r\n * Удаляет класс у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс был удален\r\n */\r\n removeClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.remove(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Переключает CSS-класс у корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param className - Название CSS-класса для переключения\r\n * @param force - Принудительно установить или удалить класс (true - добавить, false - удалить)\r\n */\r\n toggleClass(element: HTMLElement | null, className: string, force?: boolean): void {\r\n if (!element || !className) {\r\n return;\r\n }\r\n\r\n const trimmedClassName = className.trim();\r\n\r\n if (force !== undefined) {\r\n if (force) {\r\n this.addClass(element, trimmedClassName);\r\n } else {\r\n this.removeClass(element, trimmedClassName);\r\n }\r\n } else {\r\n // Переключаем на основе текущего состояния\r\n if (this.hasClass(element, trimmedClassName)) {\r\n this.removeClass(element, trimmedClassName);\r\n } else {\r\n this.addClass(element, trimmedClassName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает массив всех CSS-классов корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n *\r\n * @returns Массив названий CSS-классов\r\n */\r\n getClasses(element: HTMLElement | null): string[] {\r\n if (element) {\r\n // Получаем актуальные классы с элемента\r\n return Array.from(element.classList);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Удаляет все CSS-классы у корневого элемента и очищает кэш\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n */\r\n clearClasses(element: HTMLElement | null): void {\r\n // Удаляем все классы с элемента\r\n if (element) {\r\n element.className = '';\r\n }\r\n }\r\n\r\n //endregion\r\n\r\n //region Приватные методы\r\n\r\n /**\r\n * Преобразует сокращенное направление (t, r, b, l) в полное название CSS-свойства.\r\n *\r\n * @param {string} dir - Сокращенное направление (t, r, b, l).\r\n * @returns {string} Полное название направления (top, right, bottom, left).\r\n */\r\n private _getCssDirection(dir: string): string {\r\n switch (dir) {\r\n case 't':\r\n return 'top';\r\n case 'r':\r\n return 'right';\r\n case 'b':\r\n return 'bottom';\r\n case 'l':\r\n return 'left';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n //endregion\r\n}\r\n","/**\r\n * Класс для работы с DOM элементами\r\n */\r\n\r\nexport class DomStyle {\r\n //region Управление стилями\r\n\r\n\r\n applyStyleProperty(element: HTMLElement | null, property: string, value: string): void {\r\n if (!element || !property || !value) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Применяем к элементу\r\n element.style.setProperty(trimmedProperty, value);\r\n }\r\n\r\n removeStyle(element: HTMLElement | null, property: string): void {\r\n if (!element || !property) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Удаляем из элемента\r\n element.style.removeProperty(trimmedProperty);\r\n }\r\n\r\n getStyle(element: HTMLElement | null, property: string): string | null {\r\n if (!element || !property) {\r\n return null;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Или получаем непосредственно с элемента\r\n return element.style.getPropertyValue(trimmedProperty) || null;\r\n }\r\n\r\n /**\r\n * Применение CSS-стилей через строку\r\n *\r\n * !!! очень осторожно так как метод стирает старое и присваивает значение для cssText\r\n *\r\n * @param {HTMLElement} element - элемент\r\n * @param stringStyles - строка со стилями\r\n *\r\n * @example\r\n * const root = document.documentElement as any;\r\n * const styles = `--big-page-width:${width}; --z-index: ${zIndex}`;\r\n *\r\n * this.setStylesString(root, styles);\r\n */\r\n // public setStylesString(element: HTMLElement | null, stringStyles: string | null): void {\r\n // if (!element || !stringStyles) return;\r\n //\r\n // element.style.cssText = stringStyles;\r\n // }\r\n\r\n //endregion\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n Inject,\r\n OnInit,\r\n ViewChild,\r\n AfterViewInit,\r\n} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common';\r\n\r\nimport {DomClass} from './dom/dom-class';\r\nimport {DomElement} from './dom/dom-element';\r\nimport {DomStyle} from './dom/dom-style';\r\n\r\nimport {green} from 'tool-log'\r\n\r\n@Component({\r\n selector: 'lib-tool-dom-ang15',\r\n templateUrl: './tool-dom-ang15.component.html',\r\n styleUrls: ['./tool-dom-ang15.component.scss'],\r\n})\r\nexport class ToolDomAng15Component implements OnInit, AfterViewInit {\r\n\r\n /** Ссылка на контейнер-песочницу (корень для addClassMarginPadding) */\r\n @ViewChild('sandbox', {static: true}) sandboxRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на целевой элемент для манипуляций классами/стилями */\r\n @ViewChild('target', {static: true}) targetRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на контейнер для динамически создаваемых элементов */\r\n @ViewChild('dynamicHost', {static: true}) dynamicHostRef!: ElementRef<HTMLElement>;\r\n\r\n /** Лог операций */\r\n public logHtml: string[] = [];\r\n\r\n /** Публичные экземпляры сервисов */\r\n public dom!: DomElement;\r\n public cls!: DomClass;\r\n public style!: DomStyle;\r\n\r\n /** Счётчик созданных элементов */\r\n private _createdCounter = 0;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document) {\r\n }\r\n\r\n ngOnInit(): void {\r\n // Инициализация — DomClass зависит от DomElement\r\n this.dom = new DomElement(this.document);\r\n this.cls = new DomClass(this.document);\r\n this.style = new DomStyle();\r\n\r\n this._log('✅ ToolDomComponent: сервисы инициализированы');\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._log('✅ ToolDomComponent: view инициализирован, DOM доступен');\r\n\r\n }\r\n\r\n // ============================================================\r\n // DOM ELEMENT — демонстрации\r\n // ============================================================\r\n\r\n /** createElement */\r\n demoCreateElement(): void {\r\n const el = this.dom.createElement('div', 'created-box');\r\n el.textContent = `createElement #${++this._createdCounter}`;\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n this._log(`createElement → <div class=\"created-box\">`);\r\n }\r\n\r\n /** elementCreate (создание + вставка + событие) */\r\n demoElementCreate(): void {\r\n this.dom.elementCreate(\r\n this.dynamicHostRef.nativeElement,\r\n 'button',\r\n 'appendChild',\r\n `Кнопка #${++this._createdCounter} — кликни меня`,\r\n `btn-${this._createdCounter}`,\r\n 'click',\r\n () => green('demoElementCreate')\r\n );\r\n this._log('elementCreate → <button> c обработчиком click');\r\n }\r\n\r\n /** elementAdd (вставка существующего) */\r\n demoElementAdd(): void {\r\n const el = this.dom.createElement('span', 'added-span');\r\n el.textContent = ` insertBefore #${++this._createdCounter} `;\r\n\r\n this.dom.elementAdd(\r\n this.dynamicHostRef.nativeElement,\r\n 'insertBefore',\r\n 'span-x',\r\n 'mouseenter',\r\n () => this._log('🖱 mouseenter на вставленном <span>'),\r\n el\r\n );\r\n this._log('elementAdd → insertBefore <span>');\r\n }\r\n\r\n /** elementRemove */\r\n demoElementRemove(): void {\r\n const host = this.dynamicHostRef.nativeElement;\r\n const last = host.lastElementChild as HTMLElement;\r\n if (last) {\r\n this.dom.elementRemove(host, last);\r\n this._log(`elementRemove → удалён <${last.tagName.toLowerCase()}>`);\r\n } else {\r\n this._log('elementRemove → нечего удалять');\r\n }\r\n }\r\n\r\n /** elementGet (асинхронный поиск с повторными попытками) */\r\n async demoElementGet(): Promise<void> {\r\n this._log('elementGet → ждём появления .appears-later ...');\r\n\r\n // Создадим элемент через 1 секунду\r\n setTimeout(() => {\r\n const el = this.dom.createElement('div', 'appears-later');\r\n el.textContent = 'Я появился позже!';\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n }, 1000);\r\n\r\n const found = await this.dom.elementGet('.appears-later');\r\n this._log(`elementGet → найден: \"${found?.textContent ?? 'null'}\"`);\r\n }\r\n\r\n /** getElementByDataAttribute */\r\n demoGetByDataAttr(): void {\r\n const all = this.dom.getElementByDataAttribute('data-id');\r\n this._log(`getElementByDataAttribute('data-id') → найдено: ${all.length}`);\r\n\r\n if (all.length) {\r\n const first = this.dom.getElementByDataAttribute('data-id', all[0].dataset['id']!);\r\n this._log(`getElementByDataAttribute('data-id', '${all[0].dataset['id']}') → найдено: ${first.length}`);\r\n }\r\n }\r\n\r\n /** getCoordinates */\r\n demoGetCoordinates(): void {\r\n const rect = this.dom.getCoordinates(this.targetRef.nativeElement);\r\n this._log(\r\n `getCoordinates → top=${rect.top.toFixed(1)}, left=${rect.left.toFixed(1)}, ` +\r\n `w=${rect.width.toFixed(1)}, h=${rect.height.toFixed(1)}`\r\n );\r\n }\r\n\r\n /** elementGetParent */\r\n demoGetParent(): void {\r\n const parent = this.dom.elementGetParent(this.targetRef.nativeElement);\r\n this._log(\r\n `elementGetParent → <${parent && 'tagName' in parent ? (parent as HTMLElement).tagName.toLowerCase() : 'null'}>`\r\n );\r\n }\r\n\r\n /** elementsGetSiblingAll */\r\n demoSiblingsAll(): void {\r\n const all = this.dom.elementsGetSiblingAll(this.targetRef.nativeElement);\r\n this._log(`elementsGetSiblingAll → ${all.length} элемент(ов): ${all.map(e => e.tagName.toLowerCase()).join(', ')}`);\r\n }\r\n\r\n /** elementGetSiblingNext */\r\n demoSiblingsNext(): void {\r\n const next = this.dom.elementGetSiblingNext(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingNext → ${next.length} элемент(ов)`);\r\n }\r\n\r\n /** elementGetSiblingPrevious */\r\n demoSiblingsPrevious(): void {\r\n const prev = this.dom.elementGetSiblingPrevious(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingPrevious → ${prev.length} узел(ов) (включая текстовые)`);\r\n }\r\n\r\n /** elementGetChildren */\r\n demoGetChildren(): void {\r\n const kids = this.dom.elementGetChildren(this.dynamicHostRef.nativeElement);\r\n this._log(`elementGetChildren → ${kids.length} дочерних элемент(ов)`);\r\n }\r\n\r\n // ============================================================\r\n // DOM CLASS — демонстрации\r\n // ============================================================\r\n\r\n /** hasClass */\r\n demoHasClass(): void {\r\n const has = this.cls.hasClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`hasClass('demo-active') → ${has}`);\r\n }\r\n\r\n /** addClass */\r\n demoAddClass(): void {\r\n const ok = this.cls.addClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`addClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** addClasses (массово) */\r\n demoAddClasses(): void {\r\n this.cls.addClasses(this.targetRef.nativeElement, ['demo-a', 'demo-b', 'demo-c']);\r\n this._log('addClasses([demo-a, demo-b, demo-c]) → добавлены');\r\n }\r\n\r\n /** addClassMarginPadding — генерация утилит отступов */\r\n demoAddClassMarginPadding(): void {\r\n // Генерируем классы для значений 1..5 (соответствуют var(--evo1..5))\r\n this.cls.addClassMarginPadding(this.sandboxRef, [1, 2, 3, 4, 5]);\r\n\r\n // Применим один из сгенерированных классов\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-mt-2');\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-pl-3');\r\n\r\n this._log('addClassMarginPadding → сгенерированы .evo-{m|p}{t|r|b|l}-{1..5}, применены evo-mt-2, evo-pl-3');\r\n }\r\n\r\n /** deleteClassMarginPadding */\r\n demoDeleteClassMarginPadding(): void {\r\n this.cls.deleteClassMarginPadding();\r\n this._log('deleteClassMarginPadding → <style data-dynamic-style> удалён');\r\n }\r\n\r\n /** removeClass */\r\n demoRemoveClass(): void {\r\n const ok = this.cls.removeClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`removeClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** toggleClass */\r\n demoToggleClass(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-toggled');\r\n this._log(`toggleClass('demo-toggled') → сейчас: ${this.cls.hasClass(this.targetRef.nativeElement, 'demo-toggled')}`);\r\n }\r\n\r\n /** toggleClass с force */\r\n demoToggleForce(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-forced', true);\r\n this._log(\"toggleClass('demo-forced', true) → принудительно добавлен\");\r\n }\r\n\r\n /** getClasses */\r\n demoGetClasses(): void {\r\n const list = this.cls.getClasses(this.targetRef.nativeElement);\r\n this._log(`getClasses → [${list.join(', ')}]`);\r\n }\r\n\r\n /** clearClasses */\r\n demoClearClasses(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this._log('clearClasses → все классы удалены');\r\n }\r\n\r\n // ============================================================\r\n // DOM STYLE — демонстрации\r\n // ============================================================\r\n\r\n /** applyStyleProperty */\r\n demoApplyStyle(): void {\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'background-color', '#ffe08a');\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'border', '2px dashed #d97706');\r\n this._log(\"applyStyleProperty → 'background-color', 'border'\");\r\n }\r\n\r\n /** getStyle */\r\n demoGetStyle(): void {\r\n const bg = this.style.getStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(`getStyle('background-color') → \"${bg ?? 'null'}\"`);\r\n }\r\n\r\n /** removeStyle */\r\n demoRemoveStyle(): void {\r\n this.style.removeStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(\"removeStyle('background-color') → удалён\");\r\n }\r\n\r\n // ============================================================\r\n // Сброс / утилиты\r\n // ============================================================\r\n\r\n /** Полный сброс состояния песочницы */\r\n resetAll(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this.targetRef.nativeElement.removeAttribute('style');\r\n\r\n const host = this.dynamicHostRef.nativeElement;\r\n while (host.firstChild) {\r\n host.removeChild(host.firstChild);\r\n }\r\n\r\n this.cls.deleteClassMarginPadding();\r\n this._createdCounter = 0;\r\n\r\n this._log('🧹 Сброс: классы, стили, динамические элементы, dynamic-style');\r\n }\r\n\r\n /** Очистить лог */\r\n clearLog(): void {\r\n this.logHtml = [];\r\n }\r\n\r\n /** Внутреннее логирование */\r\n private _log(message: string): void {\r\n const time = new Date().toLocaleTimeString();\r\n\r\n this.logHtml.unshift(`[${time}] ${message}`);\r\n\r\n if (this.logHtml.length > 200) {\r\n this.logHtml.length = 200;\r\n }\r\n // eslint-disable-next-line no-console\r\n console.log(message);\r\n }\r\n}\r\n","<div class=\"playground\">\r\n\r\n <header class=\"playground__header\">\r\n <h1>DOM Playground</h1>\r\n <p>Демонстрация всех методов <code>DomClass</code>, <code>DomElement</code>, <code>DomStyle</code></p>\r\n </header>\r\n\r\n <main class=\"playground__body\">\r\n\r\n <!-- ЛЕВАЯ КОЛОНКА: элементы и кнопки -->\r\n <section class=\"playground__panel\">\r\n\r\n <!-- Песочница — корень для addClassMarginPadding -->\r\n <div #sandbox class=\"sandbox\">\r\n <h2>Песочница</h2>\r\n\r\n <!-- Целевой элемент для классов и стилей -->\r\n <div #target class=\"target\">\r\n 🎯 target — применяем классы и стили\r\n </div>\r\n\r\n <!-- Контейнер для динамически создаваемых элементов -->\r\n <div #dynamicHost class=\"dynamic-host\">\r\n <span>динамические элементы ↓</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomElement -->\r\n <div class=\"group\">\r\n <h3>DomElement</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoCreateElement()\">createElement</button>\r\n <button (click)=\"demoElementCreate()\">elementCreate</button>\r\n <button (click)=\"demoElementAdd()\">elementAdd</button>\r\n <button (click)=\"demoElementRemove()\">elementRemove</button>\r\n <button (click)=\"demoElementGet()\">elementGet</button>\r\n <button (click)=\"demoGetByDataAttr()\">getElementByDataAttribute</button>\r\n <button (click)=\"demoGetCoordinates()\">getCoordinates</button>\r\n <button (click)=\"demoGetParent()\">elementGetParent</button>\r\n <button (click)=\"demoSiblingsAll()\">elementsGetSiblingAll</button>\r\n <button (click)=\"demoSiblingsNext()\">elementGetSiblingNext</button>\r\n <button (click)=\"demoSiblingsPrevious()\">elementGetSiblingPrevious</button>\r\n <button (click)=\"demoGetChildren()\">elementGetChildren</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomClass -->\r\n <div class=\"group\">\r\n <h3>DomClass</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoHasClass()\">hasClass</button>\r\n <button (click)=\"demoAddClass()\">addClass</button>\r\n <button (click)=\"demoAddClasses()\">addClasses</button>\r\n <button (click)=\"demoAddClassMarginPadding()\">addClassMarginPadding</button>\r\n <button (click)=\"demoDeleteClassMarginPadding()\">deleteClassMarginPadding</button>\r\n <button (click)=\"demoRemoveClass()\">removeClass</button>\r\n <button (click)=\"demoToggleClass()\">toggleClass</button>\r\n <button (click)=\"demoToggleForce()\">toggleClass(force=true)</button>\r\n <button (click)=\"demoGetClasses()\">getClasses</button>\r\n <button (click)=\"demoClearClasses()\">clearClasses</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomStyle -->\r\n <div class=\"group\">\r\n <h3>DomStyle</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoApplyStyle()\">applyStyleProperty</button>\r\n <button (click)=\"demoGetStyle()\">getStyle</button>\r\n <button (click)=\"demoRemoveStyle()\">removeStyle</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"group\">\r\n <div class=\"group__btns\">\r\n <button class=\"btn-reset\" (click)=\"resetAll()\">🧹 Reset All</button>\r\n <button class=\"btn-clear\" (click)=\"clearLog()\">Clear Log</button>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <!-- ПРАВАЯ КОЛОНКА: лог -->\r\n <aside class=\"playground__log\">\r\n <h2>Лог операций</h2>\r\n <ul>\r\n <li *ngFor=\"let item of logHtml\">{{ item }}</li>\r\n </ul>\r\n <p *ngIf=\"!logHtml.length\" class=\"empty\">Пока пусто — жми кнопки слева.</p>\r\n </aside>\r\n\r\n </main>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {ToolDomAng15Component} from './tool-dom-ang15.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [ToolDomAng15Component],\r\n imports: [CommonModule],\r\n exports: [ToolDomAng15Component]\r\n})\r\nexport class ToolDomAng15Module {\r\n}\r\n","/*\r\n * Public API Surface of tool-dom-ang15\r\n */\r\n\r\nexport * from './lib/tool-dom-ang15.service';\r\nexport * from './lib/tool-dom-ang15.component';\r\nexport * from './lib/tool-dom-ang15.module';\r\n\r\n// 👇 добавляем экспорт DOM-утилит\r\nexport * from './lib/dom/dom-element';\r\nexport * from './lib/dom/dom-class';\r\nexport * from './lib/dom/dom-style';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-dom-ang15.mjs","sources":["../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.service.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-element.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-class.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-style.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.html","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15-routing.module.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.module.ts","../../../projects/tool-dom-ang15/src/public-api.ts","../../../projects/tool-dom-ang15/src/tool-dom-ang15.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToolDomAng15Service {\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {DOCUMENT} from '@angular/common';\r\nimport {Inject} from '@angular/core';\r\n\r\nimport {TAllEvents, TSelector, TTypeAppend} from './dom.interface';\r\n\r\n\r\n/**\r\n * Предоставляет методы для манипуляции DOM элементами\r\n *\r\n * Класс включает функционал для:\r\n * - Создания элементов\r\n * - Добавления и удаления элементов из DOM\r\n * - Поиска элементов с повторными попытками\r\n * - Навигации по DOM дереву\r\n * - Работы с data-атрибутами\r\n */\r\nexport class DomElement {\r\n\r\n private _countGetElement = 0;\r\n\r\n constructor(@Inject(DOCUMENT) public document: Document) {\r\n }\r\n\r\n /**\r\n * Создает новый DOM элемент с указанным тегом и CSS классом\r\n *\r\n * @param tagName - HTML тег создаваемого элемента (div, span, button и т.д.)\r\n * @param className - CSS класс для элемента (опционально)\r\n * @returns Новый DOM элемент\r\n *\r\n * @example\r\n * const div = worker.createElement('div', 'container');\r\n * const span = worker.createElement('span');\r\n */\r\n createElement(tagName: string, className?: string): HTMLElement {\r\n const element = this.document.createElement(tagName);\r\n if (className) {\r\n element.className = className;\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * Создает и добавляет новый HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент, к которому будет добавлен новый\r\n * @param newElement - HTML тег создаваемого элемента\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param strInnerHTML - Внутреннее HTML содержимое (опционально)\r\n * @param dataId - Значение для атрибута data-id (опционально)\r\n * @param eventName - Тип события для добавления слушателя\r\n * @param fn - Функция-обработчик события (опционально)\r\n *\r\n * @example\r\n * worker.elementCreate(\r\n * this.document.body,\r\n * 'button',\r\n * 'appendChild',\r\n * 'Click me',\r\n * 123,\r\n * 'click',\r\n * () => console.log('Clicked')\r\n * );\r\n */\r\n elementCreate(\r\n parentElement: HTMLElement,\r\n newElement: string,\r\n typeAppend: TTypeAppend,\r\n strInnerHTML: string = '',\r\n dataId: number | string = '',\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null = null\r\n ): void {\r\n if (!parentElement || !newElement) {\r\n return;\r\n }\r\n\r\n const el$ = this.document.createElement(newElement);\r\n\r\n if (dataId !== null) {\r\n el$.setAttribute('data-id', String(dataId));\r\n }\r\n\r\n if (strInnerHTML) {\r\n el$.innerHTML = strInnerHTML;\r\n }\r\n\r\n this.elementAdd(parentElement, typeAppend, dataId, eventName, fn, el$);\r\n }\r\n\r\n /**\r\n * Добавляет существующий HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param dataId - Идентификатор для атрибута data-id\r\n * @param eventName - Тип события для слушателя\r\n * @param fn - Функция-обработчик события\r\n * @param el$ - Добавляемый DOM элемент\r\n *\r\n * @remarks\r\n * Если typeAppend равен 'insertBefore', элемент добавляется в начало родителя.\r\n * В противном случае элемент добавляется в конец.\r\n */\r\n elementAdd(\r\n parentElement: HTMLElement,\r\n typeAppend: TTypeAppend,\r\n dataId: number | string,\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null,\r\n el$: HTMLElement\r\n ): void {\r\n if ('firstChild' in parentElement) {\r\n if (typeAppend === 'insertBefore') {\r\n (parentElement as Node).insertBefore(el$, parentElement.firstChild);\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n\r\n if (fn) {\r\n el$.addEventListener(eventName, event => {\r\n fn.call(null, event, null, el$, dataId);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Удаляет HTML элемент из DOM\r\n *\r\n * @param parentElement - Родительский элемент, содержащий удаляемый элемент\r\n * @param el$ - Удаляемый DOM элемент\r\n *\r\n * @remarks\r\n * Метод безопасно завершается, если parentElement или el$ отсутствуют\r\n */\r\n elementRemove(parentElement: HTMLElement, el$: HTMLElement): void {\r\n if (parentElement && el$) {\r\n (parentElement as Node).removeChild(el$);\r\n }\r\n }\r\n\r\n /**\r\n * Асинхронно получает HTML элемент с повторными попытками\r\n *\r\n * @param identifier - Селектор для поиска элемента\r\n * @param selector - Метод поиска ('querySelector' или 'querySelectorAll')\r\n * @param node - DOM узел для поиска (по умолчанию this.document)\r\n * @param time - Задержка между попытками в мс (по умолчанию 300)\r\n * @param max - Максимальное количество попыток (по умолчанию 10)\r\n * @returns Промис с найденным DOM элементом\r\n *\r\n * @remarks\r\n * Метод полезен для ожидания появления динамически создаваемых элементов\r\n */\r\n async elementGet(\r\n identifier: string,\r\n selector: TSelector = 'querySelector',\r\n node: Document | HTMLElement | null = this.document,\r\n time: number = 300,\r\n max: number = 10\r\n ): Promise<HTMLElement> {\r\n let result = await this._getElementResult(identifier, selector, node, time);\r\n\r\n if ((!result || (result instanceof NodeList && result.length < 1)) && this._countGetElement < max) {\r\n this._countGetElement++;\r\n result = await this.elementGet(identifier, selector, node, time, max);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Находит элементы по data-атрибуту или его значению\r\n *\r\n * @param elementToSelect - Название data-атрибута (например, 'data-id')\r\n * @param dataValue - Значение атрибута для фильтрации (опционально)\r\n * @returns Массив найденных элементов\r\n * @throws {Error} Если elementToSelect не указан\r\n *\r\n * @example\r\n * // Найти все элементы с data-id\r\n * const items = worker.getElementByDataAttribute('data-id');\r\n *\r\n * // Найти элемент с конкретным значением\r\n * const item = worker.getElementByDataAttribute('data-id', '123');\r\n */\r\n getElementByDataAttribute(elementToSelect: string, dataValue: string | null = null): HTMLElement[] {\r\n if (!elementToSelect) {\r\n throw new Error('elementToSelect is required for getElementByDataAttribute');\r\n }\r\n const selector = dataValue ? `[${elementToSelect}='${dataValue}']` : `[${elementToSelect}]`;\r\n const elements = this.document.querySelectorAll(selector);\r\n return Array.from(elements) as HTMLElement[];\r\n }\r\n\r\n /**\r\n * Внутренний метод для получения элемента с задержкой\r\n *\r\n * @param identifier - Селектор элемента\r\n * @param selector - Метод поиска\r\n * @param node - Корневой узел\r\n * @param time - Время задержки в мс\r\n * @returns Промис с результатом поиска\r\n * @private\r\n */\r\n private async _getElementResult(\r\n identifier: string,\r\n selector: TSelector,\r\n node: Document | HTMLElement | null,\r\n time: number\r\n ): Promise<HTMLElement> {\r\n return this._setDelay(time)\r\n .then(_ => {\r\n if (!node) {\r\n return null;\r\n }\r\n // Используем type assertion для вызова метода\r\n const result = (node as any)[selector](identifier);\r\n return result || null;\r\n })\r\n .catch(error => console.log('Ошибка в _getElementResult', error));\r\n }\r\n\r\n /**\r\n * Создает Promise с задержкой\r\n *\r\n * @param ms - Время задержки в миллисекундах\r\n * @returns Promise, который разрешается через указанное время\r\n * @private\r\n */\r\n private _setDelay(ms: number): Promise<unknown> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Возвращает размеры элемента и его положение относительно viewport\r\n *\r\n * @param element - Целевой DOM элемент\r\n * @returns DOMRect объект с координатами (top, left, right, bottom) и размерами (width, height)\r\n * @throws {Error} Если element не указан\r\n *\r\n * @example\r\n * const rect = worker.getCoordinates(buttonElement);\r\n * console.log(rect.top, rect.left, rect.width);\r\n */\r\n getCoordinates(element: HTMLElement): DOMRect {\r\n if (!element) {\r\n throw new Error('Element is required for getCoordinates');\r\n }\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n /**\r\n * Возвращает родительский элемент указанного DOM узла\r\n *\r\n * @param el - DOM элемент или NodeList\r\n * @returns Родительский элемент или null, если родителя нет\r\n */\r\n elementGetParent(el: Element | NodeList): Node & ParentNode | null {\r\n if (el && 'parentNode' in el) {\r\n return el.parentNode as Node & ParentNode;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Возвращает все соседние элементы (включая сам элемент)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив всех элементов в текущей ветке DOM дерева\r\n *\r\n * @remarks\r\n * Метод собирает все элементы на одном уровне вложенности\r\n */\r\n elementsGetSiblingAll(el: Element | NodeList): Element[] {\r\n if (el && 'parentNode' in el) {\r\n const parent = el.parentNode as Node & ParentNode;\r\n const firstElement = parent.firstChild as Element;\r\n return this.elementGetSiblingNext(firstElement);\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Возвращает все следующие соседние элементы (nextElementSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив элементов, начиная с указанного и включая все следующие\r\n *\r\n * @example\r\n * const nextElements = worker.elementGetSiblingNext(currentElement);\r\n * // Возвращает [currentElement, nextElement, nextNextElement, ...]\r\n */\r\n elementGetSiblingNext(el: Element | NodeList): Element[] {\r\n const result: Element[] = [];\r\n\r\n while (el) {\r\n if ('nextElementSibling' in el) {\r\n result.push(el as Element);\r\n el = (el as Element).nextElementSibling as Element;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все предыдущие соседние элементы (previousSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив предыдущих элементов\r\n *\r\n * @remarks\r\n * Возвращает все элементы, включая указанный, в обратном порядке\r\n */\r\n elementGetSiblingPrevious(el: Element | NodeList | Node): Element[] {\r\n const result: Element[] = [];\r\n let current: Node | null = el as Node;\r\n\r\n while (current) {\r\n result.push(current as Element);\r\n current = current.previousSibling;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все прямые дочерние элементы указанного родителя\r\n *\r\n * @param el - Родительский DOM элемент\r\n * @returns Массив дочерних элементов\r\n *\r\n * @example\r\n * const children = worker.elementGetChildren(parentElement);\r\n * children.forEach(child => console.log(child.tagName));\r\n */\r\n elementGetChildren(el: Element): Element[] {\r\n return Array.from(el.children) as Element[];\r\n }\r\n}\r\n","import {ElementRef, Inject} from '@angular/core';\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport {DomElement} from \"./dom-element\";\r\n\r\n/**\r\n * Класс для работы с классами DOM\r\n */\r\nexport class DomClass {\r\n public dom: DomElement;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) public document: Document,\r\n ) {\r\n this.dom = new DomElement(this.document)\r\n }\r\n\r\n //region Управление классами\r\n /**\r\n * Проверяет наличие класса у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс присутствует\r\n */\r\n hasClass(element: HTMLElement, className: string): boolean {\r\n return !!(className && element?.classList.contains(className));\r\n }\r\n\r\n /**\r\n * Добавляет класс элементу\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс добавили\r\n */\r\n addClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.add(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Массовое добавление CSS-классов\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param classNames - Массив названий CSS-классов для добавления\r\n */\r\n addClasses(element: HTMLElement | null, classNames: string[]): void {\r\n if (!element || !classNames || classNames.length === 0) {\r\n return;\r\n }\r\n\r\n classNames.forEach(className => {\r\n if (className && className.trim() !== '') {\r\n this.addClass(element, className.trim());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n * Классы генерируются для всех направлений (top, right, bottom, left).\r\n *\r\n * @param elementRef - Элемент для которого будут создаваться классы.\r\n * @param {number[]} arrVars - Значения для генерации классов.\r\n *\r\n */\r\n addClassMarginPadding(elementRef: ElementRef<HTMLElement>, arrVars: number[] = []): void {\r\n const root = this.dom.elementGetParent(elementRef.nativeElement);\r\n\r\n if (!root) {\r\n console.error('Root element not found');\r\n return;\r\n }\r\n\r\n const properties = ['m', 'p']; // margin, padding\r\n const directions = ['t', 'r', 'b', 'l']; // top, right, bottom, left\r\n let style = this.document.querySelector('style[data-dynamic-style]');\r\n\r\n if (!style) {\r\n style = this.document.createElement('style');\r\n style.setAttribute('data-dynamic-style', '');\r\n root.appendChild(style);\r\n }\r\n\r\n let cssContent = '';\r\n\r\n // Добавляем классы для arrVars (если массив не пустой)\r\n if (arrVars && arrVars.length > 0) {\r\n arrVars.forEach(value => {\r\n properties.forEach(prop => {\r\n directions.forEach(dir => {\r\n const className = `.evo-${prop}${dir}-${value}`;\r\n const cssProperty = prop === 'm' ? 'margin' : 'padding';\r\n const cssDirection = this._getCssDirection(dir);\r\n\r\n cssContent += `${className} { ${cssProperty}-${cssDirection}: var(--evo${value}); }\\n`;\r\n });\r\n });\r\n });\r\n }\r\n\r\n style.textContent = cssContent;\r\n }\r\n\r\n /**\r\n * Удаление всех классов созданных в addClassMarginPadding (<style data-dynamic-style=\"\">)\r\n * @see {@link addClassMarginPadding} - Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n */\r\n deleteClassMarginPadding(): void {\r\n this.document.querySelector('style[data-dynamic-style]')?.remove();\r\n }\r\n\r\n /**\r\n * Удаляет класс у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс был удален\r\n */\r\n removeClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.remove(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Переключает CSS-класс у корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param className - Название CSS-класса для переключения\r\n * @param force - Принудительно установить или удалить класс (true - добавить, false - удалить)\r\n */\r\n toggleClass(element: HTMLElement | null, className: string, force?: boolean): void {\r\n if (!element || !className) {\r\n return;\r\n }\r\n\r\n const trimmedClassName = className.trim();\r\n\r\n if (force !== undefined) {\r\n if (force) {\r\n this.addClass(element, trimmedClassName);\r\n } else {\r\n this.removeClass(element, trimmedClassName);\r\n }\r\n } else {\r\n // Переключаем на основе текущего состояния\r\n if (this.hasClass(element, trimmedClassName)) {\r\n this.removeClass(element, trimmedClassName);\r\n } else {\r\n this.addClass(element, trimmedClassName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает массив всех CSS-классов корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n *\r\n * @returns Массив названий CSS-классов\r\n */\r\n getClasses(element: HTMLElement | null): string[] {\r\n if (element) {\r\n // Получаем актуальные классы с элемента\r\n return Array.from(element.classList);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Удаляет все CSS-классы у корневого элемента и очищает кэш\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n */\r\n clearClasses(element: HTMLElement | null): void {\r\n // Удаляем все классы с элемента\r\n if (element) {\r\n element.className = '';\r\n }\r\n }\r\n\r\n //endregion\r\n\r\n //region Приватные методы\r\n\r\n /**\r\n * Преобразует сокращенное направление (t, r, b, l) в полное название CSS-свойства.\r\n *\r\n * @param {string} dir - Сокращенное направление (t, r, b, l).\r\n * @returns {string} Полное название направления (top, right, bottom, left).\r\n */\r\n private _getCssDirection(dir: string): string {\r\n switch (dir) {\r\n case 't':\r\n return 'top';\r\n case 'r':\r\n return 'right';\r\n case 'b':\r\n return 'bottom';\r\n case 'l':\r\n return 'left';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n //endregion\r\n}\r\n","/**\r\n * Класс для работы с DOM элементами\r\n */\r\n\r\nexport class DomStyle {\r\n //region Управление стилями\r\n\r\n\r\n applyStyleProperty(element: HTMLElement | null, property: string, value: string): void {\r\n if (!element || !property || !value) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Применяем к элементу\r\n element.style.setProperty(trimmedProperty, value);\r\n }\r\n\r\n removeStyle(element: HTMLElement | null, property: string): void {\r\n if (!element || !property) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Удаляем из элемента\r\n element.style.removeProperty(trimmedProperty);\r\n }\r\n\r\n getStyle(element: HTMLElement | null, property: string): string | null {\r\n if (!element || !property) {\r\n return null;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Или получаем непосредственно с элемента\r\n return element.style.getPropertyValue(trimmedProperty) || null;\r\n }\r\n\r\n /**\r\n * Применение CSS-стилей через строку\r\n *\r\n * !!! очень осторожно так как метод стирает старое и присваивает значение для cssText\r\n *\r\n * @param {HTMLElement} element - элемент\r\n * @param stringStyles - строка со стилями\r\n *\r\n * @example\r\n * const root = document.documentElement as any;\r\n * const styles = `--big-page-width:${width}; --z-index: ${zIndex}`;\r\n *\r\n * this.setStylesString(root, styles);\r\n */\r\n // public setStylesString(element: HTMLElement | null, stringStyles: string | null): void {\r\n // if (!element || !stringStyles) return;\r\n //\r\n // element.style.cssText = stringStyles;\r\n // }\r\n\r\n //endregion\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n Inject,\r\n OnInit,\r\n ViewChild,\r\n AfterViewInit,\r\n} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common';\r\n\r\nimport {DomClass} from './dom/dom-class';\r\nimport {DomElement} from './dom/dom-element';\r\nimport {DomStyle} from './dom/dom-style';\r\n\r\nimport {green} from 'tool-log'\r\n\r\n@Component({\r\n selector: 'lib-tool-dom-ang15',\r\n templateUrl: './tool-dom-ang15.component.html',\r\n styleUrls: ['./tool-dom-ang15.component.scss'],\r\n})\r\nexport class ToolDomAng15Component implements OnInit, AfterViewInit {\r\n\r\n /** Ссылка на контейнер-песочницу (корень для addClassMarginPadding) */\r\n @ViewChild('sandbox', {static: true}) sandboxRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на целевой элемент для манипуляций классами/стилями */\r\n @ViewChild('target', {static: true}) targetRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на контейнер для динамически создаваемых элементов */\r\n @ViewChild('dynamicHost', {static: true}) dynamicHostRef!: ElementRef<HTMLElement>;\r\n\r\n /** Лог операций */\r\n public logHtml: string[] = [];\r\n\r\n /** Публичные экземпляры сервисов */\r\n public dom!: DomElement;\r\n public cls!: DomClass;\r\n public style!: DomStyle;\r\n\r\n /** Счётчик созданных элементов */\r\n private _createdCounter = 0;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document) {\r\n }\r\n\r\n ngOnInit(): void {\r\n // Инициализация — DomClass зависит от DomElement\r\n this.dom = new DomElement(this.document);\r\n this.cls = new DomClass(this.document);\r\n this.style = new DomStyle();\r\n\r\n this._log('✅ ToolDomComponent: сервисы инициализированы');\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._log('✅ ToolDomComponent: view инициализирован, DOM доступен');\r\n\r\n }\r\n\r\n // ============================================================\r\n // DOM ELEMENT — демонстрации\r\n // ============================================================\r\n\r\n /** createElement */\r\n demoCreateElement(): void {\r\n const el = this.dom.createElement('div', 'created-box');\r\n el.textContent = `createElement #${++this._createdCounter}`;\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n this._log(`createElement → <div class=\"created-box\">`);\r\n }\r\n\r\n /** elementCreate (создание + вставка + событие) */\r\n demoElementCreate(): void {\r\n this.dom.elementCreate(\r\n this.dynamicHostRef.nativeElement,\r\n 'button',\r\n 'appendChild',\r\n `Кнопка #${++this._createdCounter} — кликни меня`,\r\n `btn-${this._createdCounter}`,\r\n 'click',\r\n () => green('demoElementCreate')\r\n );\r\n this._log('elementCreate → <button> c обработчиком click');\r\n }\r\n\r\n /** elementAdd (вставка существующего) */\r\n demoElementAdd(): void {\r\n const el = this.dom.createElement('span', 'added-span');\r\n el.textContent = ` insertBefore #${++this._createdCounter} `;\r\n\r\n this.dom.elementAdd(\r\n this.dynamicHostRef.nativeElement,\r\n 'insertBefore',\r\n 'span-x',\r\n 'mouseenter',\r\n () => this._log('🖱 mouseenter на вставленном <span>'),\r\n el\r\n );\r\n this._log('elementAdd → insertBefore <span>');\r\n }\r\n\r\n /** elementRemove */\r\n demoElementRemove(): void {\r\n const host = this.dynamicHostRef.nativeElement;\r\n const last = host.lastElementChild as HTMLElement;\r\n if (last) {\r\n this.dom.elementRemove(host, last);\r\n this._log(`elementRemove → удалён <${last.tagName.toLowerCase()}>`);\r\n } else {\r\n this._log('elementRemove → нечего удалять');\r\n }\r\n }\r\n\r\n /** elementGet (асинхронный поиск с повторными попытками) */\r\n async demoElementGet(): Promise<void> {\r\n this._log('elementGet → ждём появления .appears-later ...');\r\n\r\n // Создадим элемент через 1 секунду\r\n setTimeout(() => {\r\n const el = this.dom.createElement('div', 'appears-later');\r\n el.textContent = 'Я появился позже!';\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n }, 1000);\r\n\r\n const found = await this.dom.elementGet('.appears-later');\r\n this._log(`elementGet → найден: \"${found?.textContent ?? 'null'}\"`);\r\n }\r\n\r\n /** getElementByDataAttribute */\r\n demoGetByDataAttr(): void {\r\n const all = this.dom.getElementByDataAttribute('data-id');\r\n this._log(`getElementByDataAttribute('data-id') → найдено: ${all.length}`);\r\n\r\n if (all.length) {\r\n const first = this.dom.getElementByDataAttribute('data-id', all[0].dataset['id']!);\r\n this._log(`getElementByDataAttribute('data-id', '${all[0].dataset['id']}') → найдено: ${first.length}`);\r\n }\r\n }\r\n\r\n /** getCoordinates */\r\n demoGetCoordinates(): void {\r\n const rect = this.dom.getCoordinates(this.targetRef.nativeElement);\r\n this._log(\r\n `getCoordinates → top=${rect.top.toFixed(1)}, left=${rect.left.toFixed(1)}, ` +\r\n `w=${rect.width.toFixed(1)}, h=${rect.height.toFixed(1)}`\r\n );\r\n }\r\n\r\n /** elementGetParent */\r\n demoGetParent(): void {\r\n const parent = this.dom.elementGetParent(this.targetRef.nativeElement);\r\n this._log(\r\n `elementGetParent → <${parent && 'tagName' in parent ? (parent as HTMLElement).tagName.toLowerCase() : 'null'}>`\r\n );\r\n }\r\n\r\n /** elementsGetSiblingAll */\r\n demoSiblingsAll(): void {\r\n const all = this.dom.elementsGetSiblingAll(this.targetRef.nativeElement);\r\n this._log(`elementsGetSiblingAll → ${all.length} элемент(ов): ${all.map(e => e.tagName.toLowerCase()).join(', ')}`);\r\n }\r\n\r\n /** elementGetSiblingNext */\r\n demoSiblingsNext(): void {\r\n const next = this.dom.elementGetSiblingNext(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingNext → ${next.length} элемент(ов)`);\r\n }\r\n\r\n /** elementGetSiblingPrevious */\r\n demoSiblingsPrevious(): void {\r\n const prev = this.dom.elementGetSiblingPrevious(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingPrevious → ${prev.length} узел(ов) (включая текстовые)`);\r\n }\r\n\r\n /** elementGetChildren */\r\n demoGetChildren(): void {\r\n const kids = this.dom.elementGetChildren(this.dynamicHostRef.nativeElement);\r\n this._log(`elementGetChildren → ${kids.length} дочерних элемент(ов)`);\r\n }\r\n\r\n // ============================================================\r\n // DOM CLASS — демонстрации\r\n // ============================================================\r\n\r\n /** hasClass */\r\n demoHasClass(): void {\r\n const has = this.cls.hasClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`hasClass('demo-active') → ${has}`);\r\n }\r\n\r\n /** addClass */\r\n demoAddClass(): void {\r\n const ok = this.cls.addClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`addClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** addClasses (массово) */\r\n demoAddClasses(): void {\r\n this.cls.addClasses(this.targetRef.nativeElement, ['demo-a', 'demo-b', 'demo-c']);\r\n this._log('addClasses([demo-a, demo-b, demo-c]) → добавлены');\r\n }\r\n\r\n /** addClassMarginPadding — генерация утилит отступов */\r\n demoAddClassMarginPadding(): void {\r\n // Генерируем классы для значений 1..5 (соответствуют var(--evo1..5))\r\n this.cls.addClassMarginPadding(this.sandboxRef, [1, 2, 3, 4, 5]);\r\n\r\n // Применим один из сгенерированных классов\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-mt-2');\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-pl-3');\r\n\r\n this._log('addClassMarginPadding → сгенерированы .evo-{m|p}{t|r|b|l}-{1..5}, применены evo-mt-2, evo-pl-3');\r\n }\r\n\r\n /** deleteClassMarginPadding */\r\n demoDeleteClassMarginPadding(): void {\r\n this.cls.deleteClassMarginPadding();\r\n this._log('deleteClassMarginPadding → <style data-dynamic-style> удалён');\r\n }\r\n\r\n /** removeClass */\r\n demoRemoveClass(): void {\r\n const ok = this.cls.removeClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`removeClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** toggleClass */\r\n demoToggleClass(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-toggled');\r\n this._log(`toggleClass('demo-toggled') → сейчас: ${this.cls.hasClass(this.targetRef.nativeElement, 'demo-toggled')}`);\r\n }\r\n\r\n /** toggleClass с force */\r\n demoToggleForce(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-forced', true);\r\n this._log(\"toggleClass('demo-forced', true) → принудительно добавлен\");\r\n }\r\n\r\n /** getClasses */\r\n demoGetClasses(): void {\r\n const list = this.cls.getClasses(this.targetRef.nativeElement);\r\n this._log(`getClasses → [${list.join(', ')}]`);\r\n }\r\n\r\n /** clearClasses */\r\n demoClearClasses(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this._log('clearClasses → все классы удалены');\r\n }\r\n\r\n // ============================================================\r\n // DOM STYLE — демонстрации\r\n // ============================================================\r\n\r\n /** applyStyleProperty */\r\n demoApplyStyle(): void {\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'background-color', '#ffe08a');\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'border', '2px dashed #d97706');\r\n this._log(\"applyStyleProperty → 'background-color', 'border'\");\r\n }\r\n\r\n /** getStyle */\r\n demoGetStyle(): void {\r\n const bg = this.style.getStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(`getStyle('background-color') → \"${bg ?? 'null'}\"`);\r\n }\r\n\r\n /** removeStyle */\r\n demoRemoveStyle(): void {\r\n this.style.removeStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(\"removeStyle('background-color') → удалён\");\r\n }\r\n\r\n // ============================================================\r\n // Сброс / утилиты\r\n // ============================================================\r\n\r\n /** Полный сброс состояния песочницы */\r\n resetAll(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this.targetRef.nativeElement.removeAttribute('style');\r\n\r\n const host = this.dynamicHostRef.nativeElement;\r\n while (host.firstChild) {\r\n host.removeChild(host.firstChild);\r\n }\r\n\r\n this.cls.deleteClassMarginPadding();\r\n this._createdCounter = 0;\r\n\r\n this._log('🧹 Сброс: классы, стили, динамические элементы, dynamic-style');\r\n }\r\n\r\n /** Очистить лог */\r\n clearLog(): void {\r\n this.logHtml = [];\r\n }\r\n\r\n /** Внутреннее логирование */\r\n private _log(message: string): void {\r\n const time = new Date().toLocaleTimeString();\r\n\r\n this.logHtml.unshift(`[${time}] ${message}`);\r\n\r\n if (this.logHtml.length > 200) {\r\n this.logHtml.length = 200;\r\n }\r\n // eslint-disable-next-line no-console\r\n console.log(message);\r\n }\r\n}\r\n","<div class=\"playground\">\r\n\r\n <header class=\"playground__header\">\r\n <h1>DOM Playground</h1>\r\n <p>Демонстрация всех методов <code>DomClass</code>, <code>DomElement</code>, <code>DomStyle</code></p>\r\n </header>\r\n\r\n <main class=\"playground__body\">\r\n\r\n <!-- ЛЕВАЯ КОЛОНКА: элементы и кнопки -->\r\n <section class=\"playground__panel\">\r\n\r\n <!-- Песочница — корень для addClassMarginPadding -->\r\n <div #sandbox class=\"sandbox\">\r\n <h2>Песочница</h2>\r\n\r\n <!-- Целевой элемент для классов и стилей -->\r\n <div #target class=\"target\">\r\n 🎯 target — применяем классы и стили\r\n </div>\r\n\r\n <!-- Контейнер для динамически создаваемых элементов -->\r\n <div #dynamicHost class=\"dynamic-host\">\r\n <span>динамические элементы ↓</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomElement -->\r\n <div class=\"group\">\r\n <h3>DomElement</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoCreateElement()\">createElement</button>\r\n <button (click)=\"demoElementCreate()\">elementCreate</button>\r\n <button (click)=\"demoElementAdd()\">elementAdd</button>\r\n <button (click)=\"demoElementRemove()\">elementRemove</button>\r\n <button (click)=\"demoElementGet()\">elementGet</button>\r\n <button (click)=\"demoGetByDataAttr()\">getElementByDataAttribute</button>\r\n <button (click)=\"demoGetCoordinates()\">getCoordinates</button>\r\n <button (click)=\"demoGetParent()\">elementGetParent</button>\r\n <button (click)=\"demoSiblingsAll()\">elementsGetSiblingAll</button>\r\n <button (click)=\"demoSiblingsNext()\">elementGetSiblingNext</button>\r\n <button (click)=\"demoSiblingsPrevious()\">elementGetSiblingPrevious</button>\r\n <button (click)=\"demoGetChildren()\">elementGetChildren</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomClass -->\r\n <div class=\"group\">\r\n <h3>DomClass</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoHasClass()\">hasClass</button>\r\n <button (click)=\"demoAddClass()\">addClass</button>\r\n <button (click)=\"demoAddClasses()\">addClasses</button>\r\n <button (click)=\"demoAddClassMarginPadding()\">addClassMarginPadding</button>\r\n <button (click)=\"demoDeleteClassMarginPadding()\">deleteClassMarginPadding</button>\r\n <button (click)=\"demoRemoveClass()\">removeClass</button>\r\n <button (click)=\"demoToggleClass()\">toggleClass</button>\r\n <button (click)=\"demoToggleForce()\">toggleClass(force=true)</button>\r\n <button (click)=\"demoGetClasses()\">getClasses</button>\r\n <button (click)=\"demoClearClasses()\">clearClasses</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomStyle -->\r\n <div class=\"group\">\r\n <h3>DomStyle</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoApplyStyle()\">applyStyleProperty</button>\r\n <button (click)=\"demoGetStyle()\">getStyle</button>\r\n <button (click)=\"demoRemoveStyle()\">removeStyle</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"group\">\r\n <div class=\"group__btns\">\r\n <button class=\"btn-reset\" (click)=\"resetAll()\">🧹 Reset All</button>\r\n <button class=\"btn-clear\" (click)=\"clearLog()\">Clear Log</button>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <!-- ПРАВАЯ КОЛОНКА: лог -->\r\n <aside class=\"playground__log\">\r\n <h2>Лог операций</h2>\r\n <ul>\r\n <li *ngFor=\"let item of logHtml\">{{ item }}</li>\r\n </ul>\r\n <p *ngIf=\"!logHtml.length\" class=\"empty\">Пока пусто — жми кнопки слева.</p>\r\n </aside>\r\n\r\n </main>\r\n</div>\r\n","// tool-dom-ang15-routing.module.ts\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { ToolDomAng15Component } from './tool-dom-ang15.component';\r\n\r\nconst routes: Routes = [\r\n { path: '', component: ToolDomAng15Component },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class ToolDomAng15RoutingModule {}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\nimport { ToolDomAng15RoutingModule } from './tool-dom-ang15-routing.module';\r\nimport {ToolDomAng15Component} from './tool-dom-ang15.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [ToolDomAng15Component],\r\n imports: [CommonModule, ToolDomAng15RoutingModule],\r\n exports: [ToolDomAng15Component]\r\n})\r\nexport class ToolDomAng15Module {\r\n}\r\n","/*\r\n * Public API Surface of tool-dom-ang15\r\n */\r\n\r\nexport * from './lib/tool-dom-ang15.service';\r\nexport * from './lib/tool-dom-ang15.component';\r\nexport * from './lib/tool-dom-ang15.module';\r\n\r\n// 👇 добавляем экспорт DOM-утилит\r\nexport * from './lib/dom/dom-element';\r\nexport * from './lib/dom/dom-class';\r\nexport * from './lib/dom/dom-style';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import * as i1 from '@angular/common';
4
4
  import { DOCUMENT, CommonModule } from '@angular/common';
5
5
  import { __decorate, __param } from 'tslib';
6
6
  import { green } from 'tool-log';
7
+ import * as i1$1 from '@angular/router';
8
+ import { RouterModule } from '@angular/router';
7
9
 
8
10
  class ToolDomAng15Service {
9
11
  constructor() {
@@ -766,16 +768,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
766
768
  args: ['dynamicHost', { static: true }]
767
769
  }] } });
768
770
 
771
+ // tool-dom-ang15-routing.module.ts
772
+ const routes = [
773
+ { path: '', component: ToolDomAng15Component },
774
+ ];
775
+ class ToolDomAng15RoutingModule {
776
+ }
777
+ ToolDomAng15RoutingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
778
+ ToolDomAng15RoutingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, imports: [i1$1.RouterModule], exports: [RouterModule] });
779
+ ToolDomAng15RoutingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
780
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15RoutingModule, decorators: [{
781
+ type: NgModule,
782
+ args: [{
783
+ imports: [RouterModule.forChild(routes)],
784
+ exports: [RouterModule],
785
+ }]
786
+ }] });
787
+
769
788
  class ToolDomAng15Module {
770
789
  }
771
790
  ToolDomAng15Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
772
- ToolDomAng15Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, declarations: [ToolDomAng15Component], imports: [CommonModule], exports: [ToolDomAng15Component] });
773
- ToolDomAng15Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, imports: [CommonModule] });
791
+ ToolDomAng15Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, declarations: [ToolDomAng15Component], imports: [CommonModule, ToolDomAng15RoutingModule], exports: [ToolDomAng15Component] });
792
+ ToolDomAng15Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, imports: [CommonModule, ToolDomAng15RoutingModule] });
774
793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolDomAng15Module, decorators: [{
775
794
  type: NgModule,
776
795
  args: [{
777
796
  declarations: [ToolDomAng15Component],
778
- imports: [CommonModule],
797
+ imports: [CommonModule, ToolDomAng15RoutingModule],
779
798
  exports: [ToolDomAng15Component]
780
799
  }]
781
800
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"tool-dom-ang15.mjs","sources":["../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.service.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-element.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-class.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-style.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.html","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.module.ts","../../../projects/tool-dom-ang15/src/public-api.ts","../../../projects/tool-dom-ang15/src/tool-dom-ang15.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToolDomAng15Service {\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {DOCUMENT} from '@angular/common';\r\nimport {Inject} from '@angular/core';\r\n\r\nimport {TAllEvents, TSelector, TTypeAppend} from './dom.interface';\r\n\r\n\r\n/**\r\n * Предоставляет методы для манипуляции DOM элементами\r\n *\r\n * Класс включает функционал для:\r\n * - Создания элементов\r\n * - Добавления и удаления элементов из DOM\r\n * - Поиска элементов с повторными попытками\r\n * - Навигации по DOM дереву\r\n * - Работы с data-атрибутами\r\n */\r\nexport class DomElement {\r\n\r\n private _countGetElement = 0;\r\n\r\n constructor(@Inject(DOCUMENT) public document: Document) {\r\n }\r\n\r\n /**\r\n * Создает новый DOM элемент с указанным тегом и CSS классом\r\n *\r\n * @param tagName - HTML тег создаваемого элемента (div, span, button и т.д.)\r\n * @param className - CSS класс для элемента (опционально)\r\n * @returns Новый DOM элемент\r\n *\r\n * @example\r\n * const div = worker.createElement('div', 'container');\r\n * const span = worker.createElement('span');\r\n */\r\n createElement(tagName: string, className?: string): HTMLElement {\r\n const element = this.document.createElement(tagName);\r\n if (className) {\r\n element.className = className;\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * Создает и добавляет новый HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент, к которому будет добавлен новый\r\n * @param newElement - HTML тег создаваемого элемента\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param strInnerHTML - Внутреннее HTML содержимое (опционально)\r\n * @param dataId - Значение для атрибута data-id (опционально)\r\n * @param eventName - Тип события для добавления слушателя\r\n * @param fn - Функция-обработчик события (опционально)\r\n *\r\n * @example\r\n * worker.elementCreate(\r\n * this.document.body,\r\n * 'button',\r\n * 'appendChild',\r\n * 'Click me',\r\n * 123,\r\n * 'click',\r\n * () => console.log('Clicked')\r\n * );\r\n */\r\n elementCreate(\r\n parentElement: HTMLElement,\r\n newElement: string,\r\n typeAppend: TTypeAppend,\r\n strInnerHTML: string = '',\r\n dataId: number | string = '',\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null = null\r\n ): void {\r\n if (!parentElement || !newElement) {\r\n return;\r\n }\r\n\r\n const el$ = this.document.createElement(newElement);\r\n\r\n if (dataId !== null) {\r\n el$.setAttribute('data-id', String(dataId));\r\n }\r\n\r\n if (strInnerHTML) {\r\n el$.innerHTML = strInnerHTML;\r\n }\r\n\r\n this.elementAdd(parentElement, typeAppend, dataId, eventName, fn, el$);\r\n }\r\n\r\n /**\r\n * Добавляет существующий HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param dataId - Идентификатор для атрибута data-id\r\n * @param eventName - Тип события для слушателя\r\n * @param fn - Функция-обработчик события\r\n * @param el$ - Добавляемый DOM элемент\r\n *\r\n * @remarks\r\n * Если typeAppend равен 'insertBefore', элемент добавляется в начало родителя.\r\n * В противном случае элемент добавляется в конец.\r\n */\r\n elementAdd(\r\n parentElement: HTMLElement,\r\n typeAppend: TTypeAppend,\r\n dataId: number | string,\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null,\r\n el$: HTMLElement\r\n ): void {\r\n if ('firstChild' in parentElement) {\r\n if (typeAppend === 'insertBefore') {\r\n (parentElement as Node).insertBefore(el$, parentElement.firstChild);\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n\r\n if (fn) {\r\n el$.addEventListener(eventName, event => {\r\n fn.call(null, event, null, el$, dataId);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Удаляет HTML элемент из DOM\r\n *\r\n * @param parentElement - Родительский элемент, содержащий удаляемый элемент\r\n * @param el$ - Удаляемый DOM элемент\r\n *\r\n * @remarks\r\n * Метод безопасно завершается, если parentElement или el$ отсутствуют\r\n */\r\n elementRemove(parentElement: HTMLElement, el$: HTMLElement): void {\r\n if (parentElement && el$) {\r\n (parentElement as Node).removeChild(el$);\r\n }\r\n }\r\n\r\n /**\r\n * Асинхронно получает HTML элемент с повторными попытками\r\n *\r\n * @param identifier - Селектор для поиска элемента\r\n * @param selector - Метод поиска ('querySelector' или 'querySelectorAll')\r\n * @param node - DOM узел для поиска (по умолчанию this.document)\r\n * @param time - Задержка между попытками в мс (по умолчанию 300)\r\n * @param max - Максимальное количество попыток (по умолчанию 10)\r\n * @returns Промис с найденным DOM элементом\r\n *\r\n * @remarks\r\n * Метод полезен для ожидания появления динамически создаваемых элементов\r\n */\r\n async elementGet(\r\n identifier: string,\r\n selector: TSelector = 'querySelector',\r\n node: Document | HTMLElement | null = this.document,\r\n time: number = 300,\r\n max: number = 10\r\n ): Promise<HTMLElement> {\r\n let result = await this._getElementResult(identifier, selector, node, time);\r\n\r\n if ((!result || (result instanceof NodeList && result.length < 1)) && this._countGetElement < max) {\r\n this._countGetElement++;\r\n result = await this.elementGet(identifier, selector, node, time, max);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Находит элементы по data-атрибуту или его значению\r\n *\r\n * @param elementToSelect - Название data-атрибута (например, 'data-id')\r\n * @param dataValue - Значение атрибута для фильтрации (опционально)\r\n * @returns Массив найденных элементов\r\n * @throws {Error} Если elementToSelect не указан\r\n *\r\n * @example\r\n * // Найти все элементы с data-id\r\n * const items = worker.getElementByDataAttribute('data-id');\r\n *\r\n * // Найти элемент с конкретным значением\r\n * const item = worker.getElementByDataAttribute('data-id', '123');\r\n */\r\n getElementByDataAttribute(elementToSelect: string, dataValue: string | null = null): HTMLElement[] {\r\n if (!elementToSelect) {\r\n throw new Error('elementToSelect is required for getElementByDataAttribute');\r\n }\r\n const selector = dataValue ? `[${elementToSelect}='${dataValue}']` : `[${elementToSelect}]`;\r\n const elements = this.document.querySelectorAll(selector);\r\n return Array.from(elements) as HTMLElement[];\r\n }\r\n\r\n /**\r\n * Внутренний метод для получения элемента с задержкой\r\n *\r\n * @param identifier - Селектор элемента\r\n * @param selector - Метод поиска\r\n * @param node - Корневой узел\r\n * @param time - Время задержки в мс\r\n * @returns Промис с результатом поиска\r\n * @private\r\n */\r\n private async _getElementResult(\r\n identifier: string,\r\n selector: TSelector,\r\n node: Document | HTMLElement | null,\r\n time: number\r\n ): Promise<HTMLElement> {\r\n return this._setDelay(time)\r\n .then(_ => {\r\n if (!node) {\r\n return null;\r\n }\r\n // Используем type assertion для вызова метода\r\n const result = (node as any)[selector](identifier);\r\n return result || null;\r\n })\r\n .catch(error => console.log('Ошибка в _getElementResult', error));\r\n }\r\n\r\n /**\r\n * Создает Promise с задержкой\r\n *\r\n * @param ms - Время задержки в миллисекундах\r\n * @returns Promise, который разрешается через указанное время\r\n * @private\r\n */\r\n private _setDelay(ms: number): Promise<unknown> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Возвращает размеры элемента и его положение относительно viewport\r\n *\r\n * @param element - Целевой DOM элемент\r\n * @returns DOMRect объект с координатами (top, left, right, bottom) и размерами (width, height)\r\n * @throws {Error} Если element не указан\r\n *\r\n * @example\r\n * const rect = worker.getCoordinates(buttonElement);\r\n * console.log(rect.top, rect.left, rect.width);\r\n */\r\n getCoordinates(element: HTMLElement): DOMRect {\r\n if (!element) {\r\n throw new Error('Element is required for getCoordinates');\r\n }\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n /**\r\n * Возвращает родительский элемент указанного DOM узла\r\n *\r\n * @param el - DOM элемент или NodeList\r\n * @returns Родительский элемент или null, если родителя нет\r\n */\r\n elementGetParent(el: Element | NodeList): Node & ParentNode | null {\r\n if (el && 'parentNode' in el) {\r\n return el.parentNode as Node & ParentNode;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Возвращает все соседние элементы (включая сам элемент)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив всех элементов в текущей ветке DOM дерева\r\n *\r\n * @remarks\r\n * Метод собирает все элементы на одном уровне вложенности\r\n */\r\n elementsGetSiblingAll(el: Element | NodeList): Element[] {\r\n if (el && 'parentNode' in el) {\r\n const parent = el.parentNode as Node & ParentNode;\r\n const firstElement = parent.firstChild as Element;\r\n return this.elementGetSiblingNext(firstElement);\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Возвращает все следующие соседние элементы (nextElementSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив элементов, начиная с указанного и включая все следующие\r\n *\r\n * @example\r\n * const nextElements = worker.elementGetSiblingNext(currentElement);\r\n * // Возвращает [currentElement, nextElement, nextNextElement, ...]\r\n */\r\n elementGetSiblingNext(el: Element | NodeList): Element[] {\r\n const result: Element[] = [];\r\n\r\n while (el) {\r\n if ('nextElementSibling' in el) {\r\n result.push(el as Element);\r\n el = (el as Element).nextElementSibling as Element;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все предыдущие соседние элементы (previousSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив предыдущих элементов\r\n *\r\n * @remarks\r\n * Возвращает все элементы, включая указанный, в обратном порядке\r\n */\r\n elementGetSiblingPrevious(el: Element | NodeList | Node): Element[] {\r\n const result: Element[] = [];\r\n let current: Node | null = el as Node;\r\n\r\n while (current) {\r\n result.push(current as Element);\r\n current = current.previousSibling;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все прямые дочерние элементы указанного родителя\r\n *\r\n * @param el - Родительский DOM элемент\r\n * @returns Массив дочерних элементов\r\n *\r\n * @example\r\n * const children = worker.elementGetChildren(parentElement);\r\n * children.forEach(child => console.log(child.tagName));\r\n */\r\n elementGetChildren(el: Element): Element[] {\r\n return Array.from(el.children) as Element[];\r\n }\r\n}\r\n","import {ElementRef, Inject} from '@angular/core';\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport {DomElement} from \"./dom-element\";\r\n\r\n/**\r\n * Класс для работы с классами DOM\r\n */\r\nexport class DomClass {\r\n public dom: DomElement;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) public document: Document,\r\n ) {\r\n this.dom = new DomElement(this.document)\r\n }\r\n\r\n //region Управление классами\r\n /**\r\n * Проверяет наличие класса у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс присутствует\r\n */\r\n hasClass(element: HTMLElement, className: string): boolean {\r\n return !!(className && element?.classList.contains(className));\r\n }\r\n\r\n /**\r\n * Добавляет класс элементу\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс добавили\r\n */\r\n addClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.add(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Массовое добавление CSS-классов\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param classNames - Массив названий CSS-классов для добавления\r\n */\r\n addClasses(element: HTMLElement | null, classNames: string[]): void {\r\n if (!element || !classNames || classNames.length === 0) {\r\n return;\r\n }\r\n\r\n classNames.forEach(className => {\r\n if (className && className.trim() !== '') {\r\n this.addClass(element, className.trim());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n * Классы генерируются для всех направлений (top, right, bottom, left).\r\n *\r\n * @param elementRef - Элемент для которого будут создаваться классы.\r\n * @param {number[]} arrVars - Значения для генерации классов.\r\n *\r\n */\r\n addClassMarginPadding(elementRef: ElementRef<HTMLElement>, arrVars: number[] = []): void {\r\n const root = this.dom.elementGetParent(elementRef.nativeElement);\r\n\r\n if (!root) {\r\n console.error('Root element not found');\r\n return;\r\n }\r\n\r\n const properties = ['m', 'p']; // margin, padding\r\n const directions = ['t', 'r', 'b', 'l']; // top, right, bottom, left\r\n let style = this.document.querySelector('style[data-dynamic-style]');\r\n\r\n if (!style) {\r\n style = this.document.createElement('style');\r\n style.setAttribute('data-dynamic-style', '');\r\n root.appendChild(style);\r\n }\r\n\r\n let cssContent = '';\r\n\r\n // Добавляем классы для arrVars (если массив не пустой)\r\n if (arrVars && arrVars.length > 0) {\r\n arrVars.forEach(value => {\r\n properties.forEach(prop => {\r\n directions.forEach(dir => {\r\n const className = `.evo-${prop}${dir}-${value}`;\r\n const cssProperty = prop === 'm' ? 'margin' : 'padding';\r\n const cssDirection = this._getCssDirection(dir);\r\n\r\n cssContent += `${className} { ${cssProperty}-${cssDirection}: var(--evo${value}); }\\n`;\r\n });\r\n });\r\n });\r\n }\r\n\r\n style.textContent = cssContent;\r\n }\r\n\r\n /**\r\n * Удаление всех классов созданных в addClassMarginPadding (<style data-dynamic-style=\"\">)\r\n * @see {@link addClassMarginPadding} - Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n */\r\n deleteClassMarginPadding(): void {\r\n this.document.querySelector('style[data-dynamic-style]')?.remove();\r\n }\r\n\r\n /**\r\n * Удаляет класс у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс был удален\r\n */\r\n removeClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.remove(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Переключает CSS-класс у корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param className - Название CSS-класса для переключения\r\n * @param force - Принудительно установить или удалить класс (true - добавить, false - удалить)\r\n */\r\n toggleClass(element: HTMLElement | null, className: string, force?: boolean): void {\r\n if (!element || !className) {\r\n return;\r\n }\r\n\r\n const trimmedClassName = className.trim();\r\n\r\n if (force !== undefined) {\r\n if (force) {\r\n this.addClass(element, trimmedClassName);\r\n } else {\r\n this.removeClass(element, trimmedClassName);\r\n }\r\n } else {\r\n // Переключаем на основе текущего состояния\r\n if (this.hasClass(element, trimmedClassName)) {\r\n this.removeClass(element, trimmedClassName);\r\n } else {\r\n this.addClass(element, trimmedClassName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает массив всех CSS-классов корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n *\r\n * @returns Массив названий CSS-классов\r\n */\r\n getClasses(element: HTMLElement | null): string[] {\r\n if (element) {\r\n // Получаем актуальные классы с элемента\r\n return Array.from(element.classList);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Удаляет все CSS-классы у корневого элемента и очищает кэш\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n */\r\n clearClasses(element: HTMLElement | null): void {\r\n // Удаляем все классы с элемента\r\n if (element) {\r\n element.className = '';\r\n }\r\n }\r\n\r\n //endregion\r\n\r\n //region Приватные методы\r\n\r\n /**\r\n * Преобразует сокращенное направление (t, r, b, l) в полное название CSS-свойства.\r\n *\r\n * @param {string} dir - Сокращенное направление (t, r, b, l).\r\n * @returns {string} Полное название направления (top, right, bottom, left).\r\n */\r\n private _getCssDirection(dir: string): string {\r\n switch (dir) {\r\n case 't':\r\n return 'top';\r\n case 'r':\r\n return 'right';\r\n case 'b':\r\n return 'bottom';\r\n case 'l':\r\n return 'left';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n //endregion\r\n}\r\n","/**\r\n * Класс для работы с DOM элементами\r\n */\r\n\r\nexport class DomStyle {\r\n //region Управление стилями\r\n\r\n\r\n applyStyleProperty(element: HTMLElement | null, property: string, value: string): void {\r\n if (!element || !property || !value) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Применяем к элементу\r\n element.style.setProperty(trimmedProperty, value);\r\n }\r\n\r\n removeStyle(element: HTMLElement | null, property: string): void {\r\n if (!element || !property) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Удаляем из элемента\r\n element.style.removeProperty(trimmedProperty);\r\n }\r\n\r\n getStyle(element: HTMLElement | null, property: string): string | null {\r\n if (!element || !property) {\r\n return null;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Или получаем непосредственно с элемента\r\n return element.style.getPropertyValue(trimmedProperty) || null;\r\n }\r\n\r\n /**\r\n * Применение CSS-стилей через строку\r\n *\r\n * !!! очень осторожно так как метод стирает старое и присваивает значение для cssText\r\n *\r\n * @param {HTMLElement} element - элемент\r\n * @param stringStyles - строка со стилями\r\n *\r\n * @example\r\n * const root = document.documentElement as any;\r\n * const styles = `--big-page-width:${width}; --z-index: ${zIndex}`;\r\n *\r\n * this.setStylesString(root, styles);\r\n */\r\n // public setStylesString(element: HTMLElement | null, stringStyles: string | null): void {\r\n // if (!element || !stringStyles) return;\r\n //\r\n // element.style.cssText = stringStyles;\r\n // }\r\n\r\n //endregion\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n Inject,\r\n OnInit,\r\n ViewChild,\r\n AfterViewInit,\r\n} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common';\r\n\r\nimport {DomClass} from './dom/dom-class';\r\nimport {DomElement} from './dom/dom-element';\r\nimport {DomStyle} from './dom/dom-style';\r\n\r\nimport {green} from 'tool-log'\r\n\r\n@Component({\r\n selector: 'lib-tool-dom-ang15',\r\n templateUrl: './tool-dom-ang15.component.html',\r\n styleUrls: ['./tool-dom-ang15.component.scss'],\r\n})\r\nexport class ToolDomAng15Component implements OnInit, AfterViewInit {\r\n\r\n /** Ссылка на контейнер-песочницу (корень для addClassMarginPadding) */\r\n @ViewChild('sandbox', {static: true}) sandboxRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на целевой элемент для манипуляций классами/стилями */\r\n @ViewChild('target', {static: true}) targetRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на контейнер для динамически создаваемых элементов */\r\n @ViewChild('dynamicHost', {static: true}) dynamicHostRef!: ElementRef<HTMLElement>;\r\n\r\n /** Лог операций */\r\n public logHtml: string[] = [];\r\n\r\n /** Публичные экземпляры сервисов */\r\n public dom!: DomElement;\r\n public cls!: DomClass;\r\n public style!: DomStyle;\r\n\r\n /** Счётчик созданных элементов */\r\n private _createdCounter = 0;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document) {\r\n }\r\n\r\n ngOnInit(): void {\r\n // Инициализация — DomClass зависит от DomElement\r\n this.dom = new DomElement(this.document);\r\n this.cls = new DomClass(this.document);\r\n this.style = new DomStyle();\r\n\r\n this._log('✅ ToolDomComponent: сервисы инициализированы');\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._log('✅ ToolDomComponent: view инициализирован, DOM доступен');\r\n\r\n }\r\n\r\n // ============================================================\r\n // DOM ELEMENT — демонстрации\r\n // ============================================================\r\n\r\n /** createElement */\r\n demoCreateElement(): void {\r\n const el = this.dom.createElement('div', 'created-box');\r\n el.textContent = `createElement #${++this._createdCounter}`;\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n this._log(`createElement → <div class=\"created-box\">`);\r\n }\r\n\r\n /** elementCreate (создание + вставка + событие) */\r\n demoElementCreate(): void {\r\n this.dom.elementCreate(\r\n this.dynamicHostRef.nativeElement,\r\n 'button',\r\n 'appendChild',\r\n `Кнопка #${++this._createdCounter} — кликни меня`,\r\n `btn-${this._createdCounter}`,\r\n 'click',\r\n () => green('demoElementCreate')\r\n );\r\n this._log('elementCreate → <button> c обработчиком click');\r\n }\r\n\r\n /** elementAdd (вставка существующего) */\r\n demoElementAdd(): void {\r\n const el = this.dom.createElement('span', 'added-span');\r\n el.textContent = ` insertBefore #${++this._createdCounter} `;\r\n\r\n this.dom.elementAdd(\r\n this.dynamicHostRef.nativeElement,\r\n 'insertBefore',\r\n 'span-x',\r\n 'mouseenter',\r\n () => this._log('🖱 mouseenter на вставленном <span>'),\r\n el\r\n );\r\n this._log('elementAdd → insertBefore <span>');\r\n }\r\n\r\n /** elementRemove */\r\n demoElementRemove(): void {\r\n const host = this.dynamicHostRef.nativeElement;\r\n const last = host.lastElementChild as HTMLElement;\r\n if (last) {\r\n this.dom.elementRemove(host, last);\r\n this._log(`elementRemove → удалён <${last.tagName.toLowerCase()}>`);\r\n } else {\r\n this._log('elementRemove → нечего удалять');\r\n }\r\n }\r\n\r\n /** elementGet (асинхронный поиск с повторными попытками) */\r\n async demoElementGet(): Promise<void> {\r\n this._log('elementGet → ждём появления .appears-later ...');\r\n\r\n // Создадим элемент через 1 секунду\r\n setTimeout(() => {\r\n const el = this.dom.createElement('div', 'appears-later');\r\n el.textContent = 'Я появился позже!';\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n }, 1000);\r\n\r\n const found = await this.dom.elementGet('.appears-later');\r\n this._log(`elementGet → найден: \"${found?.textContent ?? 'null'}\"`);\r\n }\r\n\r\n /** getElementByDataAttribute */\r\n demoGetByDataAttr(): void {\r\n const all = this.dom.getElementByDataAttribute('data-id');\r\n this._log(`getElementByDataAttribute('data-id') → найдено: ${all.length}`);\r\n\r\n if (all.length) {\r\n const first = this.dom.getElementByDataAttribute('data-id', all[0].dataset['id']!);\r\n this._log(`getElementByDataAttribute('data-id', '${all[0].dataset['id']}') → найдено: ${first.length}`);\r\n }\r\n }\r\n\r\n /** getCoordinates */\r\n demoGetCoordinates(): void {\r\n const rect = this.dom.getCoordinates(this.targetRef.nativeElement);\r\n this._log(\r\n `getCoordinates → top=${rect.top.toFixed(1)}, left=${rect.left.toFixed(1)}, ` +\r\n `w=${rect.width.toFixed(1)}, h=${rect.height.toFixed(1)}`\r\n );\r\n }\r\n\r\n /** elementGetParent */\r\n demoGetParent(): void {\r\n const parent = this.dom.elementGetParent(this.targetRef.nativeElement);\r\n this._log(\r\n `elementGetParent → <${parent && 'tagName' in parent ? (parent as HTMLElement).tagName.toLowerCase() : 'null'}>`\r\n );\r\n }\r\n\r\n /** elementsGetSiblingAll */\r\n demoSiblingsAll(): void {\r\n const all = this.dom.elementsGetSiblingAll(this.targetRef.nativeElement);\r\n this._log(`elementsGetSiblingAll → ${all.length} элемент(ов): ${all.map(e => e.tagName.toLowerCase()).join(', ')}`);\r\n }\r\n\r\n /** elementGetSiblingNext */\r\n demoSiblingsNext(): void {\r\n const next = this.dom.elementGetSiblingNext(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingNext → ${next.length} элемент(ов)`);\r\n }\r\n\r\n /** elementGetSiblingPrevious */\r\n demoSiblingsPrevious(): void {\r\n const prev = this.dom.elementGetSiblingPrevious(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingPrevious → ${prev.length} узел(ов) (включая текстовые)`);\r\n }\r\n\r\n /** elementGetChildren */\r\n demoGetChildren(): void {\r\n const kids = this.dom.elementGetChildren(this.dynamicHostRef.nativeElement);\r\n this._log(`elementGetChildren → ${kids.length} дочерних элемент(ов)`);\r\n }\r\n\r\n // ============================================================\r\n // DOM CLASS — демонстрации\r\n // ============================================================\r\n\r\n /** hasClass */\r\n demoHasClass(): void {\r\n const has = this.cls.hasClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`hasClass('demo-active') → ${has}`);\r\n }\r\n\r\n /** addClass */\r\n demoAddClass(): void {\r\n const ok = this.cls.addClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`addClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** addClasses (массово) */\r\n demoAddClasses(): void {\r\n this.cls.addClasses(this.targetRef.nativeElement, ['demo-a', 'demo-b', 'demo-c']);\r\n this._log('addClasses([demo-a, demo-b, demo-c]) → добавлены');\r\n }\r\n\r\n /** addClassMarginPadding — генерация утилит отступов */\r\n demoAddClassMarginPadding(): void {\r\n // Генерируем классы для значений 1..5 (соответствуют var(--evo1..5))\r\n this.cls.addClassMarginPadding(this.sandboxRef, [1, 2, 3, 4, 5]);\r\n\r\n // Применим один из сгенерированных классов\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-mt-2');\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-pl-3');\r\n\r\n this._log('addClassMarginPadding → сгенерированы .evo-{m|p}{t|r|b|l}-{1..5}, применены evo-mt-2, evo-pl-3');\r\n }\r\n\r\n /** deleteClassMarginPadding */\r\n demoDeleteClassMarginPadding(): void {\r\n this.cls.deleteClassMarginPadding();\r\n this._log('deleteClassMarginPadding → <style data-dynamic-style> удалён');\r\n }\r\n\r\n /** removeClass */\r\n demoRemoveClass(): void {\r\n const ok = this.cls.removeClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`removeClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** toggleClass */\r\n demoToggleClass(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-toggled');\r\n this._log(`toggleClass('demo-toggled') → сейчас: ${this.cls.hasClass(this.targetRef.nativeElement, 'demo-toggled')}`);\r\n }\r\n\r\n /** toggleClass с force */\r\n demoToggleForce(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-forced', true);\r\n this._log(\"toggleClass('demo-forced', true) → принудительно добавлен\");\r\n }\r\n\r\n /** getClasses */\r\n demoGetClasses(): void {\r\n const list = this.cls.getClasses(this.targetRef.nativeElement);\r\n this._log(`getClasses → [${list.join(', ')}]`);\r\n }\r\n\r\n /** clearClasses */\r\n demoClearClasses(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this._log('clearClasses → все классы удалены');\r\n }\r\n\r\n // ============================================================\r\n // DOM STYLE — демонстрации\r\n // ============================================================\r\n\r\n /** applyStyleProperty */\r\n demoApplyStyle(): void {\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'background-color', '#ffe08a');\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'border', '2px dashed #d97706');\r\n this._log(\"applyStyleProperty → 'background-color', 'border'\");\r\n }\r\n\r\n /** getStyle */\r\n demoGetStyle(): void {\r\n const bg = this.style.getStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(`getStyle('background-color') → \"${bg ?? 'null'}\"`);\r\n }\r\n\r\n /** removeStyle */\r\n demoRemoveStyle(): void {\r\n this.style.removeStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(\"removeStyle('background-color') → удалён\");\r\n }\r\n\r\n // ============================================================\r\n // Сброс / утилиты\r\n // ============================================================\r\n\r\n /** Полный сброс состояния песочницы */\r\n resetAll(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this.targetRef.nativeElement.removeAttribute('style');\r\n\r\n const host = this.dynamicHostRef.nativeElement;\r\n while (host.firstChild) {\r\n host.removeChild(host.firstChild);\r\n }\r\n\r\n this.cls.deleteClassMarginPadding();\r\n this._createdCounter = 0;\r\n\r\n this._log('🧹 Сброс: классы, стили, динамические элементы, dynamic-style');\r\n }\r\n\r\n /** Очистить лог */\r\n clearLog(): void {\r\n this.logHtml = [];\r\n }\r\n\r\n /** Внутреннее логирование */\r\n private _log(message: string): void {\r\n const time = new Date().toLocaleTimeString();\r\n\r\n this.logHtml.unshift(`[${time}] ${message}`);\r\n\r\n if (this.logHtml.length > 200) {\r\n this.logHtml.length = 200;\r\n }\r\n // eslint-disable-next-line no-console\r\n console.log(message);\r\n }\r\n}\r\n","<div class=\"playground\">\r\n\r\n <header class=\"playground__header\">\r\n <h1>DOM Playground</h1>\r\n <p>Демонстрация всех методов <code>DomClass</code>, <code>DomElement</code>, <code>DomStyle</code></p>\r\n </header>\r\n\r\n <main class=\"playground__body\">\r\n\r\n <!-- ЛЕВАЯ КОЛОНКА: элементы и кнопки -->\r\n <section class=\"playground__panel\">\r\n\r\n <!-- Песочница — корень для addClassMarginPadding -->\r\n <div #sandbox class=\"sandbox\">\r\n <h2>Песочница</h2>\r\n\r\n <!-- Целевой элемент для классов и стилей -->\r\n <div #target class=\"target\">\r\n 🎯 target — применяем классы и стили\r\n </div>\r\n\r\n <!-- Контейнер для динамически создаваемых элементов -->\r\n <div #dynamicHost class=\"dynamic-host\">\r\n <span>динамические элементы ↓</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomElement -->\r\n <div class=\"group\">\r\n <h3>DomElement</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoCreateElement()\">createElement</button>\r\n <button (click)=\"demoElementCreate()\">elementCreate</button>\r\n <button (click)=\"demoElementAdd()\">elementAdd</button>\r\n <button (click)=\"demoElementRemove()\">elementRemove</button>\r\n <button (click)=\"demoElementGet()\">elementGet</button>\r\n <button (click)=\"demoGetByDataAttr()\">getElementByDataAttribute</button>\r\n <button (click)=\"demoGetCoordinates()\">getCoordinates</button>\r\n <button (click)=\"demoGetParent()\">elementGetParent</button>\r\n <button (click)=\"demoSiblingsAll()\">elementsGetSiblingAll</button>\r\n <button (click)=\"demoSiblingsNext()\">elementGetSiblingNext</button>\r\n <button (click)=\"demoSiblingsPrevious()\">elementGetSiblingPrevious</button>\r\n <button (click)=\"demoGetChildren()\">elementGetChildren</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomClass -->\r\n <div class=\"group\">\r\n <h3>DomClass</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoHasClass()\">hasClass</button>\r\n <button (click)=\"demoAddClass()\">addClass</button>\r\n <button (click)=\"demoAddClasses()\">addClasses</button>\r\n <button (click)=\"demoAddClassMarginPadding()\">addClassMarginPadding</button>\r\n <button (click)=\"demoDeleteClassMarginPadding()\">deleteClassMarginPadding</button>\r\n <button (click)=\"demoRemoveClass()\">removeClass</button>\r\n <button (click)=\"demoToggleClass()\">toggleClass</button>\r\n <button (click)=\"demoToggleForce()\">toggleClass(force=true)</button>\r\n <button (click)=\"demoGetClasses()\">getClasses</button>\r\n <button (click)=\"demoClearClasses()\">clearClasses</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomStyle -->\r\n <div class=\"group\">\r\n <h3>DomStyle</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoApplyStyle()\">applyStyleProperty</button>\r\n <button (click)=\"demoGetStyle()\">getStyle</button>\r\n <button (click)=\"demoRemoveStyle()\">removeStyle</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"group\">\r\n <div class=\"group__btns\">\r\n <button class=\"btn-reset\" (click)=\"resetAll()\">🧹 Reset All</button>\r\n <button class=\"btn-clear\" (click)=\"clearLog()\">Clear Log</button>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <!-- ПРАВАЯ КОЛОНКА: лог -->\r\n <aside class=\"playground__log\">\r\n <h2>Лог операций</h2>\r\n <ul>\r\n <li *ngFor=\"let item of logHtml\">{{ item }}</li>\r\n </ul>\r\n <p *ngIf=\"!logHtml.length\" class=\"empty\">Пока пусто — жми кнопки слева.</p>\r\n </aside>\r\n\r\n </main>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {ToolDomAng15Component} from './tool-dom-ang15.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [ToolDomAng15Component],\r\n imports: [CommonModule],\r\n exports: [ToolDomAng15Component]\r\n})\r\nexport class ToolDomAng15Module {\r\n}\r\n","/*\r\n * Public API Surface of tool-dom-ang15\r\n */\r\n\r\nexport * from './lib/tool-dom-ang15.service';\r\nexport * from './lib/tool-dom-ang15.component';\r\nexport * from './lib/tool-dom-ang15.module';\r\n\r\n// 👇 добавляем экспорт DOM-утилит\r\nexport * from './lib/dom/dom-element';\r\nexport * from './lib/dom/dom-class';\r\nexport * from './lib/dom/dom-style';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-dom-ang15.mjs","sources":["../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.service.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-element.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-class.ts","../../../projects/tool-dom-ang15/src/lib/dom/dom-style.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.component.html","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15-routing.module.ts","../../../projects/tool-dom-ang15/src/lib/tool-dom-ang15.module.ts","../../../projects/tool-dom-ang15/src/public-api.ts","../../../projects/tool-dom-ang15/src/tool-dom-ang15.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToolDomAng15Service {\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {DOCUMENT} from '@angular/common';\r\nimport {Inject} from '@angular/core';\r\n\r\nimport {TAllEvents, TSelector, TTypeAppend} from './dom.interface';\r\n\r\n\r\n/**\r\n * Предоставляет методы для манипуляции DOM элементами\r\n *\r\n * Класс включает функционал для:\r\n * - Создания элементов\r\n * - Добавления и удаления элементов из DOM\r\n * - Поиска элементов с повторными попытками\r\n * - Навигации по DOM дереву\r\n * - Работы с data-атрибутами\r\n */\r\nexport class DomElement {\r\n\r\n private _countGetElement = 0;\r\n\r\n constructor(@Inject(DOCUMENT) public document: Document) {\r\n }\r\n\r\n /**\r\n * Создает новый DOM элемент с указанным тегом и CSS классом\r\n *\r\n * @param tagName - HTML тег создаваемого элемента (div, span, button и т.д.)\r\n * @param className - CSS класс для элемента (опционально)\r\n * @returns Новый DOM элемент\r\n *\r\n * @example\r\n * const div = worker.createElement('div', 'container');\r\n * const span = worker.createElement('span');\r\n */\r\n createElement(tagName: string, className?: string): HTMLElement {\r\n const element = this.document.createElement(tagName);\r\n if (className) {\r\n element.className = className;\r\n }\r\n return element;\r\n }\r\n\r\n /**\r\n * Создает и добавляет новый HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент, к которому будет добавлен новый\r\n * @param newElement - HTML тег создаваемого элемента\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param strInnerHTML - Внутреннее HTML содержимое (опционально)\r\n * @param dataId - Значение для атрибута data-id (опционально)\r\n * @param eventName - Тип события для добавления слушателя\r\n * @param fn - Функция-обработчик события (опционально)\r\n *\r\n * @example\r\n * worker.elementCreate(\r\n * this.document.body,\r\n * 'button',\r\n * 'appendChild',\r\n * 'Click me',\r\n * 123,\r\n * 'click',\r\n * () => console.log('Clicked')\r\n * );\r\n */\r\n elementCreate(\r\n parentElement: HTMLElement,\r\n newElement: string,\r\n typeAppend: TTypeAppend,\r\n strInnerHTML: string = '',\r\n dataId: number | string = '',\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null = null\r\n ): void {\r\n if (!parentElement || !newElement) {\r\n return;\r\n }\r\n\r\n const el$ = this.document.createElement(newElement);\r\n\r\n if (dataId !== null) {\r\n el$.setAttribute('data-id', String(dataId));\r\n }\r\n\r\n if (strInnerHTML) {\r\n el$.innerHTML = strInnerHTML;\r\n }\r\n\r\n this.elementAdd(parentElement, typeAppend, dataId, eventName, fn, el$);\r\n }\r\n\r\n /**\r\n * Добавляет существующий HTML элемент в DOM\r\n *\r\n * @param parentElement - Родительский элемент\r\n * @param typeAppend - Способ добавления ('appendChild' или 'insertBefore')\r\n * @param dataId - Идентификатор для атрибута data-id\r\n * @param eventName - Тип события для слушателя\r\n * @param fn - Функция-обработчик события\r\n * @param el$ - Добавляемый DOM элемент\r\n *\r\n * @remarks\r\n * Если typeAppend равен 'insertBefore', элемент добавляется в начало родителя.\r\n * В противном случае элемент добавляется в конец.\r\n */\r\n elementAdd(\r\n parentElement: HTMLElement,\r\n typeAppend: TTypeAppend,\r\n dataId: number | string,\r\n eventName: TAllEvents,\r\n fn: ((event: Event, ...args: any[]) => void) | null,\r\n el$: HTMLElement\r\n ): void {\r\n if ('firstChild' in parentElement) {\r\n if (typeAppend === 'insertBefore') {\r\n (parentElement as Node).insertBefore(el$, parentElement.firstChild);\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n } else {\r\n (parentElement as Node).appendChild(el$);\r\n }\r\n\r\n if (fn) {\r\n el$.addEventListener(eventName, event => {\r\n fn.call(null, event, null, el$, dataId);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Удаляет HTML элемент из DOM\r\n *\r\n * @param parentElement - Родительский элемент, содержащий удаляемый элемент\r\n * @param el$ - Удаляемый DOM элемент\r\n *\r\n * @remarks\r\n * Метод безопасно завершается, если parentElement или el$ отсутствуют\r\n */\r\n elementRemove(parentElement: HTMLElement, el$: HTMLElement): void {\r\n if (parentElement && el$) {\r\n (parentElement as Node).removeChild(el$);\r\n }\r\n }\r\n\r\n /**\r\n * Асинхронно получает HTML элемент с повторными попытками\r\n *\r\n * @param identifier - Селектор для поиска элемента\r\n * @param selector - Метод поиска ('querySelector' или 'querySelectorAll')\r\n * @param node - DOM узел для поиска (по умолчанию this.document)\r\n * @param time - Задержка между попытками в мс (по умолчанию 300)\r\n * @param max - Максимальное количество попыток (по умолчанию 10)\r\n * @returns Промис с найденным DOM элементом\r\n *\r\n * @remarks\r\n * Метод полезен для ожидания появления динамически создаваемых элементов\r\n */\r\n async elementGet(\r\n identifier: string,\r\n selector: TSelector = 'querySelector',\r\n node: Document | HTMLElement | null = this.document,\r\n time: number = 300,\r\n max: number = 10\r\n ): Promise<HTMLElement> {\r\n let result = await this._getElementResult(identifier, selector, node, time);\r\n\r\n if ((!result || (result instanceof NodeList && result.length < 1)) && this._countGetElement < max) {\r\n this._countGetElement++;\r\n result = await this.elementGet(identifier, selector, node, time, max);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Находит элементы по data-атрибуту или его значению\r\n *\r\n * @param elementToSelect - Название data-атрибута (например, 'data-id')\r\n * @param dataValue - Значение атрибута для фильтрации (опционально)\r\n * @returns Массив найденных элементов\r\n * @throws {Error} Если elementToSelect не указан\r\n *\r\n * @example\r\n * // Найти все элементы с data-id\r\n * const items = worker.getElementByDataAttribute('data-id');\r\n *\r\n * // Найти элемент с конкретным значением\r\n * const item = worker.getElementByDataAttribute('data-id', '123');\r\n */\r\n getElementByDataAttribute(elementToSelect: string, dataValue: string | null = null): HTMLElement[] {\r\n if (!elementToSelect) {\r\n throw new Error('elementToSelect is required for getElementByDataAttribute');\r\n }\r\n const selector = dataValue ? `[${elementToSelect}='${dataValue}']` : `[${elementToSelect}]`;\r\n const elements = this.document.querySelectorAll(selector);\r\n return Array.from(elements) as HTMLElement[];\r\n }\r\n\r\n /**\r\n * Внутренний метод для получения элемента с задержкой\r\n *\r\n * @param identifier - Селектор элемента\r\n * @param selector - Метод поиска\r\n * @param node - Корневой узел\r\n * @param time - Время задержки в мс\r\n * @returns Промис с результатом поиска\r\n * @private\r\n */\r\n private async _getElementResult(\r\n identifier: string,\r\n selector: TSelector,\r\n node: Document | HTMLElement | null,\r\n time: number\r\n ): Promise<HTMLElement> {\r\n return this._setDelay(time)\r\n .then(_ => {\r\n if (!node) {\r\n return null;\r\n }\r\n // Используем type assertion для вызова метода\r\n const result = (node as any)[selector](identifier);\r\n return result || null;\r\n })\r\n .catch(error => console.log('Ошибка в _getElementResult', error));\r\n }\r\n\r\n /**\r\n * Создает Promise с задержкой\r\n *\r\n * @param ms - Время задержки в миллисекундах\r\n * @returns Promise, который разрешается через указанное время\r\n * @private\r\n */\r\n private _setDelay(ms: number): Promise<unknown> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Возвращает размеры элемента и его положение относительно viewport\r\n *\r\n * @param element - Целевой DOM элемент\r\n * @returns DOMRect объект с координатами (top, left, right, bottom) и размерами (width, height)\r\n * @throws {Error} Если element не указан\r\n *\r\n * @example\r\n * const rect = worker.getCoordinates(buttonElement);\r\n * console.log(rect.top, rect.left, rect.width);\r\n */\r\n getCoordinates(element: HTMLElement): DOMRect {\r\n if (!element) {\r\n throw new Error('Element is required for getCoordinates');\r\n }\r\n return element.getBoundingClientRect();\r\n }\r\n\r\n /**\r\n * Возвращает родительский элемент указанного DOM узла\r\n *\r\n * @param el - DOM элемент или NodeList\r\n * @returns Родительский элемент или null, если родителя нет\r\n */\r\n elementGetParent(el: Element | NodeList): Node & ParentNode | null {\r\n if (el && 'parentNode' in el) {\r\n return el.parentNode as Node & ParentNode;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Возвращает все соседние элементы (включая сам элемент)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив всех элементов в текущей ветке DOM дерева\r\n *\r\n * @remarks\r\n * Метод собирает все элементы на одном уровне вложенности\r\n */\r\n elementsGetSiblingAll(el: Element | NodeList): Element[] {\r\n if (el && 'parentNode' in el) {\r\n const parent = el.parentNode as Node & ParentNode;\r\n const firstElement = parent.firstChild as Element;\r\n return this.elementGetSiblingNext(firstElement);\r\n }\r\n return [];\r\n }\r\n\r\n /**\r\n * Возвращает все следующие соседние элементы (nextElementSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив элементов, начиная с указанного и включая все следующие\r\n *\r\n * @example\r\n * const nextElements = worker.elementGetSiblingNext(currentElement);\r\n * // Возвращает [currentElement, nextElement, nextNextElement, ...]\r\n */\r\n elementGetSiblingNext(el: Element | NodeList): Element[] {\r\n const result: Element[] = [];\r\n\r\n while (el) {\r\n if ('nextElementSibling' in el) {\r\n result.push(el as Element);\r\n el = (el as Element).nextElementSibling as Element;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все предыдущие соседние элементы (previousSibling)\r\n *\r\n * @param el - Исходный DOM элемент\r\n * @returns Массив предыдущих элементов\r\n *\r\n * @remarks\r\n * Возвращает все элементы, включая указанный, в обратном порядке\r\n */\r\n elementGetSiblingPrevious(el: Element | NodeList | Node): Element[] {\r\n const result: Element[] = [];\r\n let current: Node | null = el as Node;\r\n\r\n while (current) {\r\n result.push(current as Element);\r\n current = current.previousSibling;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Возвращает все прямые дочерние элементы указанного родителя\r\n *\r\n * @param el - Родительский DOM элемент\r\n * @returns Массив дочерних элементов\r\n *\r\n * @example\r\n * const children = worker.elementGetChildren(parentElement);\r\n * children.forEach(child => console.log(child.tagName));\r\n */\r\n elementGetChildren(el: Element): Element[] {\r\n return Array.from(el.children) as Element[];\r\n }\r\n}\r\n","import {ElementRef, Inject} from '@angular/core';\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport {DomElement} from \"./dom-element\";\r\n\r\n/**\r\n * Класс для работы с классами DOM\r\n */\r\nexport class DomClass {\r\n public dom: DomElement;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) public document: Document,\r\n ) {\r\n this.dom = new DomElement(this.document)\r\n }\r\n\r\n //region Управление классами\r\n /**\r\n * Проверяет наличие класса у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс присутствует\r\n */\r\n hasClass(element: HTMLElement, className: string): boolean {\r\n return !!(className && element?.classList.contains(className));\r\n }\r\n\r\n /**\r\n * Добавляет класс элементу\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс добавили\r\n */\r\n addClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.add(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Массовое добавление CSS-классов\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param classNames - Массив названий CSS-классов для добавления\r\n */\r\n addClasses(element: HTMLElement | null, classNames: string[]): void {\r\n if (!element || !classNames || classNames.length === 0) {\r\n return;\r\n }\r\n\r\n classNames.forEach(className => {\r\n if (className && className.trim() !== '') {\r\n this.addClass(element, className.trim());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n * Классы генерируются для всех направлений (top, right, bottom, left).\r\n *\r\n * @param elementRef - Элемент для которого будут создаваться классы.\r\n * @param {number[]} arrVars - Значения для генерации классов.\r\n *\r\n */\r\n addClassMarginPadding(elementRef: ElementRef<HTMLElement>, arrVars: number[] = []): void {\r\n const root = this.dom.elementGetParent(elementRef.nativeElement);\r\n\r\n if (!root) {\r\n console.error('Root element not found');\r\n return;\r\n }\r\n\r\n const properties = ['m', 'p']; // margin, padding\r\n const directions = ['t', 'r', 'b', 'l']; // top, right, bottom, left\r\n let style = this.document.querySelector('style[data-dynamic-style]');\r\n\r\n if (!style) {\r\n style = this.document.createElement('style');\r\n style.setAttribute('data-dynamic-style', '');\r\n root.appendChild(style);\r\n }\r\n\r\n let cssContent = '';\r\n\r\n // Добавляем классы для arrVars (если массив не пустой)\r\n if (arrVars && arrVars.length > 0) {\r\n arrVars.forEach(value => {\r\n properties.forEach(prop => {\r\n directions.forEach(dir => {\r\n const className = `.evo-${prop}${dir}-${value}`;\r\n const cssProperty = prop === 'm' ? 'margin' : 'padding';\r\n const cssDirection = this._getCssDirection(dir);\r\n\r\n cssContent += `${className} { ${cssProperty}-${cssDirection}: var(--evo${value}); }\\n`;\r\n });\r\n });\r\n });\r\n }\r\n\r\n style.textContent = cssContent;\r\n }\r\n\r\n /**\r\n * Удаление всех классов созданных в addClassMarginPadding (<style data-dynamic-style=\"\">)\r\n * @see {@link addClassMarginPadding} - Создает CSS-классы для margin и padding на основе переменных --evo{n}.\r\n */\r\n deleteClassMarginPadding(): void {\r\n this.document.querySelector('style[data-dynamic-style]')?.remove();\r\n }\r\n\r\n /**\r\n * Удаляет класс у элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param {string} className - Класс\r\n *\r\n * @returns {boolean} true, если класс был удален\r\n */\r\n removeClass(element: HTMLElement | null, className: string): boolean {\r\n if (className && element && 'classList' in element) {\r\n element.classList.remove(className);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Переключает CSS-класс у корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n * @param className - Название CSS-класса для переключения\r\n * @param force - Принудительно установить или удалить класс (true - добавить, false - удалить)\r\n */\r\n toggleClass(element: HTMLElement | null, className: string, force?: boolean): void {\r\n if (!element || !className) {\r\n return;\r\n }\r\n\r\n const trimmedClassName = className.trim();\r\n\r\n if (force !== undefined) {\r\n if (force) {\r\n this.addClass(element, trimmedClassName);\r\n } else {\r\n this.removeClass(element, trimmedClassName);\r\n }\r\n } else {\r\n // Переключаем на основе текущего состояния\r\n if (this.hasClass(element, trimmedClassName)) {\r\n this.removeClass(element, trimmedClassName);\r\n } else {\r\n this.addClass(element, trimmedClassName);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Возвращает массив всех CSS-классов корневого элемента\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n *\r\n * @returns Массив названий CSS-классов\r\n */\r\n getClasses(element: HTMLElement | null): string[] {\r\n if (element) {\r\n // Получаем актуальные классы с элемента\r\n return Array.from(element.classList);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Удаляет все CSS-классы у корневого элемента и очищает кэш\r\n *\r\n * @param {HTMLElement} element - Элемент\r\n */\r\n clearClasses(element: HTMLElement | null): void {\r\n // Удаляем все классы с элемента\r\n if (element) {\r\n element.className = '';\r\n }\r\n }\r\n\r\n //endregion\r\n\r\n //region Приватные методы\r\n\r\n /**\r\n * Преобразует сокращенное направление (t, r, b, l) в полное название CSS-свойства.\r\n *\r\n * @param {string} dir - Сокращенное направление (t, r, b, l).\r\n * @returns {string} Полное название направления (top, right, bottom, left).\r\n */\r\n private _getCssDirection(dir: string): string {\r\n switch (dir) {\r\n case 't':\r\n return 'top';\r\n case 'r':\r\n return 'right';\r\n case 'b':\r\n return 'bottom';\r\n case 'l':\r\n return 'left';\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n //endregion\r\n}\r\n","/**\r\n * Класс для работы с DOM элементами\r\n */\r\n\r\nexport class DomStyle {\r\n //region Управление стилями\r\n\r\n\r\n applyStyleProperty(element: HTMLElement | null, property: string, value: string): void {\r\n if (!element || !property || !value) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Применяем к элементу\r\n element.style.setProperty(trimmedProperty, value);\r\n }\r\n\r\n removeStyle(element: HTMLElement | null, property: string): void {\r\n if (!element || !property) {\r\n return;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Удаляем из элемента\r\n element.style.removeProperty(trimmedProperty);\r\n }\r\n\r\n getStyle(element: HTMLElement | null, property: string): string | null {\r\n if (!element || !property) {\r\n return null;\r\n }\r\n\r\n const trimmedProperty = property.trim();\r\n\r\n // Или получаем непосредственно с элемента\r\n return element.style.getPropertyValue(trimmedProperty) || null;\r\n }\r\n\r\n /**\r\n * Применение CSS-стилей через строку\r\n *\r\n * !!! очень осторожно так как метод стирает старое и присваивает значение для cssText\r\n *\r\n * @param {HTMLElement} element - элемент\r\n * @param stringStyles - строка со стилями\r\n *\r\n * @example\r\n * const root = document.documentElement as any;\r\n * const styles = `--big-page-width:${width}; --z-index: ${zIndex}`;\r\n *\r\n * this.setStylesString(root, styles);\r\n */\r\n // public setStylesString(element: HTMLElement | null, stringStyles: string | null): void {\r\n // if (!element || !stringStyles) return;\r\n //\r\n // element.style.cssText = stringStyles;\r\n // }\r\n\r\n //endregion\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n Inject,\r\n OnInit,\r\n ViewChild,\r\n AfterViewInit,\r\n} from '@angular/core';\r\nimport {DOCUMENT} from '@angular/common';\r\n\r\nimport {DomClass} from './dom/dom-class';\r\nimport {DomElement} from './dom/dom-element';\r\nimport {DomStyle} from './dom/dom-style';\r\n\r\nimport {green} from 'tool-log'\r\n\r\n@Component({\r\n selector: 'lib-tool-dom-ang15',\r\n templateUrl: './tool-dom-ang15.component.html',\r\n styleUrls: ['./tool-dom-ang15.component.scss'],\r\n})\r\nexport class ToolDomAng15Component implements OnInit, AfterViewInit {\r\n\r\n /** Ссылка на контейнер-песочницу (корень для addClassMarginPadding) */\r\n @ViewChild('sandbox', {static: true}) sandboxRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на целевой элемент для манипуляций классами/стилями */\r\n @ViewChild('target', {static: true}) targetRef!: ElementRef<HTMLElement>;\r\n\r\n /** Ссылка на контейнер для динамически создаваемых элементов */\r\n @ViewChild('dynamicHost', {static: true}) dynamicHostRef!: ElementRef<HTMLElement>;\r\n\r\n /** Лог операций */\r\n public logHtml: string[] = [];\r\n\r\n /** Публичные экземпляры сервисов */\r\n public dom!: DomElement;\r\n public cls!: DomClass;\r\n public style!: DomStyle;\r\n\r\n /** Счётчик созданных элементов */\r\n private _createdCounter = 0;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document) {\r\n }\r\n\r\n ngOnInit(): void {\r\n // Инициализация — DomClass зависит от DomElement\r\n this.dom = new DomElement(this.document);\r\n this.cls = new DomClass(this.document);\r\n this.style = new DomStyle();\r\n\r\n this._log('✅ ToolDomComponent: сервисы инициализированы');\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this._log('✅ ToolDomComponent: view инициализирован, DOM доступен');\r\n\r\n }\r\n\r\n // ============================================================\r\n // DOM ELEMENT — демонстрации\r\n // ============================================================\r\n\r\n /** createElement */\r\n demoCreateElement(): void {\r\n const el = this.dom.createElement('div', 'created-box');\r\n el.textContent = `createElement #${++this._createdCounter}`;\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n this._log(`createElement → <div class=\"created-box\">`);\r\n }\r\n\r\n /** elementCreate (создание + вставка + событие) */\r\n demoElementCreate(): void {\r\n this.dom.elementCreate(\r\n this.dynamicHostRef.nativeElement,\r\n 'button',\r\n 'appendChild',\r\n `Кнопка #${++this._createdCounter} — кликни меня`,\r\n `btn-${this._createdCounter}`,\r\n 'click',\r\n () => green('demoElementCreate')\r\n );\r\n this._log('elementCreate → <button> c обработчиком click');\r\n }\r\n\r\n /** elementAdd (вставка существующего) */\r\n demoElementAdd(): void {\r\n const el = this.dom.createElement('span', 'added-span');\r\n el.textContent = ` insertBefore #${++this._createdCounter} `;\r\n\r\n this.dom.elementAdd(\r\n this.dynamicHostRef.nativeElement,\r\n 'insertBefore',\r\n 'span-x',\r\n 'mouseenter',\r\n () => this._log('🖱 mouseenter на вставленном <span>'),\r\n el\r\n );\r\n this._log('elementAdd → insertBefore <span>');\r\n }\r\n\r\n /** elementRemove */\r\n demoElementRemove(): void {\r\n const host = this.dynamicHostRef.nativeElement;\r\n const last = host.lastElementChild as HTMLElement;\r\n if (last) {\r\n this.dom.elementRemove(host, last);\r\n this._log(`elementRemove → удалён <${last.tagName.toLowerCase()}>`);\r\n } else {\r\n this._log('elementRemove → нечего удалять');\r\n }\r\n }\r\n\r\n /** elementGet (асинхронный поиск с повторными попытками) */\r\n async demoElementGet(): Promise<void> {\r\n this._log('elementGet → ждём появления .appears-later ...');\r\n\r\n // Создадим элемент через 1 секунду\r\n setTimeout(() => {\r\n const el = this.dom.createElement('div', 'appears-later');\r\n el.textContent = 'Я появился позже!';\r\n this.dynamicHostRef.nativeElement.appendChild(el);\r\n }, 1000);\r\n\r\n const found = await this.dom.elementGet('.appears-later');\r\n this._log(`elementGet → найден: \"${found?.textContent ?? 'null'}\"`);\r\n }\r\n\r\n /** getElementByDataAttribute */\r\n demoGetByDataAttr(): void {\r\n const all = this.dom.getElementByDataAttribute('data-id');\r\n this._log(`getElementByDataAttribute('data-id') → найдено: ${all.length}`);\r\n\r\n if (all.length) {\r\n const first = this.dom.getElementByDataAttribute('data-id', all[0].dataset['id']!);\r\n this._log(`getElementByDataAttribute('data-id', '${all[0].dataset['id']}') → найдено: ${first.length}`);\r\n }\r\n }\r\n\r\n /** getCoordinates */\r\n demoGetCoordinates(): void {\r\n const rect = this.dom.getCoordinates(this.targetRef.nativeElement);\r\n this._log(\r\n `getCoordinates → top=${rect.top.toFixed(1)}, left=${rect.left.toFixed(1)}, ` +\r\n `w=${rect.width.toFixed(1)}, h=${rect.height.toFixed(1)}`\r\n );\r\n }\r\n\r\n /** elementGetParent */\r\n demoGetParent(): void {\r\n const parent = this.dom.elementGetParent(this.targetRef.nativeElement);\r\n this._log(\r\n `elementGetParent → <${parent && 'tagName' in parent ? (parent as HTMLElement).tagName.toLowerCase() : 'null'}>`\r\n );\r\n }\r\n\r\n /** elementsGetSiblingAll */\r\n demoSiblingsAll(): void {\r\n const all = this.dom.elementsGetSiblingAll(this.targetRef.nativeElement);\r\n this._log(`elementsGetSiblingAll → ${all.length} элемент(ов): ${all.map(e => e.tagName.toLowerCase()).join(', ')}`);\r\n }\r\n\r\n /** elementGetSiblingNext */\r\n demoSiblingsNext(): void {\r\n const next = this.dom.elementGetSiblingNext(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingNext → ${next.length} элемент(ов)`);\r\n }\r\n\r\n /** elementGetSiblingPrevious */\r\n demoSiblingsPrevious(): void {\r\n const prev = this.dom.elementGetSiblingPrevious(this.targetRef.nativeElement);\r\n this._log(`elementGetSiblingPrevious → ${prev.length} узел(ов) (включая текстовые)`);\r\n }\r\n\r\n /** elementGetChildren */\r\n demoGetChildren(): void {\r\n const kids = this.dom.elementGetChildren(this.dynamicHostRef.nativeElement);\r\n this._log(`elementGetChildren → ${kids.length} дочерних элемент(ов)`);\r\n }\r\n\r\n // ============================================================\r\n // DOM CLASS — демонстрации\r\n // ============================================================\r\n\r\n /** hasClass */\r\n demoHasClass(): void {\r\n const has = this.cls.hasClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`hasClass('demo-active') → ${has}`);\r\n }\r\n\r\n /** addClass */\r\n demoAddClass(): void {\r\n const ok = this.cls.addClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`addClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** addClasses (массово) */\r\n demoAddClasses(): void {\r\n this.cls.addClasses(this.targetRef.nativeElement, ['demo-a', 'demo-b', 'demo-c']);\r\n this._log('addClasses([demo-a, demo-b, demo-c]) → добавлены');\r\n }\r\n\r\n /** addClassMarginPadding — генерация утилит отступов */\r\n demoAddClassMarginPadding(): void {\r\n // Генерируем классы для значений 1..5 (соответствуют var(--evo1..5))\r\n this.cls.addClassMarginPadding(this.sandboxRef, [1, 2, 3, 4, 5]);\r\n\r\n // Применим один из сгенерированных классов\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-mt-2');\r\n this.cls.addClass(this.targetRef.nativeElement, 'evo-pl-3');\r\n\r\n this._log('addClassMarginPadding → сгенерированы .evo-{m|p}{t|r|b|l}-{1..5}, применены evo-mt-2, evo-pl-3');\r\n }\r\n\r\n /** deleteClassMarginPadding */\r\n demoDeleteClassMarginPadding(): void {\r\n this.cls.deleteClassMarginPadding();\r\n this._log('deleteClassMarginPadding → <style data-dynamic-style> удалён');\r\n }\r\n\r\n /** removeClass */\r\n demoRemoveClass(): void {\r\n const ok = this.cls.removeClass(this.targetRef.nativeElement, 'demo-active');\r\n this._log(`removeClass('demo-active') → ${ok}`);\r\n }\r\n\r\n /** toggleClass */\r\n demoToggleClass(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-toggled');\r\n this._log(`toggleClass('demo-toggled') → сейчас: ${this.cls.hasClass(this.targetRef.nativeElement, 'demo-toggled')}`);\r\n }\r\n\r\n /** toggleClass с force */\r\n demoToggleForce(): void {\r\n this.cls.toggleClass(this.targetRef.nativeElement, 'demo-forced', true);\r\n this._log(\"toggleClass('demo-forced', true) → принудительно добавлен\");\r\n }\r\n\r\n /** getClasses */\r\n demoGetClasses(): void {\r\n const list = this.cls.getClasses(this.targetRef.nativeElement);\r\n this._log(`getClasses → [${list.join(', ')}]`);\r\n }\r\n\r\n /** clearClasses */\r\n demoClearClasses(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this._log('clearClasses → все классы удалены');\r\n }\r\n\r\n // ============================================================\r\n // DOM STYLE — демонстрации\r\n // ============================================================\r\n\r\n /** applyStyleProperty */\r\n demoApplyStyle(): void {\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'background-color', '#ffe08a');\r\n this.style.applyStyleProperty(this.targetRef.nativeElement, 'border', '2px dashed #d97706');\r\n this._log(\"applyStyleProperty → 'background-color', 'border'\");\r\n }\r\n\r\n /** getStyle */\r\n demoGetStyle(): void {\r\n const bg = this.style.getStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(`getStyle('background-color') → \"${bg ?? 'null'}\"`);\r\n }\r\n\r\n /** removeStyle */\r\n demoRemoveStyle(): void {\r\n this.style.removeStyle(this.targetRef.nativeElement, 'background-color');\r\n this._log(\"removeStyle('background-color') → удалён\");\r\n }\r\n\r\n // ============================================================\r\n // Сброс / утилиты\r\n // ============================================================\r\n\r\n /** Полный сброс состояния песочницы */\r\n resetAll(): void {\r\n this.cls.clearClasses(this.targetRef.nativeElement);\r\n this.targetRef.nativeElement.removeAttribute('style');\r\n\r\n const host = this.dynamicHostRef.nativeElement;\r\n while (host.firstChild) {\r\n host.removeChild(host.firstChild);\r\n }\r\n\r\n this.cls.deleteClassMarginPadding();\r\n this._createdCounter = 0;\r\n\r\n this._log('🧹 Сброс: классы, стили, динамические элементы, dynamic-style');\r\n }\r\n\r\n /** Очистить лог */\r\n clearLog(): void {\r\n this.logHtml = [];\r\n }\r\n\r\n /** Внутреннее логирование */\r\n private _log(message: string): void {\r\n const time = new Date().toLocaleTimeString();\r\n\r\n this.logHtml.unshift(`[${time}] ${message}`);\r\n\r\n if (this.logHtml.length > 200) {\r\n this.logHtml.length = 200;\r\n }\r\n // eslint-disable-next-line no-console\r\n console.log(message);\r\n }\r\n}\r\n","<div class=\"playground\">\r\n\r\n <header class=\"playground__header\">\r\n <h1>DOM Playground</h1>\r\n <p>Демонстрация всех методов <code>DomClass</code>, <code>DomElement</code>, <code>DomStyle</code></p>\r\n </header>\r\n\r\n <main class=\"playground__body\">\r\n\r\n <!-- ЛЕВАЯ КОЛОНКА: элементы и кнопки -->\r\n <section class=\"playground__panel\">\r\n\r\n <!-- Песочница — корень для addClassMarginPadding -->\r\n <div #sandbox class=\"sandbox\">\r\n <h2>Песочница</h2>\r\n\r\n <!-- Целевой элемент для классов и стилей -->\r\n <div #target class=\"target\">\r\n 🎯 target — применяем классы и стили\r\n </div>\r\n\r\n <!-- Контейнер для динамически создаваемых элементов -->\r\n <div #dynamicHost class=\"dynamic-host\">\r\n <span>динамические элементы ↓</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomElement -->\r\n <div class=\"group\">\r\n <h3>DomElement</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoCreateElement()\">createElement</button>\r\n <button (click)=\"demoElementCreate()\">elementCreate</button>\r\n <button (click)=\"demoElementAdd()\">elementAdd</button>\r\n <button (click)=\"demoElementRemove()\">elementRemove</button>\r\n <button (click)=\"demoElementGet()\">elementGet</button>\r\n <button (click)=\"demoGetByDataAttr()\">getElementByDataAttribute</button>\r\n <button (click)=\"demoGetCoordinates()\">getCoordinates</button>\r\n <button (click)=\"demoGetParent()\">elementGetParent</button>\r\n <button (click)=\"demoSiblingsAll()\">elementsGetSiblingAll</button>\r\n <button (click)=\"demoSiblingsNext()\">elementGetSiblingNext</button>\r\n <button (click)=\"demoSiblingsPrevious()\">elementGetSiblingPrevious</button>\r\n <button (click)=\"demoGetChildren()\">elementGetChildren</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomClass -->\r\n <div class=\"group\">\r\n <h3>DomClass</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoHasClass()\">hasClass</button>\r\n <button (click)=\"demoAddClass()\">addClass</button>\r\n <button (click)=\"demoAddClasses()\">addClasses</button>\r\n <button (click)=\"demoAddClassMarginPadding()\">addClassMarginPadding</button>\r\n <button (click)=\"demoDeleteClassMarginPadding()\">deleteClassMarginPadding</button>\r\n <button (click)=\"demoRemoveClass()\">removeClass</button>\r\n <button (click)=\"demoToggleClass()\">toggleClass</button>\r\n <button (click)=\"demoToggleForce()\">toggleClass(force=true)</button>\r\n <button (click)=\"demoGetClasses()\">getClasses</button>\r\n <button (click)=\"demoClearClasses()\">clearClasses</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Кнопки: DomStyle -->\r\n <div class=\"group\">\r\n <h3>DomStyle</h3>\r\n <div class=\"group__btns\">\r\n <button (click)=\"demoApplyStyle()\">applyStyleProperty</button>\r\n <button (click)=\"demoGetStyle()\">getStyle</button>\r\n <button (click)=\"demoRemoveStyle()\">removeStyle</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"group\">\r\n <div class=\"group__btns\">\r\n <button class=\"btn-reset\" (click)=\"resetAll()\">🧹 Reset All</button>\r\n <button class=\"btn-clear\" (click)=\"clearLog()\">Clear Log</button>\r\n </div>\r\n </div>\r\n\r\n </section>\r\n\r\n <!-- ПРАВАЯ КОЛОНКА: лог -->\r\n <aside class=\"playground__log\">\r\n <h2>Лог операций</h2>\r\n <ul>\r\n <li *ngFor=\"let item of logHtml\">{{ item }}</li>\r\n </ul>\r\n <p *ngIf=\"!logHtml.length\" class=\"empty\">Пока пусто — жми кнопки слева.</p>\r\n </aside>\r\n\r\n </main>\r\n</div>\r\n","// tool-dom-ang15-routing.module.ts\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { ToolDomAng15Component } from './tool-dom-ang15.component';\r\n\r\nconst routes: Routes = [\r\n { path: '', component: ToolDomAng15Component },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule],\r\n})\r\nexport class ToolDomAng15RoutingModule {}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\nimport { ToolDomAng15RoutingModule } from './tool-dom-ang15-routing.module';\r\nimport {ToolDomAng15Component} from './tool-dom-ang15.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [ToolDomAng15Component],\r\n imports: [CommonModule, ToolDomAng15RoutingModule],\r\n exports: [ToolDomAng15Component]\r\n})\r\nexport class ToolDomAng15Module {\r\n}\r\n","/*\r\n * Public API Surface of tool-dom-ang15\r\n */\r\n\r\nexport * from './lib/tool-dom-ang15.service';\r\nexport * from './lib/tool-dom-ang15.component';\r\nexport * from './lib/tool-dom-ang15.module';\r\n\r\n// 👇 добавляем экспорт DOM-утилит\r\nexport * from './lib/dom/dom-element';\r\nexport * from './lib/dom/dom-class';\r\nexport * from './lib/dom/dom-style';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/router";
3
+ export declare class ToolDomAng15RoutingModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolDomAng15RoutingModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ToolDomAng15RoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<ToolDomAng15RoutingModule>;
7
+ }
@@ -1,8 +1,9 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./tool-dom-ang15.component";
3
3
  import * as i2 from "@angular/common";
4
+ import * as i3 from "./tool-dom-ang15-routing.module";
4
5
  export declare class ToolDomAng15Module {
5
6
  static ɵfac: i0.ɵɵFactoryDeclaration<ToolDomAng15Module, never>;
6
- static ɵmod: i0.ɵɵNgModuleDeclaration<ToolDomAng15Module, [typeof i1.ToolDomAng15Component], [typeof i2.CommonModule], [typeof i1.ToolDomAng15Component]>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ToolDomAng15Module, [typeof i1.ToolDomAng15Component], [typeof i2.CommonModule, typeof i3.ToolDomAng15RoutingModule], [typeof i1.ToolDomAng15Component]>;
7
8
  static ɵinj: i0.ɵɵInjectorDeclaration<ToolDomAng15Module>;
8
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tool-dom-ang15",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Библиотека для работы с DOM",
5
5
  "author": "Vladimir Kurguzov <kurguzov74@gmail.com>",
6
6
  "peerDependencies": {