@guiexpert/angular-table 16.0.0 → 16.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -2
- package/esm2022/guiexpert-angular-table.mjs +5 -0
- package/esm2022/lib/component-renderer.if.mjs +2 -0
- package/esm2022/lib/service/dom-service.mjs +56 -0
- package/esm2022/lib/service/render-wrapper-factory.mjs +22 -0
- package/esm2022/lib/service/renderer-wrapper.mjs +44 -0
- package/esm2022/lib/table.component.mjs +97 -0
- package/esm2022/public-api.mjs +9 -0
- package/fesm2022/guiexpert-angular-table.mjs +221 -0
- package/fesm2022/guiexpert-angular-table.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/component-renderer.if.d.ts +4 -0
- package/lib/service/dom-service.d.ts +17 -0
- package/lib/service/render-wrapper-factory.d.ts +13 -0
- package/lib/service/renderer-wrapper.d.ts +14 -0
- package/lib/table.component.d.ts +39 -0
- package/package.json +21 -7
- package/public-api.d.ts +5 -0
- package/.eslintrc.json +0 -46
- package/.idea/angular-table.iml +0 -12
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/ng-package.json +0 -7
- package/project.json +0 -37
- package/src/index.ts +0 -5
- package/src/lib/angular-table/component-renderer.if.ts +0 -12
- package/src/lib/angular-table/service/dom-service.ts +0 -54
- package/src/lib/angular-table/service/render-wrapper-factory.ts +0 -24
- package/src/lib/angular-table/service/renderer-wrapper.ts +0 -86
- package/src/lib/angular-table/table-color-classes.css +0 -90
- package/src/lib/angular-table/table-color-vars.css +0 -141
- package/src/lib/angular-table/table.component.css +0 -88
- package/src/lib/angular-table/table.component.ts +0 -152
- package/tsconfig.json +0 -28
- package/tsconfig.lib.json +0 -18
- package/tsconfig.lib.prod.json +0 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guiexpert-angular-table.mjs","sources":["../../../projects/angular-table/src/lib/service/dom-service.ts","../../../projects/angular-table/src/lib/table.component.ts","../../../projects/angular-table/src/lib/service/renderer-wrapper.ts","../../../projects/angular-table/src/lib/service/render-wrapper-factory.ts","../../../projects/angular-table/src/public-api.ts","../../../projects/angular-table/src/guiexpert-angular-table.ts"],"sourcesContent":["import {Injectable, Renderer2} from \"@angular/core\";\nimport {DomServiceIf} from \"@guiexpert/table\";\n\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class DomService implements DomServiceIf {\n\n constructor(\n readonly renderer: Renderer2,\n ) {\n }\n\n setStyle(el: any, style: string, value: any): any {\n this.renderer.setStyle(el, style, value);\n return el;\n };\n\n\n appendText(parent: HTMLDivElement, text: string): HTMLDivElement {\n const div = this.renderer.createText(text);\n this.renderer.appendChild(parent, div);\n return div;\n }\n\n\n addClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(' ')) {\n clazz.split(' ').forEach(c => this.renderer.addClass(div, c))\n } else {\n this.renderer.addClass(div, clazz);\n }\n return div;\n }\n\n removeClass(div: HTMLDivElement, clazz: string) {\n if (clazz.includes(\" \")) {\n clazz.split(\" \").forEach(c => div.classList.remove(c));\n } else {\n div.classList.remove(clazz);\n }\n return div;\n }\n\n appendChild(parent: HTMLElement, child: HTMLElement): void {\n this.renderer.appendChild(parent, child);\n }\n\n createElement<T>(name: string): T {\n return this.renderer.createElement(name);\n }\n\n createText(text: string): HTMLElement {\n return this.renderer.createText(text);\n }\n\n setAttribute(ele: HTMLElement, key: string, value: string): void {\n this.renderer.setAttribute(ele, key, value);\n }\n\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { debounceTime, Subject, takeWhile } from \"rxjs\";\nimport {\n EventListenerIf,\n GeModelChangeEvent,\n GeMouseEvent,\n TableApi,\n TableModelIf,\n TableOptions,\n TableOptionsIf,\n TableScope\n} from \"@guiexpert/table\";\nimport { DomService } from \"./service/dom-service\";\n\n\n@Component({\n selector: \"guiexpert-table\",\n standalone: true,\n imports: [CommonModule],\n providers: [DomService],\n template: \"\",\n styleUrls: [\n \"./table.component.css\"\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent implements OnInit, OnDestroy, EventListenerIf {\n\n @Output()\n tableReady = new Subject<TableApi>();\n\n @Output()\n mouseMoved: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDragging: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseDraggingEnded: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n contextmenu: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n mouseClicked: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n @Output()\n modelChanged: Subject<GeModelChangeEvent> = new Subject<GeModelChangeEvent>();\n\n @Output()\n checkboxChanged: Subject<any[]> = new Subject<any[]>();\n\n @Input()\n tableModel?: TableModelIf;\n\n @Input()\n tableOptions: TableOptionsIf = new TableOptions();\n\n @Input()\n debounceMouseClickDelay: number = 150;\n\n private debounceMouseClick: Subject<GeMouseEvent> = new Subject<GeMouseEvent>();\n\n private tableScope?: TableScope;\n private alive = true;\n\n\n constructor(\n private readonly renderer: Renderer2,\n private readonly elementRef: ElementRef,\n private readonly zone: NgZone,\n private readonly domService: DomService\n ) {\n }\n\n\n onContextmenu(evt: GeMouseEvent): void {\n this.contextmenu.next(evt);\n }\n\n onMouseMoved(evt: GeMouseEvent): void {\n this.mouseMoved.next(evt);\n }\n\n // will be called by table-scope:\n onMouseClicked(evt: GeMouseEvent): void {\n this.debounceMouseClick.next(evt);\n }\n\n onCheckboxChanged(arr: any[]): void {\n this.checkboxChanged.next(arr);\n }\n\n onModelChanged(evt: GeModelChangeEvent): void {\n this.modelChanged.next(evt);\n }\n\n ngOnInit(): void {\n this.initModel();\n this.debounceMouseClick\n .pipe(\n debounceTime(this.debounceMouseClickDelay),\n takeWhile(() => this.alive)\n )\n .subscribe((value) => this.mouseClicked.next(value));\n }\n\n ngOnDestroy(): void {\n this.alive = false;\n }\n\n\n onMouseDragging(evt: GeMouseEvent): void {\n this.mouseDragging.next(evt);\n }\n\n onMouseDraggingEnd(evt: GeMouseEvent): void {\n this.mouseDraggingEnded.next(evt);\n }\n\n\n private initModel() {\n this.zone.runOutsideAngular(this.init.bind(this));\n }\n\n private init() {\n if (this.tableModel) {\n this.tableScope = new TableScope(\n this.elementRef.nativeElement, this.tableModel, this.domService, this.tableOptions, this\n );\n this.tableScope.firstInit();\n this.tableReady.next(this.tableScope.getApi());\n }\n }\n\n\n}\n","import {AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType} from \"@guiexpert/table\";\nimport {\n ApplicationRef,\n ChangeDetectorRef,\n createComponent,\n EnvironmentInjector,\n EventEmitter,\n NgZone,\n Type\n} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {Subject, takeUntil} from \"rxjs\";\nimport {Observable} from \"rxjs/internal/Observable\";\n\n\nexport class RendererWrapper<T extends ComponentRendererIf<T>>\n implements CellRendererIf {\n\n public readonly event$ = new EventEmitter<any>();\n private readonly closed$ = new Subject<number>();\n\n constructor(\n private componentType: Type<ComponentRendererIf<T>>,\n private appRef: ApplicationRef,\n private injector: EnvironmentInjector,\n private cdr: ChangeDetectorRef,\n private readonly zone: NgZone\n ) {\n }\n\n render(\n cellDiv: HTMLDivElement,\n rowIndex: number,\n columnIndex: number,\n areaIdent: AreaIdent,\n areaModel: AreaModelIf,\n cellValue: any,\n domService: DomServiceIf): RendererCleanupFnType | undefined {\n\n const componentRef = createComponent(this.componentType, {\n environmentInjector: this.injector\n });\n componentRef.instance.setData(\n rowIndex,\n columnIndex,\n areaIdent,\n areaModel,\n cellValue);\n\n\n const emmiterNames = Object.keys(componentRef.instance)\n .filter(key => {\n // @ts-ignore\n const t = componentRef.instance[key];\n return t['subscribe']\n });\n\n // @ts-ignore\n const observables: Observable[] = (emmiterNames.map(key => (componentRef.instance[key] as Observable)));\n observables.forEach(obs => obs\n .pipe(\n takeUntil(this.closed$)\n )\n .subscribe((event: any) => {\n console.info('RendererWrapper event >', event); // TODO hmm?\n this.event$.next(event);\n })\n );\n\n cellDiv.appendChild(componentRef.location.nativeElement);\n\n this.appRef.attachView(componentRef.hostView);\n\n this.zone.run(() => {\n this.cdr.detectChanges();\n });\n\n return () => {\n // clean up:\n this.appRef.detachView(componentRef.hostView);\n this.closed$.next(Date.now());\n };\n }\n\n\n}\n","import {ApplicationRef, ChangeDetectorRef, EnvironmentInjector, Injectable, NgZone, Type} from \"@angular/core\";\nimport {ComponentRendererIf} from \"../component-renderer.if\";\nimport {RendererWrapper} from \"./renderer-wrapper\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class RenderWrapperFactory {\n\n constructor(\n private readonly appRef: ApplicationRef,\n private readonly injector: EnvironmentInjector,\n private readonly zone: NgZone\n ) {\n }\n\n create<T>(\n componentType: Type<ComponentRendererIf<T>>,\n cdr: ChangeDetectorRef\n ) {\n return new RendererWrapper(componentType, this.appRef, this.injector, cdr, this.zone);\n }\n\n}\n","/*\n * Public API Surface of angular-table\n */\n\nexport * from './lib/table.component';\nexport * from './lib/component-renderer.if';\nexport * from './lib/service/dom-service';\nexport * from './lib/service/renderer-wrapper';\nexport * from './lib/service/render-wrapper-factory';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DomService"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AreaIdent, AreaModelIf, RendererCleanupFnType } from "@guiexpert/table";
|
|
2
|
+
export interface ComponentRendererIf<T> {
|
|
3
|
+
setData(rowIndex: number, columnIndex: number, areaIdent: AreaIdent, areaModel: AreaModelIf, cellValue: any): RendererCleanupFnType | undefined;
|
|
4
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Renderer2 } from "@angular/core";
|
|
2
|
+
import { DomServiceIf } from "@guiexpert/table";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class DomService implements DomServiceIf {
|
|
5
|
+
readonly renderer: Renderer2;
|
|
6
|
+
constructor(renderer: Renderer2);
|
|
7
|
+
setStyle(el: any, style: string, value: any): any;
|
|
8
|
+
appendText(parent: HTMLDivElement, text: string): HTMLDivElement;
|
|
9
|
+
addClass(div: HTMLDivElement, clazz: string): HTMLDivElement;
|
|
10
|
+
removeClass(div: HTMLDivElement, clazz: string): HTMLDivElement;
|
|
11
|
+
appendChild(parent: HTMLElement, child: HTMLElement): void;
|
|
12
|
+
createElement<T>(name: string): T;
|
|
13
|
+
createText(text: string): HTMLElement;
|
|
14
|
+
setAttribute(ele: HTMLElement, key: string, value: string): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DomService, never>;
|
|
16
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DomService>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ApplicationRef, ChangeDetectorRef, EnvironmentInjector, NgZone, Type } from "@angular/core";
|
|
2
|
+
import { ComponentRendererIf } from "../component-renderer.if";
|
|
3
|
+
import { RendererWrapper } from "./renderer-wrapper";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class RenderWrapperFactory {
|
|
6
|
+
private readonly appRef;
|
|
7
|
+
private readonly injector;
|
|
8
|
+
private readonly zone;
|
|
9
|
+
constructor(appRef: ApplicationRef, injector: EnvironmentInjector, zone: NgZone);
|
|
10
|
+
create<T>(componentType: Type<ComponentRendererIf<T>>, cdr: ChangeDetectorRef): RendererWrapper<ComponentRendererIf<T>>;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RenderWrapperFactory, never>;
|
|
12
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RenderWrapperFactory>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType } from "@guiexpert/table";
|
|
2
|
+
import { ApplicationRef, ChangeDetectorRef, EnvironmentInjector, EventEmitter, NgZone, Type } from "@angular/core";
|
|
3
|
+
import { ComponentRendererIf } from "../component-renderer.if";
|
|
4
|
+
export declare class RendererWrapper<T extends ComponentRendererIf<T>> implements CellRendererIf {
|
|
5
|
+
private componentType;
|
|
6
|
+
private appRef;
|
|
7
|
+
private injector;
|
|
8
|
+
private cdr;
|
|
9
|
+
private readonly zone;
|
|
10
|
+
readonly event$: EventEmitter<any>;
|
|
11
|
+
private readonly closed$;
|
|
12
|
+
constructor(componentType: Type<ComponentRendererIf<T>>, appRef: ApplicationRef, injector: EnvironmentInjector, cdr: ChangeDetectorRef, zone: NgZone);
|
|
13
|
+
render(cellDiv: HTMLDivElement, rowIndex: number, columnIndex: number, areaIdent: AreaIdent, areaModel: AreaModelIf, cellValue: any, domService: DomServiceIf): RendererCleanupFnType | undefined;
|
|
14
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ElementRef, NgZone, OnDestroy, OnInit, Renderer2 } from "@angular/core";
|
|
2
|
+
import { Subject } from "rxjs";
|
|
3
|
+
import { EventListenerIf, GeModelChangeEvent, GeMouseEvent, TableApi, TableModelIf, TableOptionsIf } from "@guiexpert/table";
|
|
4
|
+
import { DomService } from "./service/dom-service";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class TableComponent implements OnInit, OnDestroy, EventListenerIf {
|
|
7
|
+
private readonly renderer;
|
|
8
|
+
private readonly elementRef;
|
|
9
|
+
private readonly zone;
|
|
10
|
+
private readonly domService;
|
|
11
|
+
tableReady: Subject<TableApi>;
|
|
12
|
+
mouseMoved: Subject<GeMouseEvent>;
|
|
13
|
+
mouseDragging: Subject<GeMouseEvent>;
|
|
14
|
+
mouseDraggingEnded: Subject<GeMouseEvent>;
|
|
15
|
+
contextmenu: Subject<GeMouseEvent>;
|
|
16
|
+
mouseClicked: Subject<GeMouseEvent>;
|
|
17
|
+
modelChanged: Subject<GeModelChangeEvent>;
|
|
18
|
+
checkboxChanged: Subject<any[]>;
|
|
19
|
+
tableModel?: TableModelIf;
|
|
20
|
+
tableOptions: TableOptionsIf;
|
|
21
|
+
debounceMouseClickDelay: number;
|
|
22
|
+
private debounceMouseClick;
|
|
23
|
+
private tableScope?;
|
|
24
|
+
private alive;
|
|
25
|
+
constructor(renderer: Renderer2, elementRef: ElementRef, zone: NgZone, domService: DomService);
|
|
26
|
+
onContextmenu(evt: GeMouseEvent): void;
|
|
27
|
+
onMouseMoved(evt: GeMouseEvent): void;
|
|
28
|
+
onMouseClicked(evt: GeMouseEvent): void;
|
|
29
|
+
onCheckboxChanged(arr: any[]): void;
|
|
30
|
+
onModelChanged(evt: GeModelChangeEvent): void;
|
|
31
|
+
ngOnInit(): void;
|
|
32
|
+
ngOnDestroy(): void;
|
|
33
|
+
onMouseDragging(evt: GeMouseEvent): void;
|
|
34
|
+
onMouseDraggingEnd(evt: GeMouseEvent): void;
|
|
35
|
+
private initModel;
|
|
36
|
+
private init;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent, "guiexpert-table", never, { "tableModel": { "alias": "tableModel"; "required": false; }; "tableOptions": { "alias": "tableOptions"; "required": false; }; "debounceMouseClickDelay": { "alias": "debounceMouseClickDelay"; "required": false; }; }, { "tableReady": "tableReady"; "mouseMoved": "mouseMoved"; "mouseDragging": "mouseDragging"; "mouseDraggingEnded": "mouseDraggingEnded"; "contextmenu": "contextmenu"; "mouseClicked": "mouseClicked"; "modelChanged": "modelChanged"; "checkboxChanged": "checkboxChanged"; }, never, never, true, never>;
|
|
39
|
+
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@guiexpert/angular-table",
|
|
3
|
-
"version": "16.0.
|
|
4
|
-
"scripts": {
|
|
5
|
-
"publish": "npm publish"
|
|
6
|
-
},
|
|
3
|
+
"version": "16.0.1",
|
|
7
4
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": "^16.
|
|
9
|
-
"@angular/core": "^16.
|
|
5
|
+
"@angular/common": "^16.2.12",
|
|
6
|
+
"@angular/core": "^16.2.12"
|
|
10
7
|
},
|
|
11
8
|
"dependencies": {
|
|
12
9
|
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"url": "https://github.com/guiexperttable/angluar-14-table"
|
|
13
|
+
},
|
|
14
|
+
"sideEffects": false,
|
|
15
|
+
"module": "fesm2022/guiexpert-angular-table.mjs",
|
|
16
|
+
"typings": "index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
"./package.json": {
|
|
19
|
+
"default": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"esm2022": "./esm2022/guiexpert-angular-table.mjs",
|
|
24
|
+
"esm": "./esm2022/guiexpert-angular-table.mjs",
|
|
25
|
+
"default": "./fesm2022/guiexpert-angular-table.mjs"
|
|
26
|
+
}
|
|
13
27
|
}
|
|
14
|
-
}
|
|
28
|
+
}
|
package/public-api.d.ts
ADDED
package/.eslintrc.json
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": [
|
|
3
|
-
"../../.eslintrc.json"
|
|
4
|
-
],
|
|
5
|
-
"ignorePatterns": [
|
|
6
|
-
"!**/*"
|
|
7
|
-
],
|
|
8
|
-
"overrides": [
|
|
9
|
-
{
|
|
10
|
-
"files": [
|
|
11
|
-
"*.ts"
|
|
12
|
-
],
|
|
13
|
-
"extends": [
|
|
14
|
-
"plugin:@nrwl/nx/angular",
|
|
15
|
-
"plugin:@angular-eslint/template/process-inline-templates"
|
|
16
|
-
],
|
|
17
|
-
"rules": {
|
|
18
|
-
"@angular-eslint/directive-selector": [
|
|
19
|
-
"error",
|
|
20
|
-
{
|
|
21
|
-
"type": "attribute",
|
|
22
|
-
"prefix": "guiexpert",
|
|
23
|
-
"style": "camelCase"
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
|
-
"@angular-eslint/component-selector": [
|
|
27
|
-
"error",
|
|
28
|
-
{
|
|
29
|
-
"type": "element",
|
|
30
|
-
"prefix": "guiexpert",
|
|
31
|
-
"style": "kebab-case"
|
|
32
|
-
}
|
|
33
|
-
]
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"files": [
|
|
38
|
-
"*.html"
|
|
39
|
-
],
|
|
40
|
-
"extends": [
|
|
41
|
-
"plugin:@nrwl/nx/angular-template"
|
|
42
|
-
],
|
|
43
|
-
"rules": {}
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
package/.idea/angular-table.iml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="WEB_MODULE" version="4">
|
|
3
|
-
<component name="NewModuleRootManager">
|
|
4
|
-
<content url="file://$MODULE_DIR$">
|
|
5
|
-
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
6
|
-
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
7
|
-
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
8
|
-
</content>
|
|
9
|
-
<orderEntry type="inheritedJdk" />
|
|
10
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
11
|
-
</component>
|
|
12
|
-
</module>
|
package/.idea/modules.xml
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="ProjectModuleManager">
|
|
4
|
-
<modules>
|
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/angular-table.iml" filepath="$PROJECT_DIR$/.idea/angular-table.iml" />
|
|
6
|
-
</modules>
|
|
7
|
-
</component>
|
|
8
|
-
</project>
|
package/.idea/vcs.xml
DELETED
package/ng-package.json
DELETED
package/project.json
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@guiexpert/angular-table",
|
|
3
|
-
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
-
"projectType": "library",
|
|
5
|
-
"sourceRoot": "libs/angular-table/src",
|
|
6
|
-
"prefix": "guiexpert",
|
|
7
|
-
"targets": {
|
|
8
|
-
"build": {
|
|
9
|
-
"executor": "@nrwl/angular:package",
|
|
10
|
-
"outputs": [
|
|
11
|
-
"dist/libs/angular-table"
|
|
12
|
-
],
|
|
13
|
-
"options": {
|
|
14
|
-
"project": "libs/angular-table/ng-package.json"
|
|
15
|
-
},
|
|
16
|
-
"configurations": {
|
|
17
|
-
"production": {
|
|
18
|
-
"tsConfig": "libs/angular-table/tsconfig.lib.prod.json"
|
|
19
|
-
},
|
|
20
|
-
"development": {
|
|
21
|
-
"tsConfig": "libs/angular-table/tsconfig.lib.json"
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"defaultConfiguration": "production"
|
|
25
|
-
},
|
|
26
|
-
"lint": {
|
|
27
|
-
"executor": "@nrwl/linter:eslint",
|
|
28
|
-
"options": {
|
|
29
|
-
"lintFilePatterns": [
|
|
30
|
-
"libs/angular-table/**/*.ts",
|
|
31
|
-
"libs/angular-table/**/*.html"
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
"tags": []
|
|
37
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './lib/angular-table/table.component';
|
|
2
|
-
export * from './lib/angular-table/component-renderer.if';
|
|
3
|
-
export * from './lib/angular-table/service/dom-service';
|
|
4
|
-
export * from './lib/angular-table/service/renderer-wrapper';
|
|
5
|
-
export * from './lib/angular-table/service/render-wrapper-factory';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import {AreaIdent, AreaModelIf, RendererCleanupFnType} from "@guiexpert/table";
|
|
2
|
-
|
|
3
|
-
export interface ComponentRendererIf<T> {
|
|
4
|
-
|
|
5
|
-
setData(
|
|
6
|
-
rowIndex: number,
|
|
7
|
-
columnIndex: number,
|
|
8
|
-
areaIdent: AreaIdent,
|
|
9
|
-
areaModel: AreaModelIf,
|
|
10
|
-
cellValue: any): RendererCleanupFnType | undefined;
|
|
11
|
-
|
|
12
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import {Injectable, Renderer2} from "@angular/core";
|
|
2
|
-
import {DomServiceIf} from "@guiexpert/table";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
@Injectable({
|
|
6
|
-
providedIn: "root"
|
|
7
|
-
})
|
|
8
|
-
export class DomService implements DomServiceIf {
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
readonly renderer: Renderer2,
|
|
12
|
-
) {
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
setStyle(el: any, style: string, value: any): any {
|
|
16
|
-
this.renderer.setStyle(el, style, value);
|
|
17
|
-
return el;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
appendText(parent: HTMLDivElement, text: string): HTMLDivElement {
|
|
22
|
-
const div = this.renderer.createText(text);
|
|
23
|
-
this.renderer.appendChild(parent, div);
|
|
24
|
-
return div;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
addClass(div: HTMLDivElement, clazz: string) {
|
|
29
|
-
if (clazz.includes(' ')) {
|
|
30
|
-
clazz.split(' ').forEach(c => this.renderer.addClass(div, c))
|
|
31
|
-
} else {
|
|
32
|
-
this.renderer.addClass(div, clazz);
|
|
33
|
-
}
|
|
34
|
-
return div;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
appendChild(parent: HTMLElement, child: HTMLElement): void {
|
|
38
|
-
this.renderer.appendChild(parent, child);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
createElement<T>(name: string): T {
|
|
42
|
-
return this.renderer.createElement(name);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
createText(text: string): HTMLElement {
|
|
46
|
-
return this.renderer.createText(text);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
setAttribute(ele: HTMLElement, key: string, value: string): void {
|
|
50
|
-
this.renderer.setAttribute(ele, key, value);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {ApplicationRef, ChangeDetectorRef, EnvironmentInjector, Injectable, NgZone, Type} from "@angular/core";
|
|
2
|
-
import {ComponentRendererIf} from "../component-renderer.if";
|
|
3
|
-
import {RendererWrapper} from "./renderer-wrapper";
|
|
4
|
-
|
|
5
|
-
@Injectable({
|
|
6
|
-
providedIn: "root"
|
|
7
|
-
})
|
|
8
|
-
export class RenderWrapperFactory {
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
private readonly appRef: ApplicationRef,
|
|
12
|
-
private readonly injector: EnvironmentInjector,
|
|
13
|
-
private readonly zone: NgZone
|
|
14
|
-
) {
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
create<T>(
|
|
18
|
-
componentType: Type<ComponentRendererIf<T>>,
|
|
19
|
-
cdr: ChangeDetectorRef
|
|
20
|
-
) {
|
|
21
|
-
return new RendererWrapper(componentType, this.appRef, this.injector, cdr, this.zone);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import {AreaIdent, AreaModelIf, CellRendererIf, DomServiceIf, RendererCleanupFnType} from "@guiexpert/table";
|
|
2
|
-
import {
|
|
3
|
-
ApplicationRef,
|
|
4
|
-
ChangeDetectorRef,
|
|
5
|
-
createComponent,
|
|
6
|
-
EnvironmentInjector,
|
|
7
|
-
EventEmitter,
|
|
8
|
-
NgZone,
|
|
9
|
-
Type
|
|
10
|
-
} from "@angular/core";
|
|
11
|
-
import {ComponentRendererIf} from "../component-renderer.if";
|
|
12
|
-
import {Subject, takeUntil} from "rxjs";
|
|
13
|
-
import {Observable} from "rxjs/internal/Observable";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export class RendererWrapper<T extends ComponentRendererIf<T>>
|
|
17
|
-
implements CellRendererIf {
|
|
18
|
-
|
|
19
|
-
public readonly event$ = new EventEmitter<any>();
|
|
20
|
-
private readonly closed$ = new Subject<number>();
|
|
21
|
-
|
|
22
|
-
constructor(
|
|
23
|
-
private componentType: Type<ComponentRendererIf<T>>,
|
|
24
|
-
private appRef: ApplicationRef,
|
|
25
|
-
private injector: EnvironmentInjector,
|
|
26
|
-
private cdr: ChangeDetectorRef,
|
|
27
|
-
private readonly zone: NgZone
|
|
28
|
-
) {
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
render(
|
|
32
|
-
cellDiv: HTMLDivElement,
|
|
33
|
-
rowIndex: number,
|
|
34
|
-
columnIndex: number,
|
|
35
|
-
areaIdent: AreaIdent,
|
|
36
|
-
areaModel: AreaModelIf,
|
|
37
|
-
cellValue: any,
|
|
38
|
-
domService: DomServiceIf): RendererCleanupFnType | undefined {
|
|
39
|
-
|
|
40
|
-
const componentRef = createComponent(this.componentType, {
|
|
41
|
-
environmentInjector: this.injector
|
|
42
|
-
});
|
|
43
|
-
componentRef.instance.setData(
|
|
44
|
-
rowIndex,
|
|
45
|
-
columnIndex,
|
|
46
|
-
areaIdent,
|
|
47
|
-
areaModel,
|
|
48
|
-
cellValue);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const emmiterNames = Object.keys(componentRef.instance)
|
|
52
|
-
.filter(key => {
|
|
53
|
-
// @ts-ignore
|
|
54
|
-
const t = componentRef.instance[key];
|
|
55
|
-
return t['subscribe']
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// @ts-ignore
|
|
59
|
-
const observables: Observable[] = (emmiterNames.map(key => (componentRef.instance[key] as Observable)));
|
|
60
|
-
observables.forEach(obs => obs
|
|
61
|
-
.pipe(
|
|
62
|
-
takeUntil(this.closed$)
|
|
63
|
-
)
|
|
64
|
-
.subscribe((event: any) => {
|
|
65
|
-
console.info('RendererWrapper event >', event); // TODO hmm?
|
|
66
|
-
this.event$.next(event);
|
|
67
|
-
})
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
cellDiv.appendChild(componentRef.location.nativeElement);
|
|
71
|
-
|
|
72
|
-
this.appRef.attachView(componentRef.hostView);
|
|
73
|
-
|
|
74
|
-
this.zone.run(() => {
|
|
75
|
-
this.cdr.detectChanges();
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
return () => {
|
|
79
|
-
// clean up:
|
|
80
|
-
this.appRef.detachView(componentRef.hostView);
|
|
81
|
-
this.closed$.next(Date.now());
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
.ge-table { background-color: var(--ge-table-bg); }
|
|
4
|
-
|
|
5
|
-
.ge-table-header-west { background-color: var(--ge-table-header-west-bg); }
|
|
6
|
-
.ge-table-header-center { background-color: var(--ge-table-header-center-bg); }
|
|
7
|
-
.ge-table-header-east { background-color: var(--ge-table-header-east-bg); }
|
|
8
|
-
.ge-table-header-west { color: var(--ge-table-header-west-text); }
|
|
9
|
-
.ge-table-header-center { color: var(--ge-table-header-center-text); }
|
|
10
|
-
.ge-table-header-east { color: var(--ge-table-header-east-text); }
|
|
11
|
-
|
|
12
|
-
.ge-table-header-west-horizontal-border { background-color: var(--ge-table-header-west-horizontal-border); }
|
|
13
|
-
.ge-table-header-west-vertical-border { background-color: var(--ge-table-header-west-vertical-border); }
|
|
14
|
-
.ge-table-header-center-horizontal-border { background-color: var(--ge-table-header-center-horizontal-border); }
|
|
15
|
-
.ge-table-header-center-vertical-border { background-color: var(--ge-table-header-center-vertical-border); }
|
|
16
|
-
.ge-table-header-east-horizontal-border { background-color: var(--ge-table-header-east-horizontal-border); }
|
|
17
|
-
.ge-table-header-east-vertical-border { background-color: var(--ge-table-header-east-vertical-border); }
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
.ge-table-body-west { background-color: var(--ge-table-body-west-bg); }
|
|
21
|
-
.ge-table-body-center { background-color: var(--ge-table-body-center-bg); }
|
|
22
|
-
.ge-table-body-east { background-color: var(--ge-table-body-east-bg); }
|
|
23
|
-
.ge-table-body-west { color: var(--ge-table-body-west-text); }
|
|
24
|
-
.ge-table-body-center { color: var(--ge-table-body-center-text); }
|
|
25
|
-
.ge-table-body-east { color: var(--ge-table-body-east-text); }
|
|
26
|
-
|
|
27
|
-
.ge-table-body-west-horizontal-border { background-color: var(--ge-table-body-west-horizontal-border); }
|
|
28
|
-
.ge-table-body-west-vertical-border { background-color: var(--ge-table-body-west-vertical-border); }
|
|
29
|
-
.ge-table-body-center-horizontal-border { background-color: var(--ge-table-body-center-horizontal-border); }
|
|
30
|
-
.ge-table-body-center-vertical-border { background-color: var(--ge-table-body-center-vertical-border); }
|
|
31
|
-
.ge-table-body-east-horizontal-border { background-color: var(--ge-table-body-east-horizontal-border); }
|
|
32
|
-
.ge-table-body-east-vertical-border { background-color: var(--ge-table-body-east-vertical-border); }
|
|
33
|
-
|
|
34
|
-
.ge-table-body-west-selected-range { background-color: var(--ge-table-body-west-selected-range-bg); }
|
|
35
|
-
.ge-table-body-center-selected-range { background-color: var(--ge-table-body-center-selected-range-bg); }
|
|
36
|
-
.ge-table-body-east-selected-range { background-color: var(--ge-table-body-east-selected-range-bg); }
|
|
37
|
-
.ge-table-body-west-selected-range { color: var(--ge-table-body-west-selected-range-text); }
|
|
38
|
-
.ge-table-body-center-selected-range { color: var(--ge-table-body-center-selected-range-text); }
|
|
39
|
-
.ge-table-body-east-selected-range { color: var(--ge-table-body-east-selected-range-text); }
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
.ge-table-footer-west { background-color: var(--ge-table-footer-west-bg); }
|
|
47
|
-
.ge-table-footer-center { background-color: var(--ge-table-footer-center-bg); }
|
|
48
|
-
.ge-table-footer-east { background-color: var(--ge-table-footer-east-bg); }
|
|
49
|
-
|
|
50
|
-
.ge-table-footer-west { color: var(--ge-table-footer-west-text); }
|
|
51
|
-
.ge-table-footer-center { color: var(--ge-table-footer-center-text); }
|
|
52
|
-
.ge-table-footer-east { color: var(--ge-table-footer-east-text); }
|
|
53
|
-
|
|
54
|
-
.ge-table-footer-west-horizontal-border { background-color: var(--ge-table-footer-west-horizontal-border); }
|
|
55
|
-
.ge-table-footer-west-vertical-border { background-color: var(--ge-table-footer-west-vertical-border); }
|
|
56
|
-
.ge-table-footer-center-horizontal-border { background-color: var(--ge-table-footer-center-horizontal-border); }
|
|
57
|
-
.ge-table-footer-center-vertical-border { background-color: var(--ge-table-footer-center-vertical-border); }
|
|
58
|
-
.ge-table-footer-east-horizontal-border { background-color: var(--ge-table-footer-east-horizontal-border); }
|
|
59
|
-
.ge-table-footer-east-vertical-border { background-color: var(--ge-table-footer-east-vertical-border); }
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
.ge-table-border { background-color: var(--ge-table-border); }
|
|
65
|
-
.ge-table-row-odd {background-color: var(--ge-table-row-odd-bg); }
|
|
66
|
-
.ge-table-row-even {background-color: var(--ge-table-row-even-bg); }
|
|
67
|
-
.ge-table-column-odd {background-color: var(--ge-table-column-odd-bg); }
|
|
68
|
-
.ge-table-column-even {background-color: var(--ge-table-column-even-bg); }
|
|
69
|
-
|
|
70
|
-
.ge-table-hover-column { background-color: var(--ge-table-hover-column-bg); }
|
|
71
|
-
.ge-table-hover-row { background-color: var(--ge-table-hover-row-bg); }
|
|
72
|
-
|
|
73
|
-
.ge-table-focus-border { background-color: var(--ge-table-focus-border); }
|
|
74
|
-
.ge-table-color-col-resize-handle-hover { background-color: var(--ge-table-color-col-resize-handle-hover-bg); }
|
|
75
|
-
.ge-table-color-dragged-col-div { background-color: var(--ge-table-color-dragged-col-div-bg); }
|
|
76
|
-
.ge-table-color-drop-zone { background-color: var(--ge-table-color-drop-zone-bg); }
|
|
77
|
-
.ge-table-color-drop-zone { background-color: var(--ge-table-color-drop-zone); }
|
|
78
|
-
.ge-table-color-tree-arrow-collapsed-color { background-color: var(--ge-table-color-tree-arrow-collapsed-color); }
|
|
79
|
-
.ge-table-color-error { color: var(--ge-table-color-error-text); }
|
|
80
|
-
.ge-table-tree-arrow-collapsed { color: var(--ge-table-tree-arrow-collapsed-color);}
|
|
81
|
-
.ge-table-column-resize-handle:hover { background-color: var(--ge-table-column-resize-handle-border) }
|
|
82
|
-
|
|
83
|
-
.ge-table-drop-zone { background-color: var(--ge-table-drop-zone-bg); }
|
|
84
|
-
.ge-table-dragged-col-div { background-color: var(--ge-table-dragged-col-div-bg); }
|
|
85
|
-
|
|
86
|
-
/*TODO geht das überhaupt?*/
|
|
87
|
-
.ge-table-cell-editor-input,
|
|
88
|
-
.ge-table-cell-editor-input:focus-within {
|
|
89
|
-
border: none;
|
|
90
|
-
}
|