@ruc-lib/org-chart 2.0.0
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 +202 -0
- package/esm2020/index.mjs +4 -0
- package/esm2020/interfaces/org-chart.mjs +2 -0
- package/esm2020/lib/org-chart/org-chart.component.mjs +209 -0
- package/esm2020/lib/ruclib-org-chart.module.mjs +26 -0
- package/esm2020/ruc-lib-org-chart.mjs +5 -0
- package/esm2020/utils/chart-download.util.mjs +182 -0
- package/fesm2015/ruc-lib-org-chart.mjs +409 -0
- package/fesm2015/ruc-lib-org-chart.mjs.map +1 -0
- package/fesm2020/ruc-lib-org-chart.mjs +421 -0
- package/fesm2020/ruc-lib-org-chart.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/interfaces/org-chart.d.ts +41 -0
- package/lib/org-chart/org-chart.component.d.ts +64 -0
- package/lib/ruclib-org-chart.module.d.ts +16 -0
- package/package.json +36 -0
- package/utils/chart-download.util.d.ts +8 -0
package/README.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# ruclib-org-chart
|
|
2
|
+
|
|
3
|
+
A component for creating a org chart. There are various features like Downloading, Collapseing and Expanding available in it.
|
|
4
|
+
|
|
5
|
+
# Features
|
|
6
|
+
|
|
7
|
+
- User is allowed to input the data source in the correct JSON format (specific to organizational structure); otherwise, print console for that specific missing properties.
|
|
8
|
+
- User is allowed to select different templates for displaying the organizational chart, including various node shapes such as Portrait, Landscape, and Triangle.
|
|
9
|
+
- User is allowed to search by title or subtitle in the organizational chart, with the ability to toggle the visibility of the search bar based on configuration.
|
|
10
|
+
- User is allowed to see the searched node highlighted, while other nodes will be faded when a search is performed.
|
|
11
|
+
- User is allowed to access a hamburger menu (three horizontal lines) that displays a list of options such as Expand All, Collapse All, Download PNG, Download SVG, and Download PDF.
|
|
12
|
+
- User is allowed to expand all nodes by clicking the "Expand All" button and collapse all nodes by clicking the "Collapse All" button.
|
|
13
|
+
- User is allowed to download the organizational chart in PNG format by clicking the "Download PNG" button, in SVG format with the "Download SVG" option, and in PDF format using the "Download PDF" button.
|
|
14
|
+
- User is allowed to hover over any node in the chart, which will highlight the parent and child nodes while fading other nodes, along with displaying a tooltip containing the node's description.
|
|
15
|
+
- User is allowed to click the expand icon on any node to toggle between expanding or collapsing the node, provided it has child data.
|
|
16
|
+
- User is allowed to configure custom CSS for the organizational chart, including styling options like node color, background color.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Installation guide
|
|
20
|
+
|
|
21
|
+
# Install complete library
|
|
22
|
+
|
|
23
|
+
`npm install @uxpractice/ruc-lib`
|
|
24
|
+
|
|
25
|
+
# Install individual component
|
|
26
|
+
|
|
27
|
+
If users only need the dataflow component, they can install it separately
|
|
28
|
+
`npm install @ruc-lib/org-chart`
|
|
29
|
+
|
|
30
|
+
# Usage
|
|
31
|
+
|
|
32
|
+
After installing the the required package successfully, we have to import the CSS in our style.scss file in following way.
|
|
33
|
+
|
|
34
|
+
`@import "../../../node_modules/primeng/resources/themes/lara-light-indigo/theme.css";`
|
|
35
|
+
`@import "../../../node_modules/primeng/resources/primeng.min.css";`
|
|
36
|
+
|
|
37
|
+
here path of the scss file is subject to change as per choice of the installation
|
|
38
|
+
|
|
39
|
+
for library
|
|
40
|
+
`@import "../node_modules/primeng/resources/themes/lara-light-indigo/theme.css";`
|
|
41
|
+
`@import "../node_modules/primeng/resources/primeng.min.css";`
|
|
42
|
+
|
|
43
|
+
for seperate package
|
|
44
|
+
`@import "../node_modules/primeng/resources/themes/lara-light-indigo/theme.css";`
|
|
45
|
+
`@import "../node_modules/primeng/resources/primeng.min.css";`
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# import required modules
|
|
49
|
+
|
|
50
|
+
for library
|
|
51
|
+
`import { RuclibOrgChartModule } from '@uxpractice/ruc-lib/org-chart';`
|
|
52
|
+
|
|
53
|
+
for seperate package
|
|
54
|
+
`import { RuclibOrgChartModule } from '@ruc-lib/org-chart';`
|
|
55
|
+
|
|
56
|
+
# use component selector
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
<uxp-org-chart [rucInputData]="inputOrgData" [customTheme]="customTheme"></uxp-org-chart>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# Input and Output
|
|
64
|
+
|
|
65
|
+
# Inputs
|
|
66
|
+
rucInputData -> It is the configuration input to configure the org chart
|
|
67
|
+
|
|
68
|
+
customTheme -> It is the name of the theme.
|
|
69
|
+
# Output
|
|
70
|
+
|
|
71
|
+
# rucInputData (sample object)
|
|
72
|
+
|
|
73
|
+
# Detail definition of the each property can be found in type definition file.
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
const inputOrgData = {
|
|
77
|
+
isDisplayHambergerMenu: true,
|
|
78
|
+
isDisplaySearchBar : true,
|
|
79
|
+
nodeTemplate: 'triangle', // portrait , triangle, landscape
|
|
80
|
+
hambergerMenuList : [
|
|
81
|
+
{ label: 'Download pdf',
|
|
82
|
+
id: 1
|
|
83
|
+
},
|
|
84
|
+
{ label: 'Download png',
|
|
85
|
+
id: 2
|
|
86
|
+
},
|
|
87
|
+
{ label: 'Download jpeg',
|
|
88
|
+
id: 3
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
label: 'Expand All',
|
|
92
|
+
id: 4,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
label: 'Collapse All',
|
|
96
|
+
id: 5,
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
greyNodeStyle : {
|
|
100
|
+
backgroundColor: '#d3d3d3',
|
|
101
|
+
color: '#808080',
|
|
102
|
+
},
|
|
103
|
+
orgData: [
|
|
104
|
+
{
|
|
105
|
+
label: 'ceo',
|
|
106
|
+
expanded: false,
|
|
107
|
+
description: 'ceo description',
|
|
108
|
+
customNodeStyle: {
|
|
109
|
+
backgroundColor: '#3498db',
|
|
110
|
+
color: 'white',
|
|
111
|
+
padding: '1.5em',
|
|
112
|
+
borderRadius: '0px',
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
data: {
|
|
116
|
+
image:'https://primefaces.org/cdn/primeng/images/demo/avatar/amyelsner.png',
|
|
117
|
+
name: 'Amy Elsner',
|
|
118
|
+
title: 'CEO',
|
|
119
|
+
},
|
|
120
|
+
children: [
|
|
121
|
+
{
|
|
122
|
+
expanded: false,
|
|
123
|
+
label: 'cmo',
|
|
124
|
+
description: 'cmo description',
|
|
125
|
+
customNodeStyle: {
|
|
126
|
+
backgroundColor: 'rgb(152, 1, 4)',
|
|
127
|
+
color: 'white',
|
|
128
|
+
padding: '1.5em',
|
|
129
|
+
borderRadius: '0px',
|
|
130
|
+
},
|
|
131
|
+
data: {
|
|
132
|
+
image:
|
|
133
|
+
'https://primefaces.org/cdn/primeng/images/demo/avatar/annafali.png',
|
|
134
|
+
name: 'Ahaanna Fali',
|
|
135
|
+
title: 'CMO',
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
expanded: false,
|
|
140
|
+
label: 'CTO',
|
|
141
|
+
description: 'CTO description',
|
|
142
|
+
customNodeStyle: {
|
|
143
|
+
backgroundColor: 'rgb(152, 1, 4)',
|
|
144
|
+
color: 'white',
|
|
145
|
+
padding: '1.5em',
|
|
146
|
+
borderRadius: '0px',
|
|
147
|
+
},
|
|
148
|
+
data: {
|
|
149
|
+
image:
|
|
150
|
+
'https://primefaces.org/cdn/primeng/images/demo/avatar/stephenshaw.png',
|
|
151
|
+
name: 'Stephen Shaw',
|
|
152
|
+
title: 'CTO',
|
|
153
|
+
},
|
|
154
|
+
children: [
|
|
155
|
+
{
|
|
156
|
+
expanded: false,
|
|
157
|
+
label: 'Architect',
|
|
158
|
+
description: 'CTO description',
|
|
159
|
+
customNodeStyle: {
|
|
160
|
+
backgroundColor: 'rgb(137, 152, 1)',
|
|
161
|
+
color: 'white',
|
|
162
|
+
padding: '1.5em',
|
|
163
|
+
borderRadius: '0px',
|
|
164
|
+
},
|
|
165
|
+
data: {
|
|
166
|
+
image:
|
|
167
|
+
'https://primefaces.org/cdn/primeng/images/demo/avatar/stephenshaw.png',
|
|
168
|
+
name: 'Thomas Shaw',
|
|
169
|
+
title: 'Architect',
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
expanded: false,
|
|
174
|
+
label: 'Manager',
|
|
175
|
+
description: 'CTO description',
|
|
176
|
+
customNodeStyle: {
|
|
177
|
+
backgroundColor: 'rgb(137, 152, 1)',
|
|
178
|
+
color: 'white',
|
|
179
|
+
padding: '1.5em',
|
|
180
|
+
borderRadius: '0px',
|
|
181
|
+
},
|
|
182
|
+
data: {
|
|
183
|
+
image:
|
|
184
|
+
'https://primefaces.org/cdn/primeng/images/demo/avatar/stephenshaw.png',
|
|
185
|
+
name: 'Steve Shaw',
|
|
186
|
+
title: 'Manager',
|
|
187
|
+
}
|
|
188
|
+
}],
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
]
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
# Contribution
|
|
199
|
+
Contributions are welcome! Feel free to open issues or pull requests for any enhancements or fixes.
|
|
200
|
+
|
|
201
|
+
# Acknowledgements
|
|
202
|
+
Thank you for choosing the Data flow Component Library. If you have any feedback or suggestions, please let us know!
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './lib/ruclib-org-chart.module';
|
|
2
|
+
export * from './lib/org-chart/org-chart.component';
|
|
3
|
+
// export * from './services/org-chart.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGdEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL3J1Y2xpYi1vcmctY2hhcnQubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvb3JnLWNoYXJ0L29yZy1jaGFydC5jb21wb25lbnQnO1xyXG4vLyBleHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL29yZy1jaGFydC5zZXJ2aWNlJzsiXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVyZmFjZXMvb3JnLWNoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tVHJlZU5vZGUgZXh0ZW5kcyBUcmVlTm9kZSB7XHJcbiAgICBjdXN0b21Ob2RlU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9OyAvLyBTdHlsaW5nIGZvciBvcmcgY2hhcnQgbm9kZVxyXG4gICAgb3JpZ2luYWxTdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH07IC8vIGlnbm9yZSBpdCBhcyBpdHMgYXNzaWduaW5nIGluc2lkZSBsaWJyYXJ5XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZzsgLy8gZGVzY3JpcHRpb24gaW5zaWRlIG5vZGUgd2hlbiB3ZSBob3ZlciBvbiBpdFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbU5vZGVTdHlsZSB7XHJcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xyXG4gIGNvbG9yPzogc3RyaW5nO1xyXG4gIHBhZGRpbmc/OiBzdHJpbmc7XHJcbiAgYm9yZGVyUmFkaXVzPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9yZ0RhdGFJdGVtIHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBleHBhbmRlZD86IGJvb2xlYW47IFxyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIGN1c3RvbU5vZGVTdHlsZT86IEN1c3RvbU5vZGVTdHlsZTsgLy8gQ3VzdG9tIHN0eWxpbmcgZm9yIG5vZGVcclxuICB0eXBlPzogc3RyaW5nOyAvLyBpZ25vcmUgaXQgYXMgaXQgaXMgYXNzaWduaW5nIGluc2lkZSBsaWJyYXJ5IFxyXG4gIGRhdGE/OiB7XHJcbiAgICBpbWFnZT86IHN0cmluZztcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gIH07XHJcbiAgY2hpbGRyZW4/OiBPcmdEYXRhSXRlbVtdO1xyXG4gIG9yaWdpbmFsU3R5bGU/OiBDdXN0b21Ob2RlU3R5bGU7IC8vIEN1c3RvbSBzdHlsaW5nIGZvciBub2RlXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3JnRGF0YSB7XHJcbiAgaXNEaXNwbGF5SGFtYmVyZ2VyTWVudT86IGJvb2xlYW47IC8vIFRvIGRpc3BsYXkgU2VhcmNoIGJhci4gSXQgY2FuIGJlIHRydWUgfCBmYWxzZVxyXG4gIGlzRGlzcGxheVNlYXJjaEJhcj86IGJvb2xlYW47IC8vIFRvIGRpc3BsYXkgU2VhcmNoIGJhci4gSXQgY2FuIGJlIHRydWUgfCBmYWxzZVxyXG4gIG5vZGVUZW1wbGF0ZTogc3RyaW5nOyAgLy8gVGVtcGxhdGUgaGF2ZSB0aHJlZSBvcHRpb25zICdwb3J0cmFpdCcgfCAndHJpYW5nbGUnIHwgJ2xhbmRzY2FwZSc7XHJcbiAgaGFtYmVyZ2VyTWVudUxpc3Q6IHsgbGFiZWw6IHN0cmluZzsgaWQ6IG51bWJlciB9W107XHJcbiAgZ3JleU5vZGVTdHlsZTogQ3VzdG9tTm9kZVN0eWxlO1xyXG4gIG9yZ0RhdGE6IE9yZ0RhdGFJdGVtW107XHJcbn1cclxuICAiXX0=
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Component, ViewChild, Input } from '@angular/core';
|
|
2
|
+
import { checkPropsType, downloadChart } from '../../utils/chart-download.util';
|
|
3
|
+
import { OrganizationChart } from 'primeng/organizationchart';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "primeng/api";
|
|
7
|
+
import * as i3 from "@angular/forms";
|
|
8
|
+
import * as i4 from "primeng/organizationchart";
|
|
9
|
+
import * as i5 from "@angular/material/input";
|
|
10
|
+
import * as i6 from "@angular/material/form-field";
|
|
11
|
+
import * as i7 from "@angular/material/menu";
|
|
12
|
+
import * as i8 from "@angular/material/button";
|
|
13
|
+
import * as i9 from "@angular/material/icon";
|
|
14
|
+
/** Displays an organizational chart with nodes and relationships (Org Chart Component) */
|
|
15
|
+
export class OrgChartComponent {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.searchText = '';
|
|
18
|
+
this.hoveredNode = null;
|
|
19
|
+
}
|
|
20
|
+
/** Initializes the component */
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
let updatedJson = this.addDefaultKeysIfNotAvailable(this.rucInputData);
|
|
23
|
+
this.rucInputData.orgData = this.updateRucInputData(updatedJson.orgData);
|
|
24
|
+
checkPropsType(this.rucInputData); // To check rucInputData is in correct format or not
|
|
25
|
+
this.expandAllNodes();
|
|
26
|
+
}
|
|
27
|
+
/** add default property for grey nodes if user does not provided */
|
|
28
|
+
addDefaultKeysIfNotAvailable(orgData) {
|
|
29
|
+
if (!orgData.hasOwnProperty('greyNodeStyle')) {
|
|
30
|
+
orgData.greyNodeStyle = {
|
|
31
|
+
backgroundColor: '#d3d3d3',
|
|
32
|
+
color: '#808080',
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return orgData;
|
|
36
|
+
}
|
|
37
|
+
/** manipulate input json as If customNodeStyle exists, create originalStyle for node and its children */
|
|
38
|
+
updateRucInputData(data) {
|
|
39
|
+
return data.map((node) => {
|
|
40
|
+
node['type'] = 'person';
|
|
41
|
+
if (node.customNodeStyle) {
|
|
42
|
+
node.originalStyle = { ...node.customNodeStyle };
|
|
43
|
+
}
|
|
44
|
+
if (node.children && node.children.length > 0) {
|
|
45
|
+
node['type'] = 'person';
|
|
46
|
+
node.children = this.updateRucInputData(node.children); // Recursive call
|
|
47
|
+
}
|
|
48
|
+
return node;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** Expands all nodes in the org chart */
|
|
52
|
+
expandAllNodes() {
|
|
53
|
+
this.rucInputData.orgData = this.expandNodes(this.rucInputData.orgData);
|
|
54
|
+
}
|
|
55
|
+
/** Recursively expands all nodes in the given array
|
|
56
|
+
* @param nodes Nodes to expand @returns Expanded nodes */
|
|
57
|
+
expandNodes(nodes) {
|
|
58
|
+
return nodes.map((node) => ({
|
|
59
|
+
...node,
|
|
60
|
+
expanded: true,
|
|
61
|
+
children: node.children ? this.expandNodes(node.children) : [],
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
/** Collapses all nodes in the org chart */
|
|
65
|
+
collapseAllNodes() {
|
|
66
|
+
this.rucInputData.orgData = this.collapseNodes(this.rucInputData.orgData);
|
|
67
|
+
}
|
|
68
|
+
/** Recursively collapses all nodes in the given array
|
|
69
|
+
* @param nodes Nodes to collapse @returns Collapsed nodes */
|
|
70
|
+
collapseNodes(nodes) {
|
|
71
|
+
return nodes.map((node) => ({
|
|
72
|
+
...node,
|
|
73
|
+
expanded: false,
|
|
74
|
+
children: node.children ? this.collapseNodes(node.children) : [],
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
/** Gets the background color of a node based on search text
|
|
78
|
+
@param node Node to check @returns Whether the node matches the search text */
|
|
79
|
+
getBackgroungColorOfNode(node) {
|
|
80
|
+
return (!this.searchText ||
|
|
81
|
+
node.data.title.toLowerCase().includes(this.searchText.toLowerCase()) ||
|
|
82
|
+
node.data.name.toLowerCase().includes(this.searchText.toLowerCase()) ||
|
|
83
|
+
node.label?.toLowerCase().includes(this.searchText.toLowerCase()));
|
|
84
|
+
}
|
|
85
|
+
/** Handles node hover event @param node Hovered node */
|
|
86
|
+
onNodeHover(node) {
|
|
87
|
+
if (this.searchText)
|
|
88
|
+
return;
|
|
89
|
+
this.hoveredNode = node;
|
|
90
|
+
this.updateNodeStyles();
|
|
91
|
+
}
|
|
92
|
+
/** Handles node leave event */
|
|
93
|
+
onNodeLeave() {
|
|
94
|
+
this.hoveredNode = null;
|
|
95
|
+
this.resetNodeStyles();
|
|
96
|
+
}
|
|
97
|
+
/** Updates node styles based on the hovered node */
|
|
98
|
+
updateNodeStyles() {
|
|
99
|
+
this.applyStyles(this.rucInputData.orgData, true);
|
|
100
|
+
}
|
|
101
|
+
/** Resets node styles to their original state */
|
|
102
|
+
resetNodeStyles() {
|
|
103
|
+
this.applyStyles(this.rucInputData.orgData, false);
|
|
104
|
+
}
|
|
105
|
+
/** Applies grey node style to non-matching nodes @param nodes Nodes to apply styles to */
|
|
106
|
+
applyGreyNodes(nodes) {
|
|
107
|
+
nodes.forEach((node) => {
|
|
108
|
+
const isMatching = this.searchText
|
|
109
|
+
? node.data?.title.includes(this.searchText)
|
|
110
|
+
: false;
|
|
111
|
+
node.customNodeStyle = isMatching
|
|
112
|
+
? node.customNodeStyle || node.originalStyle
|
|
113
|
+
: {
|
|
114
|
+
...node.originalStyle,
|
|
115
|
+
backgroundColor: this.rucInputData.greyNodeStyle.backgroundColor,
|
|
116
|
+
color: this.rucInputData.greyNodeStyle.color,
|
|
117
|
+
};
|
|
118
|
+
if (node.children) {
|
|
119
|
+
this.applyGreyNodes(node.children);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/** Applies styles to nodes based on the hovered node
|
|
124
|
+
* @param nodes Nodes to apply styles @param isHovered Whether the node is hovered */
|
|
125
|
+
applyStyles(nodes, isHovered) {
|
|
126
|
+
nodes.forEach((node) => {
|
|
127
|
+
if (isHovered) {
|
|
128
|
+
node.customNodeStyle =
|
|
129
|
+
node === this.hoveredNode ||
|
|
130
|
+
this.isParent(node, this.hoveredNode) ||
|
|
131
|
+
this.isChild(node, this.hoveredNode)
|
|
132
|
+
? node.customNodeStyle || node.originalStyle
|
|
133
|
+
: {
|
|
134
|
+
...node.originalStyle,
|
|
135
|
+
backgroundColor: this.rucInputData.greyNodeStyle.backgroundColor,
|
|
136
|
+
color: this.rucInputData.greyNodeStyle.color,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
node.customNodeStyle = node.originalStyle;
|
|
141
|
+
}
|
|
142
|
+
if (node.children) {
|
|
143
|
+
this.applyStyles(node.children, isHovered);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/** Use the downloadChart utility method */
|
|
148
|
+
downloadChart(format) {
|
|
149
|
+
const chartContainer = this.orgChart.el.nativeElement;
|
|
150
|
+
downloadChart(chartContainer, format); // Calls the utility function
|
|
151
|
+
}
|
|
152
|
+
/** Handles menu click event @param id Menu item ID */
|
|
153
|
+
onMenuClick(id, event) {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
event.stopPropagation();
|
|
156
|
+
switch (id) {
|
|
157
|
+
case 1:
|
|
158
|
+
this.downloadChart('pdf');
|
|
159
|
+
break;
|
|
160
|
+
case 2:
|
|
161
|
+
this.downloadChart('png');
|
|
162
|
+
break;
|
|
163
|
+
case 3:
|
|
164
|
+
this.downloadChart('jpeg');
|
|
165
|
+
break;
|
|
166
|
+
case 4:
|
|
167
|
+
this.expandAllNodes();
|
|
168
|
+
break;
|
|
169
|
+
case 5:
|
|
170
|
+
this.collapseAllNodes();
|
|
171
|
+
break;
|
|
172
|
+
default:
|
|
173
|
+
console.warn(`Unknown menu item ID: ${id}. Please enter valid id.`);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/** Gets tooltip data for a node @param node Node to get tooltip data */
|
|
178
|
+
getTooltipData(node) {
|
|
179
|
+
return node.description || '';
|
|
180
|
+
}
|
|
181
|
+
/** Checks if a node is a parent of another node.
|
|
182
|
+
* @param currentNode The current node to check.
|
|
183
|
+
* @param hoveredNode The node to check for parentage.
|
|
184
|
+
* @returns Whether the current node is a parent of the hovered node. */
|
|
185
|
+
isParent(currentNode, hoveredNode) {
|
|
186
|
+
return hoveredNode && currentNode.children?.includes(hoveredNode);
|
|
187
|
+
}
|
|
188
|
+
/** Checks if a node is a child of another node.
|
|
189
|
+
* @param node The node to check for child status
|
|
190
|
+
* @param target The node to check for parentage.
|
|
191
|
+
* @returns Whether the node is a child of the target node.*/
|
|
192
|
+
isChild(node, target) {
|
|
193
|
+
return target && target.children?.includes(node);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
OrgChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
197
|
+
OrgChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OrgChartComponent, selector: "uxp-org-chart", inputs: { rucInputData: "rucInputData", customTheme: "customTheme" }, viewQueries: [{ propertyName: "orgChart", first: true, predicate: ["orgChart"], descendants: true }], ngImport: i0, template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span *ngIf=\"node.data.image\"><img [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" *ngIf=\"node.data.image\" >\r\n <img [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\" *ngIf=\"node.data.image\">\r\n <img [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.OrganizationChart, selector: "p-organizationChart", inputs: ["value", "style", "styleClass", "selectionMode", "preserveSpace", "selection"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OrgChartComponent, decorators: [{
|
|
199
|
+
type: Component,
|
|
200
|
+
args: [{ selector: 'uxp-org-chart', template: "<div class={{customTheme}}>\r\n <div class=\"container\">\r\n <!-- Hamburger Menu -->\r\n <button *ngIf=\"rucInputData.isDisplayHambergerMenu === true\" mat-icon-button [matMenuTriggerFor]=\"menu\" \r\n class=\"left hamburger-button\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n \r\n <!-- Menu -->\r\n <mat-menu #menu=\"matMenu\">\r\n <button *ngFor=\"let menu of rucInputData.hambergerMenuList\" mat-menu-item (click)=\"onMenuClick(menu.id, $event);\" \r\n [id]=\"'menu-item-' + menu.id\">\r\n {{ menu.label }}\r\n </button>\r\n </mat-menu>\r\n \r\n <!-- Search Bar -->\r\n <mat-form-field *ngIf=\"rucInputData.isDisplaySearchBar === true\" class=\"search-box right\" \r\n >\r\n <mat-label>Search</mat-label>\r\n <input matInput placeholder=\"Type to search...\" [(ngModel)]=\"searchText\" />\r\n <mat-icon matSuffix>search</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n \r\n \r\n <div class=\"org-chart-container \" id=\"org-chart-data\">\r\n <p-organizationChart #orgChart class=\"org-chart\" [value]=\"this.rucInputData.orgData\" selectionMode=\"multiple\"\r\n [(selection)]=\"selectedNodes\">\r\n <ng-template let-node pTemplate=\"person\">\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'portrait'\" class=\"flex flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" >\r\n <span *ngIf=\"node.data.image\"><img [src]=\"node.data.image\" class=\"portraitImageDimension\" /></span>\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'triangle'\" class=\"flex trianlge-up flex-col nodeContent\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\" (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\"> \r\n <div class=\"flex flex-col items-center\" *ngIf=\"node.data.image\" >\r\n <img [src]=\"node.data.image\" class=\"triangleImageDimension\" />\r\n <div class=\"font-bold mb-2\">{{ node.data.name }}</div>\r\n <div>{{ node.data.title }}\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"this.rucInputData.nodeTemplate === 'landscape'\">\r\n <div class=\"card borderSolidGrey\" [ngStyle]=\"getBackgroungColorOfNode(node) ? node.customNodeStyle : rucInputData.greyNodeStyle\"\r\n (mouseenter)=\"onNodeHover(node)\"\r\n [title]=\"getTooltipData(node)\" (mouseleave)=\"onNodeLeave()\">\r\n <div class=\"body\" >\r\n <div class=\"icon\" *ngIf=\"node.data.image\">\r\n <img [src]=\"node.data.image\" class=\"landscapeImageDimension\" />\r\n </div>\r\n <div class=\"content\">\r\n <div>{{node.data.name}}</div>\r\n <div>{{node.data.title}}</div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-organizationChart>\r\n </div>\r\n \r\n</div>", styles: [".org-chart-container{overflow-x:auto}.nodeContent{border:none;padding:1.5em;border-radius:\"8px\";background-color:none;color:#000}.card{display:flex;width:250px;height:100px;padding:24px;align-self:stretch;align-items:flex-start}.card .body{width:100%;display:flex}.card .body .icon{width:64px;height:64px}.trianlge-up{width:220px;background-color:#980104;clip-path:polygon(50% 0%,0% 100%,100% 100%)}mat-form-field{margin:10px}::ng-deep .p-organizationchart .p-organizationchart-node-content{border:none;background:none;color:#495057;padding:0!important}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler{background-color:#dee2e6;cursor:pointer}::ng-deep .p-organizationchart .p-organizationchart-node-content .p-node-toggler .p-node-toggler-icon{top:.2rem}.container{display:flex;justify-content:space-between;width:100%}.container .left{margin-right:auto}.container .right{margin-left:auto}mat-icon-button{margin-right:10px}.mat-form-field{margin-left:10px}.borderSolidGrey{border:1px solid lightgray}.landscapeImageDimension{width:3em;height:3em}.portraitImageDimension,.triangleImageDimension{margin-bottom:4px;width:3em;height:3em}\n"] }]
|
|
201
|
+
}], propDecorators: { rucInputData: [{
|
|
202
|
+
type: Input
|
|
203
|
+
}], customTheme: [{
|
|
204
|
+
type: Input
|
|
205
|
+
}], orgChart: [{
|
|
206
|
+
type: ViewChild,
|
|
207
|
+
args: ['orgChart', { static: false }]
|
|
208
|
+
}] } });
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvb3JnLWNoYXJ0L29yZy1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL29yZy1jaGFydC9vcmctY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7O0FBRTlELDJGQUEyRjtBQU0zRixNQUFNLE9BQU8saUJBQWlCO0lBTDlCO1FBU0UsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUEwQixJQUFJLENBQUM7S0EyTTNDO0lBdk1DLGlDQUFpQztJQUNqQyxRQUFRO1FBQ04sSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxxREFBcUQ7UUFDeEYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsNEJBQTRCLENBQUMsT0FBZ0I7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDNUMsT0FBTyxDQUFDLGFBQWEsR0FBRztnQkFDdEIsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLEtBQUssRUFBRSxT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N0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS29DLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEN1c3RvbVRyZWVOb2RlLCBPcmdEYXRhLCBPcmdEYXRhSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3JnLWNoYXJ0JztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IGNoZWNrUHJvcHNUeXBlLCBkb3dubG9hZENoYXJ0IH0gZnJvbSAnLi4vLi4vdXRpbHMvY2hhcnQtZG93bmxvYWQudXRpbCc7XHJcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNoYXJ0IH0gZnJvbSAncHJpbWVuZy9vcmdhbml6YXRpb25jaGFydCc7XHJcblxyXG4vKiogRGlzcGxheXMgYW4gb3JnYW5pemF0aW9uYWwgY2hhcnQgd2l0aCBub2RlcyBhbmQgcmVsYXRpb25zaGlwcyAoT3JnIENoYXJ0IENvbXBvbmVudCkgICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndXhwLW9yZy1jaGFydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29yZy1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vb3JnLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmdDaGFydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgcnVjSW5wdXREYXRhITogT3JnRGF0YTtcclxuICBASW5wdXQoKSBjdXN0b21UaGVtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkTm9kZXMhOiBDdXN0b21UcmVlTm9kZVtdO1xyXG4gIHNlYXJjaFRleHQgPSAnJztcclxuICBob3ZlcmVkTm9kZTogQ3VzdG9tVHJlZU5vZGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnb3JnQ2hhcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgb3JnQ2hhcnQhOiBPcmdhbml6YXRpb25DaGFydDtcclxuXHJcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgdXBkYXRlZEpzb24gPSB0aGlzLmFkZERlZmF1bHRLZXlzSWZOb3RBdmFpbGFibGUodGhpcy5ydWNJbnB1dERhdGEpO1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMudXBkYXRlUnVjSW5wdXREYXRhKHVwZGF0ZWRKc29uLm9yZ0RhdGEpO1xyXG4gICAgY2hlY2tQcm9wc1R5cGUodGhpcy5ydWNJbnB1dERhdGEpOyAvLyBUbyBjaGVjayBydWNJbnB1dERhdGEgaXMgaW4gY29ycmVjdCBmb3JtYXQgb3Igbm90IFxyXG4gICAgdGhpcy5leHBhbmRBbGxOb2RlcygpO1xyXG4gIH0gXHJcblxyXG4gIC8qKiBhZGQgZGVmYXVsdCBwcm9wZXJ0eSBmb3IgZ3JleSBub2RlcyBpZiB1c2VyIGRvZXMgbm90IHByb3ZpZGVkICovXHJcbiAgYWRkRGVmYXVsdEtleXNJZk5vdEF2YWlsYWJsZShvcmdEYXRhOiBPcmdEYXRhKSB7XHJcbiAgICBpZiAoIW9yZ0RhdGEuaGFzT3duUHJvcGVydHkoJ2dyZXlOb2RlU3R5bGUnKSkge1xyXG4gICAgICBvcmdEYXRhLmdyZXlOb2RlU3R5bGUgPSB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2QzZDNkMycsXHJcbiAgICAgICAgY29sb3I6ICcjODA4MDgwJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcmdEYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqIG1hbmlwdWxhdGUgaW5wdXQganNvbiBhcyBJZiBjdXN0b21Ob2RlU3R5bGUgZXhpc3RzLCBjcmVhdGUgb3JpZ2luYWxTdHlsZSBmb3Igbm9kZSBhbmQgaXRzIGNoaWxkcmVuICAqL1xyXG4gIHVwZGF0ZVJ1Y0lucHV0RGF0YShkYXRhOiBPcmdEYXRhSXRlbVtdKTogT3JnRGF0YUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gZGF0YS5tYXAoKG5vZGU6IE9yZ0RhdGFJdGVtKSA9PiB7XHJcbiAgICAgIG5vZGVbJ3R5cGUnXSA9ICdwZXJzb24nO1xyXG4gICAgICBpZiAobm9kZS5jdXN0b21Ob2RlU3R5bGUpIHtcclxuICAgICAgICBub2RlLm9yaWdpbmFsU3R5bGUgPSB7IC4uLm5vZGUuY3VzdG9tTm9kZVN0eWxlIH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgbm9kZVsndHlwZSddID0gJ3BlcnNvbic7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMudXBkYXRlUnVjSW5wdXREYXRhKG5vZGUuY2hpbGRyZW4pOyAvLyBSZWN1cnNpdmUgY2FsbFxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogRXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIG9yZyBjaGFydCAqL1xyXG4gIGV4cGFuZEFsbE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMuZXhwYW5kTm9kZXModGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVjdXJzaXZlbHkgZXhwYW5kcyBhbGwgbm9kZXMgaW4gdGhlIGdpdmVuIGFycmF5XHJcbiAgICogQHBhcmFtIG5vZGVzIE5vZGVzIHRvIGV4cGFuZCBAcmV0dXJucyBFeHBhbmRlZCBub2RlcyAqL1xyXG4gIGV4cGFuZE5vZGVzKG5vZGVzOiBPcmdEYXRhSXRlbVtdKTogT3JnRGF0YUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gbm9kZXMubWFwKChub2RlKSA9PiAoe1xyXG4gICAgICAuLi5ub2RlLFxyXG4gICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4gPyB0aGlzLmV4cGFuZE5vZGVzKG5vZGUuY2hpbGRyZW4pIDogW10sXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29sbGFwc2VzIGFsbCBub2RlcyBpbiB0aGUgb3JnIGNoYXJ0ICAgKi9cclxuICBjb2xsYXBzZUFsbE5vZGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydWNJbnB1dERhdGEub3JnRGF0YSA9IHRoaXMuY29sbGFwc2VOb2Rlcyh0aGlzLnJ1Y0lucHV0RGF0YS5vcmdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZWN1cnNpdmVseSBjb2xsYXBzZXMgYWxsIG5vZGVzIGluIHRoZSBnaXZlbiBhcnJheVxyXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBjb2xsYXBzZSBAcmV0dXJucyBDb2xsYXBzZWQgbm9kZXMgICovXHJcbiAgY29sbGFwc2VOb2Rlcyhub2RlczogT3JnRGF0YUl0ZW1bXSk6IE9yZ0RhdGFJdGVtW10ge1xyXG4gICAgcmV0dXJuIG5vZGVzLm1hcCgobm9kZSkgPT4gKHtcclxuICAgICAgLi4ubm9kZSxcclxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiA/IHRoaXMuY29sbGFwc2VOb2Rlcyhub2RlLmNoaWxkcmVuKSA6IFtdLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgYSBub2RlIGJhc2VkIG9uIHNlYXJjaCB0ZXh0XHJcbiAgICBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgc2VhcmNoIHRleHQgKi9cclxuICBnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZTogQ3VzdG9tVHJlZU5vZGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLnNlYXJjaFRleHQgfHxcclxuICAgICAgbm9kZS5kYXRhLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIG5vZGUuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgIG5vZGUubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXMgbm9kZSBob3ZlciBldmVudCBAcGFyYW0gbm9kZSBIb3ZlcmVkIG5vZGUgKi9cclxuICBvbk5vZGVIb3Zlcihub2RlOiBDdXN0b21UcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG5vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZU5vZGVTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiBIYW5kbGVzIG5vZGUgbGVhdmUgZXZlbnQgKi9cclxuICBvbk5vZGVMZWF2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaG92ZXJlZE5vZGUgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldE5vZGVTdHlsZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiAgIFVwZGF0ZXMgbm9kZSBzdHlsZXMgYmFzZWQgb24gdGhlIGhvdmVyZWQgbm9kZSAqL1xyXG4gIHVwZGF0ZU5vZGVTdHlsZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFwcGx5U3R5bGVzKHRoaXMucnVjSW5wdXREYXRhLm9yZ0RhdGEsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqICAgUmVzZXRzIG5vZGUgc3R5bGVzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlICovXHJcbiAgcmVzZXROb2RlU3R5bGVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHBseVN0eWxlcyh0aGlzLnJ1Y0lucHV0RGF0YS5vcmdEYXRhLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBncmV5IG5vZGUgc3R5bGUgdG8gbm9uLW1hdGNoaW5nIG5vZGVzIEBwYXJhbSBub2RlcyBOb2RlcyB0byBhcHBseSBzdHlsZXMgdG8gKi9cclxuICBhcHBseUdyZXlOb2Rlcyhub2RlczpPcmdEYXRhSXRlbVtdKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlOiBPcmdEYXRhSXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBpc01hdGNoaW5nID0gdGhpcy5zZWFyY2hUZXh0XHJcbiAgICAgICAgPyBub2RlLmRhdGE/LnRpdGxlLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dClcclxuICAgICAgICA6IGZhbHNlO1xyXG4gICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9IGlzTWF0Y2hpbmdcclxuICAgICAgICA/IG5vZGUuY3VzdG9tTm9kZVN0eWxlIHx8IG5vZGUub3JpZ2luYWxTdHlsZVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICAuLi5ub2RlLm9yaWdpbmFsU3R5bGUsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5ydWNJbnB1dERhdGEuZ3JleU5vZGVTdHlsZS5iYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgIGNvbG9yOiB0aGlzLnJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlLmNvbG9yLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5hcHBseUdyZXlOb2Rlcyhub2RlLmNoaWxkcmVuKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBzdHlsZXMgdG8gbm9kZXMgYmFzZWQgb24gdGhlIGhvdmVyZWQgbm9kZVxyXG4gICAqIEBwYXJhbSBub2RlcyBOb2RlcyB0byBhcHBseSBzdHlsZXMgQHBhcmFtIGlzSG92ZXJlZCBXaGV0aGVyIHRoZSBub2RlIGlzIGhvdmVyZWQgKi9cclxuICBhcHBseVN0eWxlcyhub2RlczogT3JnRGF0YUl0ZW1bXSwgaXNIb3ZlcmVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChpc0hvdmVyZWQpIHtcclxuICAgICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9XHJcbiAgICAgICAgICBub2RlID09PSB0aGlzLmhvdmVyZWROb2RlIHx8XHJcbiAgICAgICAgICB0aGlzLmlzUGFyZW50KG5vZGUsIHRoaXMuaG92ZXJlZE5vZGUpIHx8XHJcbiAgICAgICAgICB0aGlzLmlzQ2hpbGQobm9kZSwgdGhpcy5ob3ZlcmVkTm9kZSlcclxuICAgICAgICAgICAgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSB8fCBub2RlLm9yaWdpbmFsU3R5bGVcclxuICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAuLi5ub2RlLm9yaWdpbmFsU3R5bGUsXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGUuYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMucnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub2RlLmN1c3RvbU5vZGVTdHlsZSA9IG5vZGUub3JpZ2luYWxTdHlsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLmFwcGx5U3R5bGVzKG5vZGUuY2hpbGRyZW4sIGlzSG92ZXJlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqICBVc2UgdGhlIGRvd25sb2FkQ2hhcnQgdXRpbGl0eSBtZXRob2QgKi9cclxuICBkb3dubG9hZENoYXJ0KGZvcm1hdDogJ3BuZycgfCAnanBlZycgfCAncGRmJyk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLm9yZ0NoYXJ0LmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBkb3dubG9hZENoYXJ0KGNoYXJ0Q29udGFpbmVyLCBmb3JtYXQpOyAvLyBDYWxscyB0aGUgdXRpbGl0eSBmdW5jdGlvblxyXG4gIH1cclxuXHJcbiAgLyoqIEhhbmRsZXMgbWVudSBjbGljayBldmVudCBAcGFyYW0gaWQgTWVudSBpdGVtIElEICAqL1xyXG4gIG9uTWVudUNsaWNrKGlkOiBudW1iZXIsZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuZG93bmxvYWRDaGFydCgncGRmJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLmRvd25sb2FkQ2hhcnQoJ3BuZycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZENoYXJ0KCdqcGVnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNTpcclxuICAgICAgICB0aGlzLmNvbGxhcHNlQWxsTm9kZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbWVudSBpdGVtIElEOiAke2lkfS4gUGxlYXNlIGVudGVyIHZhbGlkIGlkLmApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldHMgdG9vbHRpcCBkYXRhIGZvciBhIG5vZGUgQHBhcmFtIG5vZGUgTm9kZSB0byBnZXQgdG9vbHRpcCBkYXRhICovXHJcbiAgZ2V0VG9vbHRpcERhdGEobm9kZTogQ3VzdG9tVHJlZU5vZGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIG5vZGUuZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIHBhcmVudCBvZiBhbm90aGVyIG5vZGUuXHJcbiAgICogQHBhcmFtIGN1cnJlbnROb2RlIFRoZSBjdXJyZW50IG5vZGUgdG8gY2hlY2suXHJcbiAgICogQHBhcmFtIGhvdmVyZWROb2RlIFRoZSBub2RlIHRvIGNoZWNrIGZvciBwYXJlbnRhZ2UuXHJcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgcGFyZW50IG9mIHRoZSBob3ZlcmVkIG5vZGUuICovXHJcbiAgaXNQYXJlbnQoXHJcbiAgICBjdXJyZW50Tm9kZTogVHJlZU5vZGUsXHJcbiAgICBob3ZlcmVkTm9kZTogVHJlZU5vZGUgfCBudWxsXHJcbiAgKTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGhvdmVyZWROb2RlICYmIGN1cnJlbnROb2RlLmNoaWxkcmVuPy5pbmNsdWRlcyhob3ZlcmVkTm9kZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hlY2tzIGlmIGEgbm9kZSBpcyBhIGNoaWxkIG9mIGFub3RoZXIgbm9kZS5cclxuICAgKiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBjaGVjayBmb3IgY2hpbGQgc3RhdHVzXHJcbiAgICogQHBhcmFtIHRhcmdldCBUaGUgbm9kZSB0byBjaGVjayBmb3IgcGFyZW50YWdlLlxyXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG5vZGUgaXMgYSBjaGlsZCBvZiB0aGUgdGFyZ2V0IG5vZGUuKi9cclxuICBpc0NoaWxkKG5vZGU6IFRyZWVOb2RlLCB0YXJnZXQ6IFRyZWVOb2RlIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0YXJnZXQgJiYgdGFyZ2V0LmNoaWxkcmVuPy5pbmNsdWRlcyhub2RlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz17e2N1c3RvbVRoZW1lfX0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPCEtLSBIYW1idXJnZXIgTWVudSAtLT5cclxuICAgIDxidXR0b24gKm5nSWY9XCJydWNJbnB1dERhdGEuaXNEaXNwbGF5SGFtYmVyZ2VyTWVudSA9PT0gdHJ1ZVwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIFxyXG4gICAgICBjbGFzcz1cImxlZnQgaGFtYnVyZ2VyLWJ1dHRvblwiPlxyXG4gICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICBcclxuICAgIDwhLS0gTWVudSAtLT5cclxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgbWVudSBvZiBydWNJbnB1dERhdGEuaGFtYmVyZ2VyTWVudUxpc3RcIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbk1lbnVDbGljayhtZW51LmlkLCAkZXZlbnQpO1wiIFxyXG4gICAgICBbaWRdPVwiJ21lbnUtaXRlbS0nICsgbWVudS5pZFwiPlxyXG4gICAgICAgIHt7IG1lbnUubGFiZWwgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gIFxyXG4gICAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicnVjSW5wdXREYXRhLmlzRGlzcGxheVNlYXJjaEJhciA9PT0gdHJ1ZVwiIGNsYXNzPVwic2VhcmNoLWJveCByaWdodFwiIFxyXG4gICAgICA+XHJcbiAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgLz5cclxuICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeD5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICBcclxuICBcclxuICA8ZGl2IGNsYXNzPVwib3JnLWNoYXJ0LWNvbnRhaW5lciBcIiBpZD1cIm9yZy1jaGFydC1kYXRhXCI+XHJcbiAgPHAtb3JnYW5pemF0aW9uQ2hhcnQgI29yZ0NoYXJ0IGNsYXNzPVwib3JnLWNoYXJ0XCIgW3ZhbHVlXT1cInRoaXMucnVjSW5wdXREYXRhLm9yZ0RhdGFcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxyXG4gICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkTm9kZXNcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtbm9kZSBwVGVtcGxhdGU9XCJwZXJzb25cIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucnVjSW5wdXREYXRhLm5vZGVUZW1wbGF0ZSA9PT0gJ3BvcnRyYWl0J1wiICBjbGFzcz1cImZsZXggZmxleC1jb2wgbm9kZUNvbnRlbnRcIiBbbmdTdHlsZV09XCJnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZSkgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSA6IHJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlXCIgKG1vdXNlZW50ZXIpPVwib25Ob2RlSG92ZXIobm9kZSlcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCIgID5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5kYXRhLmltYWdlXCI+PGltZyAgIFtzcmNdPVwibm9kZS5kYXRhLmltYWdlXCIgY2xhc3M9XCJwb3J0cmFpdEltYWdlRGltZW5zaW9uXCIgLz48L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIG1iLTJcIj57eyBub2RlLmRhdGEubmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgPGRpdj57eyBub2RlLmRhdGEudGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucnVjSW5wdXREYXRhLm5vZGVUZW1wbGF0ZSA9PT0gJ3RyaWFuZ2xlJ1wiICBjbGFzcz1cImZsZXggdHJpYW5sZ2UtdXAgZmxleC1jb2wgbm9kZUNvbnRlbnRcIiBbbmdTdHlsZV09XCJnZXRCYWNrZ3JvdW5nQ29sb3JPZk5vZGUobm9kZSkgPyBub2RlLmN1c3RvbU5vZGVTdHlsZSA6IHJ1Y0lucHV0RGF0YS5ncmV5Tm9kZVN0eWxlXCIgKG1vdXNlZW50ZXIpPVwib25Ob2RlSG92ZXIobm9kZSlcIlxyXG4gICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj4gXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJub2RlLmRhdGEuaW1hZ2VcIiA+XHJcbiAgICAgICAgICA8aW1nICBbc3JjXT1cIm5vZGUuZGF0YS5pbWFnZVwiIGNsYXNzPVwidHJpYW5nbGVJbWFnZURpbWVuc2lvblwiIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkIG1iLTJcIj57eyBub2RlLmRhdGEubmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgPGRpdj57eyBub2RlLmRhdGEudGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnJ1Y0lucHV0RGF0YS5ub2RlVGVtcGxhdGUgPT09ICdsYW5kc2NhcGUnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlclNvbGlkR3JleVwiIFtuZ1N0eWxlXT1cImdldEJhY2tncm91bmdDb2xvck9mTm9kZShub2RlKSA/IG5vZGUuY3VzdG9tTm9kZVN0eWxlIDogcnVjSW5wdXREYXRhLmdyZXlOb2RlU3R5bGVcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJvbk5vZGVIb3Zlcihub2RlKVwiXHJcbiAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwRGF0YShub2RlKVwiIChtb3VzZWxlYXZlKT1cIm9uTm9kZUxlYXZlKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9keVwiID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJub2RlLmRhdGEuaW1hZ2VcIj5cclxuICAgICAgICAgICAgPGltZyAgW3NyY109XCJub2RlLmRhdGEuaW1hZ2VcIiBjbGFzcz1cImxhbmRzY2FwZUltYWdlRGltZW5zaW9uXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2Pnt7bm9kZS5kYXRhLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+e3tub2RlLmRhdGEudGl0bGV9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IFxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3Atb3JnYW5pemF0aW9uQ2hhcnQ+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ButtonModule } from 'primeng/button';
|
|
4
|
+
import { OrganizationChartModule } from 'primeng/organizationchart';
|
|
5
|
+
import { MatInputModule } from '@angular/material/input';
|
|
6
|
+
import { FormsModule } from '@angular/forms';
|
|
7
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
8
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
9
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
10
|
+
import { OrgChartComponent } from './org-chart/org-chart.component';
|
|
11
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class RuclibOrgChartModule {
|
|
14
|
+
}
|
|
15
|
+
RuclibOrgChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOrgChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
16
|
+
RuclibOrgChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: RuclibOrgChartModule, declarations: [OrgChartComponent], imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule], exports: [OrgChartComponent] });
|
|
17
|
+
RuclibOrgChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOrgChartModule, imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule] });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RuclibOrgChartModule, decorators: [{
|
|
19
|
+
type: NgModule,
|
|
20
|
+
args: [{
|
|
21
|
+
imports: [CommonModule, ButtonModule, BrowserModule, FormsModule, OrganizationChartModule, MatInputModule, MatMenuModule, MatButtonModule, MatIconModule],
|
|
22
|
+
declarations: [OrgChartComponent],
|
|
23
|
+
exports: [OrgChartComponent]
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjbGliLW9yZy1jaGFydC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1Y2xpYi1vcmctY2hhcnQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFPMUQsTUFBTSxPQUFPLG9CQUFvQjs7a0hBQXBCLG9CQUFvQjttSEFBcEIsb0JBQW9CLGlCQUhoQixpQkFBaUIsYUFEdEIsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGFBQWEsYUFFOUksaUJBQWlCO21IQUVoQixvQkFBb0IsWUFKckIsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGFBQWE7NEZBSTdJLG9CQUFvQjtrQkFMaEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDO29CQUN6SixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25DaGFydE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3JnYW5pemF0aW9uY2hhcnQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBPcmdDaGFydENvbXBvbmVudCB9IGZyb20gJy4vb3JnLWNoYXJ0L29yZy1jaGFydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1dHRvbk1vZHVsZSwgQnJvd3Nlck1vZHVsZSwgRm9ybXNNb2R1bGUsIE9yZ2FuaXphdGlvbkNoYXJ0TW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0TWVudU1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRJY29uTW9kdWxlXSxcclxuICBkZWNsYXJhdGlvbnM6IFtPcmdDaGFydENvbXBvbmVudF0sXHJcbiAgZXhwb3J0czogW09yZ0NoYXJ0Q29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUnVjbGliT3JnQ2hhcnRNb2R1bGUge31cclxuXHJcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVjLWxpYi1vcmctY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVjLWxpYi1vcmctY2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|