1 | import { Component, ViewEncapsulation, Inject, forwardRef, Input, EventEmitter, ChangeDetectionStrategy, ElementRef, Optional, Output, ContentChildren, ViewChild, NgModule } from '@angular/core';
|
2 | import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
|
3 | import { CommonModule } from '@angular/common';
|
4 | import { TreeDragDropService, PrimeTemplate, SharedModule } from 'primeng/api';
|
5 | import { ObjectUtils } from 'primeng/utils';
|
6 | import { DomHandler } from 'primeng/dom';
|
7 | import { RippleModule } from 'primeng/ripple';
|
8 |
|
9 | class UITreeNode {
|
10 | constructor(tree) {
|
11 | this.tree = tree;
|
12 | }
|
13 | ngOnInit() {
|
14 | this.node.parent = this.parentNode;
|
15 | if (this.parentNode) {
|
16 | this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));
|
17 | }
|
18 | }
|
19 | getIcon() {
|
20 | let icon;
|
21 | if (this.node.icon)
|
22 | icon = this.node.icon;
|
23 | else
|
24 | icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;
|
25 | return UITreeNode.ICON_CLASS + ' ' + icon;
|
26 | }
|
27 | isLeaf() {
|
28 | return this.tree.isNodeLeaf(this.node);
|
29 | }
|
30 | toggle(event) {
|
31 | if (this.node.expanded)
|
32 | this.collapse(event);
|
33 | else
|
34 | this.expand(event);
|
35 | }
|
36 | expand(event) {
|
37 | this.node.expanded = true;
|
38 | if (this.tree.virtualScroll) {
|
39 | this.tree.updateSerializedValue();
|
40 | }
|
41 | this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });
|
42 | }
|
43 | collapse(event) {
|
44 | this.node.expanded = false;
|
45 | if (this.tree.virtualScroll) {
|
46 | this.tree.updateSerializedValue();
|
47 | }
|
48 | this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });
|
49 | }
|
50 | onNodeClick(event) {
|
51 | this.tree.onNodeClick(event, this.node);
|
52 | }
|
53 | onNodeKeydown(event) {
|
54 | if (event.which === 13) {
|
55 | this.tree.onNodeClick(event, this.node);
|
56 | }
|
57 | }
|
58 | onNodeTouchEnd() {
|
59 | this.tree.onNodeTouchEnd();
|
60 | }
|
61 | onNodeRightClick(event) {
|
62 | this.tree.onNodeRightClick(event, this.node);
|
63 | }
|
64 | isSelected() {
|
65 | return this.tree.isSelected(this.node);
|
66 | }
|
67 | onDropPoint(event, position) {
|
68 | event.preventDefault();
|
69 | let dragNode = this.tree.dragNode;
|
70 | let dragNodeIndex = this.tree.dragNodeIndex;
|
71 | let dragNodeScope = this.tree.dragNodeScope;
|
72 | let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? (position === 1 || dragNodeIndex !== this.index - 1) : true;
|
73 | if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {
|
74 | let dropParams = Object.assign({}, this.createDropPointEventMetadata(position));
|
75 | if (this.tree.validateDrop) {
|
76 | this.tree.onNodeDrop.emit({
|
77 | originalEvent: event,
|
78 | dragNode: dragNode,
|
79 | dropNode: this.node,
|
80 | dropIndex: this.index,
|
81 | accept: () => {
|
82 | this.processPointDrop(dropParams);
|
83 | }
|
84 | });
|
85 | }
|
86 | else {
|
87 | this.processPointDrop(dropParams);
|
88 | this.tree.onNodeDrop.emit({
|
89 | originalEvent: event,
|
90 | dragNode: dragNode,
|
91 | dropNode: this.node,
|
92 | dropIndex: this.index
|
93 | });
|
94 | }
|
95 | }
|
96 | this.draghoverPrev = false;
|
97 | this.draghoverNext = false;
|
98 | }
|
99 | processPointDrop(event) {
|
100 | let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;
|
101 | event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
|
102 | let dropIndex = this.index;
|
103 | if (event.position < 0) {
|
104 | dropIndex = (event.dragNodeSubNodes === newNodeList) ? ((event.dragNodeIndex > event.index) ? event.index : event.index - 1) : event.index;
|
105 | newNodeList.splice(dropIndex, 0, event.dragNode);
|
106 | }
|
107 | else {
|
108 | dropIndex = newNodeList.length;
|
109 | newNodeList.push(event.dragNode);
|
110 | }
|
111 | this.tree.dragDropService.stopDrag({
|
112 | node: event.dragNode,
|
113 | subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
|
114 | index: event.dragNodeIndex
|
115 | });
|
116 | }
|
117 | createDropPointEventMetadata(position) {
|
118 | return {
|
119 | dragNode: this.tree.dragNode,
|
120 | dragNodeIndex: this.tree.dragNodeIndex,
|
121 | dragNodeSubNodes: this.tree.dragNodeSubNodes,
|
122 | dropNode: this.node,
|
123 | index: this.index,
|
124 | position: position
|
125 | };
|
126 | }
|
127 | onDropPointDragOver(event) {
|
128 | event.dataTransfer.dropEffect = 'move';
|
129 | event.preventDefault();
|
130 | }
|
131 | onDropPointDragEnter(event, position) {
|
132 | if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
|
133 | if (position < 0)
|
134 | this.draghoverPrev = true;
|
135 | else
|
136 | this.draghoverNext = true;
|
137 | }
|
138 | }
|
139 | onDropPointDragLeave(event) {
|
140 | this.draghoverPrev = false;
|
141 | this.draghoverNext = false;
|
142 | }
|
143 | onDragStart(event) {
|
144 | if (this.tree.draggableNodes && this.node.draggable !== false) {
|
145 | event.dataTransfer.setData("text", "data");
|
146 | this.tree.dragDropService.startDrag({
|
147 | tree: this,
|
148 | node: this.node,
|
149 | subNodes: this.node.parent ? this.node.parent.children : this.tree.value,
|
150 | index: this.index,
|
151 | scope: this.tree.draggableScope
|
152 | });
|
153 | }
|
154 | else {
|
155 | event.preventDefault();
|
156 | }
|
157 | }
|
158 | onDragStop(event) {
|
159 | this.tree.dragDropService.stopDrag({
|
160 | node: this.node,
|
161 | subNodes: this.node.parent ? this.node.parent.children : this.tree.value,
|
162 | index: this.index
|
163 | });
|
164 | }
|
165 | onDropNodeDragOver(event) {
|
166 | event.dataTransfer.dropEffect = 'move';
|
167 | if (this.tree.droppableNodes) {
|
168 | event.preventDefault();
|
169 | event.stopPropagation();
|
170 | }
|
171 | }
|
172 | onDropNode(event) {
|
173 | if (this.tree.droppableNodes && this.node.droppable !== false) {
|
174 | let dragNode = this.tree.dragNode;
|
175 | if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {
|
176 | let dropParams = Object.assign({}, this.createDropNodeEventMetadata());
|
177 | if (this.tree.validateDrop) {
|
178 | this.tree.onNodeDrop.emit({
|
179 | originalEvent: event,
|
180 | dragNode: dragNode,
|
181 | dropNode: this.node,
|
182 | index: this.index,
|
183 | accept: () => {
|
184 | this.processNodeDrop(dropParams);
|
185 | }
|
186 | });
|
187 | }
|
188 | else {
|
189 | this.processNodeDrop(dropParams);
|
190 | this.tree.onNodeDrop.emit({
|
191 | originalEvent: event,
|
192 | dragNode: dragNode,
|
193 | dropNode: this.node,
|
194 | index: this.index
|
195 | });
|
196 | }
|
197 | }
|
198 | }
|
199 | event.preventDefault();
|
200 | event.stopPropagation();
|
201 | this.draghoverNode = false;
|
202 | }
|
203 | createDropNodeEventMetadata() {
|
204 | return {
|
205 | dragNode: this.tree.dragNode,
|
206 | dragNodeIndex: this.tree.dragNodeIndex,
|
207 | dragNodeSubNodes: this.tree.dragNodeSubNodes,
|
208 | dropNode: this.node
|
209 | };
|
210 | }
|
211 | processNodeDrop(event) {
|
212 | let dragNodeIndex = event.dragNodeIndex;
|
213 | event.dragNodeSubNodes.splice(dragNodeIndex, 1);
|
214 | if (event.dropNode.children)
|
215 | event.dropNode.children.push(event.dragNode);
|
216 | else
|
217 | event.dropNode.children = [event.dragNode];
|
218 | this.tree.dragDropService.stopDrag({
|
219 | node: event.dragNode,
|
220 | subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
|
221 | index: dragNodeIndex
|
222 | });
|
223 | }
|
224 | onDropNodeDragEnter(event) {
|
225 | if (this.tree.droppableNodes && this.node.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
|
226 | this.draghoverNode = true;
|
227 | }
|
228 | }
|
229 | onDropNodeDragLeave(event) {
|
230 | if (this.tree.droppableNodes) {
|
231 | let rect = event.currentTarget.getBoundingClientRect();
|
232 | if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {
|
233 | this.draghoverNode = false;
|
234 | }
|
235 | }
|
236 | }
|
237 | onKeyDown(event) {
|
238 | const nodeElement = event.target.parentElement.parentElement;
|
239 | if (nodeElement.nodeName !== 'P-TREENODE') {
|
240 | return;
|
241 | }
|
242 | switch (event.which) {
|
243 |
|
244 | case 40:
|
245 | const listElement = (this.tree.droppableNodes) ? nodeElement.children[1].children[1] : nodeElement.children[0].children[1];
|
246 | if (listElement && listElement.children.length > 0) {
|
247 | this.focusNode(listElement.children[0]);
|
248 | }
|
249 | else {
|
250 | const nextNodeElement = nodeElement.nextElementSibling;
|
251 | if (nextNodeElement) {
|
252 | this.focusNode(nextNodeElement);
|
253 | }
|
254 | else {
|
255 | let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement);
|
256 | if (nextSiblingAncestor) {
|
257 | this.focusNode(nextSiblingAncestor);
|
258 | }
|
259 | }
|
260 | }
|
261 | event.preventDefault();
|
262 | break;
|
263 |
|
264 | case 38:
|
265 | if (nodeElement.previousElementSibling) {
|
266 | this.focusNode(this.findLastVisibleDescendant(nodeElement.previousElementSibling));
|
267 | }
|
268 | else {
|
269 | let parentNodeElement = this.getParentNodeElement(nodeElement);
|
270 | if (parentNodeElement) {
|
271 | this.focusNode(parentNodeElement);
|
272 | }
|
273 | }
|
274 | event.preventDefault();
|
275 | break;
|
276 |
|
277 | case 39:
|
278 | if (!this.node.expanded && !this.tree.isNodeLeaf(this.node)) {
|
279 | this.expand(event);
|
280 | }
|
281 | event.preventDefault();
|
282 | break;
|
283 |
|
284 | case 37:
|
285 | if (this.node.expanded) {
|
286 | this.collapse(event);
|
287 | }
|
288 | else {
|
289 | let parentNodeElement = this.getParentNodeElement(nodeElement);
|
290 | if (parentNodeElement) {
|
291 | this.focusNode(parentNodeElement);
|
292 | }
|
293 | }
|
294 | event.preventDefault();
|
295 | break;
|
296 |
|
297 | case 13:
|
298 | this.tree.onNodeClick(event, this.node);
|
299 | event.preventDefault();
|
300 | break;
|
301 | default:
|
302 |
|
303 | break;
|
304 | }
|
305 | }
|
306 | findNextSiblingOfAncestor(nodeElement) {
|
307 | let parentNodeElement = this.getParentNodeElement(nodeElement);
|
308 | if (parentNodeElement) {
|
309 | if (parentNodeElement.nextElementSibling)
|
310 | return parentNodeElement.nextElementSibling;
|
311 | else
|
312 | return this.findNextSiblingOfAncestor(parentNodeElement);
|
313 | }
|
314 | else {
|
315 | return null;
|
316 | }
|
317 | }
|
318 | findLastVisibleDescendant(nodeElement) {
|
319 | const listElement = Array.from(nodeElement.children).find(el => DomHandler.hasClass(el, 'p-treenode'));
|
320 | const childrenListElement = listElement.children[1];
|
321 | if (childrenListElement && childrenListElement.children.length > 0) {
|
322 | const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];
|
323 | return this.findLastVisibleDescendant(lastChildElement);
|
324 | }
|
325 | else {
|
326 | return nodeElement;
|
327 | }
|
328 | }
|
329 | getParentNodeElement(nodeElement) {
|
330 | const parentNodeElement = nodeElement.parentElement.parentElement.parentElement;
|
331 | return parentNodeElement.tagName === 'P-TREENODE' ? parentNodeElement : null;
|
332 | }
|
333 | focusNode(element) {
|
334 | if (this.tree.droppableNodes)
|
335 | element.children[1].children[0].focus();
|
336 | else
|
337 | element.children[0].children[0].focus();
|
338 | }
|
339 | }
|
340 | UITreeNode.ICON_CLASS = 'p-treenode-icon ';
|
341 | UITreeNode.decorators = [
|
342 | { type: Component, args: [{
|
343 | selector: 'p-treeNode',
|
344 | template: `
|
345 | <ng-template [ngIf]="node">
|
346 | <li *ngIf="tree.droppableNodes" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverPrev}"
|
347 | (drop)="onDropPoint($event,-1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,-1)" (dragleave)="onDropPointDragLeave($event)"></li>
|
348 | <li *ngIf="!tree.horizontal" role="treeitem" [ngClass]="['p-treenode',node.styleClass||'', isLeaf() ? 'p-treenode-leaf': '']">
|
349 | <div class="p-treenode-content" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)" (touchend)="onNodeTouchEnd()"
|
350 | (drop)="onDropNode($event)" (dragover)="onDropNodeDragOver($event)" (dragenter)="onDropNodeDragEnter($event)" (dragleave)="onDropNodeDragLeave($event)"
|
351 | [draggable]="tree.draggableNodes" (dragstart)="onDragStart($event)" (dragend)="onDragStop($event)" [attr.tabindex]="0"
|
352 | [ngClass]="{'p-treenode-selectable':tree.selectionMode && node.selectable !== false,'p-treenode-dragover':draghoverNode, 'p-highlight':isSelected()}"
|
353 | (keydown)="onKeyDown($event)" [attr.aria-posinset]="this.index + 1" [attr.aria-expanded]="this.node.expanded" [attr.aria-selected]="isSelected()" [attr.aria-label]="node.label">
|
354 | <button type="button" class="p-tree-toggler p-link" (click)="toggle($event)" pRipple>
|
355 | <span class="p-tree-toggler-icon pi pi-fw" [ngClass]="{'pi-chevron-right':!node.expanded,'pi-chevron-down':node.expanded}"></span>
|
356 | </button>
|
357 | <div class="p-checkbox p-component" *ngIf="tree.selectionMode == 'checkbox'" [attr.aria-checked]="isSelected()">
|
358 | <div class="p-checkbox-box" [ngClass]="{'p-highlight': isSelected(), 'p-indeterminate': node.partialSelected}">
|
359 | <span class="p-checkbox-icon pi" [ngClass]="{'pi-check':isSelected(),'pi-minus':node.partialSelected}"></span>
|
360 | </div>
|
361 | </div>
|
362 | <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
|
363 | <span class="p-treenode-label">
|
364 | <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
|
365 | <span *ngIf="tree.getTemplateForNode(node)">
|
366 | <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
|
367 | </span>
|
368 | </span>
|
369 | </div>
|
370 | <ul class="p-treenode-children" style="display: none;" *ngIf="!tree.virtualScroll && node.children && node.expanded" [style.display]="node.expanded ? 'block' : 'none'" role="group">
|
371 | <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; let index=index; trackBy: tree.trackBy" [node]="childNode" [parentNode]="node"
|
372 | [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="tree.virtualNodeHeight" [level]="level + 1"></p-treeNode>
|
373 | </ul>
|
374 | </li>
|
375 | <li *ngIf="tree.droppableNodes&&lastChild" class="p-treenode-droppoint" [ngClass]="{'p-treenode-droppoint-active':draghoverNext}"
|
376 | (drop)="onDropPoint($event,1)" (dragover)="onDropPointDragOver($event)" (dragenter)="onDropPointDragEnter($event,1)" (dragleave)="onDropPointDragLeave($event)"></li>
|
377 | <table *ngIf="tree.horizontal" [class]="node.styleClass">
|
378 | <tbody>
|
379 | <tr>
|
380 | <td class="p-treenode-connector" *ngIf="!root">
|
381 | <table class="p-treenode-connector-table">
|
382 | <tbody>
|
383 | <tr>
|
384 | <td [ngClass]="{'p-treenode-connector-line':!firstChild}"></td>
|
385 | </tr>
|
386 | <tr>
|
387 | <td [ngClass]="{'p-treenode-connector-line':!lastChild}"></td>
|
388 | </tr>
|
389 | </tbody>
|
390 | </table>
|
391 | </td>
|
392 | <td class="p-treenode" [ngClass]="{'p-treenode-collapsed':!node.expanded}">
|
393 | <div class="p-treenode-content" tabindex="0" [ngClass]="{'p-treenode-selectable':tree.selectionMode,'p-highlight':isSelected()}" (click)="onNodeClick($event)" (contextmenu)="onNodeRightClick($event)"
|
394 | (touchend)="onNodeTouchEnd()" (keydown)="onNodeKeydown($event)">
|
395 | <span class="p-tree-toggler pi pi-fw" [ngClass]="{'pi-plus':!node.expanded,'pi-minus':node.expanded}" *ngIf="!isLeaf()" (click)="toggle($event)"></span>
|
396 | <span [class]="getIcon()" *ngIf="node.icon||node.expandedIcon||node.collapsedIcon"></span>
|
397 | <span class="p-treenode-label">
|
398 | <span *ngIf="!tree.getTemplateForNode(node)">{{node.label}}</span>
|
399 | <span *ngIf="tree.getTemplateForNode(node)">
|
400 | <ng-container *ngTemplateOutlet="tree.getTemplateForNode(node); context: {$implicit: node}"></ng-container>
|
401 | </span>
|
402 | </span>
|
403 | </div>
|
404 | </td>
|
405 | <td class="p-treenode-children-container" *ngIf="node.children && node.expanded" [style.display]="node.expanded ? 'table-cell' : 'none'">
|
406 | <div class="p-treenode-children">
|
407 | <p-treeNode *ngFor="let childNode of node.children;let firstChild=first;let lastChild=last; trackBy: tree.trackBy" [node]="childNode"
|
408 | [firstChild]="firstChild" [lastChild]="lastChild"></p-treeNode>
|
409 | </div>
|
410 | </td>
|
411 | </tr>
|
412 | </tbody>
|
413 | </table>
|
414 | </ng-template>
|
415 | `,
|
416 | encapsulation: ViewEncapsulation.None
|
417 | },] }
|
418 | ];
|
419 | UITreeNode.ctorParameters = () => [
|
420 | { type: undefined, decorators: [{ type: Inject, args: [forwardRef(() => Tree),] }] }
|
421 | ];
|
422 | UITreeNode.propDecorators = {
|
423 | rowNode: [{ type: Input }],
|
424 | node: [{ type: Input }],
|
425 | parentNode: [{ type: Input }],
|
426 | root: [{ type: Input }],
|
427 | index: [{ type: Input }],
|
428 | firstChild: [{ type: Input }],
|
429 | lastChild: [{ type: Input }],
|
430 | level: [{ type: Input }]
|
431 | };
|
432 | class Tree {
|
433 | constructor(el, dragDropService) {
|
434 | this.el = el;
|
435 | this.dragDropService = dragDropService;
|
436 | this.selectionChange = new EventEmitter();
|
437 | this.onNodeSelect = new EventEmitter();
|
438 | this.onNodeUnselect = new EventEmitter();
|
439 | this.onNodeExpand = new EventEmitter();
|
440 | this.onNodeCollapse = new EventEmitter();
|
441 | this.onNodeContextMenuSelect = new EventEmitter();
|
442 | this.onNodeDrop = new EventEmitter();
|
443 | this.layout = 'vertical';
|
444 | this.metaKeySelection = true;
|
445 | this.propagateSelectionUp = true;
|
446 | this.propagateSelectionDown = true;
|
447 | this.loadingIcon = 'pi pi-spinner';
|
448 | this.emptyMessage = 'No records found';
|
449 | this.filterBy = 'label';
|
450 | this.filterMode = 'lenient';
|
451 | this.trackBy = (index, item) => item;
|
452 | this.onFilter = new EventEmitter();
|
453 | }
|
454 | ngOnInit() {
|
455 | if (this.droppableNodes) {
|
456 | this.dragStartSubscription = this.dragDropService.dragStart$.subscribe(event => {
|
457 | this.dragNodeTree = event.tree;
|
458 | this.dragNode = event.node;
|
459 | this.dragNodeSubNodes = event.subNodes;
|
460 | this.dragNodeIndex = event.index;
|
461 | this.dragNodeScope = event.scope;
|
462 | });
|
463 | this.dragStopSubscription = this.dragDropService.dragStop$.subscribe(event => {
|
464 | this.dragNodeTree = null;
|
465 | this.dragNode = null;
|
466 | this.dragNodeSubNodes = null;
|
467 | this.dragNodeIndex = null;
|
468 | this.dragNodeScope = null;
|
469 | this.dragHover = false;
|
470 | });
|
471 | }
|
472 | }
|
473 | ngOnChanges(simpleChange) {
|
474 | if (simpleChange.value) {
|
475 | this.updateSerializedValue();
|
476 | }
|
477 | if (simpleChange.scrollHeight && this.virtualScrollBody) {
|
478 | this.virtualScrollBody.checkViewportSize();
|
479 | }
|
480 | }
|
481 | get horizontal() {
|
482 | return this.layout == 'horizontal';
|
483 | }
|
484 | ngAfterContentInit() {
|
485 | if (this.templates.length) {
|
486 | this.templateMap = {};
|
487 | }
|
488 | this.templates.forEach((item) => {
|
489 | this.templateMap[item.name] = item.template;
|
490 | });
|
491 | }
|
492 | updateSerializedValue() {
|
493 | this.serializedValue = [];
|
494 | this.serializeNodes(null, this.getRootNode(), 0, true);
|
495 | }
|
496 | serializeNodes(parent, nodes, level, visible) {
|
497 | if (nodes && nodes.length) {
|
498 | for (let node of nodes) {
|
499 | node.parent = parent;
|
500 | const rowNode = {
|
501 | node: node,
|
502 | parent: parent,
|
503 | level: level,
|
504 | visible: visible && (parent ? parent.expanded : true)
|
505 | };
|
506 | this.serializedValue.push(rowNode);
|
507 | if (rowNode.visible && node.expanded) {
|
508 | this.serializeNodes(node, node.children, level + 1, rowNode.visible);
|
509 | }
|
510 | }
|
511 | }
|
512 | }
|
513 | onNodeClick(event, node) {
|
514 | let eventTarget = event.target;
|
515 | if (DomHandler.hasClass(eventTarget, 'p-tree-toggler') || DomHandler.hasClass(eventTarget, 'p-tree-toggler-icon')) {
|
516 | return;
|
517 | }
|
518 | else if (this.selectionMode) {
|
519 | if (node.selectable === false) {
|
520 | return;
|
521 | }
|
522 | if (this.hasFilteredNodes()) {
|
523 | node = this.getNodeWithKey(node.key, this.value);
|
524 | if (!node) {
|
525 | return;
|
526 | }
|
527 | }
|
528 | let index = this.findIndexInSelection(node);
|
529 | let selected = (index >= 0);
|
530 | if (this.isCheckboxSelectionMode()) {
|
531 | if (selected) {
|
532 | if (this.propagateSelectionDown)
|
533 | this.propagateDown(node, false);
|
534 | else
|
535 | this.selection = this.selection.filter((val, i) => i != index);
|
536 | if (this.propagateSelectionUp && node.parent) {
|
537 | this.propagateUp(node.parent, false);
|
538 | }
|
539 | this.selectionChange.emit(this.selection);
|
540 | this.onNodeUnselect.emit({ originalEvent: event, node: node });
|
541 | }
|
542 | else {
|
543 | if (this.propagateSelectionDown)
|
544 | this.propagateDown(node, true);
|
545 | else
|
546 | this.selection = [...this.selection || [], node];
|
547 | if (this.propagateSelectionUp && node.parent) {
|
548 | this.propagateUp(node.parent, true);
|
549 | }
|
550 | this.selectionChange.emit(this.selection);
|
551 | this.onNodeSelect.emit({ originalEvent: event, node: node });
|
552 | }
|
553 | }
|
554 | else {
|
555 | let metaSelection = this.nodeTouched ? false : this.metaKeySelection;
|
556 | if (metaSelection) {
|
557 | let metaKey = (event.metaKey || event.ctrlKey);
|
558 | if (selected && metaKey) {
|
559 | if (this.isSingleSelectionMode()) {
|
560 | this.selectionChange.emit(null);
|
561 | }
|
562 | else {
|
563 | this.selection = this.selection.filter((val, i) => i != index);
|
564 | this.selectionChange.emit(this.selection);
|
565 | }
|
566 | this.onNodeUnselect.emit({ originalEvent: event, node: node });
|
567 | }
|
568 | else {
|
569 | if (this.isSingleSelectionMode()) {
|
570 | this.selectionChange.emit(node);
|
571 | }
|
572 | else if (this.isMultipleSelectionMode()) {
|
573 | this.selection = (!metaKey) ? [] : this.selection || [];
|
574 | this.selection = [...this.selection, node];
|
575 | this.selectionChange.emit(this.selection);
|
576 | }
|
577 | this.onNodeSelect.emit({ originalEvent: event, node: node });
|
578 | }
|
579 | }
|
580 | else {
|
581 | if (this.isSingleSelectionMode()) {
|
582 | if (selected) {
|
583 | this.selection = null;
|
584 | this.onNodeUnselect.emit({ originalEvent: event, node: node });
|
585 | }
|
586 | else {
|
587 | this.selection = node;
|
588 | this.onNodeSelect.emit({ originalEvent: event, node: node });
|
589 | }
|
590 | }
|
591 | else {
|
592 | if (selected) {
|
593 | this.selection = this.selection.filter((val, i) => i != index);
|
594 | this.onNodeUnselect.emit({ originalEvent: event, node: node });
|
595 | }
|
596 | else {
|
597 | this.selection = [...this.selection || [], node];
|
598 | this.onNodeSelect.emit({ originalEvent: event, node: node });
|
599 | }
|
600 | }
|
601 | this.selectionChange.emit(this.selection);
|
602 | }
|
603 | }
|
604 | }
|
605 | this.nodeTouched = false;
|
606 | }
|
607 | onNodeTouchEnd() {
|
608 | this.nodeTouched = true;
|
609 | }
|
610 | onNodeRightClick(event, node) {
|
611 | if (this.contextMenu) {
|
612 | let eventTarget = event.target;
|
613 | if (eventTarget.className && eventTarget.className.indexOf('p-tree-toggler') === 0) {
|
614 | return;
|
615 | }
|
616 | else {
|
617 | let index = this.findIndexInSelection(node);
|
618 | let selected = (index >= 0);
|
619 | if (!selected) {
|
620 | if (this.isSingleSelectionMode())
|
621 | this.selectionChange.emit(node);
|
622 | else
|
623 | this.selectionChange.emit([node]);
|
624 | }
|
625 | this.contextMenu.show(event);
|
626 | this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });
|
627 | }
|
628 | }
|
629 | }
|
630 | findIndexInSelection(node) {
|
631 | let index = -1;
|
632 | if (this.selectionMode && this.selection) {
|
633 | if (this.isSingleSelectionMode()) {
|
634 | let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;
|
635 | index = areNodesEqual ? 0 : -1;
|
636 | }
|
637 | else {
|
638 | for (let i = 0; i < this.selection.length; i++) {
|
639 | let selectedNode = this.selection[i];
|
640 | let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
|
641 | if (areNodesEqual) {
|
642 | index = i;
|
643 | break;
|
644 | }
|
645 | }
|
646 | }
|
647 | }
|
648 | return index;
|
649 | }
|
650 | syncNodeOption(node, parentNodes, option, value) {
|
651 |
|
652 | const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
|
653 | if (_node) {
|
654 | _node[option] = value || node[option];
|
655 | }
|
656 | }
|
657 | hasFilteredNodes() {
|
658 | return this.filter && this.filteredNodes && this.filteredNodes.length;
|
659 | }
|
660 | getNodeWithKey(key, nodes) {
|
661 | for (let node of nodes) {
|
662 | if (node.key === key) {
|
663 | return node;
|
664 | }
|
665 | if (node.children) {
|
666 | let matchedNode = this.getNodeWithKey(key, node.children);
|
667 | if (matchedNode) {
|
668 | return matchedNode;
|
669 | }
|
670 | }
|
671 | }
|
672 | }
|
673 | propagateUp(node, select) {
|
674 | if (node.children && node.children.length) {
|
675 | let selectedCount = 0;
|
676 | let childPartialSelected = false;
|
677 | for (let child of node.children) {
|
678 | if (this.isSelected(child)) {
|
679 | selectedCount++;
|
680 | }
|
681 | else if (child.partialSelected) {
|
682 | childPartialSelected = true;
|
683 | }
|
684 | }
|
685 | if (select && selectedCount == node.children.length) {
|
686 | this.selection = [...this.selection || [], node];
|
687 | node.partialSelected = false;
|
688 | }
|
689 | else {
|
690 | if (!select) {
|
691 | let index = this.findIndexInSelection(node);
|
692 | if (index >= 0) {
|
693 | this.selection = this.selection.filter((val, i) => i != index);
|
694 | }
|
695 | }
|
696 | if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)
|
697 | node.partialSelected = true;
|
698 | else
|
699 | node.partialSelected = false;
|
700 | }
|
701 | this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
|
702 | }
|
703 | let parent = node.parent;
|
704 | if (parent) {
|
705 | this.propagateUp(parent, select);
|
706 | }
|
707 | }
|
708 | propagateDown(node, select) {
|
709 | let index = this.findIndexInSelection(node);
|
710 | if (select && index == -1) {
|
711 | this.selection = [...this.selection || [], node];
|
712 | }
|
713 | else if (!select && index > -1) {
|
714 | this.selection = this.selection.filter((val, i) => i != index);
|
715 | }
|
716 | node.partialSelected = false;
|
717 | this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
|
718 | if (node.children && node.children.length) {
|
719 | for (let child of node.children) {
|
720 | this.propagateDown(child, select);
|
721 | }
|
722 | }
|
723 | }
|
724 | isSelected(node) {
|
725 | return this.findIndexInSelection(node) != -1;
|
726 | }
|
727 | isSingleSelectionMode() {
|
728 | return this.selectionMode && this.selectionMode == 'single';
|
729 | }
|
730 | isMultipleSelectionMode() {
|
731 | return this.selectionMode && this.selectionMode == 'multiple';
|
732 | }
|
733 | isCheckboxSelectionMode() {
|
734 | return this.selectionMode && this.selectionMode == 'checkbox';
|
735 | }
|
736 | isNodeLeaf(node) {
|
737 | return node.leaf == false ? false : !(node.children && node.children.length);
|
738 | }
|
739 | getRootNode() {
|
740 | return this.filteredNodes ? this.filteredNodes : this.value;
|
741 | }
|
742 | getTemplateForNode(node) {
|
743 | if (this.templateMap)
|
744 | return node.type ? this.templateMap[node.type] : this.templateMap['default'];
|
745 | else
|
746 | return null;
|
747 | }
|
748 | onDragOver(event) {
|
749 | if (this.droppableNodes && (!this.value || this.value.length === 0)) {
|
750 | event.dataTransfer.dropEffect = 'move';
|
751 | event.preventDefault();
|
752 | }
|
753 | }
|
754 | onDrop(event) {
|
755 | if (this.droppableNodes && (!this.value || this.value.length === 0)) {
|
756 | event.preventDefault();
|
757 | let dragNode = this.dragNode;
|
758 | if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
|
759 | let dragNodeIndex = this.dragNodeIndex;
|
760 | this.dragNodeSubNodes.splice(dragNodeIndex, 1);
|
761 | this.value = this.value || [];
|
762 | this.value.push(dragNode);
|
763 | this.dragDropService.stopDrag({
|
764 | node: dragNode
|
765 | });
|
766 | }
|
767 | }
|
768 | }
|
769 | onDragEnter(event) {
|
770 | if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
|
771 | this.dragHover = true;
|
772 | }
|
773 | }
|
774 | onDragLeave(event) {
|
775 | if (this.droppableNodes) {
|
776 | let rect = event.currentTarget.getBoundingClientRect();
|
777 | if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
|
778 | this.dragHover = false;
|
779 | }
|
780 | }
|
781 | }
|
782 | allowDrop(dragNode, dropNode, dragNodeScope) {
|
783 | if (!dragNode) {
|
784 |
|
785 | return false;
|
786 | }
|
787 | else if (this.isValidDragScope(dragNodeScope)) {
|
788 | let allow = true;
|
789 | if (dropNode) {
|
790 | if (dragNode === dropNode) {
|
791 | allow = false;
|
792 | }
|
793 | else {
|
794 | let parent = dropNode.parent;
|
795 | while (parent != null) {
|
796 | if (parent === dragNode) {
|
797 | allow = false;
|
798 | break;
|
799 | }
|
800 | parent = parent.parent;
|
801 | }
|
802 | }
|
803 | }
|
804 | return allow;
|
805 | }
|
806 | else {
|
807 | return false;
|
808 | }
|
809 | }
|
810 | isValidDragScope(dragScope) {
|
811 | let dropScope = this.droppableScope;
|
812 | if (dropScope) {
|
813 | if (typeof dropScope === 'string') {
|
814 | if (typeof dragScope === 'string')
|
815 | return dropScope === dragScope;
|
816 | else if (dragScope instanceof Array)
|
817 | return dragScope.indexOf(dropScope) != -1;
|
818 | }
|
819 | else if (dropScope instanceof Array) {
|
820 | if (typeof dragScope === 'string') {
|
821 | return dropScope.indexOf(dragScope) != -1;
|
822 | }
|
823 | else if (dragScope instanceof Array) {
|
824 | for (let s of dropScope) {
|
825 | for (let ds of dragScope) {
|
826 | if (s === ds) {
|
827 | return true;
|
828 | }
|
829 | }
|
830 | }
|
831 | }
|
832 | }
|
833 | return false;
|
834 | }
|
835 | else {
|
836 | return true;
|
837 | }
|
838 | }
|
839 | _filter(event) {
|
840 | let filterValue = event.target.value;
|
841 | if (filterValue === '') {
|
842 | this.filteredNodes = null;
|
843 | }
|
844 | else {
|
845 | this.filteredNodes = [];
|
846 | const searchFields = this.filterBy.split(',');
|
847 | const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);
|
848 | const isStrictMode = this.filterMode === 'strict';
|
849 | for (let node of this.value) {
|
850 | let copyNode = Object.assign({}, node);
|
851 | let paramsWithoutNode = { searchFields, filterText, isStrictMode };
|
852 | if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
|
853 | (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
|
854 | this.filteredNodes.push(copyNode);
|
855 | }
|
856 | }
|
857 | }
|
858 | this.updateSerializedValue();
|
859 | this.onFilter.emit({
|
860 | filter: filterValue,
|
861 | filteredValue: this.filteredNodes
|
862 | });
|
863 | }
|
864 | findFilteredNodes(node, paramsWithoutNode) {
|
865 | if (node) {
|
866 | let matched = false;
|
867 | if (node.children) {
|
868 | let childNodes = [...node.children];
|
869 | node.children = [];
|
870 | for (let childNode of childNodes) {
|
871 | let copyChildNode = Object.assign({}, childNode);
|
872 | if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
|
873 | matched = true;
|
874 | node.children.push(copyChildNode);
|
875 | }
|
876 | }
|
877 | }
|
878 | if (matched) {
|
879 | node.expanded = true;
|
880 | return true;
|
881 | }
|
882 | }
|
883 | }
|
884 | isFilterMatched(node, { searchFields, filterText, isStrictMode }) {
|
885 | let matched = false;
|
886 | for (let field of searchFields) {
|
887 | let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);
|
888 | if (fieldValue.indexOf(filterText) > -1) {
|
889 | matched = true;
|
890 | }
|
891 | }
|
892 | if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
|
893 | matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;
|
894 | }
|
895 | return matched;
|
896 | }
|
897 | getBlockableElement() {
|
898 | return this.el.nativeElement.children[0];
|
899 | }
|
900 | ngOnDestroy() {
|
901 | if (this.dragStartSubscription) {
|
902 | this.dragStartSubscription.unsubscribe();
|
903 | }
|
904 | if (this.dragStopSubscription) {
|
905 | this.dragStopSubscription.unsubscribe();
|
906 | }
|
907 | }
|
908 | }
|
909 | Tree.decorators = [
|
910 | { type: Component, args: [{
|
911 | selector: 'p-tree',
|
912 | template: `
|
913 | <div [ngClass]="{'p-tree p-component':true,'p-tree-selectable':selectionMode,
|
914 | 'p-treenode-dragover':dragHover,'p-tree-loading': loading, 'p-tree-flex-scrollable': scrollHeight === 'flex'}"
|
915 | [ngStyle]="style" [class]="styleClass" *ngIf="!horizontal"
|
916 | (drop)="onDrop($event)" (dragover)="onDragOver($event)" (dragenter)="onDragEnter($event)" (dragleave)="onDragLeave($event)">
|
917 | <div class="p-tree-loading-overlay p-component-overlay" *ngIf="loading">
|
918 | <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
|
919 | </div>
|
920 | <div *ngIf="filter" class="p-tree-filter-container">
|
921 | <input #filter type="text" autocomplete="off" class="p-tree-filter p-inputtext p-component" [attr.placeholder]="filterPlaceholder"
|
922 | (keydown.enter)="$event.preventDefault()" (input)="_filter($event)">
|
923 | <span class="p-tree-filter-icon pi pi-search"></span>
|
924 | </div>
|
925 | <ng-container *ngIf="!virtualScroll; else virtualScrollList">
|
926 | <div class="p-tree-wrapper" [style.max-height]="scrollHeight">
|
927 | <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
|
928 | <p-treeNode *ngFor="let node of getRootNode(); let firstChild=first;let lastChild=last; let index=index; trackBy: trackBy" [node]="node"
|
929 | [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [level]="0"></p-treeNode>
|
930 | </ul>
|
931 | </div>
|
932 | </ng-container>
|
933 | <ng-template #virtualScrollList>
|
934 | <cdk-virtual-scroll-viewport class="p-tree-wrapper" [style.height]="scrollHeight" [itemSize]="virtualNodeHeight" [minBufferPx]="minBufferPx" [maxBufferPx]="maxBufferPx">
|
935 | <ul class="p-tree-container" *ngIf="getRootNode()" role="tree" [attr.aria-label]="ariaLabel" [attr.aria-labelledby]="ariaLabelledBy">
|
936 | <p-treeNode *cdkVirtualFor="let rowNode of serializedValue; let firstChild=first; let lastChild=last; let index=index; trackBy: trackBy; templateCacheSize: 0" [level]="rowNode.level"
|
937 | [rowNode]="rowNode" [node]="rowNode.node" [firstChild]="firstChild" [lastChild]="lastChild" [index]="index" [style.height.px]="virtualNodeHeight"></p-treeNode>
|
938 | </ul>
|
939 | </cdk-virtual-scroll-viewport>
|
940 | </ng-template>
|
941 | <div class="p-tree-empty-message" *ngIf="!loading && (value == null || value.length === 0)">{{emptyMessage}}</div>
|
942 | </div>
|
943 | <div [ngClass]="{'p-tree p-tree-horizontal p-component':true,'p-tree-selectable':selectionMode}" [ngStyle]="style" [class]="styleClass" *ngIf="horizontal">
|
944 | <div class="p-tree-loading-mask p-component-overlay" *ngIf="loading">
|
945 | <i [class]="'p-tree-loading-icon pi-spin ' + loadingIcon"></i>
|
946 | </div>
|
947 | <table *ngIf="value&&value[0]">
|
948 | <p-treeNode [node]="value[0]" [root]="true"></p-treeNode>
|
949 | </table>
|
950 | <div class="p-tree-empty-message" *ngIf="!loading && (value == null || value.length === 0)">{{emptyMessage}}</div>
|
951 | </div>
|
952 | `,
|
953 | changeDetection: ChangeDetectionStrategy.Default,
|
954 | encapsulation: ViewEncapsulation.None,
|
955 | styles: [".p-tree-container{overflow:auto}.p-tree-container,.p-treenode-children{list-style-type:none;margin:0;padding:0}.p-tree-wrapper{overflow:auto}.p-tree-toggler,.p-treenode-selectable{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;cursor:pointer;user-select:none}.p-tree-toggler{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;display:-ms-inline-flexbox;display:inline-flex;justify-content:center;overflow:hidden;position:relative}.p-treenode-leaf>.p-treenode-content .p-tree-toggler{visibility:hidden}.p-treenode-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.p-tree-filter{width:100%}.p-tree-filter-container{display:block;position:relative;width:100%}.p-tree-filter-icon{margin-top:-.5rem;position:absolute;top:50%}.p-tree-loading{min-height:4rem;position:relative}.p-tree .p-tree-loading-overlay{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;display:-ms-flexbox;display:flex;justify-content:center;position:absolute;z-index:2}.p-tree-flex-scrollable{-ms-flex:1;-ms-flex-direction:column;display:-ms-flexbox;display:flex;flex:1;flex-direction:column;height:100%}.p-tree-flex-scrollable .p-tree-wrapper{-ms-flex:1;flex:1}.p-tree .p-treenode-droppoint{height:4px;list-style-type:none}.p-tree .p-treenode-droppoint-active{border:0}.p-tree-horizontal{overflow:auto;padding-left:0;padding-right:0;width:auto}.p-tree.p-tree-horizontal table,.p-tree.p-tree-horizontal td,.p-tree.p-tree-horizontal tr{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.p-tree-horizontal .p-treenode-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;font-weight:400;padding:.4em 1em .4em .2em}.p-tree-horizontal .p-treenode-parent .p-treenode-content{font-weight:400;white-space:nowrap}.p-tree.p-tree-horizontal .p-treenode{background:url(\"data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=\") repeat-x scroll 50% rgba(0,0,0,0);padding:.25rem 2.5rem}.p-tree.p-tree-horizontal .p-treenode.p-treenode-collapsed,.p-tree.p-tree-horizontal .p-treenode.p-treenode-leaf{padding-right:0}.p-tree.p-tree-horizontal .p-treenode-children{margin:0;padding:0}.p-tree.p-tree-horizontal .p-treenode-connector{width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-table{height:100%;width:1px}.p-tree.p-tree-horizontal .p-treenode-connector-line{background:url(\"data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=\") repeat-y scroll 0 0 rgba(0,0,0,0);width:1px}.p-tree.p-tree-horizontal table{height:0}"]
|
956 | },] }
|
957 | ];
|
958 | Tree.ctorParameters = () => [
|
959 | { type: ElementRef },
|
960 | { type: TreeDragDropService, decorators: [{ type: Optional }] }
|
961 | ];
|
962 | Tree.propDecorators = {
|
963 | value: [{ type: Input }],
|
964 | selectionMode: [{ type: Input }],
|
965 | selection: [{ type: Input }],
|
966 | selectionChange: [{ type: Output }],
|
967 | onNodeSelect: [{ type: Output }],
|
968 | onNodeUnselect: [{ type: Output }],
|
969 | onNodeExpand: [{ type: Output }],
|
970 | onNodeCollapse: [{ type: Output }],
|
971 | onNodeContextMenuSelect: [{ type: Output }],
|
972 | onNodeDrop: [{ type: Output }],
|
973 | style: [{ type: Input }],
|
974 | styleClass: [{ type: Input }],
|
975 | contextMenu: [{ type: Input }],
|
976 | layout: [{ type: Input }],
|
977 | draggableScope: [{ type: Input }],
|
978 | droppableScope: [{ type: Input }],
|
979 | draggableNodes: [{ type: Input }],
|
980 | droppableNodes: [{ type: Input }],
|
981 | metaKeySelection: [{ type: Input }],
|
982 | propagateSelectionUp: [{ type: Input }],
|
983 | propagateSelectionDown: [{ type: Input }],
|
984 | loading: [{ type: Input }],
|
985 | loadingIcon: [{ type: Input }],
|
986 | emptyMessage: [{ type: Input }],
|
987 | ariaLabel: [{ type: Input }],
|
988 | ariaLabelledBy: [{ type: Input }],
|
989 | validateDrop: [{ type: Input }],
|
990 | filter: [{ type: Input }],
|
991 | filterBy: [{ type: Input }],
|
992 | filterMode: [{ type: Input }],
|
993 | filterPlaceholder: [{ type: Input }],
|
994 | filterLocale: [{ type: Input }],
|
995 | scrollHeight: [{ type: Input }],
|
996 | virtualScroll: [{ type: Input }],
|
997 | virtualNodeHeight: [{ type: Input }],
|
998 | minBufferPx: [{ type: Input }],
|
999 | maxBufferPx: [{ type: Input }],
|
1000 | trackBy: [{ type: Input }],
|
1001 | onFilter: [{ type: Output }],
|
1002 | templates: [{ type: ContentChildren, args: [PrimeTemplate,] }],
|
1003 | virtualScrollBody: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }]
|
1004 | };
|
1005 | class TreeModule {
|
1006 | }
|
1007 | TreeModule.decorators = [
|
1008 | { type: NgModule, args: [{
|
1009 | imports: [CommonModule, ScrollingModule, RippleModule],
|
1010 | exports: [Tree, SharedModule, ScrollingModule],
|
1011 | declarations: [Tree, UITreeNode]
|
1012 | },] }
|
1013 | ];
|
1014 |
|
1015 |
|
1016 |
|
1017 |
|
1018 |
|
1019 | export { Tree, TreeModule, UITreeNode };
|
1020 |
|