This commit is contained in:
CHEVALLIER Abel
2025-11-13 16:23:22 +01:00
parent de9c515a47
commit cb235644dc
34924 changed files with 3811102 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
nz-radio-group {
float: right;
}
button {
margin-right: 12px;
}
nz-graph {
height: 400px;
}
.graph-node {
border: 1px solid #8cc8ff;
cursor: pointer;
font-size: 12px;
height: 100%;
line-height: 1.2;
border-radius: 0;
text-align: center;
word-break: break-all;
display: block;
}
.group-node {
border-width: 4px;
}
.leaf-node {
color: #1a90ff;
background: rgba(26, 144, 255, 0.15);
min-height: 30px;
height: fit-content;
}
.title {
padding: 4px;
word-break: keep-all;
}

View File

@@ -0,0 +1,38 @@
<button nz-button nzType="default" (click)="expandAll()">ExpandAll</button>
<button nz-button nzType="default" (click)="collapseAll()">CollapseAll</button>
<button nz-button nzType="primary" (click)="fit()">Fit</button>
<nz-radio-group [(ngModel)]="rankDirection">
<label nz-radio-button nzValue="LR">LR</label>
<label nz-radio-button nzValue="RL">RL</label>
<label nz-radio-button nzValue="TB">TB</label>
<label nz-radio-button nzValue="BT">BT</label>
</nz-radio-group>
<nz-graph
nz-graph-zoom
[nzGraphData]="graphData"
[nzAutoSize]="true"
[nzRankDirection]="rankDirection"
(nzGraphInitialized)="graphInitialized($event)"
>
<ng-container *nzGraphNode="let node">
<foreignObject x="0" y="0" [attr.width]="node.width" [attr.height]="node.height">
<xhtml:div class="graph-node leaf-node" (click)="focusNode(node.id || node.name)">
<div class="title">
{{ node.name }}
</div>
</xhtml:div>
</foreignObject>
</ng-container>
<ng-container *nzGraphGroupNode="let node">
<foreignObject x="0" y="0" [attr.width]="node.width" [attr.height]="node.height">
<xhtml:div class="graph-node group-node" (click)="focusNode(node.id || node.name)">
<div class="title">
{{ node.name }}
</div>
</xhtml:div>
</foreignObject>
</ng-container>
</nz-graph>

View File

@@ -0,0 +1,23 @@
import { fakeAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { <%= classify(name) %>Component } from './<%= dasherize(name) %>.component';
describe('<%= classify(name) %>Component', () => {
let component: <%= classify(name) %>Component;
let fixture: ComponentFixture<<%= classify(name) %>Component>;
beforeEach(fakeAsync(() => {
TestBed.configureTestingModule({
declarations: [ <%= classify(name) %>Component ]
})
.compileComponents();
;
fixture = TestBed.createComponent(<%= classify(name) %>Component);
component = fixture.componentInstance;
fixture.detectChanges();
}));
it('should compile', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,302 @@
import { Component, ViewChild } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { NzButtonModule } from 'ng-zorro-antd/button';
import {
NzGraphComponent,
NzGraphData,
NzGraphDataDef,
NzGraphModule,
NzGraphZoomDirective,
NzRankDirection
} from 'ng-zorro-antd/graph';
import { NzRadioModule } from 'ng-zorro-antd/radio';
@Component({
selector: '<%= selector %>',
imports: [FormsModule, NzButtonModule, NzGraphModule, NzRadioModule],
<% if(inlineTemplate) { %>template: `
<button nz-button nzType="default" (click)="expandAll()">ExpandAll</button>
<button nz-button nzType="default" (click)="collapseAll()">CollapseAll</button>
<button nz-button nzType="primary" (click)="fit()">Fit</button>
<nz-radio-group [(ngModel)]="rankDirection">
<label nz-radio-button nzValue="LR">LR</label>
<label nz-radio-button nzValue="RL">RL</label>
<label nz-radio-button nzValue="TB">TB</label>
<label nz-radio-button nzValue="BT">BT</label>
</nz-radio-group>
<nz-graph
nz-graph-zoom
[nzGraphData]="graphData"
[nzAutoSize]="true"
[nzRankDirection]="rankDirection"
(nzGraphInitialized)="graphInitialized($event)"
>
<ng-container *nzGraphNode="let node">
<foreignObject x="0" y="0" [attr.width]="node.width" [attr.height]="node.height">
<xhtml:div class="graph-node leaf-node" (click)="focusNode(node.id || node.name)">
<div class="title">
{{ node.name }}
</div>
</xhtml:div>
</foreignObject>
</ng-container>
<ng-container *nzGraphGroupNode="let node">
<foreignObject x="0" y="0" [attr.width]="node.width" [attr.height]="node.height">
<xhtml:div class="graph-node group-node" (click)="focusNode(node.id || node.name)">
<div class="title">
{{ node.name }}
</div>
</xhtml:div>
</foreignObject>
</ng-container>
</nz-graph>
`<% } else { %>templateUrl: './<%= dasherize(name) %>.component.html'<% } %>,
<% if(inlineStyle) { %>styles: [`
nz-radio-group {
float: right;
}
button {
margin-right: 12px;
}
nz-graph {
height: 400px;
}
.graph-node {
border: 1px solid #8cc8ff;
cursor: pointer;
font-size: 12px;
height: 100%;
line-height: 1.2;
border-radius: 0;
text-align: center;
word-break: break-all;
display: block;
}
.group-node {
border-width: 4px;
}
.leaf-node {
color: #1a90ff;
background: rgba(26, 144, 255, 0.15);
min-height: 30px;
height: fit-content;
}
.title {
padding: 4px;
word-break: keep-all;
}
`]<% } else { %>styleUrls: ['./<%= dasherize(name) %>.component.<%= style %>']<% } %>
})
export class <%= classify(name) %>Component {
@ViewChild(NzGraphComponent, { static: true }) nzGraphComponent!: NzGraphComponent;
@ViewChild(NzGraphZoomDirective, { static: true }) zoomController!: NzGraphZoomDirective;
zoom = 0.5;
testDef: NzGraphDataDef = {
nodes: [
{
id: '0',
label: '0'
},
{
id: '1',
label: '1'
},
{
id: '2',
label: '2'
},
{
id: '3',
label: '3'
},
{
id: '4',
label: '4'
},
{
id: '5',
label: '5'
},
{
id: '6',
label: '6'
},
{
id: '7',
label: '7'
},
{
id: '8',
label: '8'
},
{
id: '9',
label: '9'
},
{
id: '10',
label: '10'
},
{
id: '11',
label: '11'
},
{
id: '12',
label: '12'
},
{
id: '13',
label: '13'
},
{
id: '14',
label: '14'
},
{
id: '15',
label: '15'
}
],
edges: [
{
v: '0',
w: '1'
},
{
v: '0',
w: '2'
},
{
v: '0',
w: '3'
},
{
v: '0',
w: '4'
},
{
v: '0',
w: '5'
},
{
v: '0',
w: '7'
},
{
v: '0',
w: '8'
},
{
v: '0',
w: '9'
},
{
v: '0',
w: '10'
},
{
v: '0',
w: '11'
},
{
v: '0',
w: '13'
},
{
v: '0',
w: '14'
},
{
v: '0',
w: '15'
},
{
v: '2',
w: '3'
},
{
v: '4',
w: '5'
},
{
v: '4',
w: '6'
},
{
v: '5',
w: '6'
},
{
v: '7',
w: '13'
},
{
v: '8',
w: '14'
},
{
v: '9',
w: '10'
},
{
v: '10',
w: '14'
},
{
v: '10',
w: '12'
},
{
v: '11',
w: '14'
},
{
v: '12',
w: '13'
}
],
compound: {
G0: ['4', '5', '15']
}
};
rankDirection: NzRankDirection = 'TB';
graphData = new NzGraphData(this.testDef);
expand(name: string): void {
this.graphData.expand(name);
}
collapse(name: string): void {
this.graphData.collapse(name);
}
expandAll(): void {
this.graphData.expandAll();
}
collapseAll(): void {
this.graphData.collapseAll();
}
fit(): void {
this.zoomController?.fitCenter();
}
focusNode(e: string | number): void {
this.zoomController?.focus(e);
}
graphInitialized(_ele: NzGraphComponent): void {
// Only nz-graph-zoom enabled, you should run `fitCenter` manually
this.zoomController?.fitCenter();
}
}

View File

@@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const schematics_1 = require("@angular-devkit/schematics");
const build_component_1 = require("../../utils/build-component");
function default_1(options) {
return (0, schematics_1.chain)([
(0, build_component_1.buildComponent)(Object.assign({}, options), {
template: './__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template',
stylesheet: './__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__style__.template'
})
]);
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../schematics/demo/graph-customized/index.ts"],"names":[],"mappings":";;AAQA,4BAUC;AAlBD,2DAGoC;AACpC,iEAA6D;AAI7D,mBAAwB,OAAe;IACrC,OAAO,IAAA,kBAAK,EAAC;QACX,IAAA,gCAAc,oBACP,OAAO,GACZ;YACE,QAAQ,EAAE,kFAAkF;YAC5F,UAAU,EAAE,uFAAuF;SACpG,CACF;KACF,CAAC,CAAC;AACL,CAAC"}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=schema.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../schematics/demo/graph-customized/schema.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1 @@
{"$schema":"http://json-schema.org/schema","$id":"customized-graph","title":"NG-ZORRO customized graph","type":"object","properties":{"path":{"type":"string","format":"path","description":"The path to create the component.","visible":false},"project":{"type":"string","description":"The name of the project.","$default":{"$source":"projectName"}},"name":{"type":"string","description":"The name of the component.","$default":{"$source":"argv","index":0},"x-prompt":"What should be the name of the component?"},"inlineStyle":{"description":"When true, includes styles inline in the component.ts file. Only CSS styles can be included inline. By default, an external styles file is created and referenced in the component.ts file.","type":"boolean","default":false,"alias":"s"},"inlineTemplate":{"description":"When true, includes template inline in the component.ts file. By default, an external template file is created and referenced in the component.ts file.","type":"boolean","default":false,"alias":"t"},"standalone":{"description":"Whether the generated component is standalone.","type":"boolean"},"prefix":{"type":"string","description":"The prefix to apply to the generated component selector.","alias":"p","oneOf":[{"maxLength":0},{"minLength":1,"format":"html-selector"}]},"styleext":{"description":"The file extension to use for style files.","type":"string","default":"css","x-deprecated":"Use \"style\" instead."},"style":{"description":"The file extension or preprocessor to use for style files.","type":"string","default":"css","enum":["css","scss","sass","less","styl"]},"spec":{"type":"boolean","description":"When true (the default), generates a \"spec.ts\" test file for the new component.","default":true,"x-deprecated":"Use \"skipTests\" instead."},"skipTests":{"type":"boolean","description":"When true, does not create \"spec.ts\" test files for the new component."},"flat":{"type":"boolean","description":"Flag to indicate if a dir is created.","default":false},"skipImport":{"type":"boolean","description":"When true, does not import this component into the owning NgModule."},"selector":{"type":"string","format":"html-selector","description":"The selector to use for the component."},"module":{"type":"string","description":"Allows specification of the declaring module.","alias":"m"},"export":{"type":"boolean","default":false,"description":"When true, the declaring NgModule exports this component."},"entryComponent":{"type":"boolean","default":false,"description":"When true, the new component is the entry component of the declaring NgModule."},"classnameWithModule":{"type":"boolean","description":"When true, Use module class name as additional prefix for the component classname.","default":false}},"required":["name"]}