@libs-ui/components-drag-drop 0.2.193 → 0.2.195
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.
|
@@ -450,11 +450,12 @@ export class LibsUiDragDropDemoComponent {
|
|
|
450
450
|
|
|
451
451
|
<!-- Nested Containers Demo -->
|
|
452
452
|
<div class="demo-example">
|
|
453
|
-
<h3>Nested Containers</h3>
|
|
453
|
+
<h3>Nested Containers copy</h3>
|
|
454
454
|
<div class="nested-container">
|
|
455
455
|
<div LibsUiComponentsDragContainerDirective
|
|
456
456
|
[(items)]="nestedItems"
|
|
457
457
|
[groupName]="'parent'"
|
|
458
|
+
[mode]="'copy'"
|
|
458
459
|
[acceptDragSameGroup]="true">
|
|
459
460
|
@for (item of nestedItems; track item) {
|
|
460
461
|
<div class="nested-item"
|
|
@@ -675,11 +676,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
675
676
|
|
|
676
677
|
<!-- Nested Containers Demo -->
|
|
677
678
|
<div class="demo-example">
|
|
678
|
-
<h3>Nested Containers</h3>
|
|
679
|
+
<h3>Nested Containers copy</h3>
|
|
679
680
|
<div class="nested-container">
|
|
680
681
|
<div LibsUiComponentsDragContainerDirective
|
|
681
682
|
[(items)]="nestedItems"
|
|
682
683
|
[groupName]="'parent'"
|
|
684
|
+
[mode]="'copy'"
|
|
683
685
|
[acceptDragSameGroup]="true">
|
|
684
686
|
@for (item of nestedItems; track item) {
|
|
685
687
|
<div class="nested-item"
|
|
@@ -801,4 +803,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
801
803
|
</div>
|
|
802
804
|
`, styles: [".page-container{max-width:1200px;margin:0 auto;padding:20px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;line-height:1.6;color:#333}header{text-align:center;padding:40px 0;background-color:#fff;border-radius:8px;margin-bottom:30px;box-shadow:0 2px 5px #0000001a}header h1{font-size:2.5rem;color:#2c3e50;margin-bottom:10px}header p{font-size:1.2rem;color:#7f8c8d}section{background-color:#fff;border-radius:8px;padding:30px;margin-bottom:30px;box-shadow:0 2px 5px #0000001a}h2{font-size:1.8rem;color:#2c3e50;margin-bottom:20px;padding-bottom:10px;border-bottom:2px solid #ecf0f1}h3{font-size:1.4rem;color:#34495e;margin-bottom:15px}h4{font-size:1.2rem;color:#34495e;margin-bottom:10px}p{margin-bottom:15px}code{font-family:Courier New,Courier,monospace;background-color:#f7f7f7;padding:2px 5px;border-radius:3px;font-size:.9em}pre{background-color:#f7f7f7;padding:15px;border-radius:5px;overflow-x:auto;margin-bottom:20px;display:flex;align-items:center;justify-content:space-between}pre code{background-color:transparent;padding:0}.installation-section .install-command{position:relative;margin-bottom:20px}.installation-section .copy-button{position:absolute;top:10px;right:10px;background:#3498db;color:#fff;border:none;border-radius:4px;padding:5px 10px;font-size:.9rem;cursor:pointer;transition:background .2s}.installation-section .copy-button:hover{background:#2980b9}.demo-container{display:grid;grid-template-columns:1fr;gap:30px}.demo-example{background:#f7f7f7;padding:20px;border-radius:8px;margin-bottom:20px}.list-container{max-width:400px;margin:20px auto}.list-item{padding:12px;margin:8px 0;background:#fff;border:1px solid #e0e0e0;border-radius:6px;display:flex;align-items:center;transition:transform .2s,box-shadow .2s}.list-item:hover{transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.item-icon{margin-right:12px;font-size:1.2em}.kanban-board{display:flex;gap:20px;padding:20px;overflow-x:auto}.kanban-column{flex:1;min-width:300px;background:#f5f5f5;padding:15px;border-radius:8px}.kanban-item{background:#fff;padding:12px;margin:8px 0;border-radius:6px;box-shadow:0 1px 3px #0000001a}.kanban-item-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.item-title{font-weight:500}.item-status{padding:4px 8px;border-radius:4px;font-size:.8em}.status-todo{background:#ffebee;color:#c62828}.status-in-progress{background:#fff3e0;color:#ef6c00}.status-done{background:#e8f5e9;color:#2e7d32}.item-description{font-size:.9em;color:#666}.nested-container{max-width:800px;margin:0 auto}.nested-item{background:#fff;border:1px solid #e0e0e0;border-radius:8px;margin:12px 0;overflow:hidden}.nested-item-header{padding:12px;background:#f5f5f5;border-bottom:1px solid #e0e0e0}.nested-item-content{padding:12px}.sub-item{padding:8px;margin:4px 0;background:#f9f9f9;border:1px solid #e0e0e0;border-radius:4px}.api-doc-section{margin-bottom:40px}.table-container{overflow-x:auto;margin-bottom:30px}.api-table{width:100%;border-collapse:collapse;margin-bottom:20px}.api-table th,.api-table td{padding:12px 15px;text-align:left;border-bottom:1px solid #e1e1e1}.api-table th{background-color:#f5f5f5;font-weight:700}.api-table tbody tr:hover{background-color:#f9f9f9}.features-section ul{list-style:none}.features-section li{display:flex;margin-bottom:25px;align-items:flex-start}.feature-icon{font-size:2rem;margin-right:20px;min-width:40px;text-align:center}.feature-info{flex:1}.code-examples{display:grid;grid-template-columns:1fr;gap:20px}@media (min-width: 768px){.code-examples{grid-template-columns:repeat(2,1fr)}}@media (min-width: 992px){.code-examples{grid-template-columns:repeat(3,1fr)}}.code-example{border:1px solid #ecf0f1;border-radius:5px;padding:15px}@media (max-width: 768px){header{padding:30px 0}header h1{font-size:2rem}section{padding:20px}.kanban-board{flex-direction:column}.kanban-column{min-width:100%}.feature-icon{font-size:1.5rem;margin-right:15px}}\n"] }]
|
|
803
805
|
}] });
|
|
804
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kZW1vL2RlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWlsQmpFLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsbUJBQW1CO0lBQ25CLFVBQVUsR0FBRztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO0tBQ1QsQ0FBQztJQUVGLHVCQUF1QjtJQUN2QixVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBYTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxNQUFNO1lBQ1YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLHlCQUF5QjtvQkFDaEMsV0FBVyxFQUFFLGtEQUFrRDtvQkFDL0QsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLGdCQUFnQjtvQkFDdkIsV0FBVyxFQUFFLCtDQUErQztvQkFDNUQsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsYUFBYTtZQUNqQixLQUFLLEVBQUUs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd05UIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RyYWctaXRlbS5kaXJlY3RpdmUnO1xuXG5pbnRlcmZhY2UgVGFzayB7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1czogJ3RvZG8nIHwgJ2luLXByb2dyZXNzJyB8ICdkb25lJztcbn1cblxuaW50ZXJmYWNlIENvbHVtbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGl0ZW1zOiBUYXNrW107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kcmFnLWRyb3AtZGVtbycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUsXG4gICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZS1jb250YWluZXJcIj5cbiAgICAgIDxoZWFkZXI+XG4gICAgICAgIDxoMT5EZW1vIERyYWcgYW5kIERyb3AgQ29tcG9uZW50PC9oMT5cbiAgICAgICAgPHA+QW5ndWxhciBjb21wb25lbnQgbGlicmFyeSBmb3IgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5PC9wPlxuICAgICAgPC9oZWFkZXI+XG5cbiAgICAgIDxtYWluPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImludHJvLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+SW50cm9kdWN0aW9uPC9oMj5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIDxjb2RlPiYjNjQ7bGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcDwvY29kZT4gaXMgYSBwb3dlcmZ1bCBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IGVuYWJsZXMgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5IHdpdGggZmVhdHVyZXMgbGlrZSB2aXJ0dWFsIHNjcm9sbGluZywgbXVsdGktc2VsZWN0aW9uLCBhbmQgY3VzdG9tIGJvdW5kYXJpZXMuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJpbnN0YWxsYXRpb24tc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnN0YWxsYXRpb248L2gyPlxuICAgICAgICAgIDxwPlRvIGluc3RhbGwgdGhlIGxpYnJhcnksIHVzZSBucG0gb3IgeWFybjo8L3A+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluc3RhbGwtY29tbWFuZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGU+bnBtIGluc3RhbGwgJiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb3B5J1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgnbnBtIGluc3RhbGwgQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnKVwiIC8+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICA8cD5PciB3aXRoIHlhcm46PC9wPlxuICAgICAgICAgIFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnN0YWxsLWNvbW1hbmRcIj5cbiAgICAgICAgICAgIDxwcmU+XG4gICAgICAgICAgICAgIDxjb2RlPnlhcm4gYWRkICYjNjQ7bGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcDwvY29kZT5cbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQ29weSdcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJ3lhcm4gYWRkIEBsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wJylcIiAvPlxuICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImRlbW8tc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5MaXZlIERlbW88L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPCEtLSBCYXNpYyBMaXN0IERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5CYXNpYyBMaXN0PC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cImJhc2ljSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBiYXNpY0l0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS1pY29uXCI+8J+Tizwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdGV4dFwiPnt7IGl0ZW0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEthbmJhbiBCb2FyZCBEZW1vIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tZXhhbXBsZVwiPlxuICAgICAgICAgICAgICA8aDM+S2FuYmFuIEJvYXJkPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1ib2FyZFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4tY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gICAgICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cImNvbHVtbi5pdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIFtncm91cE5hbWVdPVwiY29sdW1uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BUb0dyb3VwTmFtZV09XCJjb2x1bW5zSWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aDQ+e3sgY29sdW1uLnRpdGxlIH19PC9oND5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjb2x1bW4uaXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2FuYmFuLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2FuYmFuLWl0ZW0taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS1zdGF0dXNcIiBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgaXRlbS5zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnN0YXR1cyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaXRlbS1kZXNjcmlwdGlvblwiPnt7IGl0ZW0uZGVzY3JpcHRpb24gfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBOZXN0ZWQgQ29udGFpbmVycyBEZW1vIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tZXhhbXBsZVwiPlxuICAgICAgICAgICAgICA8aDM+TmVzdGVkIENvbnRhaW5lcnM8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gICAgICAgICAgICAgICAgICAgICBbKGl0ZW1zKV09XCJuZXN0ZWRJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICBbZ3JvdXBOYW1lXT1cIidwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbmVzdGVkSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWl0ZW0taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIml0ZW0tdGl0bGVcIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXN0ZWQtaXRlbS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGl0ZW1zKV09XCJpdGVtLnN1Ykl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCInY2hpbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzdWJJdGVtIG9mIGl0ZW0uc3ViSXRlbXM7IHRyYWNrIHN1Ykl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdWJJdGVtIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiYXBpLWRvYy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkFQSSBEb2N1bWVudGF0aW9uPC9oMj5cbiAgICAgICAgICBcbiAgICAgICAgICA8aDM+SW5wdXRzPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJhcGktdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZWZhdWx0PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0c0RvYzsgdHJhY2sgaW5wdXQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tpbnB1dC5uYW1lfX08L2NvZGU+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPnt7aW5wdXQudHlwZX19PC9jb2RlPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2lucHV0LmRlZmF1bHR9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e2lucHV0LmRlc2NyaXB0aW9ufX08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGgzPk91dHB1dHM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImFwaS10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlR5cGU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAob3V0cHV0IG9mIG91dHB1dHNEb2M7IHRyYWNrIG91dHB1dC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT57e291dHB1dC5uYW1lfX08L2NvZGU+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPnt7b3V0cHV0LnR5cGV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvdXRwdXQuZGVzY3JpcHRpb259fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImludGVyZmFjZXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnRlcmZhY2VzPC9oMj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJmYWNlLWRvY3NcIj5cbiAgICAgICAgICAgIEBmb3IgKGludGVyZmFjZUl0ZW0gb2YgaW50ZXJmYWNlc0RvYzsgdHJhY2sgaW50ZXJmYWNlSXRlbS5uYW1lKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcmZhY2UtaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxoMz57e2ludGVyZmFjZUl0ZW0ubmFtZX19PC9oMz5cbiAgICAgICAgICAgICAgICA8cHJlPjxjb2RlPnt7aW50ZXJmYWNlSXRlbS5jb2RlfX08L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICAgICAgPHA+e3tpbnRlcmZhY2VJdGVtLmRlc2NyaXB0aW9ufX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJmZWF0dXJlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkZlYXR1cmVzPC9oMj5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICBAZm9yIChmZWF0dXJlIG9mIGZlYXR1cmVzOyB0cmFjayBmZWF0dXJlLmlkKSB7XG4gICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZlYXR1cmUtaWNvblwiPnt7ZmVhdHVyZS5pY29ufX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZlYXR1cmUtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGgzPnt7ZmVhdHVyZS50aXRsZX19PC9oMz5cbiAgICAgICAgICAgICAgICAgIDxwPnt7ZmVhdHVyZS5kZXNjcmlwdGlvbn19PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInVzYWdlLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+VXNhZ2U8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWV4YW1wbGVzXCI+XG4gICAgICAgICAgICBAZm9yIChleGFtcGxlIG9mIGNvZGVFeGFtcGxlczsgdHJhY2sgZXhhbXBsZS5pZCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29kZS1leGFtcGxlXCI+XG4gICAgICAgICAgICAgICAgPGgzPnt7ZXhhbXBsZS50aXRsZX19PC9oMz5cbiAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIFtpbm5lckhUTUxdPVwiZXhhbXBsZS5jb2RlXCI+PC9jb2RlPjwvcHJlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9tYWluPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnBhZ2UtY29udGFpbmVyIHtcbiAgICAgIG1heC13aWR0aDogMTIwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgZm9udC1mYW1pbHk6ICdTZWdvZSBVSScsIFRhaG9tYSwgR2VuZXZhLCBWZXJkYW5hLCBzYW5zLXNlcmlmO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgIGNvbG9yOiAjMzMzO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZzogNDBweCAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIgaDEge1xuICAgICAgZm9udC1zaXplOiAyLjVyZW07XG4gICAgICBjb2xvcjogIzJjM2U1MDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciBwIHtcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgY29sb3I6ICM3ZjhjOGQ7XG4gICAgfVxuICAgIFxuICAgIHNlY3Rpb24ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xuICAgICAgYm94LXNoYWRvdzogMCAycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICB9XG4gICAgXG4gICAgaDIge1xuICAgICAgZm9udC1zaXplOiAxLjhyZW07XG4gICAgICBjb2xvcjogIzJjM2U1MDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZWNmMGYxO1xuICAgIH1cbiAgICBcbiAgICBoMyB7XG4gICAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgICAgIGNvbG9yOiAjMzQ0OTVlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICB9XG5cbiAgICBoNCB7XG4gICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgIGNvbG9yOiAjMzQ0OTVlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgXG4gICAgcCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIH1cbiAgICBcbiAgICBjb2RlIHtcbiAgICAgIGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBDb3VyaWVyLCBtb25vc3BhY2U7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICAgICAgcGFkZGluZzogMnB4IDVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgfVxuICAgIFxuICAgIHByZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgfVxuICAgIFxuICAgIHByZSBjb2RlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbiAgICAvKiBJbnN0YWxsYXRpb24gc2VjdGlvbiBzdHlsZXMgKi9cbiAgICAuaW5zdGFsbGF0aW9uLXNlY3Rpb24gLmluc3RhbGwtY29tbWFuZCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICBcbiAgICAuaW5zdGFsbGF0aW9uLXNlY3Rpb24gLmNvcHktYnV0dG9uIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTBweDtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgYmFja2dyb3VuZDogIzM0OThkYjtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG4gICAgfVxuICAgIFxuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuY29weS1idXR0b246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogIzI5ODBiOTtcbiAgICB9XG5cbiAgICAvKiBEZW1vIHNlY3Rpb24gc3R5bGVzICovXG4gICAgLmRlbW8tY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgICAgIGdhcDogMzBweDtcbiAgICB9XG5cbiAgICAuZGVtby1leGFtcGxlIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG5cbiAgICAvKiBMaXN0IHN0eWxlcyAqL1xuICAgIC5saXN0LWNvbnRhaW5lciB7XG4gICAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgICAgbWFyZ2luOiAyMHB4IGF1dG87XG4gICAgfVxuXG4gICAgLmxpc3QtaXRlbSB7XG4gICAgICBwYWRkaW5nOiAxMnB4O1xuICAgICAgbWFyZ2luOiA4cHggMDtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMsIGJveC1zaGFkb3cgMC4ycztcbiAgICB9XG5cbiAgICAubGlzdC1pdGVtOmhvdmVyIHtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsMCwwLDAuMSk7XG4gICAgfVxuXG4gICAgLml0ZW0taWNvbiB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgIH1cblxuICAgIC8qIEthbmJhbiBzdHlsZXMgKi9cbiAgICAua2FuYmFuLWJvYXJkIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDIwcHg7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG5cbiAgICAua2FuYmFuLWNvbHVtbiB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAzMDBweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7XG4gICAgICBwYWRkaW5nOiAxNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIH1cblxuICAgIC5rYW5iYW4taXRlbSB7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICB9XG5cbiAgICAua2FuYmFuLWl0ZW0taGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgIH1cblxuICAgIC5pdGVtLXRpdGxlIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuXG4gICAgLml0ZW0tc3RhdHVzIHtcbiAgICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgIH1cblxuICAgIC5zdGF0dXMtdG9kbyB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZlYmVlO1xuICAgICAgY29sb3I6ICNjNjI4Mjg7XG4gICAgfVxuXG4gICAgLnN0YXR1cy1pbi1wcm9ncmVzcyB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmM2UwO1xuICAgICAgY29sb3I6ICNlZjZjMDA7XG4gICAgfVxuXG4gICAgLnN0YXR1cy1kb25lIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlOGY1ZTk7XG4gICAgICBjb2xvcjogIzJlN2QzMjtcbiAgICB9XG5cbiAgICAuaXRlbS1kZXNjcmlwdGlvbiB7XG4gICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgY29sb3I6ICM2NjY7XG4gICAgfVxuXG4gICAgLyogTmVzdGVkIGNvbnRhaW5lcnMgc3R5bGVzICovXG4gICAgLm5lc3RlZC1jb250YWluZXIge1xuICAgICAgbWF4LXdpZHRoOiA4MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIH1cblxuICAgIC5uZXN0ZWQtaXRlbSB7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBtYXJnaW46IDEycHggMDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtLWhlYWRlciB7XG4gICAgICBwYWRkaW5nOiAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgIH1cblxuICAgIC5uZXN0ZWQtaXRlbS1jb250ZW50IHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgfVxuXG4gICAgLnN1Yi1pdGVtIHtcbiAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgIG1hcmdpbjogNHB4IDA7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjlmOWY5O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG5cbiAgICAvKiBBUEkgZG9jdW1lbnRhdGlvbiBzdHlsZXMgKi9cbiAgICAuYXBpLWRvYy1zZWN0aW9uIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7XG4gICAgfVxuICAgIFxuICAgIC50YWJsZS1jb250YWluZXIge1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgfVxuICAgIFxuICAgIC5hcGktdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB0aCxcbiAgICAuYXBpLXRhYmxlIHRkIHtcbiAgICAgIHBhZGRpbmc6IDEycHggMTVweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2UxZTFlMTtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB0aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuICAgIFxuICAgIC5hcGktdGFibGUgdGJvZHkgdHI6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcbiAgICB9XG5cbiAgICAvKiBGZWF0dXJlcyBzZWN0aW9uICovXG4gICAgLmZlYXR1cmVzLXNlY3Rpb24gdWwge1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB9XG4gICAgXG4gICAgLmZlYXR1cmVzLXNlY3Rpb24gbGkge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICB9XG4gICAgXG4gICAgLmZlYXR1cmUtaWNvbiB7XG4gICAgICBmb250LXNpemU6IDJyZW07XG4gICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgICBtaW4td2lkdGg6IDQwcHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuICAgIFxuICAgIC5mZWF0dXJlLWluZm8ge1xuICAgICAgZmxleDogMTtcbiAgICB9XG5cbiAgICAvKiBDb2RlIGV4YW1wbGVzICovXG4gICAgLmNvZGUtZXhhbXBsZXMge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICAgICAgZ2FwOiAyMHB4O1xuICAgIH1cbiAgICBcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gICAgICAuY29kZS1leGFtcGxlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC5jb2RlLWV4YW1wbGUge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VjZjBmMTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgfVxuXG4gICAgLyogUmVzcG9uc2l2ZSBhZGp1c3RtZW50cyAqL1xuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgaGVhZGVyIHtcbiAgICAgICAgcGFkZGluZzogMzBweCAwO1xuICAgICAgfVxuICAgICAgXG4gICAgICBoZWFkZXIgaDEge1xuICAgICAgICBmb250LXNpemU6IDJyZW07XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgfVxuICAgICAgXG4gICAgICAua2FuYmFuLWJvYXJkIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLmthbmJhbi1jb2x1bW4ge1xuICAgICAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5mZWF0dXJlLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICAgICAgfVxuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpRHJhZ0Ryb3BEZW1vQ29tcG9uZW50IHtcbiAgLy8gQmFzaWMgTGlzdCBJdGVtc1xuICBiYXNpY0l0ZW1zID0gW1xuICAgICdUYXNrIDEnLFxuICAgICdUYXNrIDInLFxuICAgICdUYXNrIDMnLFxuICAgICdUYXNrIDQnLFxuICAgICdUYXNrIDUnXG4gIF07XG5cbiAgLy8gS2FuYmFuIEJvYXJkIENvbHVtbnNcbiAgY29sdW1uc0lkcyA9IFsndG9kbycsICdpbi1wcm9ncmVzcycsICdkb25lJ107XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIGlkOiAndG9kbycsXG4gICAgICB0aXRsZTogJ1RvIERvJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogMSxcbiAgICAgICAgICB0aXRsZTogJ0ltcGxlbWVudCBkcmFnIGFuZCBkcm9wJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0FkZCBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGNvbXBvbmVudCcsXG4gICAgICAgICAgc3RhdHVzOiAndG9kbydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAyLFxuICAgICAgICAgIHRpdGxlOiAnQWRkIGFuaW1hdGlvbnMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSW1wbGVtZW50IHNtb290aCBhbmltYXRpb25zIGZvciBkcmFnIGFuZCBkcm9wJyxcbiAgICAgICAgICBzdGF0dXM6ICd0b2RvJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2luLXByb2dyZXNzJyxcbiAgICAgIHRpdGxlOiAnSW4gUHJvZ3Jlc3MnLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAzLFxuICAgICAgICAgIHRpdGxlOiAnRml4IHN0eWxpbmcgaXNzdWVzJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Jlc29sdmUgQ1NTIGNvbmZsaWN0cyBpbiB0aGUgY29tcG9uZW50JyxcbiAgICAgICAgICBzdGF0dXM6ICdpbi1wcm9ncmVzcydcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdkb25lJyxcbiAgICAgIHRpdGxlOiAnRG9uZScsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDQsXG4gICAgICAgICAgdGl0bGU6ICdTZXR1cCBwcm9qZWN0IHN0cnVjdHVyZScsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdJbml0aWFsaXplIHRoZSBwcm9qZWN0IHdpdGggbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgICBzdGF0dXM6ICdkb25lJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuXG4gIC8vIE5lc3RlZCBJdGVtc1xuICBuZXN0ZWRJdGVtcyA9IFtcbiAgICB7XG4gICAgICBpZDogMSxcbiAgICAgIHRpdGxlOiAnUHJvamVjdCBBJyxcbiAgICAgIHN1Ykl0ZW1zOiBbJ1Rhc2sgMScsICdUYXNrIDInLCAnVGFzayAzJ11cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAyLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEInLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayA0JywgJ1Rhc2sgNSddXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIHRpdGxlOiAnUHJvamVjdCBDJyxcbiAgICAgIHN1Ykl0ZW1zOiBbJ1Rhc2sgNicsICdUYXNrIDcnLCAnVGFzayA4J11cbiAgICB9XG4gIF07XG5cbiAgLy8gQVBJIERvY3VtZW50YXRpb25cbiAgaW5wdXRzRG9jID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdpdGVtcycsXG4gICAgICB0eXBlOiAnQXJyYXk8dW5rbm93bj4nLFxuICAgICAgZGVmYXVsdDogJ1tdJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQXJyYXkgb2YgaXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnbW9kZScsXG4gICAgICB0eXBlOiBcIidtb3ZlJyB8ICdjb3B5JyB8ICdkZWVwQ29weSdcIixcbiAgICAgIGRlZmF1bHQ6IFwiJ21vdmUnXCIsXG4gICAgICBkZXNjcmlwdGlvbjogJ01vZGUgZm9yIGRyYWcgYW5kIGRyb3Agb3BlcmF0aW9ucydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJlY3Rpb25EcmFnJyxcbiAgICAgIHR5cGU6IFwiJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1wiLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RpcmVjdGlvbiBvZiBkcmFnIG1vdmVtZW50J1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3ZpZXdFbmNhcHN1bGF0aW9uJyxcbiAgICAgIHR5cGU6IFwiJ2VtdWxhdGVkJyB8ICdub25lJ1wiLFxuICAgICAgZGVmYXVsdDogXCInZW11bGF0ZWQnXCIsXG4gICAgICBkZXNjcmlwdGlvbjogJ1ZpZXcgZW5jYXBzdWxhdGlvbiBtb2RlIGZvciBzdHlsaW5nJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Rpc2FibGVEcmFnQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlZmF1bHQ6ICd1bmRlZmluZWQnLFxuICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIGRpc2FibGUgZHJhZyBvcGVyYXRpb25zIGZvciB0aGUgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2VwdERyYWdTYW1lR3JvdXAnLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ2ZhbHNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBhY2NlcHQgZHJhZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgc2FtZSBncm91cCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwbGFjZWhvbGRlcicsXG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiAndHJ1ZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gc2hvdyBwbGFjZWhvbGRlciBkdXJpbmcgZHJhZydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdncm91cE5hbWUnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBkZWZhdWx0OiBcIidncm91cERyYWdBbmREcm9wRGVmYXVsdCdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTmFtZSBvZiB0aGUgZ3JvdXAgZm9yIGRyYWcgYW5kIGRyb3Agb3BlcmF0aW9ucydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkcm9wVG9Hcm91cE5hbWUnLFxuICAgICAgdHlwZTogJ0FycmF5PHN0cmluZz4gfCBudWxsJyxcbiAgICAgIGRlZmF1bHQ6ICdudWxsJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBncm91cCBuYW1lcyB0aGF0IGNhbiBhY2NlcHQgZHJvcHMgZnJvbSB0aGlzIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdHlsZXNPdmVycmlkZScsXG4gICAgICB0eXBlOiAnQXJyYXk8eyBjbGFzc05hbWU6IHN0cmluZywgc3R5bGVzOiBzdHJpbmcgfT4nLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0N1c3RvbSBzdHlsZXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBkcmFnLWRyb3Agc3R5bGluZydcbiAgICB9XG4gIF07XG5cbiAgb3V0cHV0c0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ1N0YXJ0Q29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ1N0YXJ0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIHN0YXJ0cyBpbiB0aGUgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyYWdPdmVyQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ092ZXInLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHdoZW4gZHJhZ2dpbmcgb3ZlciB0aGUgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyYWdMZWF2ZUNvbnRhaW5lcicsXG4gICAgICB0eXBlOiAnSURyYWdMZWF2ZScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBsZWF2ZXMgdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnRW5kQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0VuZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBlbmRzIGluIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJvcHBlZENvbnRhaW5lcicsXG4gICAgICB0eXBlOiAnSURyb3AnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBkcm9wcGVkIGluIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJvcHBlZENvbnRhaW5lckVtcHR5JyxcbiAgICAgIHR5cGU6ICdJRHJvcCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGRyb3BwZWQgaW4gYW4gZW1wdHkgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dEZ1bmN0aW9uQ29udHJvbCcsXG4gICAgICB0eXBlOiAnSURyYWdEcm9wRnVuY3Rpb25Db250cm9sRXZlbnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHRvIGNvbnRyb2wgZHJhZy1kcm9wIGZ1bmN0aW9uYWxpdHknXG4gICAgfVxuICBdO1xuXG4gIC8vIEludGVyZmFjZSBEb2N1bWVudGF0aW9uXG4gIGludGVyZmFjZXNEb2MgPSBbXG4gICAge1xuICAgICAgbmFtZTogJ0lEcmFnZ2luZycsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnZ2luZyB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGVsZW1lbnRLZWVwQ29udGFpbmVyPzogYm9vbGVhbjtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgb3BlcmF0aW9uIGV2ZW50cywgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZ2dlZCBlbGVtZW50IGFuZCBtb3VzZSBwb3NpdGlvbidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ1N0YXJ0JyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdTdGFydCB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIHN0YXJ0IGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gZHJhZ2dpbmcgYmVnaW5zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lEcmFnT3ZlcicsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnT3ZlciB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGVsZW1lbnREcmFnT3ZlcjogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIG92ZXIgZXZlbnRzLCB0cmlnZ2VyZWQgd2hlbiBhbiBlbGVtZW50IGlzIGRyYWdnZWQgb3ZlciBhbm90aGVyIGVsZW1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdMZWF2ZScsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnTGVhdmUge1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGVsZW1lbnREcmFnTGVhdmU6IEhUTUxFbGVtZW50O1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBsZWF2ZSBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGEgZHJhZ2dlZCBlbGVtZW50IGxlYXZlcyBhbm90aGVyIGVsZW1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdFbmQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0VuZCB7XG4gIG1vdXNlUG9zaXRpb246IElNb3VzZVBvc2l0aW9uO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGVuZCBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGRyYWdnaW5nIGVuZHMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyb3AnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJvcCB7XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyb3A6IEhUTUxFbGVtZW50O1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJvcCBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGFuIGVsZW1lbnQgaXMgZHJvcHBlZCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJSXRlbURyYWdJbmZvJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSUl0ZW1EcmFnSW5mbyB7XG4gIGl0ZW06IG9iamVjdDtcbiAgaXRlbXNNb3ZlPzogV3JpdGFibGVTaWduYWw8QXJyYXk8dW5rbm93bj4+O1xuICBpbmRleERyYWc/OiBudW1iZXI7XG4gIGluZGV4RHJvcD86IG51bWJlcjtcbiAgaXRlbXNEcmFnOiBXcml0YWJsZVNpZ25hbDxBcnJheTx1bmtub3duPj47XG4gIGl0ZW1zRHJvcD86IFdyaXRhYmxlU2lnbmFsPEFycmF5PHVua25vd24+PjtcbiAgY29udGFpbmVyRHJhZz86IEhUTUxFbGVtZW50O1xuICBjb250YWluZXJEcm9wPzogSFRNTEVsZW1lbnQ7XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRyYWdnZWQgaXRlbSBhbmQgaXRzIGNvbnRhaW5lcnMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdJdGVtSW5Db250YWluZXJWaXJ0dWFsU2Nyb2xsIHtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBkaXN0YW5jZVN0YXJ0RWxlbWVudEFuZE1vdXNlVG9wOiBudW1iZXI7XG4gIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VMZWZ0OiBudW1iZXI7XG4gIGVsZW1lbnRDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgZHJhZ0JvdW5kYXJ5PzogYm9vbGVhbjtcbiAgZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcj86IGJvb2xlYW47XG4gIGlnbm9yZVN0b3BFdmVudD86IGJvb2xlYW47XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciB2aXJ0dWFsIHNjcm9sbGluZyBkcmFnIG9wZXJhdGlvbnMsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZHJhZyBib3VuZGFyaWVzIGFuZCBjb250YWluZXIgZWxlbWVudHMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSU1vdXNlUG9zaXRpb24nLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJTW91c2VQb3NpdGlvbiB7XG4gIGNsaWVudFg6IG51bWJlcjtcbiAgY2xpZW50WTogbnVtYmVyO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSByZXByZXNlbnRpbmcgbW91c2UgcG9zaXRpb24gY29vcmRpbmF0ZXMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdEcm9wRnVuY3Rpb25Db250cm9sRXZlbnQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCB7XG4gIHNldEF0dHJpYnV0ZUVsZW1lbnRBbmRJdGVtRHJhZzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgYW5kIGRyb3AgY29udHJvbCBmdW5jdGlvbnMnXG4gICAgfVxuICBdO1xuXG4gIC8vIEZlYXR1cmVzXG4gIGZlYXR1cmVzID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgaWNvbjogJ/CflIQnLFxuICAgICAgdGl0bGU6ICdGbGV4aWJsZSBEcmFnIGFuZCBEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCBmb3IgY29udGFpbmVyLXRvLWNvbnRhaW5lciBkcmFnZ2luZyB3aXRoIGN1c3RvbWl6YWJsZSBncm91cCBuYW1lcyBhbmQgZHJvcCB6b25lcydcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAyLFxuICAgICAgaWNvbjogJ/Cfk5wnLFxuICAgICAgdGl0bGU6ICdWaXJ0dWFsIFNjcm9sbGluZycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0VmZmljaWVudCBoYW5kbGluZyBvZiBsYXJnZSBsaXN0cyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nIHN1cHBvcnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogMyxcbiAgICAgIGljb246ICfwn46vJyxcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIEJvdW5kYXJpZXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdEZWZpbmUgY3VzdG9tIGRyYWcgYm91bmRhcmllcyBhbmQgZHJvcCB6b25lcyBmb3IgcHJlY2lzZSBjb250cm9sJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDQsXG4gICAgICBpY29uOiAn8J+OqCcsXG4gICAgICB0aXRsZTogJ1N0eWxpbmcgT3B0aW9ucycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0N1c3RvbWl6YWJsZSBzdHlsZXMgZm9yIGRyYWcgaXRlbXMgYW5kIGNvbnRhaW5lcnMnXG4gICAgfVxuICBdO1xuXG4gIC8vIENvZGUgRXhhbXBsZXNcbiAgY29kZUV4YW1wbGVzID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgdGl0bGU6ICdCYXNpYyBVc2FnZScsXG4gICAgICBjb2RlOiBgJmx0O2RpdiBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgWyhpdGVtcyldPVwiaXRlbXNcIlxuICBbZ3JvdXBOYW1lXT1cIidteUdyb3VwJ1wiXG4gIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cInRydWVcIiZndDtcbiAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICZsdDtkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUmZ3Q7XG4gICAgICB7eyBpdGVtIH19XG4gICAgJmx0Oy9kaXYmZ3Q7XG4gIH1cbiZsdDsvZGl2Jmd0O2BcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAyLFxuICAgICAgdGl0bGU6ICdDb250YWluZXItdG8tQ29udGFpbmVyJyxcbiAgICAgIGNvZGU6IGAmbHQ7ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICBbKGl0ZW1zKV09XCJzb3VyY2VJdGVtc1wiXG4gIFtncm91cE5hbWVdPVwiJ3NvdXJjZSdcIiZndDtcbiAgQGZvciAoaXRlbSBvZiBzb3VyY2VJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICZsdDtkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUmZ3Q7XG4gICAgICB7eyBpdGVtIH19XG4gICAgJmx0Oy9kaXYmZ3Q7XG4gIH1cbiZsdDsvZGl2Jmd0O1xuXG4mbHQ7ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICBbKGl0ZW1zKV09XCJ0YXJnZXRJdGVtc1wiXG4gIFtncm91cE5hbWVdPVwiJ3RhcmdldCdcIlxuICBbZHJvcFRvR3JvdXBOYW1lXT1cIlsnc291cmNlJ11cIiZndDtcbiAgQGZvciAoaXRlbSBvZiB0YXJnZXRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICZsdDtkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUmZ3Q7XG4gICAgICB7eyBpdGVtIH19XG4gICAgJmx0Oy9kaXYmZ3Q7XG4gIH1cbiZsdDsvZGl2Jmd0O2BcbiAgICB9XTtcblxuICAvKipcbiAgICogQ29weSB0ZXh0IHRvIGNsaXBib2FyZFxuICAgKi9cbiAgY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGFsZXJ0KCdDb3BpZWQgdG8gY2xpcGJvYXJkJyk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgY29weSB0ZXh0OiAnLCBlcnIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn0gIl19
|
|
806
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZHJhZy1kcm9wL3NyYy9kZW1vL2RlbW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWtsQmpFLE1BQU0sT0FBTywyQkFBMkI7SUFDdEMsbUJBQW1CO0lBQ25CLFVBQVUsR0FBRztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsUUFBUTtRQUNSLFFBQVE7UUFDUixRQUFRO0tBQ1QsQ0FBQztJQUVGLHVCQUF1QjtJQUN2QixVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBYTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxNQUFNO1lBQ1YsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLHlCQUF5QjtvQkFDaEMsV0FBVyxFQUFFLGtEQUFrRDtvQkFDL0QsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLGdCQUFnQjtvQkFDdkIsV0FBVyxFQUFFLCtDQUErQztvQkFDNUQsTUFBTSxFQUFFLE1BQU07aUJBQ2Y7YUFDRjtTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsYUFBYTtZQUNqQixLQUFLLEVBQUUs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5TlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnLWRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJhZy1pdGVtLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBUYXNrIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAndG9kbycgfCAnaW4tcHJvZ3Jlc3MnIHwgJ2RvbmUnO1xufVxuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IFRhc2tbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRyYWctZHJvcC1kZW1vJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgICAgPGhlYWRlcj5cbiAgICAgICAgPGgxPkRlbW8gRHJhZyBhbmQgRHJvcCBDb21wb25lbnQ8L2gxPlxuICAgICAgICA8cD5Bbmd1bGFyIGNvbXBvbmVudCBsaWJyYXJ5IGZvciBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHk8L3A+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgPG1haW4+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaW50cm8tc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5JbnRyb2R1Y3Rpb248L2gyPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgPGNvZGU+JiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPiBpcyBhIHBvd2VyZnVsIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgZW5hYmxlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgd2l0aCBmZWF0dXJlcyBsaWtlIHZpcnR1YWwgc2Nyb2xsaW5nLCBtdWx0aS1zZWxlY3Rpb24sIGFuZCBjdXN0b20gYm91bmRhcmllcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImluc3RhbGxhdGlvbi1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+XG4gICAgICAgICAgPHA+VG8gaW5zdGFsbCB0aGUgbGlicmFyeSwgdXNlIG5wbSBvciB5YXJuOjwvcD5cbiAgICAgICAgICBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zdGFsbC1jb21tYW5kXCI+XG4gICAgICAgICAgICA8cHJlPlxuICAgICAgICAgICAgICA8Y29kZT5ucG0gaW5zdGFsbCAmIzY0O2xpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3A8L2NvZGU+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NvcHknXCJcbiAgICAgICAgICAgICAgICAob3V0Q2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKCducG0gaW5zdGFsbCBAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCcpXCIgLz5cbiAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxwPk9yIHdpdGggeWFybjo8L3A+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluc3RhbGwtY29tbWFuZFwiPlxuICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgPGNvZGU+eWFybiBhZGQgJiM2NDtsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wPC9jb2RlPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidDb3B5J1wiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgneWFybiBhZGQgQGxpYnMtdWkvY29tcG9uZW50cy1kcmFnLWRyb3AnKVwiIC8+XG4gICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiZGVtby1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkxpdmUgRGVtbzwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlbW8tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIEJhc2ljIExpc3QgRGVtbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgPGgzPkJhc2ljIExpc3Q8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiYmFzaWNJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGJhc2ljSXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmU+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLWljb25cIj7wn5OLPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10ZXh0XCI+e3sgaXRlbSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gS2FuYmFuIEJvYXJkIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5LYW5iYW4gQm9hcmQ8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2FuYmFuLWJvYXJkXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImthbmJhbi1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSBcbiAgICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwiY29sdW1uLml0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBbZHJvcFRvR3JvdXBOYW1lXT1cImNvbHVtbnNJZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND57eyBjb2x1bW4udGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGNvbHVtbi5pdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYW5iYW4taXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXN0YXR1c1wiIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJpdGVtLWRlc2NyaXB0aW9uXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5lc3RlZCBDb250YWluZXJzIERlbW8gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVtby1leGFtcGxlXCI+XG4gICAgICAgICAgICAgIDxoMz5OZXN0ZWQgQ29udGFpbmVycyBjb3B5PC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICAgICAgICAgICAgICAgICAgICAgWyhpdGVtcyldPVwibmVzdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgW2dyb3VwTmFtZV09XCIncGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCInY29weSdcIlxuICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBuZXN0ZWRJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmVzdGVkLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXN0ZWQtaXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5lc3RlZC1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaXRlbXMpXT1cIml0ZW0uc3ViSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBOYW1lXT1cIidjaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHN1Ykl0ZW0gb2YgaXRlbS5zdWJJdGVtczsgdHJhY2sgc3ViSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1Ykl0ZW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJhcGktZG9jLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+QVBJIERvY3VtZW50YXRpb248L2gyPlxuICAgICAgICAgIFxuICAgICAgICAgIDxoMz5JbnB1dHM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImFwaS10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPlR5cGU8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlZmF1bHQ8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGZvciAoaW5wdXQgb2YgaW5wdXRzRG9jOyB0cmFjayBpbnB1dC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT57e2lucHV0Lm5hbWV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tpbnB1dC50eXBlfX08L2NvZGU+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQuZGVmYXVsdH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7aW5wdXQuZGVzY3JpcHRpb259fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aDM+T3V0cHV0czwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiYXBpLXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+VHlwZTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChvdXRwdXQgb2Ygb3V0cHV0c0RvYzsgdHJhY2sgb3V0cHV0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlPnt7b3V0cHV0Lm5hbWV9fTwvY29kZT48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+e3tvdXRwdXQudHlwZX19PC9jb2RlPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e291dHB1dC5kZXNjcmlwdGlvbn19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaW50ZXJmYWNlcy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGgyPkludGVyZmFjZXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcmZhY2UtZG9jc1wiPlxuICAgICAgICAgICAgQGZvciAoaW50ZXJmYWNlSXRlbSBvZiBpbnRlcmZhY2VzRG9jOyB0cmFjayBpbnRlcmZhY2VJdGVtLm5hbWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludGVyZmFjZS1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGgzPnt7aW50ZXJmYWNlSXRlbS5uYW1lfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3tpbnRlcmZhY2VJdGVtLmNvZGV9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgICA8cD57e2ludGVyZmFjZUl0ZW0uZGVzY3JpcHRpb259fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImZlYXR1cmVzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8aDI+RmVhdHVyZXM8L2gyPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIEBmb3IgKGZlYXR1cmUgb2YgZmVhdHVyZXM7IHRyYWNrIGZlYXR1cmUuaWQpIHtcbiAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmVhdHVyZS1pY29uXCI+e3tmZWF0dXJlLmljb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmVhdHVyZS1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8aDM+e3tmZWF0dXJlLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgICAgPHA+e3tmZWF0dXJlLmRlc2NyaXB0aW9ufX08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidXNhZ2Utc2VjdGlvblwiPlxuICAgICAgICAgIDxoMj5Vc2FnZTwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvZGUtZXhhbXBsZXNcIj5cbiAgICAgICAgICAgIEBmb3IgKGV4YW1wbGUgb2YgY29kZUV4YW1wbGVzOyB0cmFjayBleGFtcGxlLmlkKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWV4YW1wbGVcIj5cbiAgICAgICAgICAgICAgICA8aDM+e3tleGFtcGxlLnRpdGxlfX08L2gzPlxuICAgICAgICAgICAgICAgIDxwcmU+PGNvZGUgW2lubmVySFRNTF09XCJleGFtcGxlLmNvZGVcIj48L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L21haW4+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgVGFob21hLCBHZW5ldmEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7XG4gICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgICAgY29sb3I6ICMzMzM7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA0MHB4IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuICAgIFxuICAgIGhlYWRlciBoMSB7XG4gICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICB9XG4gICAgXG4gICAgaGVhZGVyIHAge1xuICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICBjb2xvcjogIzdmOGM4ZDtcbiAgICB9XG4gICAgXG4gICAgc2VjdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgcGFkZGluZzogMzBweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIH1cbiAgICBcbiAgICBoMiB7XG4gICAgICBmb250LXNpemU6IDEuOHJlbTtcbiAgICAgIGNvbG9yOiAjMmMzZTUwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlY2YwZjE7XG4gICAgfVxuICAgIFxuICAgIGgzIHtcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICAgICAgY29sb3I6ICMzNDQ5NWU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIH1cblxuICAgIGg0IHtcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgY29sb3I6ICMzNDQ5NWU7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIH1cbiAgICBcbiAgICBwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICAgIFxuICAgIGNvZGUge1xuICAgICAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAycHggNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICB9XG4gICAgXG4gICAgcHJlIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gICAgICBwYWRkaW5nOiAxNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgXG4gICAgcHJlIGNvZGUge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC8qIEluc3RhbGxhdGlvbiBzZWN0aW9uIHN0eWxlcyAqL1xuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuaW5zdGFsbC1jb21tYW5kIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgfVxuICAgIFxuICAgIC5pbnN0YWxsYXRpb24tc2VjdGlvbiAuY29weS1idXR0b24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAxMHB4O1xuICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMzQ5OGRiO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbiAgICB9XG4gICAgXG4gICAgLmluc3RhbGxhdGlvbi1zZWN0aW9uIC5jb3B5LWJ1dHRvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMjk4MGI5O1xuICAgIH1cblxuICAgIC8qIERlbW8gc2VjdGlvbiBzdHlsZXMgKi9cbiAgICAuZGVtby1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyO1xuICAgICAgZ2FwOiAzMHB4O1xuICAgIH1cblxuICAgIC5kZW1vLWV4YW1wbGUge1xuICAgICAgYmFja2dyb3VuZDogI2Y3ZjdmNztcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cblxuICAgIC8qIExpc3Qgc3R5bGVzICovXG4gICAgLmxpc3QtY29udGFpbmVyIHtcbiAgICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgICBtYXJnaW46IDIwcHggYXV0bztcbiAgICB9XG5cbiAgICAubGlzdC1pdGVtIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycywgYm94LXNoYWRvdyAwLjJzO1xuICAgIH1cblxuICAgIC5saXN0LWl0ZW06aG92ZXIge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcbiAgICB9XG5cbiAgICAuaXRlbS1pY29uIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxuXG4gICAgLyogS2FuYmFuIHN0eWxlcyAqL1xuICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMjBweDtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIH1cblxuICAgIC5rYW5iYW4tY29sdW1uIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4td2lkdGg6IDMwMHB4O1xuICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICAgIHBhZGRpbmc6IDE1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgfVxuXG4gICAgLmthbmJhbi1pdGVtIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgIG1hcmdpbjogOHB4IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpO1xuICAgIH1cblxuICAgIC5rYW5iYW4taXRlbS1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLml0ZW0tdGl0bGUge1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICAuaXRlbS1zdGF0dXMge1xuICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgfVxuXG4gICAgLnN0YXR1cy10b2RvIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmViZWU7XG4gICAgICBjb2xvcjogI2M2MjgyODtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWluLXByb2dyZXNzIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmYzZTA7XG4gICAgICBjb2xvcjogI2VmNmMwMDtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWRvbmUge1xuICAgICAgYmFja2dyb3VuZDogI2U4ZjVlOTtcbiAgICAgIGNvbG9yOiAjMmU3ZDMyO1xuICAgIH1cblxuICAgIC5pdGVtLWRlc2NyaXB0aW9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICB9XG5cbiAgICAvKiBOZXN0ZWQgY29udGFpbmVycyBzdHlsZXMgKi9cbiAgICAubmVzdGVkLWNvbnRhaW5lciB7XG4gICAgICBtYXgtd2lkdGg6IDgwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtIHtcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIG1hcmdpbjogMTJweCAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAubmVzdGVkLWl0ZW0taGVhZGVyIHtcbiAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgfVxuXG4gICAgLm5lc3RlZC1pdGVtLWNvbnRlbnQge1xuICAgICAgcGFkZGluZzogMTJweDtcbiAgICB9XG5cbiAgICAuc3ViLWl0ZW0ge1xuICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgbWFyZ2luOiA0cHggMDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cblxuICAgIC8qIEFQSSBkb2N1bWVudGF0aW9uIHN0eWxlcyAqL1xuICAgIC5hcGktZG9jLXNlY3Rpb24ge1xuICAgICAgbWFyZ2luLWJvdHRvbTogNDBweDtcbiAgICB9XG4gICAgXG4gICAgLnRhYmxlLWNvbnRhaW5lciB7XG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIH1cbiAgICBcbiAgICAuYXBpLXRhYmxlIHRoLFxuICAgIC5hcGktdGFibGUgdGQge1xuICAgICAgcGFkZGluZzogMTJweCAxNXB4O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTFlMWUxO1xuICAgIH1cbiAgICBcbiAgICAuYXBpLXRhYmxlIHRoIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gICAgXG4gICAgLmFwaS10YWJsZSB0Ym9keSB0cjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuICAgIH1cblxuICAgIC8qIEZlYXR1cmVzIHNlY3Rpb24gKi9cbiAgICAuZmVhdHVyZXMtc2VjdGlvbiB1bCB7XG4gICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIH1cbiAgICBcbiAgICAuZmVhdHVyZXMtc2VjdGlvbiBsaSB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIH1cbiAgICBcbiAgICAuZmVhdHVyZS1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIG1hcmdpbi1yaWdodDogMjBweDtcbiAgICAgIG1pbi13aWR0aDogNDBweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gICAgXG4gICAgLmZlYXR1cmUtaW5mbyB7XG4gICAgICBmbGV4OiAxO1xuICAgIH1cblxuICAgIC8qIENvZGUgZXhhbXBsZXMgKi9cbiAgICAuY29kZS1leGFtcGxlcyB7XG4gICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgICBnYXA6IDIwcHg7XG4gICAgfVxuICAgIFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgLmNvZGUtZXhhbXBsZXMge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgIC5jb2RlLWV4YW1wbGVzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLmNvZGUtZXhhbXBsZSB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNmMGYxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgcGFkZGluZzogMTVweDtcbiAgICB9XG5cbiAgICAvKiBSZXNwb25zaXZlIGFkanVzdG1lbnRzICovXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICBoZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiAzMHB4IDA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGhlYWRlciBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMnJlbTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5rYW5iYW4tYm9hcmQge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgfVxuICAgICAgXG4gICAgICAua2FuYmFuLWNvbHVtbiB7XG4gICAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLmZlYXR1cmUtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS41cmVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlEcmFnRHJvcERlbW9Db21wb25lbnQge1xuICAvLyBCYXNpYyBMaXN0IEl0ZW1zXG4gIGJhc2ljSXRlbXMgPSBbXG4gICAgJ1Rhc2sgMScsXG4gICAgJ1Rhc2sgMicsXG4gICAgJ1Rhc2sgMycsXG4gICAgJ1Rhc2sgNCcsXG4gICAgJ1Rhc2sgNSdcbiAgXTtcblxuICAvLyBLYW5iYW4gQm9hcmQgQ29sdW1uc1xuICBjb2x1bW5zSWRzID0gWyd0b2RvJywgJ2luLXByb2dyZXNzJywgJ2RvbmUnXTtcbiAgY29sdW1uczogQ29sdW1uW10gPSBbXG4gICAge1xuICAgICAgaWQ6ICd0b2RvJyxcbiAgICAgIHRpdGxlOiAnVG8gRG8nLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAxLFxuICAgICAgICAgIHRpdGxlOiAnSW1wbGVtZW50IGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkIGRyYWcgYW5kIGRyb3AgZnVuY3Rpb25hbGl0eSB0byB0aGUgY29tcG9uZW50JyxcbiAgICAgICAgICBzdGF0dXM6ICd0b2RvJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDIsXG4gICAgICAgICAgdGl0bGU6ICdBZGQgYW5pbWF0aW9ucycsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdJbXBsZW1lbnQgc21vb3RoIGFuaW1hdGlvbnMgZm9yIGRyYWcgYW5kIGRyb3AnLFxuICAgICAgICAgIHN0YXR1czogJ3RvZG8nXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnaW4tcHJvZ3Jlc3MnLFxuICAgICAgdGl0bGU6ICdJbiBQcm9ncmVzcycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IDMsXG4gICAgICAgICAgdGl0bGU6ICdGaXggc3R5bGluZyBpc3N1ZXMnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzb2x2ZSBDU1MgY29uZmxpY3RzIGluIHRoZSBjb21wb25lbnQnLFxuICAgICAgICAgIHN0YXR1czogJ2luLXByb2dyZXNzJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2RvbmUnLFxuICAgICAgdGl0bGU6ICdEb25lJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogNCxcbiAgICAgICAgICB0aXRsZTogJ1NldHVwIHByb2plY3Qgc3RydWN0dXJlJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0luaXRpYWxpemUgdGhlIHByb2plY3Qgd2l0aCBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgIHN0YXR1czogJ2RvbmUnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgLy8gTmVzdGVkIEl0ZW1zXG4gIG5lc3RlZEl0ZW1zID0gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEEnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayAxJywgJ1Rhc2sgMicsICdUYXNrIDMnXVxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB0aXRsZTogJ1Byb2plY3QgQicsXG4gICAgICBzdWJJdGVtczogWydUYXNrIDQnLCAnVGFzayA1J11cbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgdGl0bGU6ICdQcm9qZWN0IEMnLFxuICAgICAgc3ViSXRlbXM6IFsnVGFzayA2JywgJ1Rhc2sgNycsICdUYXNrIDgnXVxuICAgIH1cbiAgXTtcblxuICAvLyBBUEkgRG9jdW1lbnRhdGlvblxuICBpbnB1dHNEb2MgPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2l0ZW1zJyxcbiAgICAgIHR5cGU6ICdBcnJheTx1bmtub3duPicsXG4gICAgICBkZWZhdWx0OiAnW10nLFxuICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdtb2RlJyxcbiAgICAgIHR5cGU6IFwiJ21vdmUnIHwgJ2NvcHknIHwgJ2RlZXBDb3B5J1wiLFxuICAgICAgZGVmYXVsdDogXCInbW92ZSdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnTW9kZSBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RpcmVjdGlvbkRyYWcnLFxuICAgICAgdHlwZTogXCInaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXCIsXG4gICAgICBkZWZhdWx0OiAndW5kZWZpbmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlyZWN0aW9uIG9mIGRyYWcgbW92ZW1lbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndmlld0VuY2Fwc3VsYXRpb24nLFxuICAgICAgdHlwZTogXCInZW11bGF0ZWQnIHwgJ25vbmUnXCIsXG4gICAgICBkZWZhdWx0OiBcIidlbXVsYXRlZCdcIixcbiAgICAgIGRlc2NyaXB0aW9uOiAnVmlldyBlbmNhcHN1bGF0aW9uIG1vZGUgZm9yIHN0eWxpbmcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZURyYWdDb250YWluZXInLFxuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVmYXVsdDogJ3VuZGVmaW5lZCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gZGlzYWJsZSBkcmFnIG9wZXJhdGlvbnMgZm9yIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXB0RHJhZ1NhbWVHcm91cCcsXG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZWZhdWx0OiAnZmFsc2UnLFxuICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIGFjY2VwdCBkcmFnIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBzYW1lIGdyb3VwJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BsYWNlaG9sZGVyJyxcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlZmF1bHQ6ICd0cnVlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBzaG93IHBsYWNlaG9sZGVyIGR1cmluZyBkcmFnJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGRlZmF1bHQ6IFwiJ2dyb3VwRHJhZ0FuZERyb3BEZWZhdWx0J1wiLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBncm91cCBmb3IgZHJhZyBhbmQgZHJvcCBvcGVyYXRpb25zJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Ryb3BUb0dyb3VwTmFtZScsXG4gICAgICB0eXBlOiAnQXJyYXk8c3RyaW5nPiB8IG51bGwnLFxuICAgICAgZGVmYXVsdDogJ251bGwnLFxuICAgICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGdyb3VwIG5hbWVzIHRoYXQgY2FuIGFjY2VwdCBkcm9wcyBmcm9tIHRoaXMgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0eWxlc092ZXJyaWRlJyxcbiAgICAgIHR5cGU6ICdBcnJheTx7IGNsYXNzTmFtZTogc3RyaW5nLCBzdHlsZXM6IHN0cmluZyB9PicsXG4gICAgICBkZWZhdWx0OiAndW5kZWZpbmVkJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9tIHN0eWxlcyB0byBvdmVycmlkZSBkZWZhdWx0IGRyYWctZHJvcCBzdHlsaW5nJ1xuICAgIH1cbiAgXTtcblxuICBvdXRwdXRzRG9jID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcmFnU3RhcnRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnU3RhcnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdFdmVudCBlbWl0dGVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzIGluIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ092ZXJDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnT3ZlcicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnZ2luZyBvdmVyIHRoZSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RHJhZ0xlYXZlQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGxlYXZlcyB0aGUgY29udGFpbmVyJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ291dERyYWdFbmRDb250YWluZXInLFxuICAgICAgdHlwZTogJ0lEcmFnRW5kJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWdnaW5nIGVuZHMgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyJyxcbiAgICAgIHR5cGU6ICdJRHJvcCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGRyb3BwZWQgaW4gdGhlIGNvbnRhaW5lcidcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvdXREcm9wcGVkQ29udGFpbmVyRW1wdHknLFxuICAgICAgdHlwZTogJ0lEcm9wJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGl0ZW0gaXMgZHJvcHBlZCBpbiBhbiBlbXB0eSBjb250YWluZXInXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3V0RnVuY3Rpb25Db250cm9sJyxcbiAgICAgIHR5cGU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0V2ZW50IGVtaXR0ZWQgdG8gY29udHJvbCBkcmFnLWRyb3AgZnVuY3Rpb25hbGl0eSdcbiAgICB9XG4gIF07XG5cbiAgLy8gSW50ZXJmYWNlIERvY3VtZW50YXRpb25cbiAgaW50ZXJmYWNlc0RvYyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdnaW5nJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdnaW5nIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudEtlZXBDb250YWluZXI/OiBib29sZWFuO1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBvcGVyYXRpb24gZXZlbnRzLCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnZ2VkIGVsZW1lbnQgYW5kIG1vdXNlIHBvc2l0aW9uJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lEcmFnU3RhcnQnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ1N0YXJ0IHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgc3RhcnQgZXZlbnRzLCB0cmlnZ2VyZWQgd2hlbiBkcmFnZ2luZyBiZWdpbnMnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnSURyYWdPdmVyJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdPdmVyIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdPdmVyOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgb3ZlciBldmVudHMsIHRyaWdnZXJlZCB3aGVuIGFuIGVsZW1lbnQgaXMgZHJhZ2dlZCBvdmVyIGFub3RoZXIgZWxlbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0xlYXZlJyxcbiAgICAgIGNvZGU6IGBpbnRlcmZhY2UgSURyYWdMZWF2ZSB7XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudERyYWdMZWF2ZTogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcmFnIGxlYXZlIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGFub3RoZXIgZWxlbWVudCdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0VuZCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRW5kIHtcbiAgbW91c2VQb3NpdGlvbjogSU1vdXNlUG9zaXRpb247XG4gIGVsZW1lbnREcmFnOiBIVE1MRWxlbWVudDtcbiAgaXRlbURyYWdJbmZvPzogSUl0ZW1EcmFnSW5mbztcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIGRyYWcgZW5kIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gZHJhZ2dpbmcgZW5kcydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJvcCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcm9wIHtcbiAgZWxlbWVudERyYWc6IEhUTUxFbGVtZW50O1xuICBlbGVtZW50RHJvcDogSFRNTEVsZW1lbnQ7XG4gIGl0ZW1EcmFnSW5mbz86IElJdGVtRHJhZ0luZm87XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIGZvciBkcm9wIGV2ZW50cywgdHJpZ2dlcmVkIHdoZW4gYW4gZWxlbWVudCBpcyBkcm9wcGVkJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ0lJdGVtRHJhZ0luZm8nLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJSXRlbURyYWdJbmZvIHtcbiAgaXRlbTogb2JqZWN0O1xuICBpdGVtc01vdmU/OiBXcml0YWJsZVNpZ25hbDxBcnJheTx1bmtub3duPj47XG4gIGluZGV4RHJhZz86IG51bWJlcjtcbiAgaW5kZXhEcm9wPzogbnVtYmVyO1xuICBpdGVtc0RyYWc6IFdyaXRhYmxlU2lnbmFsPEFycmF5PHVua25vd24+PjtcbiAgaXRlbXNEcm9wPzogV3JpdGFibGVTaWduYWw8QXJyYXk8dW5rbm93bj4+O1xuICBjb250YWluZXJEcmFnPzogSFRNTEVsZW1lbnQ7XG4gIGNvbnRhaW5lckRyb3A/OiBIVE1MRWxlbWVudDtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZ2dlZCBpdGVtIGFuZCBpdHMgY29udGFpbmVycydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwnLFxuICAgICAgY29kZTogYGludGVyZmFjZSBJRHJhZ0l0ZW1JbkNvbnRhaW5lclZpcnR1YWxTY3JvbGwge1xuICBpdGVtRHJhZ0luZm8/OiBJSXRlbURyYWdJbmZvO1xuICBlbGVtZW50RHJhZzogSFRNTEVsZW1lbnQ7XG4gIGRpc3RhbmNlU3RhcnRFbGVtZW50QW5kTW91c2VUb3A6IG51bWJlcjtcbiAgZGlzdGFuY2VTdGFydEVsZW1lbnRBbmRNb3VzZUxlZnQ6IG51bWJlcjtcbiAgZWxlbWVudENvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xuICBkcmFnQm91bmRhcnk/OiBib29sZWFuO1xuICBkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyPzogYm9vbGVhbjtcbiAgaWdub3JlU3RvcEV2ZW50PzogYm9vbGVhbjtcbn1gLFxuICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZm9yIHZpcnR1YWwgc2Nyb2xsaW5nIGRyYWcgb3BlcmF0aW9ucywgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBkcmFnIGJvdW5kYXJpZXMgYW5kIGNvbnRhaW5lciBlbGVtZW50cydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJTW91c2VQb3NpdGlvbicsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElNb3VzZVBvc2l0aW9uIHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJmYWNlIHJlcHJlc2VudGluZyBtb3VzZSBwb3NpdGlvbiBjb29yZGluYXRlcydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdJRHJhZ0Ryb3BGdW5jdGlvbkNvbnRyb2xFdmVudCcsXG4gICAgICBjb2RlOiBgaW50ZXJmYWNlIElEcmFnRHJvcEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgc2V0QXR0cmlidXRlRWxlbWVudEFuZEl0ZW1EcmFnOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufWAsXG4gICAgICBkZXNjcmlwdGlvbjogJ0ludGVyZmFjZSBmb3IgZHJhZyBhbmQgZHJvcCBjb250cm9sIGZ1bmN0aW9ucydcbiAgICB9XG4gIF07XG5cbiAgLy8gRmVhdHVyZXNcbiAgZmVhdHVyZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICBpY29uOiAn8J+UhCcsXG4gICAgICB0aXRsZTogJ0ZsZXhpYmxlIERyYWcgYW5kIERyb3AnLFxuICAgICAgZGVzY3JpcHRpb246ICdTdXBwb3J0IGZvciBjb250YWluZXItdG8tY29udGFpbmVyIGRyYWdnaW5nIHdpdGggY3VzdG9taXphYmxlIGdyb3VwIG5hbWVzIGFuZCBkcm9wIHpvbmVzJ1xuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBpY29uOiAn8J+TnCcsXG4gICAgICB0aXRsZTogJ1ZpcnR1YWwgU2Nyb2xsaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRWZmaWNpZW50IGhhbmRsaW5nIG9mIGxhcmdlIGxpc3RzIHdpdGggdmlydHVhbCBzY3JvbGxpbmcgc3VwcG9ydCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAzLFxuICAgICAgaWNvbjogJ/Cfjq8nLFxuICAgICAgdGl0bGU6ICdDdXN0b20gQm91bmRhcmllcycsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RlZmluZSBjdXN0b20gZHJhZyBib3VuZGFyaWVzIGFuZCBkcm9wIHpvbmVzIGZvciBwcmVjaXNlIGNvbnRyb2wnXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogNCxcbiAgICAgIGljb246ICfwn46oJyxcbiAgICAgIHRpdGxlOiAnU3R5bGluZyBPcHRpb25zJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ3VzdG9taXphYmxlIHN0eWxlcyBmb3IgZHJhZyBpdGVtcyBhbmQgY29udGFpbmVycydcbiAgICB9XG4gIF07XG5cbiAgLy8gQ29kZSBFeGFtcGxlc1xuICBjb2RlRXhhbXBsZXMgPSBbXG4gICAge1xuICAgICAgaWQ6IDEsXG4gICAgICB0aXRsZTogJ0Jhc2ljIFVzYWdlJyxcbiAgICAgIGNvZGU6IGAmbHQ7ZGl2IExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlIFxuICBbKGl0ZW1zKV09XCJpdGVtc1wiXG4gIFtncm91cE5hbWVdPVwiJ215R3JvdXAnXCJcbiAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwidHJ1ZVwiJmd0O1xuICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7YFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICB0aXRsZTogJ0NvbnRhaW5lci10by1Db250YWluZXInLFxuICAgICAgY29kZTogYCZsdDtkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gIFsoaXRlbXMpXT1cInNvdXJjZUl0ZW1zXCJcbiAgW2dyb3VwTmFtZV09XCInc291cmNlJ1wiJmd0O1xuICBAZm9yIChpdGVtIG9mIHNvdXJjZUl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7XG5cbiZsdDtkaXYgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUgXG4gIFsoaXRlbXMpXT1cInRhcmdldEl0ZW1zXCJcbiAgW2dyb3VwTmFtZV09XCIndGFyZ2V0J1wiXG4gIFtkcm9wVG9Hcm91cE5hbWVdPVwiWydzb3VyY2UnXVwiJmd0O1xuICBAZm9yIChpdGVtIG9mIHRhcmdldEl0ZW1zOyB0cmFjayBpdGVtKSB7XG4gICAgJmx0O2RpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSZndDtcbiAgICAgIHt7IGl0ZW0gfX1cbiAgICAmbHQ7L2RpdiZndDtcbiAgfVxuJmx0Oy9kaXYmZ3Q7YFxuICAgIH1dO1xuXG4gIC8qKlxuICAgKiBDb3B5IHRleHQgdG8gY2xpcGJvYXJkXG4gICAqL1xuICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgYWxlcnQoJ0NvcGllZCB0byBjbGlwYm9hcmQnKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb3B5IHRleHQ6ICcsIGVycik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufSAiXX0=
|
|
@@ -1620,11 +1620,12 @@ class LibsUiDragDropDemoComponent {
|
|
|
1620
1620
|
|
|
1621
1621
|
<!-- Nested Containers Demo -->
|
|
1622
1622
|
<div class="demo-example">
|
|
1623
|
-
<h3>Nested Containers</h3>
|
|
1623
|
+
<h3>Nested Containers copy</h3>
|
|
1624
1624
|
<div class="nested-container">
|
|
1625
1625
|
<div LibsUiComponentsDragContainerDirective
|
|
1626
1626
|
[(items)]="nestedItems"
|
|
1627
1627
|
[groupName]="'parent'"
|
|
1628
|
+
[mode]="'copy'"
|
|
1628
1629
|
[acceptDragSameGroup]="true">
|
|
1629
1630
|
@for (item of nestedItems; track item) {
|
|
1630
1631
|
<div class="nested-item"
|
|
@@ -1845,11 +1846,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1845
1846
|
|
|
1846
1847
|
<!-- Nested Containers Demo -->
|
|
1847
1848
|
<div class="demo-example">
|
|
1848
|
-
<h3>Nested Containers</h3>
|
|
1849
|
+
<h3>Nested Containers copy</h3>
|
|
1849
1850
|
<div class="nested-container">
|
|
1850
1851
|
<div LibsUiComponentsDragContainerDirective
|
|
1851
1852
|
[(items)]="nestedItems"
|
|
1852
1853
|
[groupName]="'parent'"
|
|
1854
|
+
[mode]="'copy'"
|
|
1853
1855
|
[acceptDragSameGroup]="true">
|
|
1854
1856
|
@for (item of nestedItems; track item) {
|
|
1855
1857
|
<div class="nested-item"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-drag-drop.mjs","sources":["../../../../../libs-ui/components/drag-drop/src/defines/css.define.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.service.ts","../../../../../libs-ui/components/drag-drop/src/drag-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item-in-container-virtual-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item.directive.ts","../../../../../libs-ui/components/drag-drop/src/demo/demo.component.ts","../../../../../libs-ui/components/drag-drop/src/libs-ui-components-drag-drop.ts"],"sourcesContent":["export const styleContainer = (config: Array<{ className: string, styles: string }>, viewEncapsulation: 'emulated' | 'none', groupID: string): string => {\n const defaultConfig = [{\n className: 'libs-ui-drag-drop-container',\n styles: `display:block;`\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: `\n cursor:move;`\n },\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-origin-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-drop-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: `cursor:move; user-select: none; `\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: ` cursor:not-allowed;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-bottom',\n styles: `position:relative;animation: translateBottom 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-top',\n styles: `position:relative;animation: translateTop 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-left',\n styles: `position:relative;animation: translateLeft 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-right',\n styles: `position:relative;animation: translateRight 0.35s 1 ease;`\n }];\n\n config.forEach(item => {\n const itemExits = defaultConfig.find(defaultItem => defaultItem.className === item.className);\n\n if (itemExits) {\n itemExits.styles = item.styles;\n\n return;\n }\n defaultConfig.push(item);\n });\n const groupAttr = viewEncapsulation ? `[groupID~=\"${groupID}\"]` : '';\n let styles = '';\n\n defaultConfig.forEach((item) => {\n const style = `${groupAttr}.${item.className}{${item.styles}}`;\n\n styles = `${styles}${style}\\n`;\n });\n\n styles = ` @keyframes translateTop {\n 0% {\n transform: translateY(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateBottom {\n 0% {\n transform: translateY(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n @keyframes translateLeft {\n 0% {\n transform: translateX(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateRight {\n 0% {\n transform: translateX(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n ${styles}`.replace(/\\n+/g, '');\n\n return styles;\n};","import { Injectable, WritableSignal, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from \"./interfaces/event.interface\";\n@Injectable({\n providedIn: 'any'\n})\n\nexport class MoLibsSharedDragDropService {\n private itemsClick = new Array<HTMLElement>();\n private onDragItemInContainerVirtualScroll = new Subject<IDragItemInContainerVirtualScroll>();\n private itemDragInfo?: IItemDragInfo;\n private container = signal(new Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>());\n private targetItemDragFlag = 'item-drag-target';\n private classContainerDefine = 'libs-ui-drag-drop-container';\n private classItemDefine = 'libs-ui-drag-drop-item';\n private onDragging = new Subject<IDragging>();\n private onDragStart = new Subject<IDragStart>();\n private onDragEnd = new Subject<IDragEnd>();\n private onDragOver = new Subject<IDragOver>();\n private onDragLeave = new Subject<IDragLeave>();\n private onDrop = new Subject<IDrop>();\n private onDropContainer = new Subject<IDrop>();\n private onItemInit = new Subject<string>();\n\n public get OnDragItemInContainerVirtualScroll(): Subject<IDragItemInContainerVirtualScroll> {\n return this.onDragItemInContainerVirtualScroll;\n }\n\n public set ItemDragInfo(data: IItemDragInfo | undefined) {\n this.itemDragInfo = data;\n }\n\n public get ItemDragInfo(): IItemDragInfo | undefined {\n return this.itemDragInfo;\n }\n\n public get Container(): WritableSignal<Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>> {\n return this.container;\n }\n\n public get TargetItemDragFlag() {\n return this.targetItemDragFlag;\n }\n\n public get ClassContainerDefine() {\n return this.classContainerDefine;\n }\n\n public get ClassItemDefine() {\n return this.classItemDefine;\n }\n\n public get OnDragging() {\n return this.onDragging;\n }\n\n public get OnDragOver() {\n return this.onDragOver;\n }\n\n public get OnDragLeave() {\n return this.onDragLeave;\n }\n\n public get OnDragStart() {\n return this.onDragStart;\n }\n\n public get OnDragEnd() {\n return this.onDragEnd;\n }\n\n public get OnDropContainer() {\n return this.onDropContainer;\n }\n\n public get OnDrop() {\n return this.onDrop;\n }\n\n public get OnItemInit() {\n return this.onItemInit;\n }\n\n public get ItemClick(): Array<HTMLElement> {\n return [...this.itemsClick];\n }\n\n public set ItemClick(item: HTMLElement) {\n this.itemsClick.push(item);\n }\n\n public resetItemClick() {\n this.itemsClick.length = 0;\n }\n\n public checkElementOverAcceptElementDrag(groupNameOfContainer: string | null, groupNameOfElementDrag: string | null, groupNameOfDropTo: string | null): boolean {\n if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {\n return false;\n }\n\n if (groupNameOfDropTo !== null && !groupNameOfDropTo.toString().split(';').includes(groupNameOfContainer || 'undefinedName')) {\n return false;\n }\n\n return true;\n }\n}","import { AfterViewInit, Directive, ElementRef, OnDestroy, inject, input, signal } from \"@angular/core\";\nimport { IPageInfo, VirtualScrollerComponent } from \"@iharbeck/ngx-virtual-scroller\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, cloneIBoundingClientRect, get } from \"@libs-ui/utils\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragging } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragScrollDirective]\",\n standalone: true\n})\nexport class LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private stopScroll = signal<boolean>(false);\n private virtualScrollPageInfo = signal<IPageInfo | undefined>(undefined);\n protected intervalScrollToElement = signal<number | undefined>(undefined);\n protected onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly ignoreAutoScroll = input<boolean>();\n readonly widthZoneDetect = input<number, number | undefined>(16, { transform: value => value ?? 16 });\n readonly movementLength = input<number, number | undefined>(6, { transform: value => value ?? 6 });\n readonly rootElementScroll = input<HTMLElement>();\n readonly virtualScrollerComponent = input<VirtualScrollerComponent>();\n\n // #region INJECT\n protected elementRef = inject(ElementRef);\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragging.pipe(takeUntil(this.onDestroy)).subscribe((eventDragging) => this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll()));\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n clearInterval(this.intervalScrollToElement());\n if (this.virtualScrollPageInfo()) {\n const firstElement = get(this.virtualScrollerComponent(), 'element')?.nativeElement.firstElementChild;\n const isHorizontal = get(this.virtualScrollerComponent(), '_horizontal');\n if (isHorizontal) {\n firstElement.style.transform = `scaleX(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n if (!isHorizontal) {\n firstElement.style.transform = `scaleY(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n this.virtualScrollPageInfo.set(undefined);\n }\n this.stopScroll.set(false);\n });\n this.dragDropService.OnDragStart.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n if (this.virtualScrollerComponent) {\n this.virtualScrollerComponent()?.scrollToIndex(0);\n }\n });\n if (!this.virtualScrollerComponent) {\n return;\n }\n this.virtualScrollerComponent()?.vsChange.pipe(takeUntil(this.onDestroy)).subscribe(pageInfo => {\n const items = get(this.virtualScrollerComponent, '_items');\n\n if (items && items.length === pageInfo.endIndex) {\n this.virtualScrollPageInfo.set(pageInfo);\n const elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n const isHorizontal = get(this.virtualScrollerComponent, '_horizontal');\n\n if (isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetWidth + elementSetScroll.scrollLeft + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n\n if (!isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetHeight + elementSetScroll.scrollTop + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n }\n this.stopScroll.set(false);\n });\n }\n\n /* FUNCTIONS */\n protected checkAndScrollElementToPosition(eventDragging: IDragging, ignoreAutoScroll?: boolean) {\n let elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n\n if (ignoreAutoScroll || !checkMouseOverInContainer(eventDragging.mousePosition, elementSetScroll)) {\n return;\n }\n const rectElement = cloneIBoundingClientRect(this.elementRef.nativeElement.getBoundingClientRect());\n\n if (this.rootElementScroll()) {\n const rectElementScroll = this.rootElementScroll()?.getBoundingClientRect() as IBoundingClientRect;\n\n rectElement.left = rectElementScroll.left;\n rectElement.top = rectElementScroll.top;\n }\n\n const { width, height, top, left } = rectElement;\n const { clientX, clientY } = eventDragging.mousePosition;\n const limitLeft = left + elementSetScroll.offsetWidth;\n const limitTop = top + elementSetScroll.offsetHeight;\n\n clearInterval(this.intervalScrollToElement());\n if ((clientX < left || clientX > left + width) && (clientY < top || clientY > top + height)) {\n return;\n }\n\n this.intervalScrollToElement.set(setInterval(() => {\n elementSetScroll = (this.rootElementScroll() || this.elementRef.nativeElement);\n let directionTop = 0;\n let directionLeft = 0;\n\n if (top <= clientY && clientY <= top + this.widthZoneDetect()) {\n elementSetScroll.scrollTop -= this.movementLength();\n directionTop = -1;\n }\n\n if (limitTop - this.widthZoneDetect() <= clientY && clientY <= limitTop) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollTop += this.movementLength();\n directionTop = 1;\n }\n\n if ((limitLeft - this.widthZoneDetect() <= clientX) && (clientX <= limitLeft)) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollLeft += this.movementLength();\n directionLeft = +1;\n\n }\n if (left <= clientX && clientX <= left + this.widthZoneDetect()) {\n elementSetScroll.scrollLeft -= this.movementLength();\n directionLeft = -1;\n }\n\n if (elementSetScroll.scrollLeft && (elementSetScroll.scrollLeft + elementSetScroll.offsetWidth >= elementSetScroll.scrollWidth)) {\n elementSetScroll.scrollLeft -= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth - elementSetScroll.scrollWidth;\n }\n\n if (elementSetScroll.scrollTop && (elementSetScroll.scrollTop + elementSetScroll.offsetHeight >= elementSetScroll.scrollHeight)) {\n elementSetScroll.scrollTop -= elementSetScroll.scrollTop + elementSetScroll.offsetHeight - elementSetScroll.scrollHeight;\n }\n\n if ((directionTop < 0 && !elementSetScroll.scrollTop) || (!elementSetScroll.scrollLeft && directionLeft < 0) || (directionTop && elementSetScroll.scrollHeight <= elementSetScroll.scrollTop + elementSetScroll.offsetHeight + 3) || (directionLeft && elementSetScroll.scrollWidth <= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth + 3)) {\n return clearInterval(this.intervalScrollToElement());\n }\n }, 10));\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, effect, input, model, output, signal, untracked } from \"@angular/core\";\nimport { checkMouseOverInContainer, cloneDeep, get, set, uuid } from \"@libs-ui/utils\";\nimport { Observable, debounceTime, filter, takeUntil } from \"rxjs\";\nimport { styleContainer } from \"./defines/css.define\";\nimport { LibsUiComponentsDragScrollDirective } from \"./drag-scroll.directive\";\nimport { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDragging, IDrop } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragContainerDirective]\",\n standalone: true,\n})\nexport class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private groupID = signal<string>(uuid());\n private isDragOver = signal<boolean>(false);\n\n // #region INPUT\n readonly disableDragContainer = input<boolean>();\n readonly mode = input<string, 'move' | 'copy' | 'deepCopy'>('move', { transform: value => value ?? 'move' });\n readonly directionDrag = input<'horizontal' | 'vertical'>();\n readonly viewEncapsulation = input<'emulated' | 'none', 'emulated' | 'none' | undefined>('emulated', { transform: value => value ?? 'emulated' });\n readonly acceptDragSameGroup = input<boolean, boolean | undefined>(false, { transform: value => value ?? false });\n readonly placeholder = input<boolean, boolean | undefined>(true, { transform: value => value ?? true });\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop\n readonly dropToGroupName = input<Array<string> | null>(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A\n readonly items = model.required<Array<unknown>>();\n readonly stylesOverride = input<Array<{ className: string, styles: string }>>();\n\n // #region OUTPUT\n readonly outDragStartContainer = output<IDragStart>();\n readonly outDragOverContainer = output<IDragOver>();\n readonly outDragLeaveContainer = output<IDragLeave>();\n readonly outDragEndContainer = output<IDragEnd>();\n readonly outDroppedContainer = output<IDrop>();\n readonly outDroppedContainerEmpty = output<IDrop>();\n readonly outFunctionControl = output<IDragDropFunctionControlEvent>();\n\n constructor() {\n super();\n const element = this.elementRef.nativeElement as HTMLElement;\n\n const container = { element };\n\n this.dragDropService.Container.update(data => {\n data.set(this.groupID(), container);\n return data;\n });\n\n effect(() => {\n if (!this.rootElementScroll()) {\n return;\n }\n untracked(() => {\n set(container, 'elementScroll', this.rootElementScroll());\n this.dragDropService.Container.update(containerMap => new Map(containerMap));\n });\n });\n\n effect(() => {\n if (this.directionDrag() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n effect(() => {\n if (this.disableDragContainer() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n }\n\n override ngAfterViewInit(): void {\n this.outFunctionControl.emit({ setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement) });\n\n this.outDroppedContainer.subscribe(eventDropped => {\n this.dragDropService.OnDropContainer.next(eventDropped);\n });\n this.onDestroy.subscribe(() => {\n if (indexSpliceListTo > -1) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n\n this.dragDropService.Container().delete(this.groupID());\n });\n const elementContainer = this.elementRef.nativeElement as HTMLElement;\n\n this.initStyleAndAttribute(elementContainer, true);\n this.dragDropService.OnItemInit.pipe(debounceTime(250), filter(groupName => groupName === this.groupName()), takeUntil(this.onDestroy)).subscribe(() => this.initStyleAndAttribute(elementContainer));\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n elementContainer.classList.add(this.dragDropService.ClassContainerDefine);\n\n const handlerDragStart = (eventDragStart: IDragStart) => {\n\n this.setAttributeElementAndItemDrag(elementContainer, true);\n if (this.groupID() === eventDragStart.elementDrag.getAttribute('groupID')) {\n this.outDragStartContainer.emit({ ...eventDragStart, itemDragInfo: this.dragDropService.ItemDragInfo });\n }\n };\n\n const storeIndex = { indexDrag: -1, indexDragOver: -1 };\n let indexSpliceListTo = -1;\n const handlerDragOver = (eventDragOver: IDragOver) => {\n const { elementDrag, elementDragOver } = eventDragOver;\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n const indexDrag = Number(elementDrag.getAttribute('index')).valueOf();\n const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();\n const idGroupElementDrag = elementDrag.getAttribute('groupID');\n const idGroupElementDragOver = elementDragOver.getAttribute('groupID');\n\n if ((this.groupID() !== idGroupElementDrag) || (idGroupElementDrag !== idGroupElementDragOver)) { // xử lý cho item drag over qua 1 item khác container\n if (idGroupElementDragOver === this.groupID() && this.placeholder()) {\n const item = this.mode() === 'deepCopy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;\n\n this.items.update(items => {\n if (indexSpliceListTo >= 0) {\n items.splice(indexSpliceListTo, 1);\n }\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n this.setAttributeElementAndItemDrag(elementContainer, false, indexSpliceListTo);\n indexSpliceListTo = indexDragOver;\n }\n\n return;\n }\n\n if (!this.acceptDragSameGroup() || indexDrag < 0 || indexDragOver < 0 || !this.items().length || indexDrag > this.items().length || indexDragOver > this.items().length || (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)) {\n return;\n }\n // xử lý cho item drag over qua 1 item cùng container\n const itemDrag = this.items()[indexDrag];\n\n this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);\n storeIndex.indexDrag = indexDrag;\n storeIndex.indexDragOver = indexDragOver;\n this.items.update(items => {\n items.splice(indexDrag, 1);\n items.splice(indexDragOver, 0, itemDrag);\n return [...items];\n });\n elementDrag.setAttribute('index', indexDragOver.toString());\n this.setAttributeElementAndItemDrag(elementContainer);\n };\n\n const removePlaceholderDrag = (eventDrag: IDragEnd, isDragging?: boolean) => {\n clearInterval(this.intervalScrollToElement());\n storeIndex.indexDrag = -1;\n storeIndex.indexDragOver = -1;\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n if (!checkMouseOverInContainer(eventDrag.mousePosition, (this.rootElementScroll() || elementContainer))) {\n const childElementIndex = Array.from<HTMLElement>(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));\n\n if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {\n this.items.update(items => {\n items.splice(childElementIndex, 1);\n return [...items];\n });\n indexSpliceListTo = -1;\n }\n\n this.removeAttributes(elementContainer, isDragging);\n this.setIndexElement(elementContainer);\n\n return;\n }\n if (indexSpliceListTo >= 0) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n indexSpliceListTo = -1;\n }\n };\n\n const handlerDragging = (eventDragging: IDragging) => {\n this.setAttributeElementAndItemDrag(elementContainer);\n const { elementDrag } = eventDragging;\n const fieldIdItem = elementDrag.getAttribute('field_id');\n const idItemDrag = elementDrag.getAttribute('item_id');\n\n if (fieldIdItem && idItemDrag && this.items().find(item => get(item, fieldIdItem) === idItemDrag)) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);\n\n if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {\n childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.groupID.set(elementDrag.getAttribute('groupID') || '');\n styleTag.remove();\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n this.setAttributeElementAndItemDrag(elementContainer, true);\n }\n }\n\n if (this.disableDragContainer()) {\n return;\n }\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && !this.acceptDragSameGroup()) {\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());\n return;\n }\n\n if (!checkMouseOverInContainer(eventDragging.mousePosition, (this.rootElementScroll() || elementContainer))) {\n if (this.isDragOver()) {\n this.isDragOver.set(false);\n this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });\n }\n\n return removePlaceholderDrag(eventDragging, true);\n }\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll());\n\n // Đoạn code xử lý cho việc kéo một element vào 1 container nhưng container không có item hoặc item drag không over qua item trong container\n if (!this.isDragOver()) {\n elementContainer.classList.add('libs-ui-drag-drop-container-dragover');\n this.isDragOver.set(true);\n this.outDragOverContainer.emit({ ...eventDragging, elementDragOver: elementContainer });\n }\n const eventDragOver = { ...eventDragging, elementDragOver: elementContainer };\n\n if (!this.items().length) {\n eventDragOver.elementDragOver = {\n getAttribute: (name: string) => {\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return 0;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));\n\n if (childElement) { // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit\n return;\n }\n childElement = Array.from<HTMLElement>(childrenElement).pop();\n\n if (childElement) {\n eventDragOver.elementDragOver = childElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n }\n };\n\n const handlerDragEnd = (eventDragEnd: IDragEnd) => {\n if (this.disableDragContainer()) {\n return;\n }\n let rect = undefined;\n\n if (this.rootElementScroll() || elementContainer) {\n rect = (this.rootElementScroll() || elementContainer)?.getBoundingClientRect();\n }\n removePlaceholderDrag(eventDragEnd);\n const { elementDrag, mousePosition, itemDragInfo } = eventDragEnd;\n\n if (this.groupID() === elementDrag.getAttribute('groupID')) {\n this.outDragEndContainer.emit({ ...eventDragEnd });\n }\n if (!checkMouseOverInContainer(mousePosition, this.rootElementScroll() || elementContainer, rect)) {\n return;\n }\n const eventDrop = { elementDrag: elementDrag, elementDrop: elementContainer, itemDragInfo: itemDragInfo };\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(mousePosition, child));\n\n if (childElement) {\n eventDrop.elementDrop = childElement;\n this.dragDropService.OnDrop.next(eventDrop);\n\n return;\n }\n eventDrop.elementDrop = {\n getAttribute: (name: string) => {\n if (name === 'dropContainer') {\n return true;\n }\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return childrenElement.length;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDrop.next(eventDrop);\n };\n\n const handlerDrop = (eventDrop: IDrop) => {\n if (this.disableDragContainer()) {\n return;\n }\n const { elementDrag, elementDrop, itemDragInfo } = eventDrop;\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && this.groupID() === elementDrop.getAttribute('groupID')) {\n if (itemDragInfo) {\n itemDragInfo.indexDrop = Number(elementDrop.getAttribute('index')).valueOf();\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n if (this.acceptDragSameGroup()) {\n this.outDroppedContainer.emit(eventDrop);\n }\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n return;\n }\n\n if (this.groupID() !== elementDrop.getAttribute('groupID') || elementDrag.getAttribute('groupID') === elementDrop.getAttribute('groupID')) {\n return;\n }\n const indexDragOver = this.groupID() !== elementDrag.getAttribute('groupID') ? Number(elementDrop.getAttribute('index')).valueOf() : Number(elementDrop.getAttribute('index')).valueOf() - (elementDrop.getAttribute('dropContainer') ? 0 : 1);\n const item = this.mode() === 'deepCopy' ? cloneDeep(itemDragInfo?.item) : itemDragInfo?.item;\n\n if (itemDragInfo) {\n itemDragInfo.indexDrop = indexDragOver;\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n\n if (!this.items().length) {\n this.outDroppedContainerEmpty.emit(eventDrop);\n }\n\n this.items.update(items => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n if (itemDragInfo && itemDragInfo.itemsMove && itemDragInfo.itemsMove()) {\n itemDragInfo.itemsDrag.set([...itemDragInfo.itemsMove()]);\n setTimeout(() => this.setAttributeElementAndItemDrag(elementContainer));\n }\n this.outDroppedContainer.emit(eventDrop);\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n };\n\n [{\n name: 'OnDragStart',\n event: this.dragDropService.OnDragStart,\n functionCall: handlerDragStart\n }, {\n name: 'OnDragOver',\n event: this.dragDropService.OnDragOver,\n functionCall: handlerDragOver,\n debounceTime: 5\n }, {\n name: 'OnDragging',\n event: this.dragDropService.OnDragging,\n functionCall: handlerDragging\n }, {\n name: 'OnDragEnd',\n event: this.dragDropService.OnDragEnd,\n functionCall: handlerDragEnd\n }, {\n name: 'OnDrop',\n event: this.dragDropService.OnDrop,\n functionCall: handlerDrop\n }\n ].forEach((item: { name: string; debounceTime?: number; event: Observable<unknown>; functionCall: object }) => (item.event.pipe(debounceTime(item.debounceTime || 0), takeUntil(this.onDestroy)).subscribe(item.functionCall)));\n }\n\n /* */\n private async setAttributeElementAndItemDrag(elementContainer: HTMLElement, setItemDrag?: boolean, indexInsert?: number) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n elementContainer.setAttribute('groupID', this.groupID());\n elementContainer.removeAttribute('disableDragContainer');\n\n if (this.disableDragContainer()) {\n elementContainer.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName()) {\n elementContainer.setAttribute('groupName', this.groupName() || '');\n }\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (!childElement.hasAttribute('groupName') || childElement.getAttribute('groupName') === this.groupName()) {\n childElement.setAttribute('groupID', this.groupID());\n }\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n childElement.removeAttribute('disableDragContainer');\n if (this.disableDragContainer()) {\n childElement.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName() && !childElement.hasAttribute('groupName')) {\n childElement.setAttribute('groupName', this.groupName() || '');\n }\n if (this.placeholder()) {\n childElement.setAttribute('placeholder', `${this.placeholder()}`);\n }\n if (this.dropToGroupName()) {\n childElement.setAttribute('dropToGroupName', `${this.dropToGroupName()?.join(';')}`);\n }\n if (indexInsert === index && this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-drop-placeholder');\n }\n }\n\n if (setItemDrag && childElement.getAttribute(this.dragDropService.TargetItemDragFlag) && this.items().length >= index) {\n if (this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-origin-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-origin-placeholder');\n }\n }\n\n this.dragDropService.ItemDragInfo = { item: this.items()[index] as object, indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };\n if (this.mode() === 'move') {\n this.dragDropService.ItemDragInfo.itemsMove?.update(items => {\n items.splice(index, 1);\n return [...items]\n });\n }\n }\n });\n }\n\n private initStyleAndAttribute(elementContainer: HTMLElement, hasRemoveAttribute = false,) {\n this.setAttributeElementAndItemDrag(elementContainer);\n if (hasRemoveAttribute) {\n this.removeAttributes(elementContainer);\n }\n this.setIndexElement(elementContainer);\n };\n\n private setAnimationElementDragOver(indexDrag: number, indexDragOver: number, elementDragOver: HTMLElement) {\n if (!this.directionDrag() || !elementDragOver) {\n return;\n }\n if (this.directionDrag() === 'vertical') {\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-bottom');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-top');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-bottom');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-top');\n }\n\n return;\n }\n\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-left');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-right');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-right');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-left');\n }\n\n }\n\n private setIndexElement(elementContainer: HTMLElement) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n });\n\n }\n\n private removeAttributes(elementContainer: HTMLElement, ignoreRemoveClassItemOriginPlaceholder?: boolean) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n elementContainer.classList.remove('libs-ui-drag-drop-container-dragover');\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n childElement.removeAttribute('index');\n if (!this.dropToGroupName() || !this.dropToGroupName()?.length) {\n childElement.removeAttribute('dropToGroupName');\n }\n if (!this.placeholder()) {\n childElement.removeAttribute('placeholder');\n }\n if (this.placeholder()) {\n childElement.classList.remove('libs-ui-drag-drop-item-placeholder');\n if (!ignoreRemoveClassItemOriginPlaceholder) {\n\n childElement.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n }\n childElement.classList.remove('libs-ui-drag-drop-item-drop-placeholder');\n }\n });\n\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, inject, output } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { cloneIBoundingClientRect, getViewport } from \"@libs-ui/utils\";\nimport { Subject, fromEvent, takeUntil, tap } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragEnd } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemInContainerVirtualScrollDirective]\",\n standalone: true,\n\n})\nexport class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected onDestroy = new Subject<void>();\n\n // #region OUTPUT\n readonly outDragEndContainer = output<IDragEnd>();\n\n // #region INJECT\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n const addClass = ()=>{\n document.body.classList.remove('!select-none');\n document.body.classList.remove('!cursor-move');\n };\n const removeClass = ()=>{\n document.body.classList.add('!select-none');\n document.body.classList.add('!cursor-move');\n };\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(e => {\n this.outDragEndContainer.emit(e);\n });\n this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntil(this.onDestroy)).subscribe(dragItemInContainerVirtualScrollEvent => {\n addClass();\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(tap((eventMouseUp) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n stopEventMouse(eventMouseUp);\n const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n dragItemInContainerVirtualScrollEvent.elementDrag.remove();\n removeClass();\n }));\n\n fromEvent<MouseEvent>(document, 'mousemove').pipe(tap((eventMousemove) => {\n stopEventMouse(eventMousemove);\n const { clientX, clientY } = eventMousemove;\n const mousePosition = { clientX, clientY };\n\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;\n const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;\n dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;\n\n this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });\n }), takeUntil((documentMouseUp)), takeUntil(this.onDestroy)).subscribe();\n\n });\n }\n\n /* FUNCTIONS */\n\n protected getClientPosition(element: HTMLElement, mousePosition: { clientX: number; clientY: number; }, distanceStartElementAndMouseLeft: number, distanceStartElementAndMouseTop: number, dragBoundary?: boolean, elementContainer?: HTMLElement): { clientX: number; clientY: number; elementKeepContainer: boolean; viewport: IBoundingClientRect } {\n let viewport = getViewport() as IBoundingClientRect;\n const rectElement = element.getBoundingClientRect();\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;\n let { clientX, clientY } = mousePosition;\n\n viewport.left = 0;\n viewport.top = 0;\n if (dragBoundary) {\n viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());\n viewport.height = viewport.top + viewport.height;\n viewport.width = viewport.left + viewport.width;\n }\n let elementKeepContainer = false;\n\n if (clientX > viewport.width && clientY > viewport.height || clientX < viewport.left && clientY < viewport.top) {\n elementKeepContainer = true;\n }\n\n if ((clientX + (rectElement.width - distanceStartElementAndMouseLeft)) > viewport.width) {\n clientX -= (clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width);\n }\n if ((clientY + (rectElement.height - distanceStartElementAndMouseTop)) > viewport.height) {\n clientY -= (clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height);\n }\n if ((clientX - distanceStartElementAndMouseLeft) < (dragBoundary && containerItem ? viewport.left : 0)) {\n clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;\n }\n if ((clientY - distanceStartElementAndMouseTop) < (dragBoundary && containerItem ? viewport.top : 0)) {\n clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;\n }\n\n return { clientX, clientY, elementKeepContainer, viewport };\n }\n\n protected updateMouseEventsWhenMoveOverIframe(pointerEvents: 'none' | 'auto') {\n const frames = document.getElementsByTagName(\"iframe\");\n\n if (!frames?.length) {\n return;\n }\n\n for (let i = 0; i < frames.length; ++i) {\n frames[i].style.pointerEvents = pointerEvents;\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, OnDestroy, effect, inject, input, output, signal } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, checkViewInScreen, get, getDragEventByElement, getViewport } from \"@libs-ui/utils\";\nimport { fromEvent, takeUntil, tap, throttleTime } from \"rxjs\";\nimport { LibsUiDragItemInContainerVirtualScrollDirective } from \"./drag-item-in-container-virtual-scroll.directive\";\nimport { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemDirective]\",\n standalone: true\n})\nexport class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private isDragOver = signal<boolean>(false);\n private isDragging = signal<boolean>(false);\n\n // #region INPUT\n //setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll \n readonly fieldId = input<string>('');\n readonly item = input<any>(undefined);\n readonly itemInContainerVirtualScroll = input<boolean>();\n //----------------------------------\n readonly throttleTimeHandlerDraggingEvent = input<number, number | undefined>(0, { transform: value => value || 0 });\n readonly ignoreStopEvent = input<boolean>();\n readonly onlyMouseDownStopEvent = input<boolean>();\n readonly dragRootElement = input<boolean>();\n readonly dragBoundary = input<boolean>();\n readonly dragBoundaryAcceptMouseLeaveContainer = input<boolean>();\n readonly elementContainer = input<HTMLElement>();\n readonly zIndex = input<number, number | undefined>(1300, { transform: value => value ?? 1300 });\n readonly disable = input<boolean>();\n\n // #region OUTPUT\n readonly outDragStart = output<IDragStart>();\n readonly outDragOver = output<IDragOver>();\n readonly outDragLeave = output<IDragLeave>();\n readonly outDragEnd = output<IDragEnd>();\n readonly outDropped = output<IDrop>();\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n\n constructor() {\n super();\n effect(() => {\n if (!this.elementRef?.nativeElement) {\n return;\n }\n const element = this.elementRef.nativeElement as HTMLElement;\n\n element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);\n if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {\n element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);\n }\n });\n }\n\n override ngAfterViewInit() {\n const element = this.elementRef.nativeElement as HTMLElement;\n if (this.fieldId()) {\n element.setAttribute('field_id', this.fieldId());\n if (this.item()) {\n element.setAttribute('item_id', get(this.item(), this.fieldId()));\n }\n }\n element.classList.add(this.dragDropService.ClassItemDefine);\n this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntil(this.onDestroy)).subscribe((eventDragging) => {\n if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {\n return;\n }\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n if (containerById) {\n if (eventDragging.elementKeepContainer || !this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n }\n if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {\n if (this.isDragOver()) {\n return;\n }\n const eventDragOver = { ...eventDragging, elementDragOver: element };\n\n this.dragDropService.OnDragOver.next(eventDragOver);\n this.outDragOver.emit(eventDragOver);\n this.isDragOver.set(true);\n\n return;\n }\n\n if (this.isDragOver()) {\n const eventDragLeave = { ...eventDragging, elementDragLeave: element };\n this.isDragOver.set(false);\n this.dragDropService.OnDragLeave.next(eventDragLeave);\n this.outDragLeave.emit(eventDragLeave);\n }\n });\n\n this.dragDropService.OnDropContainer.pipe(takeUntil(this.onDestroy)).subscribe((eventDrop) => {\n if (eventDrop.elementDrop !== element) {\n return;\n }\n const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };\n\n this.outDropped.emit(dropEvent);\n });\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;\n let nodeClone = element;\n let distanceStartElementAndMouseLeft = -1;\n let distanceStartElementAndMouseTop = -1;\n let contextMenu = false;\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!this.ignoreStopEvent()) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const updatePositionElementRootAndRemoveNodeClone = () => {\n if (this.dragRootElement()) {\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;\n const rectContainer = containerItem.getBoundingClientRect();\n const rectNodeClone = nodeClone.getBoundingClientRect();\n const numberSub = Number((getComputedStyle(containerItem).border.match(/\\d+px/gi) || ['0'])[0].replace(/\\D+/ig, '')).valueOf();\n\n element.style.left = (rectNodeClone.left - rectContainer.left - numberSub) + 'px';\n element.style.top = (rectNodeClone.top - rectContainer.top - numberSub) + 'px';\n element.classList.remove('opacity-0');\n }\n distanceStartElementAndMouseLeft = -1;\n distanceStartElementAndMouseTop = -1;\n nodeClone.remove();\n };\n\n fromEvent(document, 'contextmenu').pipe(\n tap(() => {\n if (this.isDragging()) {\n updatePositionElementRootAndRemoveNodeClone();\n }\n contextMenu = true;\n\n }),\n takeUntil(this.onDestroy)\n ).subscribe();\n\n let ignoreMousedown = false;\n\n getDragEventByElement({\n elementMouseDown: element,\n functionMouseDown: (event: MouseEvent) => {\n this.dragDropService.ItemClick = element;\n contextMenu = false;\n this.updateMouseEventsWhenMoveOverIframe('none');\n if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {\n return;\n }\n stopEventMouse(event);\n },\n functionMouseMove: (event: MouseEvent) => {\n stopEventMouse(event);\n },\n functionMouseUp: (event: MouseEvent) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n this.dragDropService.resetItemClick();\n stopEventMouse(event);\n if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {\n contextMenu = false;\n\n return;\n }\n contextMenu = false;\n this.isDragging.set(false);\n element.removeAttribute(this.dragDropService.TargetItemDragFlag);\n if (this.itemInContainerVirtualScroll()) {\n return;\n }\n const mousePosition = { clientX: event.clientX, clientY: event.clientY };\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n this.outDragEnd.emit(dragEndEvent);\n\n nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');\n styleTag.remove();\n\n updatePositionElementRootAndRemoveNodeClone();\n },\n onDestroy: this.onDestroy\n }).pipe(tap((dragMouseEvent: MouseEvent) => {\n const rectElement = element.getBoundingClientRect();\n const viewport = getViewport() as IBoundingClientRect;\n\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {\n\n return;\n }\n const { clientX, clientY } = dragMouseEvent;\n\n if (distanceStartElementAndMouseLeft === -1) {\n distanceStartElementAndMouseLeft = clientX - rectElement.left;\n }\n\n if (distanceStartElementAndMouseTop === -1) {\n distanceStartElementAndMouseTop = clientY - rectElement.top;\n }\n })).subscribe(dragMouseEvent => {\n if (this.dragDropService.ItemClick.filter(item => item !== element).some(item => element.contains(item))) {\n return;\n }\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {\n return;\n }\n ignoreMousedown = true;\n const { clientX, clientY } = dragMouseEvent;\n const mousePosition = { clientX, clientY };\n const rectElement = element.getBoundingClientRect();\n\n if (!this.isDragging()) {\n this.isDragging.set(true);\n const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.dragDropService.OnDragStart.next(eventDragStart);\n eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;\n this.outDragStart.emit(eventDragStart);\n\n nodeClone = element.cloneNode(true) as HTMLElement;\n nodeClone.style.zIndex = `${this.zIndex()}`;\n nodeClone.classList.add('!fixed');\n nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');\n nodeClone.appendChild(styleTag);\n nodeClone.classList.add('libs-ui-drag-drop-item-dragging');\n nodeClone.style.width = `${rectElement.width}px`;\n nodeClone.style.height = `${rectElement.height}px`;\n nodeClone.style.left = `${-999}px`;\n nodeClone.style.top = `${-999}px`;\n document.body.append(nodeClone);\n if (this.dragRootElement()) {\n element.classList.add('opacity-0');\n }\n\n if (this.itemInContainerVirtualScroll()) {\n this.dragDropService.OnDragItemInContainerVirtualScroll.next({\n itemDragInfo: this.dragDropService.ItemDragInfo,\n elementDrag: nodeClone,\n distanceStartElementAndMouseTop,\n distanceStartElementAndMouseLeft,\n elementContainer: this.elementContainer(),\n dragBoundary: this.dragBoundary(),\n dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),\n ignoreStopEvent: this.ignoreStopEvent()\n });\n\n return;\n }\n }\n const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - distanceStartElementAndMouseLeft;\n const top = result.clientY - distanceStartElementAndMouseTop;\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n nodeClone.style.left = `${left}px`;\n nodeClone.style.top = `${top}px`;\n\n const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.OnDragging.next(eventDragging);\n });\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsDragContainerDirective } from '../drag-drop.directive';\nimport { LibsUiDragItemDirective } from '../drag-item.directive';\n\ninterface Task {\n id: number;\n title: string;\n description: string;\n status: 'todo' | 'in-progress' | 'done';\n}\n\ninterface Column {\n id: string;\n title: string;\n items: Task[];\n}\n\n@Component({\n selector: 'lib-drag-drop-demo',\n standalone: true,\n imports: [\n CommonModule,\n LibsUiComponentsDragContainerDirective,\n LibsUiDragItemDirective,\n LibsUiComponentsButtonsButtonComponent\n ],\n template: `\n <div class=\"page-container\">\n <header>\n <h1>Demo Drag and Drop Component</h1>\n <p>Angular component library for drag and drop functionality</p>\n </header>\n\n <main>\n <section class=\"intro-section\">\n <h2>Introduction</h2>\n <p>\n <code>@libs-ui/components-drag-drop</code> is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.\n </p>\n </section>\n\n <section class=\"installation-section\">\n <h2>Installation</h2>\n <p>To install the library, use npm or yarn:</p>\n \n <div class=\"install-command\">\n <pre>\n <code>npm install @libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('npm install @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n \n <p>Or with yarn:</p>\n \n <div class=\"install-command\">\n <pre>\n <code>yarn add @libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('yarn add @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n </section>\n\n <section class=\"demo-section\">\n <h2>Live Demo</h2>\n <div class=\"demo-container\">\n <!-- Basic List Demo -->\n <div class=\"demo-example\">\n <h3>Basic List</h3>\n <div class=\"list-container\">\n <div LibsUiComponentsDragContainerDirective \n [(items)]=\"basicItems\"\n [acceptDragSameGroup]=\"true\">\n @for (item of basicItems; track item) {\n <div class=\"list-item\"\n LibsUiDragItemDirective>\n <span class=\"item-icon\">📋</span>\n <span class=\"item-text\">{{ item }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Kanban Board Demo -->\n <div class=\"demo-example\">\n <h3>Kanban Board</h3>\n <div class=\"kanban-board\">\n @for (column of columns; track column) {\n <div class=\"kanban-column\"\n LibsUiComponentsDragContainerDirective \n [(items)]=\"column.items\"\n [groupName]=\"column.id\"\n [dropToGroupName]=\"columnsIds\"\n [acceptDragSameGroup]=\"true\">\n <h4>{{ column.title }}</h4>\n @for (item of column.items; track item) {\n <div class=\"kanban-item\"\n LibsUiDragItemDirective>\n <div class=\"kanban-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n <span class=\"item-status\" [class]=\"'status-' + item.status\">\n {{ item.status }}\n </span>\n </div>\n <p class=\"item-description\">{{ item.description }}</p>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Nested Containers Demo -->\n <div class=\"demo-example\">\n <h3>Nested Containers</h3>\n <div class=\"nested-container\">\n <div LibsUiComponentsDragContainerDirective \n [(items)]=\"nestedItems\"\n [groupName]=\"'parent'\"\n [acceptDragSameGroup]=\"true\">\n @for (item of nestedItems; track item) {\n <div class=\"nested-item\"\n LibsUiDragItemDirective>\n <div class=\"nested-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n </div>\n <div class=\"nested-item-content\">\n <div LibsUiComponentsDragContainerDirective \n [(items)]=\"item.subItems\"\n [groupName]=\"'child'\"\n [acceptDragSameGroup]=\"true\">\n @for (subItem of item.subItems; track subItem) {\n <div class=\"sub-item\"\n LibsUiDragItemDirective>\n {{ subItem }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"api-doc-section\">\n <h2>API Documentation</h2>\n \n <h3>Inputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (input of inputsDoc; track input.name) {\n <tr>\n <td><code>{{input.name}}</code></td>\n <td><code>{{input.type}}</code></td>\n <td>{{input.default}}</td>\n <td>{{input.description}}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <h3>Outputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (output of outputsDoc; track output.name) {\n <tr>\n <td><code>{{output.name}}</code></td>\n <td><code>{{output.type}}</code></td>\n <td>{{output.description}}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n\n <section class=\"interfaces-section\">\n <h2>Interfaces</h2>\n <div class=\"interface-docs\">\n @for (interfaceItem of interfacesDoc; track interfaceItem.name) {\n <div class=\"interface-item\">\n <h3>{{interfaceItem.name}}</h3>\n <pre><code>{{interfaceItem.code}}</code></pre>\n <p>{{interfaceItem.description}}</p>\n </div>\n }\n </div>\n </section>\n\n <section class=\"features-section\">\n <h2>Features</h2>\n <ul>\n @for (feature of features; track feature.id) {\n <li>\n <span class=\"feature-icon\">{{feature.icon}}</span>\n <div class=\"feature-info\">\n <h3>{{feature.title}}</h3>\n <p>{{feature.description}}</p>\n </div>\n </li>\n }\n </ul>\n </section>\n\n <section class=\"usage-section\">\n <h2>Usage</h2>\n <div class=\"code-examples\">\n @for (example of codeExamples; track example.id) {\n <div class=\"code-example\">\n <h3>{{example.title}}</h3>\n <pre><code [innerHTML]=\"example.code\"></code></pre>\n </div>\n }\n </div>\n </section>\n </main>\n </div>\n `,\n styles: [`\n .page-container {\n max-width: 1200px;\n margin: 0 auto;\n padding: 20px;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n line-height: 1.6;\n color: #333;\n }\n \n header {\n text-align: center;\n padding: 40px 0;\n background-color: #ffffff;\n border-radius: 8px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n \n header h1 {\n font-size: 2.5rem;\n color: #2c3e50;\n margin-bottom: 10px;\n }\n \n header p {\n font-size: 1.2rem;\n color: #7f8c8d;\n }\n \n section {\n background-color: #ffffff;\n border-radius: 8px;\n padding: 30px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n \n h2 {\n font-size: 1.8rem;\n color: #2c3e50;\n margin-bottom: 20px;\n padding-bottom: 10px;\n border-bottom: 2px solid #ecf0f1;\n }\n \n h3 {\n font-size: 1.4rem;\n color: #34495e;\n margin-bottom: 15px;\n }\n\n h4 {\n font-size: 1.2rem;\n color: #34495e;\n margin-bottom: 10px;\n }\n \n p {\n margin-bottom: 15px;\n }\n \n code {\n font-family: 'Courier New', Courier, monospace;\n background-color: #f7f7f7;\n padding: 2px 5px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n \n pre {\n background-color: #f7f7f7;\n padding: 15px;\n border-radius: 5px;\n overflow-x: auto;\n margin-bottom: 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n \n pre code {\n background-color: transparent;\n padding: 0;\n }\n\n /* Installation section styles */\n .installation-section .install-command {\n position: relative;\n margin-bottom: 20px;\n }\n \n .installation-section .copy-button {\n position: absolute;\n top: 10px;\n right: 10px;\n background: #3498db;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 5px 10px;\n font-size: 0.9rem;\n cursor: pointer;\n transition: background 0.2s;\n }\n \n .installation-section .copy-button:hover {\n background: #2980b9;\n }\n\n /* Demo section styles */\n .demo-container {\n display: grid;\n grid-template-columns: 1fr;\n gap: 30px;\n }\n\n .demo-example {\n background: #f7f7f7;\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n }\n\n /* List styles */\n .list-container {\n max-width: 400px;\n margin: 20px auto;\n }\n\n .list-item {\n padding: 12px;\n margin: 8px 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n display: flex;\n align-items: center;\n transition: transform 0.2s, box-shadow 0.2s;\n }\n\n .list-item:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n }\n\n .item-icon {\n margin-right: 12px;\n font-size: 1.2em;\n }\n\n /* Kanban styles */\n .kanban-board {\n display: flex;\n gap: 20px;\n padding: 20px;\n overflow-x: auto;\n }\n\n .kanban-column {\n flex: 1;\n min-width: 300px;\n background: #f5f5f5;\n padding: 15px;\n border-radius: 8px;\n }\n\n .kanban-item {\n background: white;\n padding: 12px;\n margin: 8px 0;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n }\n\n .kanban-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .item-title {\n font-weight: 500;\n }\n\n .item-status {\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.8em;\n }\n\n .status-todo {\n background: #ffebee;\n color: #c62828;\n }\n\n .status-in-progress {\n background: #fff3e0;\n color: #ef6c00;\n }\n\n .status-done {\n background: #e8f5e9;\n color: #2e7d32;\n }\n\n .item-description {\n font-size: 0.9em;\n color: #666;\n }\n\n /* Nested containers styles */\n .nested-container {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .nested-item {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n margin: 12px 0;\n overflow: hidden;\n }\n\n .nested-item-header {\n padding: 12px;\n background: #f5f5f5;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .nested-item-content {\n padding: 12px;\n }\n\n .sub-item {\n padding: 8px;\n margin: 4px 0;\n background: #f9f9f9;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n }\n\n /* API documentation styles */\n .api-doc-section {\n margin-bottom: 40px;\n }\n \n .table-container {\n overflow-x: auto;\n margin-bottom: 30px;\n }\n \n .api-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n \n .api-table th,\n .api-table td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #e1e1e1;\n }\n \n .api-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n }\n \n .api-table tbody tr:hover {\n background-color: #f9f9f9;\n }\n\n /* Features section */\n .features-section ul {\n list-style: none;\n }\n \n .features-section li {\n display: flex;\n margin-bottom: 25px;\n align-items: flex-start;\n }\n \n .feature-icon {\n font-size: 2rem;\n margin-right: 20px;\n min-width: 40px;\n text-align: center;\n }\n \n .feature-info {\n flex: 1;\n }\n\n /* Code examples */\n .code-examples {\n display: grid;\n grid-template-columns: 1fr;\n gap: 20px;\n }\n \n @media (min-width: 768px) {\n .code-examples {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n \n @media (min-width: 992px) {\n .code-examples {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n \n .code-example {\n border: 1px solid #ecf0f1;\n border-radius: 5px;\n padding: 15px;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n header {\n padding: 30px 0;\n }\n \n header h1 {\n font-size: 2rem;\n }\n \n section {\n padding: 20px;\n }\n \n .kanban-board {\n flex-direction: column;\n }\n \n .kanban-column {\n min-width: 100%;\n }\n \n .feature-icon {\n font-size: 1.5rem;\n margin-right: 15px;\n }\n }\n `]\n})\nexport class LibsUiDragDropDemoComponent {\n // Basic List Items\n basicItems = [\n 'Task 1',\n 'Task 2',\n 'Task 3',\n 'Task 4',\n 'Task 5'\n ];\n\n // Kanban Board Columns\n columnsIds = ['todo', 'in-progress', 'done'];\n columns: Column[] = [\n {\n id: 'todo',\n title: 'To Do',\n items: [\n {\n id: 1,\n title: 'Implement drag and drop',\n description: 'Add drag and drop functionality to the component',\n status: 'todo'\n },\n {\n id: 2,\n title: 'Add animations',\n description: 'Implement smooth animations for drag and drop',\n status: 'todo'\n }\n ]\n },\n {\n id: 'in-progress',\n title: 'In Progress',\n items: [\n {\n id: 3,\n title: 'Fix styling issues',\n description: 'Resolve CSS conflicts in the component',\n status: 'in-progress'\n }\n ]\n },\n {\n id: 'done',\n title: 'Done',\n items: [\n {\n id: 4,\n title: 'Setup project structure',\n description: 'Initialize the project with necessary configurations',\n status: 'done'\n }\n ]\n }\n ];\n\n // Nested Items\n nestedItems = [\n {\n id: 1,\n title: 'Project A',\n subItems: ['Task 1', 'Task 2', 'Task 3']\n },\n {\n id: 2,\n title: 'Project B',\n subItems: ['Task 4', 'Task 5']\n },\n {\n id: 3,\n title: 'Project C',\n subItems: ['Task 6', 'Task 7', 'Task 8']\n }\n ];\n\n // API Documentation\n inputsDoc = [\n {\n name: 'items',\n type: 'Array<unknown>',\n default: '[]',\n description: 'Array of items to be displayed in the container'\n },\n {\n name: 'mode',\n type: \"'move' | 'copy' | 'deepCopy'\",\n default: \"'move'\",\n description: 'Mode for drag and drop operations'\n },\n {\n name: 'directionDrag',\n type: \"'horizontal' | 'vertical'\",\n default: 'undefined',\n description: 'Direction of drag movement'\n },\n {\n name: 'viewEncapsulation',\n type: \"'emulated' | 'none'\",\n default: \"'emulated'\",\n description: 'View encapsulation mode for styling'\n },\n {\n name: 'disableDragContainer',\n type: 'boolean',\n default: 'undefined',\n description: 'Whether to disable drag operations for the container'\n },\n {\n name: 'acceptDragSameGroup',\n type: 'boolean',\n default: 'false',\n description: 'Whether to accept drag operations within the same group'\n },\n {\n name: 'placeholder',\n type: 'boolean',\n default: 'true',\n description: 'Whether to show placeholder during drag'\n },\n {\n name: 'groupName',\n type: 'string',\n default: \"'groupDragAndDropDefault'\",\n description: 'Name of the group for drag and drop operations'\n },\n {\n name: 'dropToGroupName',\n type: 'Array<string> | null',\n default: 'null',\n description: 'List of group names that can accept drops from this container'\n },\n {\n name: 'stylesOverride',\n type: 'Array<{ className: string, styles: string }>',\n default: 'undefined',\n description: 'Custom styles to override default drag-drop styling'\n }\n ];\n\n outputsDoc = [\n {\n name: 'outDragStartContainer',\n type: 'IDragStart',\n description: 'Event emitted when dragging starts in the container'\n },\n {\n name: 'outDragOverContainer',\n type: 'IDragOver',\n description: 'Event emitted when dragging over the container'\n },\n {\n name: 'outDragLeaveContainer',\n type: 'IDragLeave',\n description: 'Event emitted when dragging leaves the container'\n },\n {\n name: 'outDragEndContainer',\n type: 'IDragEnd',\n description: 'Event emitted when dragging ends in the container'\n },\n {\n name: 'outDroppedContainer',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in the container'\n },\n {\n name: 'outDroppedContainerEmpty',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in an empty container'\n },\n {\n name: 'outFunctionControl',\n type: 'IDragDropFunctionControlEvent',\n description: 'Event emitted to control drag-drop functionality'\n }\n ];\n\n // Interface Documentation\n interfacesDoc = [\n {\n name: 'IDragging',\n code: `interface IDragging {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementKeepContainer?: boolean;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag operation events, containing information about the dragged element and mouse position'\n },\n {\n name: 'IDragStart',\n code: `interface IDragStart {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag start events, triggered when dragging begins'\n },\n {\n name: 'IDragOver',\n code: `interface IDragOver {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementDragOver: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag over events, triggered when an element is dragged over another element'\n },\n {\n name: 'IDragLeave',\n code: `interface IDragLeave {\n elementDrag: HTMLElement;\n elementDragLeave: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag leave events, triggered when a dragged element leaves another element'\n },\n {\n name: 'IDragEnd',\n code: `interface IDragEnd {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag end events, triggered when dragging ends'\n },\n {\n name: 'IDrop',\n code: `interface IDrop {\n elementDrag: HTMLElement;\n elementDrop: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drop events, triggered when an element is dropped'\n },\n {\n name: 'IItemDragInfo',\n code: `interface IItemDragInfo {\n item: object;\n itemsMove?: WritableSignal<Array<unknown>>;\n indexDrag?: number;\n indexDrop?: number;\n itemsDrag: WritableSignal<Array<unknown>>;\n itemsDrop?: WritableSignal<Array<unknown>>;\n containerDrag?: HTMLElement;\n containerDrop?: HTMLElement;\n}`,\n description: 'Interface containing information about the dragged item and its containers'\n },\n {\n name: 'IDragItemInContainerVirtualScroll',\n code: `interface IDragItemInContainerVirtualScroll {\n itemDragInfo?: IItemDragInfo;\n elementDrag: HTMLElement;\n distanceStartElementAndMouseTop: number;\n distanceStartElementAndMouseLeft: number;\n elementContainer?: HTMLElement;\n dragBoundary?: boolean;\n dragBoundaryAcceptMouseLeaveContainer?: boolean;\n ignoreStopEvent?: boolean;\n}`,\n description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements'\n },\n {\n name: 'IMousePosition',\n code: `interface IMousePosition {\n clientX: number;\n clientY: number;\n}`,\n description: 'Interface representing mouse position coordinates'\n },\n {\n name: 'IDragDropFunctionControlEvent',\n code: `interface IDragDropFunctionControlEvent {\n setAttributeElementAndItemDrag: () => Promise<void>;\n}`,\n description: 'Interface for drag and drop control functions'\n }\n ];\n\n // Features\n features = [\n {\n id: 1,\n icon: '🔄',\n title: 'Flexible Drag and Drop',\n description: 'Support for container-to-container dragging with customizable group names and drop zones'\n },\n {\n id: 2,\n icon: '📜',\n title: 'Virtual Scrolling',\n description: 'Efficient handling of large lists with virtual scrolling support'\n },\n {\n id: 3,\n icon: '🎯',\n title: 'Custom Boundaries',\n description: 'Define custom drag boundaries and drop zones for precise control'\n },\n {\n id: 4,\n icon: '🎨',\n title: 'Styling Options',\n description: 'Customizable styles for drag items and containers'\n }\n ];\n\n // Code Examples\n codeExamples = [\n {\n id: 1,\n title: 'Basic Usage',\n code: `<div LibsUiComponentsDragContainerDirective \n [(items)]=\"items\"\n [groupName]=\"'myGroup'\"\n [acceptDragSameGroup]=\"true\">\n @for (item of items; track item) {\n <div LibsUiDragItemDirective>\n {{ item }}\n </div>\n }\n</div>`\n },\n {\n id: 2,\n title: 'Container-to-Container',\n code: `<div LibsUiComponentsDragContainerDirective \n [(items)]=\"sourceItems\"\n [groupName]=\"'source'\">\n @for (item of sourceItems; track item) {\n <div LibsUiDragItemDirective>\n {{ item }}\n </div>\n }\n</div>\n\n<div LibsUiComponentsDragContainerDirective \n [(items)]=\"targetItems\"\n [groupName]=\"'target'\"\n [dropToGroupName]=\"['source']\">\n @for (item of targetItems; track item) {\n <div LibsUiDragItemDirective>\n {{ item }}\n </div>\n }\n</div>`\n }];\n\n /**\n * Copy text to clipboard\n */\n copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Copied to clipboard');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n }\n );\n }\n} ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-drag-drop.mjs","sources":["../../../../../libs-ui/components/drag-drop/src/defines/css.define.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.service.ts","../../../../../libs-ui/components/drag-drop/src/drag-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-drop.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item-in-container-virtual-scroll.directive.ts","../../../../../libs-ui/components/drag-drop/src/drag-item.directive.ts","../../../../../libs-ui/components/drag-drop/src/demo/demo.component.ts","../../../../../libs-ui/components/drag-drop/src/libs-ui-components-drag-drop.ts"],"sourcesContent":["export const styleContainer = (config: Array<{ className: string, styles: string }>, viewEncapsulation: 'emulated' | 'none', groupID: string): string => {\n const defaultConfig = [{\n className: 'libs-ui-drag-drop-container',\n styles: `display:block;`\n },\n {\n className: 'libs-ui-drag-drop-item',\n styles: `\n cursor:move;`\n },\n {\n className: 'libs-ui-drag-drop-item-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-origin-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-drop-placeholder',\n styles: `visibility: hidden;`\n },\n {\n className: 'libs-ui-drag-drop-item-dragging',\n styles: `cursor:move; user-select: none; `\n },\n {\n className: 'libs-ui-drag-drop-item-disable',\n styles: ` cursor:not-allowed;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-bottom',\n styles: `position:relative;animation: translateBottom 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-top',\n styles: `position:relative;animation: translateTop 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-left',\n styles: `position:relative;animation: translateLeft 0.35s 1 ease;`\n },\n {\n className: 'libs-ui-drag-drop-item-translate-right',\n styles: `position:relative;animation: translateRight 0.35s 1 ease;`\n }];\n\n config.forEach(item => {\n const itemExits = defaultConfig.find(defaultItem => defaultItem.className === item.className);\n\n if (itemExits) {\n itemExits.styles = item.styles;\n\n return;\n }\n defaultConfig.push(item);\n });\n const groupAttr = viewEncapsulation ? `[groupID~=\"${groupID}\"]` : '';\n let styles = '';\n\n defaultConfig.forEach((item) => {\n const style = `${groupAttr}.${item.className}{${item.styles}}`;\n\n styles = `${styles}${style}\\n`;\n });\n\n styles = ` @keyframes translateTop {\n 0% {\n transform: translateY(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateBottom {\n 0% {\n transform: translateY(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n @keyframes translateLeft {\n 0% {\n transform: translateX(30px);\n }\n \n 100% {\n transform: translateX(0);\n }\n }\n \n @keyframes translateRight {\n 0% {\n transform: translateX(-30px);\n }\n \n 100% {\n transform: translateX(0px);\n }\n }\n ${styles}`.replace(/\\n+/g, '');\n\n return styles;\n};","import { Injectable, WritableSignal, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { IDragEnd, IDragItemInContainerVirtualScroll, IDragLeave, IDragOver, IDragStart, IDragging, IDrop, IItemDragInfo } from \"./interfaces/event.interface\";\n@Injectable({\n providedIn: 'any'\n})\n\nexport class MoLibsSharedDragDropService {\n private itemsClick = new Array<HTMLElement>();\n private onDragItemInContainerVirtualScroll = new Subject<IDragItemInContainerVirtualScroll>();\n private itemDragInfo?: IItemDragInfo;\n private container = signal(new Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>());\n private targetItemDragFlag = 'item-drag-target';\n private classContainerDefine = 'libs-ui-drag-drop-container';\n private classItemDefine = 'libs-ui-drag-drop-item';\n private onDragging = new Subject<IDragging>();\n private onDragStart = new Subject<IDragStart>();\n private onDragEnd = new Subject<IDragEnd>();\n private onDragOver = new Subject<IDragOver>();\n private onDragLeave = new Subject<IDragLeave>();\n private onDrop = new Subject<IDrop>();\n private onDropContainer = new Subject<IDrop>();\n private onItemInit = new Subject<string>();\n\n public get OnDragItemInContainerVirtualScroll(): Subject<IDragItemInContainerVirtualScroll> {\n return this.onDragItemInContainerVirtualScroll;\n }\n\n public set ItemDragInfo(data: IItemDragInfo | undefined) {\n this.itemDragInfo = data;\n }\n\n public get ItemDragInfo(): IItemDragInfo | undefined {\n return this.itemDragInfo;\n }\n\n public get Container(): WritableSignal<Map<string, { element: HTMLElement; elementScroll?: HTMLElement }>> {\n return this.container;\n }\n\n public get TargetItemDragFlag() {\n return this.targetItemDragFlag;\n }\n\n public get ClassContainerDefine() {\n return this.classContainerDefine;\n }\n\n public get ClassItemDefine() {\n return this.classItemDefine;\n }\n\n public get OnDragging() {\n return this.onDragging;\n }\n\n public get OnDragOver() {\n return this.onDragOver;\n }\n\n public get OnDragLeave() {\n return this.onDragLeave;\n }\n\n public get OnDragStart() {\n return this.onDragStart;\n }\n\n public get OnDragEnd() {\n return this.onDragEnd;\n }\n\n public get OnDropContainer() {\n return this.onDropContainer;\n }\n\n public get OnDrop() {\n return this.onDrop;\n }\n\n public get OnItemInit() {\n return this.onItemInit;\n }\n\n public get ItemClick(): Array<HTMLElement> {\n return [...this.itemsClick];\n }\n\n public set ItemClick(item: HTMLElement) {\n this.itemsClick.push(item);\n }\n\n public resetItemClick() {\n this.itemsClick.length = 0;\n }\n\n public checkElementOverAcceptElementDrag(groupNameOfContainer: string | null, groupNameOfElementDrag: string | null, groupNameOfDropTo: string | null): boolean {\n if (groupNameOfContainer !== groupNameOfElementDrag && !groupNameOfDropTo) {\n return false;\n }\n\n if (groupNameOfDropTo !== null && !groupNameOfDropTo.toString().split(';').includes(groupNameOfContainer || 'undefinedName')) {\n return false;\n }\n\n return true;\n }\n}","import { AfterViewInit, Directive, ElementRef, OnDestroy, inject, input, signal } from \"@angular/core\";\nimport { IPageInfo, VirtualScrollerComponent } from \"@iharbeck/ngx-virtual-scroller\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, cloneIBoundingClientRect, get } from \"@libs-ui/utils\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragging } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragScrollDirective]\",\n standalone: true\n})\nexport class LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private stopScroll = signal<boolean>(false);\n private virtualScrollPageInfo = signal<IPageInfo | undefined>(undefined);\n protected intervalScrollToElement = signal<number | undefined>(undefined);\n protected onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly ignoreAutoScroll = input<boolean>();\n readonly widthZoneDetect = input<number, number | undefined>(16, { transform: value => value ?? 16 });\n readonly movementLength = input<number, number | undefined>(6, { transform: value => value ?? 6 });\n readonly rootElementScroll = input<HTMLElement>();\n readonly virtualScrollerComponent = input<VirtualScrollerComponent>();\n\n // #region INJECT\n protected elementRef = inject(ElementRef);\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n this.dragDropService.OnDragging.pipe(takeUntil(this.onDestroy)).subscribe((eventDragging) => this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll()));\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n clearInterval(this.intervalScrollToElement());\n if (this.virtualScrollPageInfo()) {\n const firstElement = get(this.virtualScrollerComponent(), 'element')?.nativeElement.firstElementChild;\n const isHorizontal = get(this.virtualScrollerComponent(), '_horizontal');\n if (isHorizontal) {\n firstElement.style.transform = `scaleX(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n if (!isHorizontal) {\n firstElement.style.transform = `scaleY(${this.virtualScrollPageInfo()?.scrollEndPosition})`;\n }\n this.virtualScrollPageInfo.set(undefined);\n }\n this.stopScroll.set(false);\n });\n this.dragDropService.OnDragStart.pipe(takeUntil(this.onDestroy)).subscribe(() => {\n if (this.virtualScrollerComponent) {\n this.virtualScrollerComponent()?.scrollToIndex(0);\n }\n });\n if (!this.virtualScrollerComponent) {\n return;\n }\n this.virtualScrollerComponent()?.vsChange.pipe(takeUntil(this.onDestroy)).subscribe(pageInfo => {\n const items = get(this.virtualScrollerComponent, '_items');\n\n if (items && items.length === pageInfo.endIndex) {\n this.virtualScrollPageInfo.set(pageInfo);\n const elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n const isHorizontal = get(this.virtualScrollerComponent, '_horizontal');\n\n if (isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetWidth + elementSetScroll.scrollLeft + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n\n if (!isHorizontal && pageInfo.scrollEndPosition < elementSetScroll.offsetHeight + elementSetScroll.scrollTop + 3) {\n this.stopScroll.set(true);\n clearInterval(this.intervalScrollToElement());\n\n return;\n }\n }\n this.stopScroll.set(false);\n });\n }\n\n /* FUNCTIONS */\n protected checkAndScrollElementToPosition(eventDragging: IDragging, ignoreAutoScroll?: boolean) {\n let elementSetScroll = this.rootElementScroll() || this.elementRef.nativeElement;\n\n if (ignoreAutoScroll || !checkMouseOverInContainer(eventDragging.mousePosition, elementSetScroll)) {\n return;\n }\n const rectElement = cloneIBoundingClientRect(this.elementRef.nativeElement.getBoundingClientRect());\n\n if (this.rootElementScroll()) {\n const rectElementScroll = this.rootElementScroll()?.getBoundingClientRect() as IBoundingClientRect;\n\n rectElement.left = rectElementScroll.left;\n rectElement.top = rectElementScroll.top;\n }\n\n const { width, height, top, left } = rectElement;\n const { clientX, clientY } = eventDragging.mousePosition;\n const limitLeft = left + elementSetScroll.offsetWidth;\n const limitTop = top + elementSetScroll.offsetHeight;\n\n clearInterval(this.intervalScrollToElement());\n if ((clientX < left || clientX > left + width) && (clientY < top || clientY > top + height)) {\n return;\n }\n\n this.intervalScrollToElement.set(setInterval(() => {\n elementSetScroll = (this.rootElementScroll() || this.elementRef.nativeElement);\n let directionTop = 0;\n let directionLeft = 0;\n\n if (top <= clientY && clientY <= top + this.widthZoneDetect()) {\n elementSetScroll.scrollTop -= this.movementLength();\n directionTop = -1;\n }\n\n if (limitTop - this.widthZoneDetect() <= clientY && clientY <= limitTop) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollTop += this.movementLength();\n directionTop = 1;\n }\n\n if ((limitLeft - this.widthZoneDetect() <= clientX) && (clientX <= limitLeft)) {\n if (this.stopScroll()) {\n return;\n }\n elementSetScroll.scrollLeft += this.movementLength();\n directionLeft = +1;\n\n }\n if (left <= clientX && clientX <= left + this.widthZoneDetect()) {\n elementSetScroll.scrollLeft -= this.movementLength();\n directionLeft = -1;\n }\n\n if (elementSetScroll.scrollLeft && (elementSetScroll.scrollLeft + elementSetScroll.offsetWidth >= elementSetScroll.scrollWidth)) {\n elementSetScroll.scrollLeft -= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth - elementSetScroll.scrollWidth;\n }\n\n if (elementSetScroll.scrollTop && (elementSetScroll.scrollTop + elementSetScroll.offsetHeight >= elementSetScroll.scrollHeight)) {\n elementSetScroll.scrollTop -= elementSetScroll.scrollTop + elementSetScroll.offsetHeight - elementSetScroll.scrollHeight;\n }\n\n if ((directionTop < 0 && !elementSetScroll.scrollTop) || (!elementSetScroll.scrollLeft && directionLeft < 0) || (directionTop && elementSetScroll.scrollHeight <= elementSetScroll.scrollTop + elementSetScroll.offsetHeight + 3) || (directionLeft && elementSetScroll.scrollWidth <= elementSetScroll.scrollLeft + elementSetScroll.offsetWidth + 3)) {\n return clearInterval(this.intervalScrollToElement());\n }\n }, 10));\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, effect, input, model, output, signal, untracked } from \"@angular/core\";\nimport { checkMouseOverInContainer, cloneDeep, get, set, uuid } from \"@libs-ui/utils\";\nimport { Observable, debounceTime, filter, takeUntil } from \"rxjs\";\nimport { styleContainer } from \"./defines/css.define\";\nimport { LibsUiComponentsDragScrollDirective } from \"./drag-scroll.directive\";\nimport { IDragDropFunctionControlEvent, IDragEnd, IDragLeave, IDragOver, IDragStart, IDragging, IDrop } from \"./interfaces/event.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsDragContainerDirective]\",\n standalone: true,\n})\nexport class LibsUiComponentsDragContainerDirective extends LibsUiComponentsDragScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private groupID = signal<string>(uuid());\n private isDragOver = signal<boolean>(false);\n\n // #region INPUT\n readonly disableDragContainer = input<boolean>();\n readonly mode = input<string, 'move' | 'copy' | 'deepCopy'>('move', { transform: value => value ?? 'move' });\n readonly directionDrag = input<'horizontal' | 'vertical'>();\n readonly viewEncapsulation = input<'emulated' | 'none', 'emulated' | 'none' | undefined>('emulated', { transform: value => value ?? 'emulated' });\n readonly acceptDragSameGroup = input<boolean, boolean | undefined>(false, { transform: value => value ?? false });\n readonly placeholder = input<boolean, boolean | undefined>(true, { transform: value => value ?? true });\n readonly groupName = input<string, string | undefined>('groupDragAndDropDefault', { transform: value => value ?? 'groupDragAndDropDefault' }); // nếu các group có tên trùng nhau sẽ được drop\n readonly dropToGroupName = input<Array<string> | null>(null); // nếu item trong các group A được drop vào group B nhưng group B không được drop vào group A\n readonly items = model.required<Array<unknown>>();\n readonly stylesOverride = input<Array<{ className: string, styles: string }>>();\n\n // #region OUTPUT\n readonly outDragStartContainer = output<IDragStart>();\n readonly outDragOverContainer = output<IDragOver>();\n readonly outDragLeaveContainer = output<IDragLeave>();\n readonly outDragEndContainer = output<IDragEnd>();\n readonly outDroppedContainer = output<IDrop>();\n readonly outDroppedContainerEmpty = output<IDrop>();\n readonly outFunctionControl = output<IDragDropFunctionControlEvent>();\n\n constructor() {\n super();\n const element = this.elementRef.nativeElement as HTMLElement;\n\n const container = { element };\n\n this.dragDropService.Container.update(data => {\n data.set(this.groupID(), container);\n return data;\n });\n\n effect(() => {\n if (!this.rootElementScroll()) {\n return;\n }\n untracked(() => {\n set(container, 'elementScroll', this.rootElementScroll());\n this.dragDropService.Container.update(containerMap => new Map(containerMap));\n });\n });\n\n effect(() => {\n if (this.directionDrag() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n effect(() => {\n if (this.disableDragContainer() && this.elementRef.nativeElement) {\n this.setAttributeElementAndItemDrag(this.elementRef.nativeElement);\n }\n });\n }\n\n override ngAfterViewInit(): void {\n this.outFunctionControl.emit({ setAttributeElementAndItemDrag: () => this.setAttributeElementAndItemDrag(this.elementRef.nativeElement) });\n\n this.outDroppedContainer.subscribe(eventDropped => {\n this.dragDropService.OnDropContainer.next(eventDropped);\n });\n this.onDestroy.subscribe(() => {\n if (indexSpliceListTo > -1) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n }\n\n this.dragDropService.Container().delete(this.groupID());\n });\n const elementContainer = this.elementRef.nativeElement as HTMLElement;\n\n this.initStyleAndAttribute(elementContainer, true);\n this.dragDropService.OnItemInit.pipe(debounceTime(250), filter(groupName => groupName === this.groupName()), takeUntil(this.onDestroy)).subscribe(() => this.initStyleAndAttribute(elementContainer));\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n elementContainer.classList.add(this.dragDropService.ClassContainerDefine);\n\n const handlerDragStart = (eventDragStart: IDragStart) => {\n\n this.setAttributeElementAndItemDrag(elementContainer, true);\n if (this.groupID() === eventDragStart.elementDrag.getAttribute('groupID')) {\n this.outDragStartContainer.emit({ ...eventDragStart, itemDragInfo: this.dragDropService.ItemDragInfo });\n }\n };\n\n const storeIndex = { indexDrag: -1, indexDragOver: -1 };\n let indexSpliceListTo = -1;\n const handlerDragOver = (eventDragOver: IDragOver) => {\n const { elementDrag, elementDragOver } = eventDragOver;\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n const indexDrag = Number(elementDrag.getAttribute('index')).valueOf();\n const indexDragOver = Number(elementDragOver.getAttribute('index')).valueOf();\n const idGroupElementDrag = elementDrag.getAttribute('groupID');\n const idGroupElementDragOver = elementDragOver.getAttribute('groupID');\n\n if ((this.groupID() !== idGroupElementDrag) || (idGroupElementDrag !== idGroupElementDragOver)) { // xử lý cho item drag over qua 1 item khác container\n if (idGroupElementDragOver === this.groupID() && this.placeholder()) {\n const item = this.mode() === 'deepCopy' ? cloneDeep(this.dragDropService.ItemDragInfo?.item) : this.dragDropService.ItemDragInfo?.item;\n\n this.items.update(items => {\n if (indexSpliceListTo >= 0) {\n items.splice(indexSpliceListTo, 1);\n }\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n this.setAttributeElementAndItemDrag(elementContainer, false, indexSpliceListTo);\n indexSpliceListTo = indexDragOver;\n }\n\n return;\n }\n\n if (!this.acceptDragSameGroup() || indexDrag < 0 || indexDragOver < 0 || !this.items().length || indexDrag > this.items().length || indexDragOver > this.items().length || (storeIndex.indexDrag === indexDrag && storeIndex.indexDragOver === indexDragOver)) {\n return;\n }\n // xử lý cho item drag over qua 1 item cùng container\n const itemDrag = this.items()[indexDrag];\n\n this.setAnimationElementDragOver(indexDrag, indexDragOver, elementDragOver);\n storeIndex.indexDrag = indexDrag;\n storeIndex.indexDragOver = indexDragOver;\n this.items.update(items => {\n items.splice(indexDrag, 1);\n items.splice(indexDragOver, 0, itemDrag);\n return [...items];\n });\n elementDrag.setAttribute('index', indexDragOver.toString());\n this.setAttributeElementAndItemDrag(elementContainer);\n };\n\n const removePlaceholderDrag = (eventDrag: IDragEnd, isDragging?: boolean) => {\n clearInterval(this.intervalScrollToElement());\n storeIndex.indexDrag = -1;\n storeIndex.indexDragOver = -1;\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n if (!checkMouseOverInContainer(eventDrag.mousePosition, (this.rootElementScroll() || elementContainer))) {\n const childElementIndex = Array.from<HTMLElement>(childrenElement).findIndex((child) => child.classList.contains('libs-ui-drag-drop-item-drop-placeholder'));\n\n if (childElementIndex >= 0 && this.groupID() !== eventDrag.elementDrag.getAttribute('groupID')) {\n this.items.update(items => {\n items.splice(childElementIndex, 1);\n return [...items];\n });\n indexSpliceListTo = -1;\n }\n\n this.removeAttributes(elementContainer, isDragging);\n this.setIndexElement(elementContainer);\n\n return;\n }\n if (indexSpliceListTo >= 0) {\n this.items.update(items => {\n items.splice(indexSpliceListTo, 1);\n return [...items];\n });\n indexSpliceListTo = -1;\n }\n };\n\n const handlerDragging = (eventDragging: IDragging) => {\n this.setAttributeElementAndItemDrag(elementContainer);\n const { elementDrag } = eventDragging;\n const fieldIdItem = elementDrag.getAttribute('field_id');\n const idItemDrag = elementDrag.getAttribute('item_id');\n\n if (fieldIdItem && idItemDrag && this.items().find(item => get(item, fieldIdItem) === idItemDrag)) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => child.getAttribute('item_id') === idItemDrag);\n\n if (this.items() === eventDragging.itemDragInfo?.itemsDrag() && childElement && !childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder') && !childElement.getAttribute(this.dragDropService.TargetItemDragFlag)) {\n childElement.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.groupID.set(elementDrag.getAttribute('groupID') || '');\n styleTag.remove();\n styleTag.textContent = styleContainer((this.stylesOverride() || []), this.viewEncapsulation(), this.groupID());\n elementContainer.appendChild(styleTag);\n this.setAttributeElementAndItemDrag(elementContainer, true);\n }\n }\n\n if (this.disableDragContainer()) {\n return;\n }\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && !this.acceptDragSameGroup()) {\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll() || !this.acceptDragSameGroup());\n return;\n }\n\n if (!checkMouseOverInContainer(eventDragging.mousePosition, (this.rootElementScroll() || elementContainer))) {\n if (this.isDragOver()) {\n this.isDragOver.set(false);\n this.outDragLeaveContainer.emit({ ...eventDragging, elementDragLeave: elementContainer });\n }\n\n return removePlaceholderDrag(eventDragging, true);\n }\n this.checkAndScrollElementToPosition(eventDragging, this.ignoreAutoScroll());\n\n // Đoạn code xử lý cho việc kéo một element vào 1 container nhưng container không có item hoặc item drag không over qua item trong container\n if (!this.isDragOver()) {\n elementContainer.classList.add('libs-ui-drag-drop-container-dragover');\n this.isDragOver.set(true);\n this.outDragOverContainer.emit({ ...eventDragging, elementDragOver: elementContainer });\n }\n const eventDragOver = { ...eventDragging, elementDragOver: elementContainer };\n\n if (!this.items().length) {\n eventDragOver.elementDragOver = {\n getAttribute: (name: string) => {\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return 0;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(eventDragging.mousePosition, child));\n\n if (childElement) { // nếu tìm thấy thì sẽ nhận qua sự kiện của drag-item.directive emit\n return;\n }\n childElement = Array.from<HTMLElement>(childrenElement).pop();\n\n if (childElement) {\n eventDragOver.elementDragOver = childElement;\n this.dragDropService.OnDragOver.next(eventDragOver);\n }\n };\n\n const handlerDragEnd = (eventDragEnd: IDragEnd) => {\n if (this.disableDragContainer()) {\n return;\n }\n let rect = undefined;\n\n if (this.rootElementScroll() || elementContainer) {\n rect = (this.rootElementScroll() || elementContainer)?.getBoundingClientRect();\n }\n removePlaceholderDrag(eventDragEnd);\n const { elementDrag, mousePosition, itemDragInfo } = eventDragEnd;\n\n if (this.groupID() === elementDrag.getAttribute('groupID')) {\n this.outDragEndContainer.emit({ ...eventDragEnd });\n }\n if (!checkMouseOverInContainer(mousePosition, this.rootElementScroll() || elementContainer, rect)) {\n return;\n }\n const eventDrop = { elementDrag: elementDrag, elementDrop: elementContainer, itemDragInfo: itemDragInfo };\n\n if (this.disableDragContainer() || !this.dragDropService.checkElementOverAcceptElementDrag(this.groupName(), elementDrag.getAttribute('groupName'), elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n const childElement = Array.from<HTMLElement>(childrenElement).find((child) => checkMouseOverInContainer(mousePosition, child));\n\n if (childElement) {\n eventDrop.elementDrop = childElement;\n this.dragDropService.OnDrop.next(eventDrop);\n\n return;\n }\n eventDrop.elementDrop = {\n getAttribute: (name: string) => {\n if (name === 'dropContainer') {\n return true;\n }\n if (name === 'groupID') {\n return this.groupID();\n }\n if (name !== 'index') {\n return null;\n }\n\n return childrenElement.length;\n }\n } as unknown as HTMLElement;\n this.dragDropService.OnDrop.next(eventDrop);\n };\n\n const handlerDrop = (eventDrop: IDrop) => {\n if (this.disableDragContainer()) {\n return;\n }\n const { elementDrag, elementDrop, itemDragInfo } = eventDrop;\n\n if (this.groupID() === elementDrag.getAttribute('groupID') && this.groupID() === elementDrop.getAttribute('groupID')) {\n if (itemDragInfo) {\n itemDragInfo.indexDrop = Number(elementDrop.getAttribute('index')).valueOf();\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n if (this.acceptDragSameGroup()) {\n this.outDroppedContainer.emit(eventDrop);\n }\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n return;\n }\n\n if (this.groupID() !== elementDrop.getAttribute('groupID') || elementDrag.getAttribute('groupID') === elementDrop.getAttribute('groupID')) {\n return;\n }\n const indexDragOver = this.groupID() !== elementDrag.getAttribute('groupID') ? Number(elementDrop.getAttribute('index')).valueOf() : Number(elementDrop.getAttribute('index')).valueOf() - (elementDrop.getAttribute('dropContainer') ? 0 : 1);\n const item = this.mode() === 'deepCopy' ? cloneDeep(itemDragInfo?.item) : itemDragInfo?.item;\n\n if (itemDragInfo) {\n itemDragInfo.indexDrop = indexDragOver;\n itemDragInfo.itemsDrop = this.items;\n itemDragInfo.containerDrop = elementContainer;\n }\n\n if (!this.items().length) {\n this.outDroppedContainerEmpty.emit(eventDrop);\n }\n\n this.items.update(items => {\n items.splice(indexDragOver, 0, item);\n return [...items];\n });\n if (itemDragInfo && itemDragInfo.itemsMove && itemDragInfo.itemsMove()) {\n itemDragInfo.itemsDrag.set([...itemDragInfo.itemsMove()]);\n setTimeout(() => this.setAttributeElementAndItemDrag(elementContainer));\n }\n this.outDroppedContainer.emit(eventDrop);\n this.removeAttributes(elementContainer);\n this.setIndexElement(elementContainer);\n };\n\n [{\n name: 'OnDragStart',\n event: this.dragDropService.OnDragStart,\n functionCall: handlerDragStart\n }, {\n name: 'OnDragOver',\n event: this.dragDropService.OnDragOver,\n functionCall: handlerDragOver,\n debounceTime: 5\n }, {\n name: 'OnDragging',\n event: this.dragDropService.OnDragging,\n functionCall: handlerDragging\n }, {\n name: 'OnDragEnd',\n event: this.dragDropService.OnDragEnd,\n functionCall: handlerDragEnd\n }, {\n name: 'OnDrop',\n event: this.dragDropService.OnDrop,\n functionCall: handlerDrop\n }\n ].forEach((item: { name: string; debounceTime?: number; event: Observable<unknown>; functionCall: object }) => (item.event.pipe(debounceTime(item.debounceTime || 0), takeUntil(this.onDestroy)).subscribe(item.functionCall)));\n }\n\n /* */\n private async setAttributeElementAndItemDrag(elementContainer: HTMLElement, setItemDrag?: boolean, indexInsert?: number) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n elementContainer.setAttribute('groupID', this.groupID());\n elementContainer.removeAttribute('disableDragContainer');\n\n if (this.disableDragContainer()) {\n elementContainer.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName()) {\n elementContainer.setAttribute('groupName', this.groupName() || '');\n }\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (!childElement.hasAttribute('groupName') || childElement.getAttribute('groupName') === this.groupName()) {\n childElement.setAttribute('groupID', this.groupID());\n }\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n childElement.removeAttribute('disableDragContainer');\n if (this.disableDragContainer()) {\n childElement.setAttribute('disableDragContainer', `${this.disableDragContainer()}`);\n }\n if (this.groupName() && !childElement.hasAttribute('groupName')) {\n childElement.setAttribute('groupName', this.groupName() || '');\n }\n if (this.placeholder()) {\n childElement.setAttribute('placeholder', `${this.placeholder()}`);\n }\n if (this.dropToGroupName()) {\n childElement.setAttribute('dropToGroupName', `${this.dropToGroupName()?.join(';')}`);\n }\n if (indexInsert === index && this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-drop-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-drop-placeholder');\n }\n }\n\n if (setItemDrag && childElement.getAttribute(this.dragDropService.TargetItemDragFlag) && this.items().length >= index) {\n if (this.placeholder()) {\n if (!childElement.classList.contains('libs-ui-drag-drop-item-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-placeholder');\n }\n if (!childElement.classList.contains('libs-ui-drag-drop-item-origin-placeholder')) {\n childElement.classList.add('libs-ui-drag-drop-item-origin-placeholder');\n }\n }\n\n this.dragDropService.ItemDragInfo = { item: this.items()[index] as object, indexDrag: index, itemsDrag: this.items, containerDrag: elementContainer, itemsMove: signal([...this.items()]) };\n if (this.mode() === 'move') {\n this.dragDropService.ItemDragInfo.itemsMove?.update(items => {\n items.splice(index, 1);\n return [...items]\n });\n }\n }\n });\n }\n\n private initStyleAndAttribute(elementContainer: HTMLElement, hasRemoveAttribute = false,) {\n this.setAttributeElementAndItemDrag(elementContainer);\n if (hasRemoveAttribute) {\n this.removeAttributes(elementContainer);\n }\n this.setIndexElement(elementContainer);\n };\n\n private setAnimationElementDragOver(indexDrag: number, indexDragOver: number, elementDragOver: HTMLElement) {\n if (!this.directionDrag() || !elementDragOver) {\n return;\n }\n if (this.directionDrag() === 'vertical') {\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-bottom');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-top');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-bottom');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-top');\n }\n\n return;\n }\n\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-left');\n elementDragOver.classList.remove('libs-ui-drag-drop-item-translate-right');\n if (indexDrag > indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-right');\n }\n if (indexDrag < indexDragOver) {\n elementDragOver.classList.add('libs-ui-drag-drop-item-translate-left');\n }\n\n }\n\n private setIndexElement(elementContainer: HTMLElement) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n let index = -1;\n\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n index += 1;\n childElement.setAttribute('index', `${index}`);\n });\n\n }\n\n private removeAttributes(elementContainer: HTMLElement, ignoreRemoveClassItemOriginPlaceholder?: boolean) {\n const childrenElement = elementContainer.getElementsByClassName(this.dragDropService.ClassItemDefine) as unknown as Array<HTMLElement>;\n\n elementContainer.classList.remove('libs-ui-drag-drop-container-dragover');\n Array.from<HTMLElement>(childrenElement).forEach((childElement) => {\n if (childElement.getAttribute('groupID') !== this.groupID()) {\n return;\n }\n childElement.removeAttribute('index');\n if (!this.dropToGroupName() || !this.dropToGroupName()?.length) {\n childElement.removeAttribute('dropToGroupName');\n }\n if (!this.placeholder()) {\n childElement.removeAttribute('placeholder');\n }\n if (this.placeholder()) {\n childElement.classList.remove('libs-ui-drag-drop-item-placeholder');\n if (!ignoreRemoveClassItemOriginPlaceholder) {\n\n childElement.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n }\n childElement.classList.remove('libs-ui-drag-drop-item-drop-placeholder');\n }\n });\n\n }\n}\n","import { AfterViewInit, Directive, OnDestroy, inject, output } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { cloneIBoundingClientRect, getViewport } from \"@libs-ui/utils\";\nimport { Subject, fromEvent, takeUntil, tap } from \"rxjs\";\nimport { MoLibsSharedDragDropService } from \"./drag-drop.service\";\nimport { IDragEnd } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemInContainerVirtualScrollDirective]\",\n standalone: true,\n\n})\nexport class LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n protected onDestroy = new Subject<void>();\n\n // #region OUTPUT\n readonly outDragEndContainer = output<IDragEnd>();\n\n // #region INJECT\n protected dragDropService = inject(MoLibsSharedDragDropService);\n\n ngAfterViewInit(): void {\n const addClass = ()=>{\n document.body.classList.remove('!select-none');\n document.body.classList.remove('!cursor-move');\n };\n const removeClass = ()=>{\n document.body.classList.add('!select-none');\n document.body.classList.add('!cursor-move');\n };\n this.dragDropService.OnDragEnd.pipe(takeUntil(this.onDestroy)).subscribe(e => {\n this.outDragEndContainer.emit(e);\n });\n this.dragDropService.OnDragItemInContainerVirtualScroll.pipe(takeUntil(this.onDestroy)).subscribe(dragItemInContainerVirtualScrollEvent => {\n addClass();\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!dragItemInContainerVirtualScrollEvent.ignoreStopEvent) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const documentMouseUp = fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(tap((eventMouseUp) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n stopEventMouse(eventMouseUp);\n const mousePosition = { clientX: eventMouseUp.clientX, clientY: eventMouseUp.clientY };\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n dragItemInContainerVirtualScrollEvent.elementDrag.remove();\n removeClass();\n }));\n\n fromEvent<MouseEvent>(document, 'mousemove').pipe(tap((eventMousemove) => {\n stopEventMouse(eventMousemove);\n const { clientX, clientY } = eventMousemove;\n const mousePosition = { clientX, clientY };\n\n const result = this.getClientPosition(dragItemInContainerVirtualScrollEvent.elementDrag, mousePosition, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft, dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop, dragItemInContainerVirtualScrollEvent.dragBoundary, dragItemInContainerVirtualScrollEvent.elementContainer);\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseLeft;\n const top = result.clientY - dragItemInContainerVirtualScrollEvent.distanceStartElementAndMouseTop;\n\n if (dragItemInContainerVirtualScrollEvent.dragBoundary && dragItemInContainerVirtualScrollEvent.dragBoundaryAcceptMouseLeaveContainer) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n dragItemInContainerVirtualScrollEvent.elementDrag.style.left = `${left}px`;\n dragItemInContainerVirtualScrollEvent.elementDrag.style.top = `${top}px`;\n\n this.dragDropService.OnDragging.next({ mousePosition, elementDrag: dragItemInContainerVirtualScrollEvent.elementDrag, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo });\n }), takeUntil((documentMouseUp)), takeUntil(this.onDestroy)).subscribe();\n\n });\n }\n\n /* FUNCTIONS */\n\n protected getClientPosition(element: HTMLElement, mousePosition: { clientX: number; clientY: number; }, distanceStartElementAndMouseLeft: number, distanceStartElementAndMouseTop: number, dragBoundary?: boolean, elementContainer?: HTMLElement): { clientX: number; clientY: number; elementKeepContainer: boolean; viewport: IBoundingClientRect } {\n let viewport = getViewport() as IBoundingClientRect;\n const rectElement = element.getBoundingClientRect();\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n const containerItem = elementContainer || containerById?.elementScroll || containerById?.element || document.body;\n let { clientX, clientY } = mousePosition;\n\n viewport.left = 0;\n viewport.top = 0;\n if (dragBoundary) {\n viewport = cloneIBoundingClientRect(containerItem.getBoundingClientRect());\n viewport.height = viewport.top + viewport.height;\n viewport.width = viewport.left + viewport.width;\n }\n let elementKeepContainer = false;\n\n if (clientX > viewport.width && clientY > viewport.height || clientX < viewport.left && clientY < viewport.top) {\n elementKeepContainer = true;\n }\n\n if ((clientX + (rectElement.width - distanceStartElementAndMouseLeft)) > viewport.width) {\n clientX -= (clientX + (rectElement.width - distanceStartElementAndMouseLeft) - viewport.width);\n }\n if ((clientY + (rectElement.height - distanceStartElementAndMouseTop)) > viewport.height) {\n clientY -= (clientY + (rectElement.height - distanceStartElementAndMouseTop) - viewport.height);\n }\n if ((clientX - distanceStartElementAndMouseLeft) < (dragBoundary && containerItem ? viewport.left : 0)) {\n clientX = (dragBoundary && containerItem ? viewport.left : 0) + distanceStartElementAndMouseLeft;\n }\n if ((clientY - distanceStartElementAndMouseTop) < (dragBoundary && containerItem ? viewport.top : 0)) {\n clientY = (dragBoundary && containerItem ? viewport.top : 0) + distanceStartElementAndMouseTop;\n }\n\n return { clientX, clientY, elementKeepContainer, viewport };\n }\n\n protected updateMouseEventsWhenMoveOverIframe(pointerEvents: 'none' | 'auto') {\n const frames = document.getElementsByTagName(\"iframe\");\n\n if (!frames?.length) {\n return;\n }\n\n for (let i = 0; i < frames.length; ++i) {\n frames[i].style.pointerEvents = pointerEvents;\n }\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, Directive, ElementRef, OnDestroy, effect, inject, input, output, signal } from \"@angular/core\";\nimport { IBoundingClientRect } from \"@libs-ui/interfaces-types\";\nimport { checkMouseOverInContainer, checkViewInScreen, get, getDragEventByElement, getViewport } from \"@libs-ui/utils\";\nimport { fromEvent, takeUntil, tap, throttleTime } from \"rxjs\";\nimport { LibsUiDragItemInContainerVirtualScrollDirective } from \"./drag-item-in-container-virtual-scroll.directive\";\nimport { IDragEnd, IDragLeave, IDragOver, IDragStart, IDrop } from \"./interfaces/event.interface\";\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiDragItemDirective]\",\n standalone: true\n})\nexport class LibsUiDragItemDirective extends LibsUiDragItemInContainerVirtualScrollDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private isDragOver = signal<boolean>(false);\n private isDragging = signal<boolean>(false);\n\n // #region INPUT\n //setup 3 field phía dưới nếu đang sử dụng item trong virtual-scroll \n readonly fieldId = input<string>('');\n readonly item = input<any>(undefined);\n readonly itemInContainerVirtualScroll = input<boolean>();\n //----------------------------------\n readonly throttleTimeHandlerDraggingEvent = input<number, number | undefined>(0, { transform: value => value || 0 });\n readonly ignoreStopEvent = input<boolean>();\n readonly onlyMouseDownStopEvent = input<boolean>();\n readonly dragRootElement = input<boolean>();\n readonly dragBoundary = input<boolean>();\n readonly dragBoundaryAcceptMouseLeaveContainer = input<boolean>();\n readonly elementContainer = input<HTMLElement>();\n readonly zIndex = input<number, number | undefined>(1300, { transform: value => value ?? 1300 });\n readonly disable = input<boolean>();\n\n // #region OUTPUT\n readonly outDragStart = output<IDragStart>();\n readonly outDragOver = output<IDragOver>();\n readonly outDragLeave = output<IDragLeave>();\n readonly outDragEnd = output<IDragEnd>();\n readonly outDropped = output<IDrop>();\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n\n constructor() {\n super();\n effect(() => {\n if (!this.elementRef?.nativeElement) {\n return;\n }\n const element = this.elementRef.nativeElement as HTMLElement;\n\n element.classList.remove(`${this.dragDropService.ClassItemDefine}-disable`);\n if (this.disable() && !element.classList.contains(`${this.dragDropService.ClassItemDefine}-disable`)) {\n element.classList.add(`${this.dragDropService.ClassItemDefine}-disable`);\n }\n });\n }\n\n override ngAfterViewInit() {\n const element = this.elementRef.nativeElement as HTMLElement;\n if (this.fieldId()) {\n element.setAttribute('field_id', this.fieldId());\n if (this.item()) {\n element.setAttribute('item_id', get(this.item(), this.fieldId()));\n }\n }\n element.classList.add(this.dragDropService.ClassItemDefine);\n this.dragDropService.OnDragging.pipe(throttleTime(this.throttleTimeHandlerDraggingEvent()), takeUntil(this.onDestroy)).subscribe((eventDragging) => {\n if (this.disable() || element.getAttribute('disableDragContainer') || (this.fieldId() && this.item() && eventDragging.elementDrag.getAttribute('item_id') === get(this.item(), this.fieldId()))) {\n return;\n }\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n if (containerById) {\n if (eventDragging.elementKeepContainer || !this.dragDropService.checkElementOverAcceptElementDrag(containerById.element.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('groupName'), eventDragging.elementDrag.getAttribute('dropToGroupName'))) {\n return;\n }\n }\n if (checkMouseOverInContainer(eventDragging.mousePosition, element) && element !== eventDragging.elementDrag && containerById && checkViewInScreen(containerById.element, element, containerById.elementScroll)) {\n if (this.isDragOver()) {\n return;\n }\n const eventDragOver = { ...eventDragging, elementDragOver: element };\n\n this.dragDropService.OnDragOver.next(eventDragOver);\n this.outDragOver.emit(eventDragOver);\n this.isDragOver.set(true);\n\n return;\n }\n\n if (this.isDragOver()) {\n const eventDragLeave = { ...eventDragging, elementDragLeave: element };\n this.isDragOver.set(false);\n this.dragDropService.OnDragLeave.next(eventDragLeave);\n this.outDragLeave.emit(eventDragLeave);\n }\n });\n\n this.dragDropService.OnDropContainer.pipe(takeUntil(this.onDestroy)).subscribe((eventDrop) => {\n if (eventDrop.elementDrop !== element) {\n return;\n }\n const dropEvent = { elementDrag: eventDrop.elementDrag, elementDrop: element, itemDragInfo: eventDrop.itemDragInfo };\n\n this.outDropped.emit(dropEvent);\n });\n const styleTag = document.createElement(\"style\");\n\n styleTag.textContent = `.libs-ui-drag-drop-item-dragging{cursor:move}`;\n let nodeClone = element;\n let distanceStartElementAndMouseLeft = -1;\n let distanceStartElementAndMouseTop = -1;\n let contextMenu = false;\n const stopEventMouse = (mouseEvent: MouseEvent) => {\n if (!this.ignoreStopEvent()) {\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n }\n };\n const updatePositionElementRootAndRemoveNodeClone = () => {\n if (this.dragRootElement()) {\n const containerById = this.dragDropService.Container().get(element.getAttribute('groupID') || '');\n\n const containerItem = this.elementContainer() || containerById?.elementScroll || containerById?.element || document.body;\n const rectContainer = containerItem.getBoundingClientRect();\n const rectNodeClone = nodeClone.getBoundingClientRect();\n const numberSub = Number((getComputedStyle(containerItem).border.match(/\\d+px/gi) || ['0'])[0].replace(/\\D+/ig, '')).valueOf();\n\n element.style.left = (rectNodeClone.left - rectContainer.left - numberSub) + 'px';\n element.style.top = (rectNodeClone.top - rectContainer.top - numberSub) + 'px';\n element.classList.remove('opacity-0');\n }\n distanceStartElementAndMouseLeft = -1;\n distanceStartElementAndMouseTop = -1;\n nodeClone.remove();\n };\n\n fromEvent(document, 'contextmenu').pipe(\n tap(() => {\n if (this.isDragging()) {\n updatePositionElementRootAndRemoveNodeClone();\n }\n contextMenu = true;\n\n }),\n takeUntil(this.onDestroy)\n ).subscribe();\n\n let ignoreMousedown = false;\n\n getDragEventByElement({\n elementMouseDown: element,\n functionMouseDown: (event: MouseEvent) => {\n this.dragDropService.ItemClick = element;\n contextMenu = false;\n this.updateMouseEventsWhenMoveOverIframe('none');\n if ((this.disable() || element.getAttribute('disableDragContainer') || !this.isDragging() || this.itemInContainerVirtualScroll()) && !this.onlyMouseDownStopEvent()) {\n return;\n }\n stopEventMouse(event);\n },\n functionMouseMove: (event: MouseEvent) => {\n stopEventMouse(event);\n },\n functionMouseUp: (event: MouseEvent) => {\n this.updateMouseEventsWhenMoveOverIframe('auto');\n this.dragDropService.resetItemClick();\n stopEventMouse(event);\n if (this.disable() || element.getAttribute('disableDragContainer') || contextMenu || !this.isDragging()) {\n contextMenu = false;\n\n return;\n }\n contextMenu = false;\n this.isDragging.set(false);\n element.removeAttribute(this.dragDropService.TargetItemDragFlag);\n if (this.itemInContainerVirtualScroll()) {\n return;\n }\n const mousePosition = { clientX: event.clientX, clientY: event.clientY };\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n const result = this.getClientPosition(element, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n mousePosition.clientX = result.clientX;\n mousePosition.clientY = result.clientY;\n }\n const dragEndEvent = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.ItemDragInfo = undefined;\n this.dragDropService.OnDragEnd.next(dragEndEvent);\n this.outDragEnd.emit(dragEndEvent);\n\n nodeClone.classList.remove('libs-ui-drag-drop-item-dragging');\n styleTag.remove();\n\n updatePositionElementRootAndRemoveNodeClone();\n },\n onDestroy: this.onDestroy\n }).pipe(tap((dragMouseEvent: MouseEvent) => {\n const rectElement = element.getBoundingClientRect();\n const viewport = getViewport() as IBoundingClientRect;\n\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || (!ignoreMousedown && dragMouseEvent.type === 'mousedown' && rectElement.height + rectElement.top >= viewport.height)) {\n\n return;\n }\n const { clientX, clientY } = dragMouseEvent;\n\n if (distanceStartElementAndMouseLeft === -1) {\n distanceStartElementAndMouseLeft = clientX - rectElement.left;\n }\n\n if (distanceStartElementAndMouseTop === -1) {\n distanceStartElementAndMouseTop = clientY - rectElement.top;\n }\n })).subscribe(dragMouseEvent => {\n if (this.dragDropService.ItemClick.filter(item => item !== element).some(item => element.contains(item))) {\n return;\n }\n if (this.disable() || element.getAttribute('disableDragContainer') || !dragMouseEvent.clientX || dragMouseEvent.type === 'mousedown' || contextMenu || (this.itemInContainerVirtualScroll() && this.isDragging())) {\n return;\n }\n ignoreMousedown = true;\n const { clientX, clientY } = dragMouseEvent;\n const mousePosition = { clientX, clientY };\n const rectElement = element.getBoundingClientRect();\n\n if (!this.isDragging()) {\n this.isDragging.set(true);\n const eventDragStart = { mousePosition, elementDrag: element, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n element.setAttribute(this.dragDropService.TargetItemDragFlag, 'true');\n this.dragDropService.OnDragStart.next(eventDragStart);\n eventDragStart.itemDragInfo = this.dragDropService.ItemDragInfo;\n this.outDragStart.emit(eventDragStart);\n\n nodeClone = element.cloneNode(true) as HTMLElement;\n nodeClone.style.zIndex = `${this.zIndex()}`;\n nodeClone.classList.add('!fixed');\n nodeClone.classList.remove('libs-ui-drag-drop-item-origin-placeholder');\n nodeClone.classList.remove('libs-ui-drag-drop-item-placeholder');\n nodeClone.appendChild(styleTag);\n nodeClone.classList.add('libs-ui-drag-drop-item-dragging');\n nodeClone.style.width = `${rectElement.width}px`;\n nodeClone.style.height = `${rectElement.height}px`;\n nodeClone.style.left = `${-999}px`;\n nodeClone.style.top = `${-999}px`;\n document.body.append(nodeClone);\n if (this.dragRootElement()) {\n element.classList.add('opacity-0');\n }\n\n if (this.itemInContainerVirtualScroll()) {\n this.dragDropService.OnDragItemInContainerVirtualScroll.next({\n itemDragInfo: this.dragDropService.ItemDragInfo,\n elementDrag: nodeClone,\n distanceStartElementAndMouseTop,\n distanceStartElementAndMouseLeft,\n elementContainer: this.elementContainer(),\n dragBoundary: this.dragBoundary(),\n dragBoundaryAcceptMouseLeaveContainer: this.dragBoundaryAcceptMouseLeaveContainer(),\n ignoreStopEvent: this.ignoreStopEvent()\n });\n\n return;\n }\n }\n const result = this.getClientPosition(nodeClone, mousePosition, distanceStartElementAndMouseLeft, distanceStartElementAndMouseTop, this.dragBoundary(), this.elementContainer());\n\n const elementKeepContainer = result.elementKeepContainer;\n const left = result.clientX - distanceStartElementAndMouseLeft;\n const top = result.clientY - distanceStartElementAndMouseTop;\n\n if (this.dragBoundary() && this.dragBoundaryAcceptMouseLeaveContainer()) {\n if (clientX < result.viewport.left) {\n mousePosition.clientX = result.viewport.left;\n }\n if (clientX > result.viewport.width) {\n mousePosition.clientX = result.viewport.width;\n }\n if (clientY < result.viewport.top) {\n mousePosition.clientY = result.viewport.top;\n }\n if (clientY > result.viewport.height) {\n mousePosition.clientY = result.viewport.height;\n }\n }\n nodeClone.style.left = `${left}px`;\n nodeClone.style.top = `${top}px`;\n\n const eventDragging = { mousePosition, elementDrag: nodeClone, elementKeepContainer, itemDragInfo: this.dragDropService.ItemDragInfo };\n\n this.dragDropService.OnDragging.next(eventDragging);\n });\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsDragContainerDirective } from '../drag-drop.directive';\nimport { LibsUiDragItemDirective } from '../drag-item.directive';\n\ninterface Task {\n id: number;\n title: string;\n description: string;\n status: 'todo' | 'in-progress' | 'done';\n}\n\ninterface Column {\n id: string;\n title: string;\n items: Task[];\n}\n\n@Component({\n selector: 'lib-drag-drop-demo',\n standalone: true,\n imports: [\n CommonModule,\n LibsUiComponentsDragContainerDirective,\n LibsUiDragItemDirective,\n LibsUiComponentsButtonsButtonComponent\n ],\n template: `\n <div class=\"page-container\">\n <header>\n <h1>Demo Drag and Drop Component</h1>\n <p>Angular component library for drag and drop functionality</p>\n </header>\n\n <main>\n <section class=\"intro-section\">\n <h2>Introduction</h2>\n <p>\n <code>@libs-ui/components-drag-drop</code> is a powerful Angular component that enables drag and drop functionality with features like virtual scrolling, multi-selection, and custom boundaries.\n </p>\n </section>\n\n <section class=\"installation-section\">\n <h2>Installation</h2>\n <p>To install the library, use npm or yarn:</p>\n \n <div class=\"install-command\">\n <pre>\n <code>npm install @libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('npm install @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n \n <p>Or with yarn:</p>\n \n <div class=\"install-command\">\n <pre>\n <code>yarn add @libs-ui/components-drag-drop</code>\n <libs_ui-components-buttons-button\n [label]=\"'Copy'\"\n (outClick)=\"copyToClipboard('yarn add @libs-ui/components-drag-drop')\" />\n </pre>\n </div>\n </section>\n\n <section class=\"demo-section\">\n <h2>Live Demo</h2>\n <div class=\"demo-container\">\n <!-- Basic List Demo -->\n <div class=\"demo-example\">\n <h3>Basic List</h3>\n <div class=\"list-container\">\n <div LibsUiComponentsDragContainerDirective \n [(items)]=\"basicItems\"\n [acceptDragSameGroup]=\"true\">\n @for (item of basicItems; track item) {\n <div class=\"list-item\"\n LibsUiDragItemDirective>\n <span class=\"item-icon\">📋</span>\n <span class=\"item-text\">{{ item }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Kanban Board Demo -->\n <div class=\"demo-example\">\n <h3>Kanban Board</h3>\n <div class=\"kanban-board\">\n @for (column of columns; track column) {\n <div class=\"kanban-column\"\n LibsUiComponentsDragContainerDirective \n [(items)]=\"column.items\"\n [groupName]=\"column.id\"\n [dropToGroupName]=\"columnsIds\"\n [acceptDragSameGroup]=\"true\">\n <h4>{{ column.title }}</h4>\n @for (item of column.items; track item) {\n <div class=\"kanban-item\"\n LibsUiDragItemDirective>\n <div class=\"kanban-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n <span class=\"item-status\" [class]=\"'status-' + item.status\">\n {{ item.status }}\n </span>\n </div>\n <p class=\"item-description\">{{ item.description }}</p>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Nested Containers Demo -->\n <div class=\"demo-example\">\n <h3>Nested Containers copy</h3>\n <div class=\"nested-container\">\n <div LibsUiComponentsDragContainerDirective \n [(items)]=\"nestedItems\"\n [groupName]=\"'parent'\"\n [mode]=\"'copy'\"\n [acceptDragSameGroup]=\"true\">\n @for (item of nestedItems; track item) {\n <div class=\"nested-item\"\n LibsUiDragItemDirective>\n <div class=\"nested-item-header\">\n <span class=\"item-title\">{{ item.title }}</span>\n </div>\n <div class=\"nested-item-content\">\n <div LibsUiComponentsDragContainerDirective \n [(items)]=\"item.subItems\"\n [groupName]=\"'child'\"\n [acceptDragSameGroup]=\"true\">\n @for (subItem of item.subItems; track subItem) {\n <div class=\"sub-item\"\n LibsUiDragItemDirective>\n {{ subItem }}\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <section class=\"api-doc-section\">\n <h2>API Documentation</h2>\n \n <h3>Inputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (input of inputsDoc; track input.name) {\n <tr>\n <td><code>{{input.name}}</code></td>\n <td><code>{{input.type}}</code></td>\n <td>{{input.default}}</td>\n <td>{{input.description}}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <h3>Outputs</h3>\n <div class=\"table-container\">\n <table class=\"api-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n @for (output of outputsDoc; track output.name) {\n <tr>\n <td><code>{{output.name}}</code></td>\n <td><code>{{output.type}}</code></td>\n <td>{{output.description}}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </section>\n\n <section class=\"interfaces-section\">\n <h2>Interfaces</h2>\n <div class=\"interface-docs\">\n @for (interfaceItem of interfacesDoc; track interfaceItem.name) {\n <div class=\"interface-item\">\n <h3>{{interfaceItem.name}}</h3>\n <pre><code>{{interfaceItem.code}}</code></pre>\n <p>{{interfaceItem.description}}</p>\n </div>\n }\n </div>\n </section>\n\n <section class=\"features-section\">\n <h2>Features</h2>\n <ul>\n @for (feature of features; track feature.id) {\n <li>\n <span class=\"feature-icon\">{{feature.icon}}</span>\n <div class=\"feature-info\">\n <h3>{{feature.title}}</h3>\n <p>{{feature.description}}</p>\n </div>\n </li>\n }\n </ul>\n </section>\n\n <section class=\"usage-section\">\n <h2>Usage</h2>\n <div class=\"code-examples\">\n @for (example of codeExamples; track example.id) {\n <div class=\"code-example\">\n <h3>{{example.title}}</h3>\n <pre><code [innerHTML]=\"example.code\"></code></pre>\n </div>\n }\n </div>\n </section>\n </main>\n </div>\n `,\n styles: [`\n .page-container {\n max-width: 1200px;\n margin: 0 auto;\n padding: 20px;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n line-height: 1.6;\n color: #333;\n }\n \n header {\n text-align: center;\n padding: 40px 0;\n background-color: #ffffff;\n border-radius: 8px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n \n header h1 {\n font-size: 2.5rem;\n color: #2c3e50;\n margin-bottom: 10px;\n }\n \n header p {\n font-size: 1.2rem;\n color: #7f8c8d;\n }\n \n section {\n background-color: #ffffff;\n border-radius: 8px;\n padding: 30px;\n margin-bottom: 30px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n }\n \n h2 {\n font-size: 1.8rem;\n color: #2c3e50;\n margin-bottom: 20px;\n padding-bottom: 10px;\n border-bottom: 2px solid #ecf0f1;\n }\n \n h3 {\n font-size: 1.4rem;\n color: #34495e;\n margin-bottom: 15px;\n }\n\n h4 {\n font-size: 1.2rem;\n color: #34495e;\n margin-bottom: 10px;\n }\n \n p {\n margin-bottom: 15px;\n }\n \n code {\n font-family: 'Courier New', Courier, monospace;\n background-color: #f7f7f7;\n padding: 2px 5px;\n border-radius: 3px;\n font-size: 0.9em;\n }\n \n pre {\n background-color: #f7f7f7;\n padding: 15px;\n border-radius: 5px;\n overflow-x: auto;\n margin-bottom: 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n \n pre code {\n background-color: transparent;\n padding: 0;\n }\n\n /* Installation section styles */\n .installation-section .install-command {\n position: relative;\n margin-bottom: 20px;\n }\n \n .installation-section .copy-button {\n position: absolute;\n top: 10px;\n right: 10px;\n background: #3498db;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 5px 10px;\n font-size: 0.9rem;\n cursor: pointer;\n transition: background 0.2s;\n }\n \n .installation-section .copy-button:hover {\n background: #2980b9;\n }\n\n /* Demo section styles */\n .demo-container {\n display: grid;\n grid-template-columns: 1fr;\n gap: 30px;\n }\n\n .demo-example {\n background: #f7f7f7;\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n }\n\n /* List styles */\n .list-container {\n max-width: 400px;\n margin: 20px auto;\n }\n\n .list-item {\n padding: 12px;\n margin: 8px 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n display: flex;\n align-items: center;\n transition: transform 0.2s, box-shadow 0.2s;\n }\n\n .list-item:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n }\n\n .item-icon {\n margin-right: 12px;\n font-size: 1.2em;\n }\n\n /* Kanban styles */\n .kanban-board {\n display: flex;\n gap: 20px;\n padding: 20px;\n overflow-x: auto;\n }\n\n .kanban-column {\n flex: 1;\n min-width: 300px;\n background: #f5f5f5;\n padding: 15px;\n border-radius: 8px;\n }\n\n .kanban-item {\n background: white;\n padding: 12px;\n margin: 8px 0;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.1);\n }\n\n .kanban-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .item-title {\n font-weight: 500;\n }\n\n .item-status {\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 0.8em;\n }\n\n .status-todo {\n background: #ffebee;\n color: #c62828;\n }\n\n .status-in-progress {\n background: #fff3e0;\n color: #ef6c00;\n }\n\n .status-done {\n background: #e8f5e9;\n color: #2e7d32;\n }\n\n .item-description {\n font-size: 0.9em;\n color: #666;\n }\n\n /* Nested containers styles */\n .nested-container {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .nested-item {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n margin: 12px 0;\n overflow: hidden;\n }\n\n .nested-item-header {\n padding: 12px;\n background: #f5f5f5;\n border-bottom: 1px solid #e0e0e0;\n }\n\n .nested-item-content {\n padding: 12px;\n }\n\n .sub-item {\n padding: 8px;\n margin: 4px 0;\n background: #f9f9f9;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n }\n\n /* API documentation styles */\n .api-doc-section {\n margin-bottom: 40px;\n }\n \n .table-container {\n overflow-x: auto;\n margin-bottom: 30px;\n }\n \n .api-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n \n .api-table th,\n .api-table td {\n padding: 12px 15px;\n text-align: left;\n border-bottom: 1px solid #e1e1e1;\n }\n \n .api-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n }\n \n .api-table tbody tr:hover {\n background-color: #f9f9f9;\n }\n\n /* Features section */\n .features-section ul {\n list-style: none;\n }\n \n .features-section li {\n display: flex;\n margin-bottom: 25px;\n align-items: flex-start;\n }\n \n .feature-icon {\n font-size: 2rem;\n margin-right: 20px;\n min-width: 40px;\n text-align: center;\n }\n \n .feature-info {\n flex: 1;\n }\n\n /* Code examples */\n .code-examples {\n display: grid;\n grid-template-columns: 1fr;\n gap: 20px;\n }\n \n @media (min-width: 768px) {\n .code-examples {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n \n @media (min-width: 992px) {\n .code-examples {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n \n .code-example {\n border: 1px solid #ecf0f1;\n border-radius: 5px;\n padding: 15px;\n }\n\n /* Responsive adjustments */\n @media (max-width: 768px) {\n header {\n padding: 30px 0;\n }\n \n header h1 {\n font-size: 2rem;\n }\n \n section {\n padding: 20px;\n }\n \n .kanban-board {\n flex-direction: column;\n }\n \n .kanban-column {\n min-width: 100%;\n }\n \n .feature-icon {\n font-size: 1.5rem;\n margin-right: 15px;\n }\n }\n `]\n})\nexport class LibsUiDragDropDemoComponent {\n // Basic List Items\n basicItems = [\n 'Task 1',\n 'Task 2',\n 'Task 3',\n 'Task 4',\n 'Task 5'\n ];\n\n // Kanban Board Columns\n columnsIds = ['todo', 'in-progress', 'done'];\n columns: Column[] = [\n {\n id: 'todo',\n title: 'To Do',\n items: [\n {\n id: 1,\n title: 'Implement drag and drop',\n description: 'Add drag and drop functionality to the component',\n status: 'todo'\n },\n {\n id: 2,\n title: 'Add animations',\n description: 'Implement smooth animations for drag and drop',\n status: 'todo'\n }\n ]\n },\n {\n id: 'in-progress',\n title: 'In Progress',\n items: [\n {\n id: 3,\n title: 'Fix styling issues',\n description: 'Resolve CSS conflicts in the component',\n status: 'in-progress'\n }\n ]\n },\n {\n id: 'done',\n title: 'Done',\n items: [\n {\n id: 4,\n title: 'Setup project structure',\n description: 'Initialize the project with necessary configurations',\n status: 'done'\n }\n ]\n }\n ];\n\n // Nested Items\n nestedItems = [\n {\n id: 1,\n title: 'Project A',\n subItems: ['Task 1', 'Task 2', 'Task 3']\n },\n {\n id: 2,\n title: 'Project B',\n subItems: ['Task 4', 'Task 5']\n },\n {\n id: 3,\n title: 'Project C',\n subItems: ['Task 6', 'Task 7', 'Task 8']\n }\n ];\n\n // API Documentation\n inputsDoc = [\n {\n name: 'items',\n type: 'Array<unknown>',\n default: '[]',\n description: 'Array of items to be displayed in the container'\n },\n {\n name: 'mode',\n type: \"'move' | 'copy' | 'deepCopy'\",\n default: \"'move'\",\n description: 'Mode for drag and drop operations'\n },\n {\n name: 'directionDrag',\n type: \"'horizontal' | 'vertical'\",\n default: 'undefined',\n description: 'Direction of drag movement'\n },\n {\n name: 'viewEncapsulation',\n type: \"'emulated' | 'none'\",\n default: \"'emulated'\",\n description: 'View encapsulation mode for styling'\n },\n {\n name: 'disableDragContainer',\n type: 'boolean',\n default: 'undefined',\n description: 'Whether to disable drag operations for the container'\n },\n {\n name: 'acceptDragSameGroup',\n type: 'boolean',\n default: 'false',\n description: 'Whether to accept drag operations within the same group'\n },\n {\n name: 'placeholder',\n type: 'boolean',\n default: 'true',\n description: 'Whether to show placeholder during drag'\n },\n {\n name: 'groupName',\n type: 'string',\n default: \"'groupDragAndDropDefault'\",\n description: 'Name of the group for drag and drop operations'\n },\n {\n name: 'dropToGroupName',\n type: 'Array<string> | null',\n default: 'null',\n description: 'List of group names that can accept drops from this container'\n },\n {\n name: 'stylesOverride',\n type: 'Array<{ className: string, styles: string }>',\n default: 'undefined',\n description: 'Custom styles to override default drag-drop styling'\n }\n ];\n\n outputsDoc = [\n {\n name: 'outDragStartContainer',\n type: 'IDragStart',\n description: 'Event emitted when dragging starts in the container'\n },\n {\n name: 'outDragOverContainer',\n type: 'IDragOver',\n description: 'Event emitted when dragging over the container'\n },\n {\n name: 'outDragLeaveContainer',\n type: 'IDragLeave',\n description: 'Event emitted when dragging leaves the container'\n },\n {\n name: 'outDragEndContainer',\n type: 'IDragEnd',\n description: 'Event emitted when dragging ends in the container'\n },\n {\n name: 'outDroppedContainer',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in the container'\n },\n {\n name: 'outDroppedContainerEmpty',\n type: 'IDrop',\n description: 'Event emitted when an item is dropped in an empty container'\n },\n {\n name: 'outFunctionControl',\n type: 'IDragDropFunctionControlEvent',\n description: 'Event emitted to control drag-drop functionality'\n }\n ];\n\n // Interface Documentation\n interfacesDoc = [\n {\n name: 'IDragging',\n code: `interface IDragging {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementKeepContainer?: boolean;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag operation events, containing information about the dragged element and mouse position'\n },\n {\n name: 'IDragStart',\n code: `interface IDragStart {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag start events, triggered when dragging begins'\n },\n {\n name: 'IDragOver',\n code: `interface IDragOver {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n elementDragOver: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag over events, triggered when an element is dragged over another element'\n },\n {\n name: 'IDragLeave',\n code: `interface IDragLeave {\n elementDrag: HTMLElement;\n elementDragLeave: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag leave events, triggered when a dragged element leaves another element'\n },\n {\n name: 'IDragEnd',\n code: `interface IDragEnd {\n mousePosition: IMousePosition;\n elementDrag: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drag end events, triggered when dragging ends'\n },\n {\n name: 'IDrop',\n code: `interface IDrop {\n elementDrag: HTMLElement;\n elementDrop: HTMLElement;\n itemDragInfo?: IItemDragInfo;\n}`,\n description: 'Interface for drop events, triggered when an element is dropped'\n },\n {\n name: 'IItemDragInfo',\n code: `interface IItemDragInfo {\n item: object;\n itemsMove?: WritableSignal<Array<unknown>>;\n indexDrag?: number;\n indexDrop?: number;\n itemsDrag: WritableSignal<Array<unknown>>;\n itemsDrop?: WritableSignal<Array<unknown>>;\n containerDrag?: HTMLElement;\n containerDrop?: HTMLElement;\n}`,\n description: 'Interface containing information about the dragged item and its containers'\n },\n {\n name: 'IDragItemInContainerVirtualScroll',\n code: `interface IDragItemInContainerVirtualScroll {\n itemDragInfo?: IItemDragInfo;\n elementDrag: HTMLElement;\n distanceStartElementAndMouseTop: number;\n distanceStartElementAndMouseLeft: number;\n elementContainer?: HTMLElement;\n dragBoundary?: boolean;\n dragBoundaryAcceptMouseLeaveContainer?: boolean;\n ignoreStopEvent?: boolean;\n}`,\n description: 'Interface for virtual scrolling drag operations, containing information about drag boundaries and container elements'\n },\n {\n name: 'IMousePosition',\n code: `interface IMousePosition {\n clientX: number;\n clientY: number;\n}`,\n description: 'Interface representing mouse position coordinates'\n },\n {\n name: 'IDragDropFunctionControlEvent',\n code: `interface IDragDropFunctionControlEvent {\n setAttributeElementAndItemDrag: () => Promise<void>;\n}`,\n description: 'Interface for drag and drop control functions'\n }\n ];\n\n // Features\n features = [\n {\n id: 1,\n icon: '🔄',\n title: 'Flexible Drag and Drop',\n description: 'Support for container-to-container dragging with customizable group names and drop zones'\n },\n {\n id: 2,\n icon: '📜',\n title: 'Virtual Scrolling',\n description: 'Efficient handling of large lists with virtual scrolling support'\n },\n {\n id: 3,\n icon: '🎯',\n title: 'Custom Boundaries',\n description: 'Define custom drag boundaries and drop zones for precise control'\n },\n {\n id: 4,\n icon: '🎨',\n title: 'Styling Options',\n description: 'Customizable styles for drag items and containers'\n }\n ];\n\n // Code Examples\n codeExamples = [\n {\n id: 1,\n title: 'Basic Usage',\n code: `<div LibsUiComponentsDragContainerDirective \n [(items)]=\"items\"\n [groupName]=\"'myGroup'\"\n [acceptDragSameGroup]=\"true\">\n @for (item of items; track item) {\n <div LibsUiDragItemDirective>\n {{ item }}\n </div>\n }\n</div>`\n },\n {\n id: 2,\n title: 'Container-to-Container',\n code: `<div LibsUiComponentsDragContainerDirective \n [(items)]=\"sourceItems\"\n [groupName]=\"'source'\">\n @for (item of sourceItems; track item) {\n <div LibsUiDragItemDirective>\n {{ item }}\n </div>\n }\n</div>\n\n<div LibsUiComponentsDragContainerDirective \n [(items)]=\"targetItems\"\n [groupName]=\"'target'\"\n [dropToGroupName]=\"['source']\">\n @for (item of targetItems; track item) {\n <div LibsUiDragItemDirective>\n {{ item }}\n </div>\n }\n</div>`\n }];\n\n /**\n * Copy text to clipboard\n */\n copyToClipboard(text: string) {\n navigator.clipboard.writeText(text).then(\n () => {\n alert('Copied to clipboard');\n },\n (err) => {\n console.error('Could not copy text: ', err);\n }\n );\n }\n} ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-drag-drop",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.195",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": "^18.2.0",
|
|
6
|
-
"@libs-ui/utils": "^0.2.
|
|
6
|
+
"@libs-ui/utils": "^0.2.195",
|
|
7
7
|
"rxjs": "~7.8.0",
|
|
8
|
-
"@libs-ui/interfaces-types": "^0.2.
|
|
8
|
+
"@libs-ui/interfaces-types": "^0.2.195",
|
|
9
9
|
"@iharbeck/ngx-virtual-scroller": "15.2.0"
|
|
10
10
|
},
|
|
11
11
|
"sideEffects": false,
|