@libs-ui/components-scroll-overlay 0.2.205 → 0.2.207

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.
@@ -0,0 +1,15 @@
1
+ import { IScrollOverlayOptions } from '../scroll.interface';
2
+ import * as i0 from "@angular/core";
3
+ export declare class LibsUiComponentsScrollOverlayDemoComponent {
4
+ longContent: import("@angular/core").WritableSignal<string>;
5
+ longHorizontalContent: import("@angular/core").WritableSignal<string>;
6
+ customStyleOptions: import("@angular/core").WritableSignal<IScrollOverlayOptions>;
7
+ autoHideOptions: import("@angular/core").WritableSignal<IScrollOverlayOptions>;
8
+ horizontalOptions: import("@angular/core").WritableSignal<IScrollOverlayOptions>;
9
+ lastEvent: import("@angular/core").WritableSignal<string>;
10
+ onScroll(event: Event): void;
11
+ onScrollTop(event: Event): void;
12
+ onScrollBottom(event: Event): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsScrollOverlayDemoComponent, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsScrollOverlayDemoComponent, "lib-scroll-overlay-demo", never, {}, {}, never, never, true, never>;
15
+ }
@@ -0,0 +1,52 @@
1
+ import { Component, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { LibsUiComponentsScrollOverlayDirective } from '../scroll-overlay.directive';
4
+ import * as i0 from "@angular/core";
5
+ export class LibsUiComponentsScrollOverlayDemoComponent {
6
+ // Demo content
7
+ longContent = signal(`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
8
+
9
+ Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.`);
10
+ longHorizontalContent = signal(`This is a very long horizontal content that will require scrolling to see all of it. It contains multiple sentences and words that extend beyond the container width. This demonstrates the horizontal scrolling capability of the scroll-overlay directive.`);
11
+ // Demo options
12
+ customStyleOptions = signal({
13
+ scrollbarWidth: 12,
14
+ scrollbarColor: '#f3f4f6',
15
+ scrollbarHoverColor: '#e5e7eb',
16
+ scrollThumbColor: '#3b82f6',
17
+ scrollThumbHoverColor: '#2563eb',
18
+ scrollbarPadding: 4
19
+ });
20
+ autoHideOptions = signal({
21
+ scrollYOpacity0: true,
22
+ scrollbarWidth: 8,
23
+ scrollbarColor: 'transparent',
24
+ scrollThumbColor: '#9ca3af',
25
+ scrollThumbHoverColor: '#6b7280'
26
+ });
27
+ horizontalOptions = signal({
28
+ scrollX: 'scroll',
29
+ scrollY: 'hidden',
30
+ scrollbarWidth: 8,
31
+ scrollbarColor: '#f3f4f6',
32
+ scrollThumbColor: '#3b82f6'
33
+ });
34
+ // Event handling
35
+ lastEvent = signal('No events yet');
36
+ onScroll(event) {
37
+ this.lastEvent.set('Scroll event fired');
38
+ }
39
+ onScrollTop(event) {
40
+ this.lastEvent.set('Reached top');
41
+ }
42
+ onScrollBottom(event) {
43
+ this.lastEvent.set('Reached bottom');
44
+ }
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LibsUiComponentsScrollOverlayDemoComponent, isStandalone: true, selector: "lib-scroll-overlay-demo", ngImport: i0, template: "<div class=\"demo-container\">\n <h2>Scroll Overlay Demo</h2>\n\n <div class=\"demo-intro\">\n <h3>Gi\u1EDBi thi\u1EC7u</h3>\n <p>Demo n\u00E0y minh h\u1ECDa c\u00E1c t\u00EDnh n\u0103ng v\u00E0 c\u00E1ch s\u1EED d\u1EE5ng c\u1EE7a directive `scroll-overlay`. Demo bao g\u1ED3m 5 v\u00ED d\u1EE5 ch\u00EDnh:</p>\n <ul>\n <li><strong>Basic Usage</strong>: S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh</li>\n <li><strong>Custom Styling</strong>: Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n</li>\n <li><strong>Auto Hide</strong>: \u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover</li>\n <li><strong>Horizontal Scroll</strong>: Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i</li>\n <li><strong>Event Handling</strong>: X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll</li>\n </ul>\n </div>\n\n <div class=\"demo-features\">\n <h3>T\u00EDnh n\u0103ng Demo</h3>\n <div class=\"features-grid\">\n <div class=\"feature-item\">\n <h4>Tu\u1EF3 bi\u1EBFn giao di\u1EC7n</h4>\n <p>Thay \u0111\u1ED5i m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc, padding c\u1EE7a thanh cu\u1ED9n</p>\n </div>\n <div class=\"feature-item\">\n <h4>Hi\u1EC7u \u1EE9ng t\u01B0\u01A1ng t\u00E1c</h4>\n <p>Hover effects, auto-hide khi kh\u00F4ng s\u1EED d\u1EE5ng</p>\n </div>\n <div class=\"feature-item\">\n <h4>\u0110a h\u01B0\u1EDBng cu\u1ED9n</h4>\n <p>H\u1ED7 tr\u1EE3 c\u1EA3 cu\u1ED9n d\u1ECDc v\u00E0 ngang</p>\n </div>\n <div class=\"feature-item\">\n <h4>Event handling</h4>\n <p>Theo d\u00F5i c\u00E1c s\u1EF1 ki\u1EC7n scroll (top, bottom, scroll)</p>\n </div>\n <div class=\"feature-item\">\n <h4>Responsive</h4>\n <p>Ho\u1EA1t \u0111\u1ED9ng t\u1ED1t tr\u00EAn m\u1ECDi k\u00EDch th\u01B0\u1EDBc m\u00E0n h\u00ECnh</p>\n </div>\n <div class=\"feature-item\">\n <h4>T\u00EDch h\u1EE3p d\u1EC5 d\u00E0ng</h4>\n <p>C\u00F3 th\u1EC3 th\u00EAm v\u00E0o b\u1EA5t k\u1EF3 container n\u00E0o</p>\n </div>\n </div>\n </div>\n\n <div class=\"demo-api\">\n <h3>API Reference</h3>\n\n <div class=\"api-section\">\n <h4>Inputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Input</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>options</td>\n <td>IScrollOverlayOptions</td>\n <td>Tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh thanh cu\u1ED9n</td>\n </tr>\n <tr>\n <td>debugMode</td>\n <td>boolean</td>\n <td>B\u1EADt ch\u1EBF \u0111\u1ED9 debug</td>\n </tr>\n <tr>\n <td>ignoreInit</td>\n <td>boolean</td>\n <td>B\u1ECF qua kh\u1EDFi t\u1EA1o directive</td>\n </tr>\n <tr>\n <td>classContainer</td>\n <td>string</td>\n <td>Th\u00EAm class cho container b\u1ECDc ngo\u00E0i</td>\n </tr>\n <tr>\n <td>notShowScrollBarX</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n ngang</td>\n </tr>\n <tr>\n <td>notShowScrollBarY</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n d\u1ECDc</td>\n </tr>\n <tr>\n <td>elementCheckScrollX</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll X</td>\n </tr>\n <tr>\n <td>elementCheckScrollY</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll Y</td>\n </tr>\n <tr>\n <td>elementScroll</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED th\u1EF1c hi\u1EC7n scroll</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Outputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Output</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>outScroll</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll b\u1EA5t k\u1EF3</td>\n </tr>\n <tr>\n <td>outScrollX</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u ngang</td>\n </tr>\n <tr>\n <td>outScrollY</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u d\u1ECDc</td>\n </tr>\n <tr>\n <td>outScrollTop</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi \u0111\u1EA7u (top)</td>\n </tr>\n <tr>\n <td>outScrollBottom</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi cu\u1ED1i (bottom)</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Interface</h4>\n <div class=\"interface-description\">\n <p>Interface <code>IScrollOverlayOptions</code> \u0111\u1ECBnh ngh\u0129a c\u00E1c tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh cho scroll-overlay directive:\n </p>\n <pre><code>export interface IScrollOverlayOptions {{ '{' }}\n scrollbarWidth?: number; // Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)\n scrollbarColor?: string; // M\u00E0u n\u1EC1n track\n scrollbarHoverColor?: string; // M\u00E0u n\u1EC1n track khi hover\n scrollThumbColor?: string; // M\u00E0u thumb\n scrollThumbHoverColor?: string; // M\u00E0u thumb khi hover\n scrollbarPadding?: number; // Padding c\u1EE7a scrollbar\n scrollX?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X\n scrollXOpacity0?: boolean; // \u1EA8n track X khi kh\u00F4ng hover\n scrollY?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y\n scrollYOpacity0?: boolean; // \u1EA8n track Y khi kh\u00F4ng hover\n{{ '}' }}</code></pre>\n </div>\n\n <div class=\"interface-usage\">\n <h5>V\u00ED d\u1EE5 s\u1EED d\u1EE5ng:</h5>\n <pre><code>// C\u1EA5u h\u00ECnh c\u01A1 b\u1EA3n\nconst basicOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh n\u00E2ng cao v\u1EDBi hover effects\nconst advancedOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollbarHoverColor: '#e5e7eb',\n scrollThumbColor: '#3b82f6',\n scrollThumbHoverColor: '#2563eb',\n scrollbarPadding: 4,\n scrollYOpacity0: true\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh cho scroll ngang\nconst horizontalOptions: IScrollOverlayOptions = {{ '{' }}\n scrollX: 'scroll',\n scrollY: 'hidden',\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};</code></pre>\n </div>\n\n <div class=\"interface-notes\">\n <h5>Ghi ch\u00FA:</h5>\n <ul>\n <li>T\u1EA5t c\u1EA3 c\u00E1c thu\u1ED9c t\u00EDnh \u0111\u1EC1u l\u00E0 optional (c\u00F3 d\u1EA5u ?)</li>\n <li>N\u1EBFu kh\u00F4ng cung c\u1EA5p gi\u00E1 tr\u1ECB, directive s\u1EBD s\u1EED d\u1EE5ng gi\u00E1 tr\u1ECB m\u1EB7c \u0111\u1ECBnh</li>\n <li>C\u00F3 th\u1EC3 k\u1EBFt h\u1EE3p nhi\u1EC1u options \u0111\u1EC3 t\u1EA1o ra giao di\u1EC7n thanh cu\u1ED9n ph\u00F9 h\u1EE3p</li>\n <li>M\u00E0u s\u1EAFc c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng b\u1EA5t k\u1EF3 \u0111\u1ECBnh d\u1EA1ng CSS color n\u00E0o (hex, rgb, rgba, etc.)</li>\n <li>scrollX v\u00E0 scrollY ch\u1EC9 nh\u1EADn m\u1ED9t trong hai gi\u00E1 tr\u1ECB: 'hidden' ho\u1EB7c 'scroll'</li>\n </ul>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Options (IScrollOverlayOptions)</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Thu\u1ED9c t\u00EDnh</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>scrollbarWidth</td>\n <td>number</td>\n <td>Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)</td>\n </tr>\n <tr>\n <td>scrollbarColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track</td>\n </tr>\n <tr>\n <td>scrollbarHoverColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track khi hover</td>\n </tr>\n <tr>\n <td>scrollThumbColor</td>\n <td>string</td>\n <td>M\u00E0u thumb</td>\n </tr>\n <tr>\n <td>scrollThumbHoverColor</td>\n <td>string</td>\n <td>M\u00E0u thumb khi hover</td>\n </tr>\n <tr>\n <td>scrollbarPadding</td>\n <td>number</td>\n <td>Padding c\u1EE7a scrollbar</td>\n </tr>\n <tr>\n <td>scrollX</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X</td>\n </tr>\n <tr>\n <td>scrollXOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track X khi kh\u00F4ng hover</td>\n </tr>\n <tr>\n <td>scrollY</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y</td>\n </tr>\n <tr>\n <td>scrollYOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track Y khi kh\u00F4ng hover</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- Basic Demo -->\n <div class=\"demo-section\">\n <h3>1. Basic Usage</h3>\n <div class=\"demo-description\">\n <p>S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh c\u1EE7a scroll-overlay directive.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px;\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Custom Styling Demo -->\n <div class=\"demo-section\">\n <h3>2. Custom Styling</h3>\n <div class=\"demo-description\">\n <p>Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6',\n scrollbarPadding: 4\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"customStyleOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Auto Hide Demo -->\n <div class=\"demo-section\">\n <h3>3. Auto Hide on Hover</h3>\n <div class=\"demo-description\">\n <p>\u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover v\u00E0o container.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollYOpacity0: true,\n scrollbarColor: 'transparent',\n scrollThumbColor: '#9ca3af'\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"autoHideOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Horizontal Scroll Demo -->\n <div class=\"demo-section\">\n <h3>4. Horizontal Scroll</h3>\n <div class=\"demo-description\">\n <p>Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollX: 'scroll',\n scrollY: 'hidden'\n {{ '}' }}\"&gt;\n &lt;div style=\"white-space: nowrap;\"&gt;\n N\u1ED9i dung ngang d\u00E0i...\n &lt;/div&gt;\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"horizontalOptions()\"\n style=\"width: 300px; height: 100px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px; white-space: nowrap;\">\n {{ longHorizontalContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Event Handling Demo -->\n <div class=\"demo-section\">\n <h3>5. Event Handling</h3>\n <div class=\"demo-description\">\n <p>X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n <div class=\"event-log\">\n <p>Last Event: {{ lastEvent() }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.demo-container{padding:24px;font-family:system-ui,-apple-system,sans-serif;max-width:1200px;margin:0 auto}.demo-intro{margin-bottom:32px}.demo-intro h3{color:#333;margin-bottom:16px}.demo-intro ul{list-style:none;padding:0}.demo-intro ul li{margin-bottom:8px;padding-left:20px;position:relative}.demo-intro ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.demo-features{margin-bottom:32px}.demo-features h3{color:#333;margin-bottom:16px}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.feature-item{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.feature-item h4{color:#1e40af;margin:0 0 8px}.feature-item p{margin:0;color:#64748b}.demo-api{margin-bottom:48px}.demo-api h3{color:#333;margin-bottom:24px}.api-section{margin-bottom:32px}.api-section h4{color:#1e40af;margin-bottom:16px}.api-table{overflow-x:auto}.api-table table{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.api-table table th,.api-table table td{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0}.api-table table th{background:#f8fafc;font-weight:600;color:#1e40af}.api-table table td{color:#64748b}.api-table table td:first-child{font-family:Fira Code,monospace;color:#334155}.api-table table td:nth-child(2){font-family:Fira Code,monospace;color:#3b82f6}.api-table table tr:last-child td{border-bottom:none}.demo-section{margin-bottom:48px}.demo-section h3{color:#333;margin-bottom:16px}.demo-description{margin-bottom:16px}.demo-description p{color:#64748b;margin-bottom:12px}.demo-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.demo-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155}.demo-box{display:flex;gap:16px;align-items:flex-start}.event-log{padding:16px;background:#f5f5f5;border-radius:4px;min-width:200px}.event-log p{margin:0;font-size:14px;color:#666}.demo-notes{margin-top:48px;padding:24px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0}.demo-notes h3{color:#333;margin-bottom:16px}.demo-notes ul{list-style:none;padding:0;margin:0}.demo-notes ul li{color:#64748b;margin-bottom:12px;padding-left:24px;position:relative}.demo-notes ul li:before{content:\"\\2192\";position:absolute;left:0;color:#3b82f6}.demo-notes ul li:last-child{margin-bottom:0}.interface-description{margin-bottom:24px}.interface-description p{color:#64748b;margin-bottom:16px}.interface-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage{margin-bottom:24px}.interface-usage h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-usage pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-usage pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage pre code .comment{color:#64748b}.interface-notes{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.interface-notes h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-notes ul{list-style:none;padding:0;margin:0}.interface-notes ul li{color:#64748b;margin-bottom:8px;padding-left:20px;position:relative}.interface-notes ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.interface-notes ul li:last-child{margin-bottom:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }] });
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDemoComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'lib-scroll-overlay-demo', standalone: true, imports: [CommonModule, LibsUiComponentsScrollOverlayDirective], template: "<div class=\"demo-container\">\n <h2>Scroll Overlay Demo</h2>\n\n <div class=\"demo-intro\">\n <h3>Gi\u1EDBi thi\u1EC7u</h3>\n <p>Demo n\u00E0y minh h\u1ECDa c\u00E1c t\u00EDnh n\u0103ng v\u00E0 c\u00E1ch s\u1EED d\u1EE5ng c\u1EE7a directive `scroll-overlay`. Demo bao g\u1ED3m 5 v\u00ED d\u1EE5 ch\u00EDnh:</p>\n <ul>\n <li><strong>Basic Usage</strong>: S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh</li>\n <li><strong>Custom Styling</strong>: Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n</li>\n <li><strong>Auto Hide</strong>: \u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover</li>\n <li><strong>Horizontal Scroll</strong>: Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i</li>\n <li><strong>Event Handling</strong>: X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll</li>\n </ul>\n </div>\n\n <div class=\"demo-features\">\n <h3>T\u00EDnh n\u0103ng Demo</h3>\n <div class=\"features-grid\">\n <div class=\"feature-item\">\n <h4>Tu\u1EF3 bi\u1EBFn giao di\u1EC7n</h4>\n <p>Thay \u0111\u1ED5i m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc, padding c\u1EE7a thanh cu\u1ED9n</p>\n </div>\n <div class=\"feature-item\">\n <h4>Hi\u1EC7u \u1EE9ng t\u01B0\u01A1ng t\u00E1c</h4>\n <p>Hover effects, auto-hide khi kh\u00F4ng s\u1EED d\u1EE5ng</p>\n </div>\n <div class=\"feature-item\">\n <h4>\u0110a h\u01B0\u1EDBng cu\u1ED9n</h4>\n <p>H\u1ED7 tr\u1EE3 c\u1EA3 cu\u1ED9n d\u1ECDc v\u00E0 ngang</p>\n </div>\n <div class=\"feature-item\">\n <h4>Event handling</h4>\n <p>Theo d\u00F5i c\u00E1c s\u1EF1 ki\u1EC7n scroll (top, bottom, scroll)</p>\n </div>\n <div class=\"feature-item\">\n <h4>Responsive</h4>\n <p>Ho\u1EA1t \u0111\u1ED9ng t\u1ED1t tr\u00EAn m\u1ECDi k\u00EDch th\u01B0\u1EDBc m\u00E0n h\u00ECnh</p>\n </div>\n <div class=\"feature-item\">\n <h4>T\u00EDch h\u1EE3p d\u1EC5 d\u00E0ng</h4>\n <p>C\u00F3 th\u1EC3 th\u00EAm v\u00E0o b\u1EA5t k\u1EF3 container n\u00E0o</p>\n </div>\n </div>\n </div>\n\n <div class=\"demo-api\">\n <h3>API Reference</h3>\n\n <div class=\"api-section\">\n <h4>Inputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Input</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>options</td>\n <td>IScrollOverlayOptions</td>\n <td>Tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh thanh cu\u1ED9n</td>\n </tr>\n <tr>\n <td>debugMode</td>\n <td>boolean</td>\n <td>B\u1EADt ch\u1EBF \u0111\u1ED9 debug</td>\n </tr>\n <tr>\n <td>ignoreInit</td>\n <td>boolean</td>\n <td>B\u1ECF qua kh\u1EDFi t\u1EA1o directive</td>\n </tr>\n <tr>\n <td>classContainer</td>\n <td>string</td>\n <td>Th\u00EAm class cho container b\u1ECDc ngo\u00E0i</td>\n </tr>\n <tr>\n <td>notShowScrollBarX</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n ngang</td>\n </tr>\n <tr>\n <td>notShowScrollBarY</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n d\u1ECDc</td>\n </tr>\n <tr>\n <td>elementCheckScrollX</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll X</td>\n </tr>\n <tr>\n <td>elementCheckScrollY</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll Y</td>\n </tr>\n <tr>\n <td>elementScroll</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED th\u1EF1c hi\u1EC7n scroll</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Outputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Output</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>outScroll</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll b\u1EA5t k\u1EF3</td>\n </tr>\n <tr>\n <td>outScrollX</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u ngang</td>\n </tr>\n <tr>\n <td>outScrollY</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u d\u1ECDc</td>\n </tr>\n <tr>\n <td>outScrollTop</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi \u0111\u1EA7u (top)</td>\n </tr>\n <tr>\n <td>outScrollBottom</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi cu\u1ED1i (bottom)</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Interface</h4>\n <div class=\"interface-description\">\n <p>Interface <code>IScrollOverlayOptions</code> \u0111\u1ECBnh ngh\u0129a c\u00E1c tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh cho scroll-overlay directive:\n </p>\n <pre><code>export interface IScrollOverlayOptions {{ '{' }}\n scrollbarWidth?: number; // Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)\n scrollbarColor?: string; // M\u00E0u n\u1EC1n track\n scrollbarHoverColor?: string; // M\u00E0u n\u1EC1n track khi hover\n scrollThumbColor?: string; // M\u00E0u thumb\n scrollThumbHoverColor?: string; // M\u00E0u thumb khi hover\n scrollbarPadding?: number; // Padding c\u1EE7a scrollbar\n scrollX?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X\n scrollXOpacity0?: boolean; // \u1EA8n track X khi kh\u00F4ng hover\n scrollY?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y\n scrollYOpacity0?: boolean; // \u1EA8n track Y khi kh\u00F4ng hover\n{{ '}' }}</code></pre>\n </div>\n\n <div class=\"interface-usage\">\n <h5>V\u00ED d\u1EE5 s\u1EED d\u1EE5ng:</h5>\n <pre><code>// C\u1EA5u h\u00ECnh c\u01A1 b\u1EA3n\nconst basicOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh n\u00E2ng cao v\u1EDBi hover effects\nconst advancedOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollbarHoverColor: '#e5e7eb',\n scrollThumbColor: '#3b82f6',\n scrollThumbHoverColor: '#2563eb',\n scrollbarPadding: 4,\n scrollYOpacity0: true\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh cho scroll ngang\nconst horizontalOptions: IScrollOverlayOptions = {{ '{' }}\n scrollX: 'scroll',\n scrollY: 'hidden',\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};</code></pre>\n </div>\n\n <div class=\"interface-notes\">\n <h5>Ghi ch\u00FA:</h5>\n <ul>\n <li>T\u1EA5t c\u1EA3 c\u00E1c thu\u1ED9c t\u00EDnh \u0111\u1EC1u l\u00E0 optional (c\u00F3 d\u1EA5u ?)</li>\n <li>N\u1EBFu kh\u00F4ng cung c\u1EA5p gi\u00E1 tr\u1ECB, directive s\u1EBD s\u1EED d\u1EE5ng gi\u00E1 tr\u1ECB m\u1EB7c \u0111\u1ECBnh</li>\n <li>C\u00F3 th\u1EC3 k\u1EBFt h\u1EE3p nhi\u1EC1u options \u0111\u1EC3 t\u1EA1o ra giao di\u1EC7n thanh cu\u1ED9n ph\u00F9 h\u1EE3p</li>\n <li>M\u00E0u s\u1EAFc c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng b\u1EA5t k\u1EF3 \u0111\u1ECBnh d\u1EA1ng CSS color n\u00E0o (hex, rgb, rgba, etc.)</li>\n <li>scrollX v\u00E0 scrollY ch\u1EC9 nh\u1EADn m\u1ED9t trong hai gi\u00E1 tr\u1ECB: 'hidden' ho\u1EB7c 'scroll'</li>\n </ul>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Options (IScrollOverlayOptions)</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Thu\u1ED9c t\u00EDnh</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>scrollbarWidth</td>\n <td>number</td>\n <td>Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)</td>\n </tr>\n <tr>\n <td>scrollbarColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track</td>\n </tr>\n <tr>\n <td>scrollbarHoverColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track khi hover</td>\n </tr>\n <tr>\n <td>scrollThumbColor</td>\n <td>string</td>\n <td>M\u00E0u thumb</td>\n </tr>\n <tr>\n <td>scrollThumbHoverColor</td>\n <td>string</td>\n <td>M\u00E0u thumb khi hover</td>\n </tr>\n <tr>\n <td>scrollbarPadding</td>\n <td>number</td>\n <td>Padding c\u1EE7a scrollbar</td>\n </tr>\n <tr>\n <td>scrollX</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X</td>\n </tr>\n <tr>\n <td>scrollXOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track X khi kh\u00F4ng hover</td>\n </tr>\n <tr>\n <td>scrollY</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y</td>\n </tr>\n <tr>\n <td>scrollYOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track Y khi kh\u00F4ng hover</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- Basic Demo -->\n <div class=\"demo-section\">\n <h3>1. Basic Usage</h3>\n <div class=\"demo-description\">\n <p>S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh c\u1EE7a scroll-overlay directive.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px;\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Custom Styling Demo -->\n <div class=\"demo-section\">\n <h3>2. Custom Styling</h3>\n <div class=\"demo-description\">\n <p>Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6',\n scrollbarPadding: 4\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"customStyleOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Auto Hide Demo -->\n <div class=\"demo-section\">\n <h3>3. Auto Hide on Hover</h3>\n <div class=\"demo-description\">\n <p>\u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover v\u00E0o container.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollYOpacity0: true,\n scrollbarColor: 'transparent',\n scrollThumbColor: '#9ca3af'\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"autoHideOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Horizontal Scroll Demo -->\n <div class=\"demo-section\">\n <h3>4. Horizontal Scroll</h3>\n <div class=\"demo-description\">\n <p>Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollX: 'scroll',\n scrollY: 'hidden'\n {{ '}' }}\"&gt;\n &lt;div style=\"white-space: nowrap;\"&gt;\n N\u1ED9i dung ngang d\u00E0i...\n &lt;/div&gt;\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"horizontalOptions()\"\n style=\"width: 300px; height: 100px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px; white-space: nowrap;\">\n {{ longHorizontalContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Event Handling Demo -->\n <div class=\"demo-section\">\n <h3>5. Event Handling</h3>\n <div class=\"demo-description\">\n <p>X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n <div class=\"event-log\">\n <p>Last Event: {{ lastEvent() }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.demo-container{padding:24px;font-family:system-ui,-apple-system,sans-serif;max-width:1200px;margin:0 auto}.demo-intro{margin-bottom:32px}.demo-intro h3{color:#333;margin-bottom:16px}.demo-intro ul{list-style:none;padding:0}.demo-intro ul li{margin-bottom:8px;padding-left:20px;position:relative}.demo-intro ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.demo-features{margin-bottom:32px}.demo-features h3{color:#333;margin-bottom:16px}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.feature-item{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.feature-item h4{color:#1e40af;margin:0 0 8px}.feature-item p{margin:0;color:#64748b}.demo-api{margin-bottom:48px}.demo-api h3{color:#333;margin-bottom:24px}.api-section{margin-bottom:32px}.api-section h4{color:#1e40af;margin-bottom:16px}.api-table{overflow-x:auto}.api-table table{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.api-table table th,.api-table table td{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0}.api-table table th{background:#f8fafc;font-weight:600;color:#1e40af}.api-table table td{color:#64748b}.api-table table td:first-child{font-family:Fira Code,monospace;color:#334155}.api-table table td:nth-child(2){font-family:Fira Code,monospace;color:#3b82f6}.api-table table tr:last-child td{border-bottom:none}.demo-section{margin-bottom:48px}.demo-section h3{color:#333;margin-bottom:16px}.demo-description{margin-bottom:16px}.demo-description p{color:#64748b;margin-bottom:12px}.demo-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.demo-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155}.demo-box{display:flex;gap:16px;align-items:flex-start}.event-log{padding:16px;background:#f5f5f5;border-radius:4px;min-width:200px}.event-log p{margin:0;font-size:14px;color:#666}.demo-notes{margin-top:48px;padding:24px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0}.demo-notes h3{color:#333;margin-bottom:16px}.demo-notes ul{list-style:none;padding:0;margin:0}.demo-notes ul li{color:#64748b;margin-bottom:12px;padding-left:24px;position:relative}.demo-notes ul li:before{content:\"\\2192\";position:absolute;left:0;color:#3b82f6}.demo-notes ul li:last-child{margin-bottom:0}.interface-description{margin-bottom:24px}.interface-description p{color:#64748b;margin-bottom:16px}.interface-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage{margin-bottom:24px}.interface-usage h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-usage pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-usage pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage pre code .comment{color:#64748b}.interface-notes{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.interface-notes h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-notes ul{list-style:none;padding:0;margin:0}.interface-notes ul li{color:#64748b;margin-bottom:8px;padding-left:20px;position:relative}.interface-notes ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.interface-notes ul li:last-child{margin-bottom:0}\n"] }]
51
+ }] });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9zY3JvbGwtb3ZlcmxheS9zcmMvZGVtby9zY3JvbGwtb3ZlcmxheS5kZW1vLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9kZW1vL3Njcm9sbC1vdmVybGF5LmRlbW8uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBVXJGLE1BQU0sT0FBTywwQ0FBMEM7SUFDckQsZUFBZTtJQUNmLFdBQVcsR0FBRyxNQUFNLENBQUM7O21YQUU0VixDQUFDLENBQUM7SUFFblgscUJBQXFCLEdBQUcsTUFBTSxDQUFDLDhQQUE4UCxDQUFDLENBQUM7SUFFL1IsZUFBZTtJQUNmLGtCQUFrQixHQUFHLE1BQU0sQ0FBd0I7UUFDakQsY0FBYyxFQUFFLEVBQUU7UUFDbEIsY0FBYyxFQUFFLFNBQVM7UUFDekIsbUJBQW1CLEVBQUUsU0FBUztRQUM5QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLHFCQUFxQixFQUFFLFNBQVM7UUFDaEMsZ0JBQWdCLEVBQUUsQ0FBQztLQUNwQixDQUFDLENBQUM7SUFFSCxlQUFlLEdBQUcsTUFBTSxDQUF3QjtRQUM5QyxlQUFlLEVBQUUsSUFBSTtRQUNyQixjQUFjLEVBQUUsQ0FBQztRQUNqQixjQUFjLEVBQUUsYUFBYTtRQUM3QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLHFCQUFxQixFQUFFLFNBQVM7S0FDakMsQ0FBQyxDQUFDO0lBRUgsaUJBQWlCLEdBQUcsTUFBTSxDQUF3QjtRQUNoRCxPQUFPLEVBQUUsUUFBUTtRQUNqQixPQUFPLEVBQUUsUUFBUTtRQUNqQixjQUFjLEVBQUUsQ0FBQztRQUNqQixjQUFjLEVBQUUsU0FBUztRQUN6QixnQkFBZ0IsRUFBRSxTQUFTO0tBQzVCLENBQUMsQ0FBQztJQUVILGlCQUFpQjtJQUNqQixTQUFTLEdBQUcsTUFBTSxDQUFTLGVBQWUsQ0FBQyxDQUFDO0lBRTVDLFFBQVEsQ0FBQyxLQUFZO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFZO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBWTtRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7d0dBL0NVLDBDQUEwQzs0RkFBMUMsMENBQTBDLG1GQ1p2RCw4M2NBc1pBLHFpSEQ5WVksWUFBWSwrQkFBRSxzQ0FBc0M7OzRGQUluRCwwQ0FBMEM7a0JBUHRELFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVNjcm9sbE92ZXJsYXlPcHRpb25zIH0gZnJvbSAnLi4vc2Nyb2xsLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zY3JvbGwtb3ZlcmxheS1kZW1vJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2Nyb2xsLW92ZXJsYXkuZGVtby5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2Nyb2xsLW92ZXJsYXkuZGVtby5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEZW1vQ29tcG9uZW50IHtcbiAgLy8gRGVtbyBjb250ZW50XG4gIGxvbmdDb250ZW50ID0gc2lnbmFsKGBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBTZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uXG5cblNlZCB1dCBwZXJzcGljaWF0aXMgdW5kZSBvbW5pcyBpc3RlIG5hdHVzIGVycm9yIHNpdCB2b2x1cHRhdGVtIGFjY3VzYW50aXVtIGRvbG9yZW1xdWUgbGF1ZGFudGl1bSwgdG90YW0gcmVtIGFwZXJpYW0sIGVhcXVlIGlwc2EgcXVhZSBhYiBpbGxvIGludmVudG9yZSB2ZXJpdGF0aXMgZXQgcXVhc2kgYXJjaGl0ZWN0byBiZWF0YWUgdml0YWUgZGljdGEgc3VudCBleHBsaWNhYm8uIE5lbW8gZW5pbSBpcHNhbSB2b2x1cHRhdGVtIHF1aWEgdm9sdXB0YXMgc2l0IGFzcGVybmF0dXIgYXV0IG9kaXQgYXV0IGZ1Z2l0LCBzZWQgcXVpYSBjb25zZXF1dW50dXIgbWFnbmkgZG9sb3JlcyBlb3MgcXVpIHJhdGlvbmUgdm9sdXB0YXRlbSBzZXF1aSBuZXNjaXVudC5gKTtcblxuICBsb25nSG9yaXpvbnRhbENvbnRlbnQgPSBzaWduYWwoYFRoaXMgaXMgYSB2ZXJ5IGxvbmcgaG9yaXpvbnRhbCBjb250ZW50IHRoYXQgd2lsbCByZXF1aXJlIHNjcm9sbGluZyB0byBzZWUgYWxsIG9mIGl0LiBJdCBjb250YWlucyBtdWx0aXBsZSBzZW50ZW5jZXMgYW5kIHdvcmRzIHRoYXQgZXh0ZW5kIGJleW9uZCB0aGUgY29udGFpbmVyIHdpZHRoLiBUaGlzIGRlbW9uc3RyYXRlcyB0aGUgaG9yaXpvbnRhbCBzY3JvbGxpbmcgY2FwYWJpbGl0eSBvZiB0aGUgc2Nyb2xsLW92ZXJsYXkgZGlyZWN0aXZlLmApO1xuXG4gIC8vIERlbW8gb3B0aW9uc1xuICBjdXN0b21TdHlsZU9wdGlvbnMgPSBzaWduYWw8SVNjcm9sbE92ZXJsYXlPcHRpb25zPih7XG4gICAgc2Nyb2xsYmFyV2lkdGg6IDEyLFxuICAgIHNjcm9sbGJhckNvbG9yOiAnI2YzZjRmNicsXG4gICAgc2Nyb2xsYmFySG92ZXJDb2xvcjogJyNlNWU3ZWInLFxuICAgIHNjcm9sbFRodW1iQ29sb3I6ICcjM2I4MmY2JyxcbiAgICBzY3JvbGxUaHVtYkhvdmVyQ29sb3I6ICcjMjU2M2ViJyxcbiAgICBzY3JvbGxiYXJQYWRkaW5nOiA0XG4gIH0pO1xuXG4gIGF1dG9IaWRlT3B0aW9ucyA9IHNpZ25hbDxJU2Nyb2xsT3ZlcmxheU9wdGlvbnM+KHtcbiAgICBzY3JvbGxZT3BhY2l0eTA6IHRydWUsXG4gICAgc2Nyb2xsYmFyV2lkdGg6IDgsXG4gICAgc2Nyb2xsYmFyQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgc2Nyb2xsVGh1bWJDb2xvcjogJyM5Y2EzYWYnLFxuICAgIHNjcm9sbFRodW1iSG92ZXJDb2xvcjogJyM2YjcyODAnXG4gIH0pO1xuXG4gIGhvcml6b250YWxPcHRpb25zID0gc2lnbmFsPElTY3JvbGxPdmVybGF5T3B0aW9ucz4oe1xuICAgIHNjcm9sbFg6ICdzY3JvbGwnLFxuICAgIHNjcm9sbFk6ICdoaWRkZW4nLFxuICAgIHNjcm9sbGJhcldpZHRoOiA4LFxuICAgIHNjcm9sbGJhckNvbG9yOiAnI2YzZjRmNicsXG4gICAgc2Nyb2xsVGh1bWJDb2xvcjogJyMzYjgyZjYnXG4gIH0pO1xuXG4gIC8vIEV2ZW50IGhhbmRsaW5nXG4gIGxhc3RFdmVudCA9IHNpZ25hbDxzdHJpbmc+KCdObyBldmVudHMgeWV0Jyk7XG5cbiAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5sYXN0RXZlbnQuc2V0KCdTY3JvbGwgZXZlbnQgZmlyZWQnKTtcbiAgfVxuXG4gIG9uU2Nyb2xsVG9wKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMubGFzdEV2ZW50LnNldCgnUmVhY2hlZCB0b3AnKTtcbiAgfVxuXG4gIG9uU2Nyb2xsQm90dG9tKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMubGFzdEV2ZW50LnNldCgnUmVhY2hlZCBib3R0b20nKTtcbiAgfVxufSAiLCI8ZGl2IGNsYXNzPVwiZGVtby1jb250YWluZXJcIj5cbiAgPGgyPlNjcm9sbCBPdmVybGF5IERlbW88L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJkZW1vLWludHJvXCI+XG4gICAgPGgzPkdp4bubaSB0aGnhu4d1PC9oMz5cbiAgICA8cD5EZW1vIG7DoHkgbWluaCBo4buNYSBjw6FjIHTDrW5oIG7Eg25nIHbDoCBjw6FjaCBz4butIGThu6VuZyBj4bunYSBkaXJlY3RpdmUgYHNjcm9sbC1vdmVybGF5YC4gRGVtbyBiYW8gZ+G7k20gNSB2w60gZOG7pSBjaMOtbmg6PC9wPlxuICAgIDx1bD5cbiAgICAgIDxsaT48c3Ryb25nPkJhc2ljIFVzYWdlPC9zdHJvbmc+OiBT4butIGThu6VuZyBjxqEgYuG6o24gduG7m2kgY+G6pXUgaMOsbmggbeG6t2MgxJHhu4tuaDwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5DdXN0b20gU3R5bGluZzwvc3Ryb25nPjogVHXhu7MgY2jhu4luaCBtw6B1IHPhuq9jLCBrw61jaCB0aMaw4bubYyB2w6AgcGFkZGluZyBj4bunYSB0aGFuaCBjdeG7mW48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QXV0byBIaWRlPC9zdHJvbmc+OiDhuqhuL2hp4buHbiB0aGFuaCBjdeG7mW4ga2hpIGhvdmVyPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkhvcml6b250YWwgU2Nyb2xsPC9zdHJvbmc+OiBDdeG7mW4gbmdhbmcgduG7m2kgbuG7mWkgZHVuZyBkw6BpPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkV2ZW50IEhhbmRsaW5nPC9zdHJvbmc+OiBY4butIGzDvSBjw6FjIHPhu7Ega2nhu4duIHNjcm9sbDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImRlbW8tZmVhdHVyZXNcIj5cbiAgICA8aDM+VMOtbmggbsSDbmcgRGVtbzwvaDM+XG4gICAgPGRpdiBjbGFzcz1cImZlYXR1cmVzLWdyaWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmZWF0dXJlLWl0ZW1cIj5cbiAgICAgICAgPGg0PlR14buzIGJp4bq/biBnaWFvIGRp4buHbjwvaDQ+XG4gICAgICAgIDxwPlRoYXkgxJHhu5VpIG3DoHUgc+G6r2MsIGvDrWNoIHRoxrDhu5tjLCBwYWRkaW5nIGPhu6dhIHRoYW5oIGN14buZbjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZlYXR1cmUtaXRlbVwiPlxuICAgICAgICA8aDQ+SGnhu4d1IOG7qW5nIHTGsMahbmcgdMOhYzwvaDQ+XG4gICAgICAgIDxwPkhvdmVyIGVmZmVjdHMsIGF1dG8taGlkZSBraGkga2jDtG5nIHPhu60gZOG7pW5nPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmVhdHVyZS1pdGVtXCI+XG4gICAgICAgIDxoND7EkGEgaMaw4bubbmcgY3Xhu5luPC9oND5cbiAgICAgICAgPHA+SOG7lyB0cuG7oyBj4bqjIGN14buZbiBk4buNYyB2w6Agbmdhbmc8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmZWF0dXJlLWl0ZW1cIj5cbiAgICAgICAgPGg0PkV2ZW50IGhhbmRsaW5nPC9oND5cbiAgICAgICAgPHA+VGhlbyBkw7VpIGPDoWMgc+G7sSBraeG7h24gc2Nyb2xsICh0b3AsIGJvdHRvbSwgc2Nyb2xsKTwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZlYXR1cmUtaXRlbVwiPlxuICAgICAgICA8aDQ+UmVzcG9uc2l2ZTwvaDQ+XG4gICAgICAgIDxwPkhv4bqhdCDEkeG7mW5nIHThu5F0IHRyw6puIG3hu41pIGvDrWNoIHRoxrDhu5tjIG3DoG4gaMOsbmg8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmZWF0dXJlLWl0ZW1cIj5cbiAgICAgICAgPGg0PlTDrWNoIGjhu6NwIGThu4UgZMOgbmc8L2g0PlxuICAgICAgICA8cD5Dw7MgdGjhu4MgdGjDqm0gdsOgbyBi4bqldCBr4buzIGNvbnRhaW5lciBuw6BvPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkZW1vLWFwaVwiPlxuICAgIDxoMz5BUEkgUmVmZXJlbmNlPC9oMz5cblxuICAgIDxkaXYgY2xhc3M9XCJhcGktc2VjdGlvblwiPlxuICAgICAgPGg0PklucHV0czwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXBpLXRhYmxlXCI+XG4gICAgICAgIDx0YWJsZT5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aD5JbnB1dDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgPHRoPk3DtCB04bqjPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5vcHRpb25zPC90ZD5cbiAgICAgICAgICAgICAgPHRkPklTY3JvbGxPdmVybGF5T3B0aW9uczwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5UdeG7syBjaOG7jW4gY+G6pXUgaMOsbmggdGhhbmggY3Xhu5luPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5kZWJ1Z01vZGU8L3RkPlxuICAgICAgICAgICAgICA8dGQ+Ym9vbGVhbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5C4bqtdCBjaOG6vyDEkeG7mSBkZWJ1ZzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+aWdub3JlSW5pdDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5ib29sZWFuPC90ZD5cbiAgICAgICAgICAgICAgPHRkPkLhu48gcXVhIGto4bufaSB04bqhbyBkaXJlY3RpdmU8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPmNsYXNzQ29udGFpbmVyPC90ZD5cbiAgICAgICAgICAgICAgPHRkPnN0cmluZzwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5UaMOqbSBjbGFzcyBjaG8gY29udGFpbmVyIGLhu41jIG5nb8OgaTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+bm90U2hvd1Njcm9sbEJhclg8L3RkPlxuICAgICAgICAgICAgICA8dGQ+Ym9vbGVhbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5LaMO0bmcgaGnhu4NuIHRo4buLIHRoYW5oIGN14buZbiBuZ2FuZzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+bm90U2hvd1Njcm9sbEJhclk8L3RkPlxuICAgICAgICAgICAgICA8dGQ+Ym9vbGVhbjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5LaMO0bmcgaGnhu4NuIHRo4buLIHRoYW5oIGN14buZbiBk4buNYzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+ZWxlbWVudENoZWNrU2Nyb2xsWDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5IVE1MRWxlbWVudDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5QaOG6p24gdOG7rSBkw7luZyDEkeG7gyBraeG7g20gdHJhIHNjcm9sbCBYPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5lbGVtZW50Q2hlY2tTY3JvbGxZPC90ZD5cbiAgICAgICAgICAgICAgPHRkPkhUTUxFbGVtZW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkPlBo4bqnbiB04butIGTDuW5nIMSR4buDIGtp4buDbSB0cmEgc2Nyb2xsIFk8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPmVsZW1lbnRTY3JvbGw8L3RkPlxuICAgICAgICAgICAgICA8dGQ+SFRNTEVsZW1lbnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQ+UGjhuqduIHThu60gdGjhu7FjIGhp4buHbiBzY3JvbGw8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYXBpLXNlY3Rpb25cIj5cbiAgICAgIDxoND5PdXRwdXRzPC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcGktdGFibGVcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPk91dHB1dDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgPHRoPk3DtCB04bqjPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5vdXRTY3JvbGw8L3RkPlxuICAgICAgICAgICAgICA8dGQ+RXZlbnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQ+QuG6r24gcmEga2hpIHNjcm9sbCBi4bqldCBr4buzPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5vdXRTY3JvbGxYPC90ZD5cbiAgICAgICAgICAgICAgPHRkPkV2ZW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkPkLhuq9uIHJhIGtoaSBzY3JvbGwgdGhlbyBjaGnhu4F1IG5nYW5nPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5vdXRTY3JvbGxZPC90ZD5cbiAgICAgICAgICAgICAgPHRkPkV2ZW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkPkLhuq9uIHJhIGtoaSBzY3JvbGwgdGhlbyBjaGnhu4F1IGThu41jPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5vdXRTY3JvbGxUb3A8L3RkPlxuICAgICAgICAgICAgICA8dGQ+RXZlbnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQ+QuG6r24gcmEga2hpIHNjcm9sbCB04bubaSDEkeG6p3UgKHRvcCk8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPm91dFNjcm9sbEJvdHRvbTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5FdmVudDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5C4bqvbiByYSBraGkgc2Nyb2xsIHThu5tpIGN14buRaSAoYm90dG9tKTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJhcGktc2VjdGlvblwiPlxuICAgICAgPGg0PkludGVyZmFjZTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJmYWNlLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgIDxwPkludGVyZmFjZSA8Y29kZT5JU2Nyb2xsT3ZlcmxheU9wdGlvbnM8L2NvZGU+IMSR4buLbmggbmdoxKlhIGPDoWMgdHXhu7MgY2jhu41uIGPhuqV1IGjDrG5oIGNobyBzY3JvbGwtb3ZlcmxheSBkaXJlY3RpdmU6XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHByZT48Y29kZT5leHBvcnQgaW50ZXJmYWNlIElTY3JvbGxPdmVybGF5T3B0aW9ucyB7eyAneycgfX1cbiAgc2Nyb2xsYmFyV2lkdGg/OiBudW1iZXI7ICAgICAgICAvLyBDaGnhu4F1IHLhu5luZyB0aGFuaCBjdeG7mW4gKHB4KVxuICBzY3JvbGxiYXJDb2xvcj86IHN0cmluZzsgICAgICAgIC8vIE3DoHUgbuG7gW4gdHJhY2tcbiAgc2Nyb2xsYmFySG92ZXJDb2xvcj86IHN0cmluZzsgICAvLyBNw6B1IG7hu4FuIHRyYWNrIGtoaSBob3ZlclxuICBzY3JvbGxUaHVtYkNvbG9yPzogc3RyaW5nOyAgICAgIC8vIE3DoHUgdGh1bWJcbiAgc2Nyb2xsVGh1bWJIb3ZlckNvbG9yPzogc3RyaW5nOyAvLyBNw6B1IHRodW1iIGtoaSBob3ZlclxuICBzY3JvbGxiYXJQYWRkaW5nPzogbnVtYmVyOyAgICAgIC8vIFBhZGRpbmcgY+G7p2Egc2Nyb2xsYmFyXG4gIHNjcm9sbFg/OiAnaGlkZGVuJyB8ICdzY3JvbGwnOyAgLy8gS2nhu4N1IGhp4buDbiB0aOG7iyBzY3JvbGwgWFxuICBzY3JvbGxYT3BhY2l0eTA/OiBib29sZWFuOyAgICAgIC8vIOG6qG4gdHJhY2sgWCBraGkga2jDtG5nIGhvdmVyXG4gIHNjcm9sbFk/OiAnaGlkZGVuJyB8ICdzY3JvbGwnOyAgLy8gS2nhu4N1IGhp4buDbiB0aOG7iyBzY3JvbGwgWVxuICBzY3JvbGxZT3BhY2l0eTA/OiBib29sZWFuOyAgICAgIC8vIOG6qG4gdHJhY2sgWSBraGkga2jDtG5nIGhvdmVyXG57eyAnfScgfX08L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImludGVyZmFjZS11c2FnZVwiPlxuICAgICAgICA8aDU+VsOtIGThu6Ugc+G7rSBk4bulbmc6PC9oNT5cbiAgICAgICAgPHByZT48Y29kZT4vLyBD4bqldSBow6xuaCBjxqEgYuG6o25cbmNvbnN0IGJhc2ljT3B0aW9uczogSVNjcm9sbE92ZXJsYXlPcHRpb25zID0ge3sgJ3snIH19XG4gIHNjcm9sbGJhcldpZHRoOiA4LFxuICBzY3JvbGxiYXJDb2xvcjogJyNmM2Y0ZjYnLFxuICBzY3JvbGxUaHVtYkNvbG9yOiAnIzNiODJmNidcbnt7ICd9JyB9fTtcblxuLy8gQ+G6pXUgaMOsbmggbsOibmcgY2FvIHbhu5tpIGhvdmVyIGVmZmVjdHNcbmNvbnN0IGFkdmFuY2VkT3B0aW9uczogSVNjcm9sbE92ZXJsYXlPcHRpb25zID0ge3sgJ3snIH19XG4gIHNjcm9sbGJhcldpZHRoOiAxMixcbiAgc2Nyb2xsYmFyQ29sb3I6ICcjZjNmNGY2JyxcbiAgc2Nyb2xsYmFySG92ZXJDb2xvcjogJyNlNWU3ZWInLFxuICBzY3JvbGxUaHVtYkNvbG9yOiAnIzNiODJmNicsXG4gIHNjcm9sbFRodW1iSG92ZXJDb2xvcjogJyMyNTYzZWInLFxuICBzY3JvbGxiYXJQYWRkaW5nOiA0LFxuICBzY3JvbGxZT3BhY2l0eTA6IHRydWVcbnt7ICd9JyB9fTtcblxuLy8gQ+G6pXUgaMOsbmggY2hvIHNjcm9sbCBuZ2FuZ1xuY29uc3QgaG9yaXpvbnRhbE9wdGlvbnM6IElTY3JvbGxPdmVybGF5T3B0aW9ucyA9IHt7ICd7JyB9fVxuICBzY3JvbGxYOiAnc2Nyb2xsJyxcbiAgc2Nyb2xsWTogJ2hpZGRlbicsXG4gIHNjcm9sbGJhcldpZHRoOiA4LFxuICBzY3JvbGxiYXJDb2xvcjogJyNmM2Y0ZjYnLFxuICBzY3JvbGxUaHVtYkNvbG9yOiAnIzNiODJmNidcbnt7ICd9JyB9fTs8L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImludGVyZmFjZS1ub3Rlc1wiPlxuICAgICAgICA8aDU+R2hpIGNow7o6PC9oNT5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5U4bqldCBj4bqjIGPDoWMgdGh14buZYyB0w61uaCDEkeG7gXUgbMOgIG9wdGlvbmFsIChjw7MgZOG6pXUgPyk8L2xpPlxuICAgICAgICAgIDxsaT5O4bq/dSBraMO0bmcgY3VuZyBj4bqlcCBnacOhIHRy4buLLCBkaXJlY3RpdmUgc+G6vSBz4butIGThu6VuZyBnacOhIHRy4buLIG3hurdjIMSR4buLbmg8L2xpPlxuICAgICAgICAgIDxsaT5Dw7MgdGjhu4Mga+G6v3QgaOG7o3Agbmhp4buBdSBvcHRpb25zIMSR4buDIHThuqFvIHJhIGdpYW8gZGnhu4duIHRoYW5oIGN14buZbiBwaMO5IGjhu6NwPC9saT5cbiAgICAgICAgICA8bGk+TcOgdSBz4bqvYyBjw7MgdGjhu4Mgc+G7rSBk4bulbmcgYuG6pXQga+G7syDEkeG7i25oIGThuqFuZyBDU1MgY29sb3IgbsOgbyAoaGV4LCByZ2IsIHJnYmEsIGV0Yy4pPC9saT5cbiAgICAgICAgICA8bGk+c2Nyb2xsWCB2w6Agc2Nyb2xsWSBjaOG7iSBuaOG6rW4gbeG7mXQgdHJvbmcgaGFpIGdpw6EgdHLhu4s6ICdoaWRkZW4nIGhv4bq3YyAnc2Nyb2xsJzwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJhcGktc2VjdGlvblwiPlxuICAgICAgPGg0Pk9wdGlvbnMgKElTY3JvbGxPdmVybGF5T3B0aW9ucyk8L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cImFwaS10YWJsZVwiPlxuICAgICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGg+VGh14buZYyB0w61uaDwvdGg+XG4gICAgICAgICAgICAgIDx0aD5UeXBlPC90aD5cbiAgICAgICAgICAgICAgPHRoPk3DtCB04bqjPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5zY3JvbGxiYXJXaWR0aDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5udW1iZXI8L3RkPlxuICAgICAgICAgICAgICA8dGQ+Q2hp4buBdSBy4buZbmcgdGhhbmggY3Xhu5luIChweCk8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPnNjcm9sbGJhckNvbG9yPC90ZD5cbiAgICAgICAgICAgICAgPHRkPnN0cmluZzwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5Nw6B1IG7hu4FuIHRyYWNrPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZD5zY3JvbGxiYXJIb3ZlckNvbG9yPC90ZD5cbiAgICAgICAgICAgICAgPHRkPnN0cmluZzwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5Nw6B1IG7hu4FuIHRyYWNrIGtoaSBob3ZlcjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+c2Nyb2xsVGh1bWJDb2xvcjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPlxuICAgICAgICAgICAgICA8dGQ+TcOgdSB0aHVtYjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+c2Nyb2xsVGh1bWJIb3ZlckNvbG9yPC90ZD5cbiAgICAgICAgICAgICAgPHRkPnN0cmluZzwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5Nw6B1IHRodW1iIGtoaSBob3ZlcjwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+c2Nyb2xsYmFyUGFkZGluZzwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5udW1iZXI8L3RkPlxuICAgICAgICAgICAgICA8dGQ+UGFkZGluZyBj4bunYSBzY3JvbGxiYXI8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPnNjcm9sbFg8L3RkPlxuICAgICAgICAgICAgICA8dGQ+J2hpZGRlbid8J3Njcm9sbCc8L3RkPlxuICAgICAgICAgICAgICA8dGQ+S2nhu4N1IGhp4buDbiB0aOG7iyBzY3JvbGwgWDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+c2Nyb2xsWE9wYWNpdHkwPC90ZD5cbiAgICAgICAgICAgICAgPHRkPmJvb2xlYW48L3RkPlxuICAgICAgICAgICAgICA8dGQ+4bqobiB0cmFjayBYIGtoaSBraMO0bmcgaG92ZXI8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPnNjcm9sbFk8L3RkPlxuICAgICAgICAgICAgICA8dGQ+J2hpZGRlbid8J3Njcm9sbCc8L3RkPlxuICAgICAgICAgICAgICA8dGQ+S2nhu4N1IGhp4buDbiB0aOG7iyBzY3JvbGwgWTwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+c2Nyb2xsWU9wYWNpdHkwPC90ZD5cbiAgICAgICAgICAgICAgPHRkPmJvb2xlYW48L3RkPlxuICAgICAgICAgICAgICA8dGQ+4bqobiB0cmFjayBZIGtoaSBraMO0bmcgaG92ZXI8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQmFzaWMgRGVtbyAtLT5cbiAgPGRpdiBjbGFzcz1cImRlbW8tc2VjdGlvblwiPlxuICAgIDxoMz4xLiBCYXNpYyBVc2FnZTwvaDM+XG4gICAgPGRpdiBjbGFzcz1cImRlbW8tZGVzY3JpcHRpb25cIj5cbiAgICAgIDxwPlPhu60gZOG7pW5nIGPGoSBi4bqjbiB24bubaSBj4bqldSBow6xuaCBt4bq3YyDEkeG7i25oIGPhu6dhIHNjcm9sbC1vdmVybGF5IGRpcmVjdGl2ZS48L3A+XG4gICAgICA8cHJlPjxjb2RlPiZsdDtkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgc3R5bGU9XCJ3aWR0aDogMzAwcHg7IGhlaWdodDogMjAwcHg7XCImZ3Q7XG4gIE7hu5lpIGR1bmcgZMOgaS4uLlxuJmx0Oy9kaXYmZ3Q7PC9jb2RlPjwvcHJlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZW1vLWJveFwiPlxuICAgICAgPGRpdiBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBzdHlsZT1cIndpZHRoOiAzMDBweDsgaGVpZ2h0OiAyMDBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDE2cHg7XCI+XG4gICAgICAgICAge3sgbG9uZ0NvbnRlbnQoKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEN1c3RvbSBTdHlsaW5nIERlbW8gLS0+XG4gIDxkaXYgY2xhc3M9XCJkZW1vLXNlY3Rpb25cIj5cbiAgICA8aDM+Mi4gQ3VzdG9tIFN0eWxpbmc8L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJkZW1vLWRlc2NyaXB0aW9uXCI+XG4gICAgICA8cD5UdeG7syBjaOG7iW5oIG3DoHUgc+G6r2MsIGvDrWNoIHRoxrDhu5tjIHbDoCBwYWRkaW5nIGPhu6dhIHRoYW5oIGN14buZbi48L3A+XG4gICAgICA8cHJlPjxjb2RlPiZsdDtkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgW29wdGlvbnNdPVwie3sgJ3snIH19XCJcbiAgICAgICBzY3JvbGxiYXJXaWR0aDogMTIsXG4gICAgICAgc2Nyb2xsYmFyQ29sb3I6ICcjZjNmNGY2JyxcbiAgICAgICBzY3JvbGxUaHVtYkNvbG9yOiAnIzNiODJmNicsXG4gICAgICAgc2Nyb2xsYmFyUGFkZGluZzogNFxuICAgICB7eyAnfScgfX1cIiZndDtcbiAgTuG7mWkgZHVuZyBkw6BpLi4uXG4mbHQ7L2RpdiZndDs8L2NvZGU+PC9wcmU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRlbW8tYm94XCI+XG4gICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgICAgIFtvcHRpb25zXT1cImN1c3RvbVN0eWxlT3B0aW9ucygpXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMzAwcHg7IGhlaWdodDogMjAwcHg7IGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxNnB4O1wiPlxuICAgICAgICAgIHt7IGxvbmdDb250ZW50KCkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBdXRvIEhpZGUgRGVtbyAtLT5cbiAgPGRpdiBjbGFzcz1cImRlbW8tc2VjdGlvblwiPlxuICAgIDxoMz4zLiBBdXRvIEhpZGUgb24gSG92ZXI8L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJkZW1vLWRlc2NyaXB0aW9uXCI+XG4gICAgICA8cD7huqhuL2hp4buHbiB0aGFuaCBjdeG7mW4ga2hpIGhvdmVyIHbDoG8gY29udGFpbmVyLjwvcD5cbiAgICAgIDxwcmU+PGNvZGU+Jmx0O2RpdiBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICBbb3B0aW9uc109XCJ7eyAneycgfX1cIlxuICAgICAgIHNjcm9sbFlPcGFjaXR5MDogdHJ1ZSxcbiAgICAgICBzY3JvbGxiYXJDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICBzY3JvbGxUaHVtYkNvbG9yOiAnIzljYTNhZidcbiAgICAge3sgJ30nIH19XCImZ3Q7XG4gIE7hu5lpIGR1bmcgZMOgaS4uLlxuJmx0Oy9kaXYmZ3Q7PC9jb2RlPjwvcHJlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZW1vLWJveFwiPlxuICAgICAgPGRpdiBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICBbb3B0aW9uc109XCJhdXRvSGlkZU9wdGlvbnMoKVwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6IDMwMHB4OyBoZWlnaHQ6IDIwMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTZweDtcIj5cbiAgICAgICAgICB7eyBsb25nQ29udGVudCgpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSG9yaXpvbnRhbCBTY3JvbGwgRGVtbyAtLT5cbiAgPGRpdiBjbGFzcz1cImRlbW8tc2VjdGlvblwiPlxuICAgIDxoMz40LiBIb3Jpem9udGFsIFNjcm9sbDwvaDM+XG4gICAgPGRpdiBjbGFzcz1cImRlbW8tZGVzY3JpcHRpb25cIj5cbiAgICAgIDxwPkN14buZbiBuZ2FuZyB24bubaSBu4buZaSBkdW5nIGTDoGkuPC9wPlxuICAgICAgPHByZT48Y29kZT4mbHQ7ZGl2IExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlXG4gICAgIFtvcHRpb25zXT1cInt7ICd7JyB9fVwiXG4gICAgICAgc2Nyb2xsWDogJ3Njcm9sbCcsXG4gICAgICAgc2Nyb2xsWTogJ2hpZGRlbidcbiAgICAge3sgJ30nIH19XCImZ3Q7XG4gICZsdDtkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiJmd0O1xuICAgIE7hu5lpIGR1bmcgbmdhbmcgZMOgaS4uLlxuICAmbHQ7L2RpdiZndDtcbiZsdDsvZGl2Jmd0OzwvY29kZT48L3ByZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGVtby1ib3hcIj5cbiAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgW29wdGlvbnNdPVwiaG9yaXpvbnRhbE9wdGlvbnMoKVwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6IDMwMHB4OyBoZWlnaHQ6IDEwMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1wiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTZweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5cbiAgICAgICAgICB7eyBsb25nSG9yaXpvbnRhbENvbnRlbnQoKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV2ZW50IEhhbmRsaW5nIERlbW8gLS0+XG4gIDxkaXYgY2xhc3M9XCJkZW1vLXNlY3Rpb25cIj5cbiAgICA8aDM+NS4gRXZlbnQgSGFuZGxpbmc8L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJkZW1vLWRlc2NyaXB0aW9uXCI+XG4gICAgICA8cD5Y4butIGzDvSBjw6FjIHPhu7Ega2nhu4duIHNjcm9sbC48L3A+XG4gICAgICA8cHJlPjxjb2RlPiZsdDtkaXYgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgKG91dFNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgKG91dFNjcm9sbFRvcCk9XCJvblNjcm9sbFRvcCgkZXZlbnQpXCJcbiAgICAgKG91dFNjcm9sbEJvdHRvbSk9XCJvblNjcm9sbEJvdHRvbSgkZXZlbnQpXCImZ3Q7XG4gIE7hu5lpIGR1bmcgZMOgaS4uLlxuJmx0Oy9kaXYmZ3Q7PC9jb2RlPjwvcHJlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZW1vLWJveFwiPlxuICAgICAgPGRpdiBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgICAob3V0U2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAob3V0U2Nyb2xsVG9wKT1cIm9uU2Nyb2xsVG9wKCRldmVudClcIlxuICAgICAgICAob3V0U2Nyb2xsQm90dG9tKT1cIm9uU2Nyb2xsQm90dG9tKCRldmVudClcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOiAzMDBweDsgaGVpZ2h0OiAyMDBweDsgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDE2cHg7XCI+XG4gICAgICAgICAge3sgbG9uZ0NvbnRlbnQoKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWxvZ1wiPlxuICAgICAgICA8cD5MYXN0IEV2ZW50OiB7eyBsYXN0RXZlbnQoKSB9fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
package/esm2022/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './scroll-overlay.directive';
2
2
  export * from './scroll.interface';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvc2Nyb2xsLW92ZXJsYXkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsLmludGVyZmFjZSc7Il19
3
+ export * from './demo/scroll-overlay.demo';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvc2Nyb2xsLW92ZXJsYXkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zY3JvbGwuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVtby9zY3JvbGwtb3ZlcmxheS5kZW1vJzsiXX0=
@@ -81,8 +81,6 @@ export class LibsUiComponentsScrollOverlayDirective {
81
81
  debugMode = input(false);
82
82
  ignoreInit = input(false);
83
83
  classContainer = input('', { transform: value => value ?? '' });
84
- notShowScrollBarX = input();
85
- notShowScrollBarY = input();
86
84
  options = input(Object.assign({}));
87
85
  elementCheckScrollX = input();
88
86
  elementCheckScrollY = input();
@@ -353,7 +351,7 @@ export class LibsUiComponentsScrollOverlayDirective {
353
351
  this.onDestroy.complete();
354
352
  }
355
353
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
356
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: LibsUiComponentsScrollOverlayDirective, isStandalone: true, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: { debugMode: { classPropertyName: "debugMode", publicName: "debugMode", isSignal: true, isRequired: false, transformFunction: null }, ignoreInit: { classPropertyName: "ignoreInit", publicName: "ignoreInit", isSignal: true, isRequired: false, transformFunction: null }, classContainer: { classPropertyName: "classContainer", publicName: "classContainer", isSignal: true, isRequired: false, transformFunction: null }, notShowScrollBarX: { classPropertyName: "notShowScrollBarX", publicName: "notShowScrollBarX", isSignal: true, isRequired: false, transformFunction: null }, notShowScrollBarY: { classPropertyName: "notShowScrollBarY", publicName: "notShowScrollBarY", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollX: { classPropertyName: "elementCheckScrollX", publicName: "elementCheckScrollX", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollY: { classPropertyName: "elementCheckScrollY", publicName: "elementCheckScrollY", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outScroll: "outScroll", outScrollX: "outScrollX", outScrollY: "outScrollY", outScrollTop: "outScrollTop", outScrollBottom: "outScrollBottom" }, ngImport: i0 });
354
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: LibsUiComponentsScrollOverlayDirective, isStandalone: true, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: { debugMode: { classPropertyName: "debugMode", publicName: "debugMode", isSignal: true, isRequired: false, transformFunction: null }, ignoreInit: { classPropertyName: "ignoreInit", publicName: "ignoreInit", isSignal: true, isRequired: false, transformFunction: null }, classContainer: { classPropertyName: "classContainer", publicName: "classContainer", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollX: { classPropertyName: "elementCheckScrollX", publicName: "elementCheckScrollX", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollY: { classPropertyName: "elementCheckScrollY", publicName: "elementCheckScrollY", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outScroll: "outScroll", outScrollX: "outScrollX", outScrollY: "outScrollY", outScrollTop: "outScrollTop", outScrollBottom: "outScrollBottom" }, ngImport: i0 });
357
355
  }
358
356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDirective, decorators: [{
359
357
  type: Directive,
@@ -363,4 +361,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
363
361
  standalone: true
364
362
  }]
365
363
  }], ctorParameters: () => [] });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPN0YsTUFBTSxPQUFPLHNDQUFzQztJQUNqRCxtQkFBbUI7SUFDRixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDOzs0QkFFZixJQUFJLENBQUMsY0FBYyxFQUFFOzs7MkJBR3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQTJCMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7MkJBR3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs7Ozs4QkFJekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztrQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7Ozs7Ozs2QkFRWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDO2lCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7OztHQU1yQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ0UsYUFBYSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN2QyxnQkFBZ0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDMUMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0IsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0IsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCO0lBQy9GLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7SUFDbEcsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxJQUFJLFdBQVcsQ0FBQyxDQUFDO0lBQ3BGLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsZ0JBQWdCLElBQUksU0FBUyxDQUFDLENBQUM7SUFDakYscUJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxxQkFBcUIsSUFBSSxTQUFTLENBQUMsQ0FBQztJQUNsRixZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELE1BQU0sR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFakQsZ0JBQWdCO0lBQ1AsU0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNsQyxVQUFVLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ25DLGNBQWMsR0FBRyxLQUFLLENBQTZCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVGLGlCQUFpQixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ3JDLGlCQUFpQixHQUFHLEtBQUssRUFBVyxDQUFDO0lBQ3JDLE9BQU8sR0FBRyxLQUFLLENBQW9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxtQkFBbUIsR0FBRyxLQUFLLEVBQWUsQ0FBQztJQUMzQyxtQkFBbUIsR0FBRyxLQUFLLEVBQWUsQ0FBQztJQUMzQyxhQUFhLEdBQUcsS0FBSyxFQUFlLENBQUM7SUFFOUMsaUJBQWlCO0lBQ1IsU0FBUyxHQUFHLE1BQU0sRUFBUyxDQUFDO0lBQzVCLFVBQVUsR0FBRyxNQUFNLEVBQVMsQ0FBQztJQUM3QixVQUFVLEdBQUcsTUFBTSxFQUFTLENBQUM7SUFDN0IsWUFBWSxHQUFHLE1BQU0sRUFBUyxDQUFDO0lBQy9CLGVBQWUsR0FBRyxNQUFNLEVBQVMsQ0FBQztJQUUzQyxpQkFBaUI7SUFDVCxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFcEM7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNwRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2YsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQ2pILElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO29CQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTNDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDO2dCQUVELElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO29CQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTNDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsSUFBWSxPQUFPO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQzVELENBQUM7SUFFTyxlQUFlLENBQUMsZUFBc0MsRUFBRSxPQUFvQixFQUFFLE9BQW9CO1FBQ3hHLE1BQU0sVUFBVSxHQUFHLHFDQUFxQyxDQUFBO1FBQ3hELE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRztZQUNyQixZQUFZLEVBQUUsWUFBWTtZQUMxQixpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGlCQUFpQixFQUFFLHlCQUF5QjtZQUM1QyxVQUFVLEVBQUUsUUFBUTtZQUNwQixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRTtZQUN0RCxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRTtTQUNoRCxDQUFDO1FBRVQsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG1CQUFtQixlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFpQixFQUFFLEVBQUU7Z0JBQzlELElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNsUSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFFSCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRTdDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsZUFBc0MsRUFBRSxPQUFvQjtRQUN0RixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBaUIsU0FBUyxDQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDeEYsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUcsQ0FBQztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUU5QixDQUFDO2dCQUNELFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRTlDLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxPQUFNO1lBQ1IsQ0FBQztZQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM5QyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRS9JLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksZUFBZSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxlQUFlLElBQUksZUFBZSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDL0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFDOUIsQ0FBQztZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsRUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUMzRCxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFDekQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO2dCQUM1QixPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFNUMsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFFbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLGVBQWUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUVsQixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxlQUFzQztRQUNoRSxNQUFNLFlBQVksR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pFLE1BQU0sWUFBWSxHQUFHLGVBQWUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsZUFBZSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUvRCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBYSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1SyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckgsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEgsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxlQUFzQztRQUN0RSxNQUFNLFlBQVksR0FBRyxlQUFlLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pFLE1BQU0sWUFBWSxHQUFHLGVBQWUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsZUFBZSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvRCxJQUFJLHVCQUF1QixHQUFHLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1lBQzdCLGdCQUFnQixFQUFFLFlBQVk7WUFDOUIsaUJBQWlCLEVBQUUsQ0FBQyxVQUFzQixFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLGVBQWUsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDNUIsdUJBQXVCLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7b0JBQ3pGLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCx1QkFBdUIsR0FBRyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUMxRixDQUFDO1lBQ0QsZUFBZSxFQUFFLENBQUMsVUFBc0IsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3pELFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztvQkFDekMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNWLENBQUM7WUFDRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQXNCLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQTtRQUNyRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLGdDQUFnQyxDQUFDLGVBQXNDLEVBQUUsQ0FBYSxFQUFFLFFBQTJCLEVBQUUsdUJBQXVCLEdBQUcsQ0FBQztRQUN0SixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDaEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQzlFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQztZQUN0RyxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLENBQUM7WUFFbEgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDcEQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNsRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxHQUFHLHVCQUF1QixDQUFDO1FBQ3JHLE1BQU0sU0FBUyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsQ0FBQztRQUVySCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsZUFBc0M7UUFDaEUsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDaEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQzlFLE1BQU0sVUFBVSxHQUFHLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFdEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsVUFBVSxJQUFJLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUNuQyxJQUFJLFlBQVksR0FBRyxjQUFjLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN0QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRTlDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ25DLElBQUksYUFBYSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sdUJBQXVCLENBQUMsZUFBc0M7UUFDcEUsSUFBSSxlQUFlLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDaEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQzlFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQzNDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUVsSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQztZQUU5QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNoRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F0WlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0M7OzRGQUF0QyxzQ0FBc0M7a0JBTGxELFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIsIGdldERyYWdFdmVudEJ5RWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJU2Nyb2xsT3ZlcmxheU9wdGlvbnMsIFRZUEVfU0NST0xMX0RJUkVDVElPTiB9IGZyb20gXCIuL3Njcm9sbC5pbnRlcmZhY2VcIjtcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlcyA9IGNvbXB1dGVkKCgpID0+IGBcbiAgICAgIC5zY3JvbGxiYXItdHJhY2t7XG4gICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxiYXJDb2xvcigpfTtcbiAgICAgIH1cbiAgICAgIC5zY3JvbGxiYXItdHJhY2s6aG92ZXJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbGJhckhvdmVyQ29sb3IoKX07XG4gICAgICB9XG4gICAgICAuc2Nyb2xsYmFyLXRyYWNrLVgge1xuICAgICAgICB3aWR0aDoxMDAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10cmFjay1ZIHtcbiAgICAgICAgaGVpZ2h0OjEwMCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjoke3RoaXMuc2Nyb2xsVGh1bWJDb2xvcigpfTtcbiAgICAgIH1cbiAgICAgIC5zY3JvbGxiYXItdGh1bWI6aG92ZXJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbFRodW1iSG92ZXJDb2xvcigpfTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYi1YIHtcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpICogMn1weCk7XG4gICAgICAgIGJvdHRvbTogJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKX1weDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1iLVkge1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKSAqIDJ9cHgpO1xuICAgICAgICByaWdodDogJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKX1weDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuICBgLCB7fSlcbiAgcHJpdmF0ZSBpc1Njcm9sbFRodW1iID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBrZWVwRGlzcGxheVRodW1iID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdWJzWCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBzdWJzWSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBzY3JvbGxiYXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxiYXJXaWR0aCA/PyAxMCk7IC8vIENoaeG7gXUgcuG7mW5nIHRoYW5oIGN14buZblxuICBwcml2YXRlIHNjcm9sbGJhclBhZGRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyUGFkZGluZyA/PyAyKTsgLy8gQ2hp4buBdSBy4buZbmcgdGhhbmggY3Xhu5luXG4gIHByaXZhdGUgc2Nyb2xsYmFyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyQ29sb3IgPz8gJycpO1xuICBwcml2YXRlIHNjcm9sbGJhckhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyQ29sb3IgPz8gJyNDREQwRDY0MCcpO1xuICBwcml2YXRlIHNjcm9sbFRodW1iQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJDb2xvciA/PyAnI0NERDBENicpO1xuICBwcml2YXRlIHNjcm9sbFRodW1iSG92ZXJDb2xvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxUaHVtYkhvdmVyQ29sb3IgPz8gJyM5Q0EyQUQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXZDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1g6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNrWTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aHVtYlk6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGRlYnVnTW9kZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlSW5pdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXIgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgbm90U2hvd1Njcm9sbEJhclggPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBub3RTaG93U2Nyb2xsQmFyWSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBpbnB1dDxJU2Nyb2xsT3ZlcmxheU9wdGlvbnMgfCB1bmRlZmluZWQ+KE9iamVjdC5hc3NpZ24oe30pKTtcbiAgcmVhZG9ubHkgZWxlbWVudENoZWNrU2Nyb2xsWCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxZID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRTY3JvbGwgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTY3JvbGwgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFggPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFkgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbFRvcCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsQm90dG9tID0gb3V0cHV0PEV2ZW50PigpO1xuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZWxlbWVudCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZW5kZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZUluaXQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc05hbWUgPSAnJztcbiAgICAgIHRoaXMuY2xhc3NDb250YWluZXIoKT8uc3BsaXQoJyAnKS5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgIH0pO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLkVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnb3ZlcmZsb3ctaGlkZGVuJywgb3B0aW9ucz8uc2Nyb2xsWCA9PT0gJ2hpZGRlbicgJiYgb3B0aW9ucz8uc2Nyb2xsWSA9PT0gJ2hpZGRlbicpO1xuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWCAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy50cmFja1guY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50aHVtYlguY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50cmFja1guc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWCcsIHRoaXMudHJhY2tYLCB0aGlzLnRodW1iWCk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdYJywgdGhpcy50cmFja1gpO1xuXG4gICAgICAgICAgdGhpcy5oYW5kbGVyRHJhZ0FuZERyb3BUaHVtYignWCcpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNsaWNrVHJhY2soJ1gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5zY3JvbGxZICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMudHJhY2tZLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudGh1bWJZLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudHJhY2tZLnN0eWxlLndpZHRoID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICAgICAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1knLCB0aGlzLnRyYWNrWSwgdGhpcy50aHVtYlkpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWScsIHRoaXMudHJhY2tZKTtcblxuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1knKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdZJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH1cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwcml2YXRlIGdldCBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U2Nyb2xsKCkgfHwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNjcm9sbGJhcihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgdHJhY2tFbDogSFRNTEVsZW1lbnQsIHRodW1iRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgaWRTdHlsZVRhZyA9IFwiI2lkLXN0eWxlLXRhZy1jdXN0b20tc2Nyb2xsLW92ZXJsYXlcIlxuICAgIGNvbnN0IHN0eWxlRWxDdXN0b21TY3JvbGxPdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRTdHlsZVRhZyk7XG5cbiAgICBpZiAoIXN0eWxlRWxDdXN0b21TY3JvbGxPdmVybGF5KSB7XG4gICAgICBjb25zdCBzdHlsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlRWwuc2V0QXR0cmlidXRlKCdpZCcsIGlkU3R5bGVUYWcpO1xuICAgICAgc3R5bGVFbC5pbm5lckhUTUwgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGVFbCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGVzUHJvcGVydHkgPSB7XG4gICAgICBcImJveC1zaXppbmdcIjogXCJib3JkZXItYm94XCIsXG4gICAgICBcInNjcm9sbGJhci13aWR0aFwiOiBcIm5vbmVcIixcbiAgICAgIFwic2Nyb2xsYmFyLWNvbG9yXCI6IFwidHJhbnNwYXJlbnQgdHJhbnNwYXJlbnRcIixcbiAgICAgIFwib3ZlcmZsb3dcIjogXCJoaWRkZW5cIixcbiAgICAgIFwib3ZlcmZsb3cteFwiOiBgJHt0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWCB8fCAnc2Nyb2xsJ31gLFxuICAgICAgXCJvdmVyZmxvdy15XCI6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxZIHx8ICdzY3JvbGwnfWBcbiAgICB9IGFzIGFueTtcblxuICAgIE9iamVjdC5rZXlzKHN0eWxlc1Byb3BlcnR5KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5FbGVtZW50LCBrZXksIHN0eWxlc1Byb3BlcnR5W2tleV0sIDEpO1xuICAgIH0pO1xuXG4gICAgdHJhY2tFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdHJhY2tgKTtcbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFjay0ke3Njcm9sbERpcmVjdGlvbn1gKTtcblxuICAgIHRodW1iRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRodW1iYCk7XG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWItJHtzY3JvbGxEaXJlY3Rpb259YCk7XG4gICAgdHJhY2tFbC5hcHBlbmRDaGlsZCh0aHVtYkVsKTtcbiAgICBpZiAodGhpcy5FbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChjbGFzc05hbWUgJiYgKFsndy1mdWxsJywgJ3ctc2NyZWVuJywgJ2gtZnVsbCcsICdoLXNjcmVlbicsICdzaHJpbmstMCddLmluY2x1ZGVzKGNsYXNzTmFtZSkgfHwgY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4taC0nKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi13LScpIHx8IC9eKCE/KShofHcpLVxcW1swLTldK3B4XFxdJC8udGVzdChjbGFzc05hbWUpKSAmJiAhdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi1oLTAnKTtcblxuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4tdy0nKSkge1xuICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtaW4tdy0wJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHRyYWNrRWwpO1xuXG4gICAgaWYgKCF0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbikge1xuICAgICAgdGhpcy5FbGVtZW50LnBhcmVudEVsZW1lbnQ/Lmluc2VydEJlZm9yZSh0aGlzLmRpdkNvbnRhaW5lciwgdGhpcy5FbGVtZW50KTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gICAgdGhpcy5kaXZDb250YWluZXIuYXBwZW5kKHRoaXMuRWxlbWVudCk7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGJpbmRFdmVudHNTY3JvbGxCYXIoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHRyYWNrRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IHNjcm9sbExlZnQgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuRWxlbWVudCwgJ3Njcm9sbCcpLnBpcGUodGFwKChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuXG4gICAgICB0aGlzLm91dFNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbExlZnQgJiYgKHRhcmdldC5zY3JvbGxMZWZ0ICsgdGFyZ2V0Lm9mZnNldFdpZHRoID49IHRhcmdldC5zY3JvbGxXaWR0aCkpIHtcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxXaWR0aCAtIHRhcmdldC5vZmZzZXRXaWR0aCAtICh0YXJnZXQub2Zmc2V0V2lkdGggLSB0YXJnZXQuY2xpZW50V2lkdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgdGhpcy5vdXRTY3JvbGxYLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIH1cbiAgICAgICAgc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgc2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgIHRoaXMub3V0U2Nyb2xsWS5lbWl0KGV2ZW50KTtcblxuICAgICAgaWYgKHRhcmdldC5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0U2Nyb2xsVG9wLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIDMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0U2Nyb2xsQm90dG9tLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKTtcblxuICAgIHN1YnMuYWRkKGZyb21FdmVudChkb2N1bWVudCwgJ3Jlc2l6ZScpLnBpcGUodGFwKHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZS5iaW5kKHRoaXMsIHNjcm9sbERpcmVjdGlvbikpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBjb25zdCBtb3VzZUxlYXZlID0gZnJvbUV2ZW50KHRoaXMuZGl2Q29udGFpbmVyLCAnbW91c2VsZWF2ZScpO1xuICAgIGNvbnN0IG1vdXNlZW50ZXIgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWVudGVyJyk7XG5cbiAgICBzdWJzLmFkZChtb3VzZWVudGVyLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFhPcGFjaXR5MCB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFlPcGFjaXR5MCkge1xuICAgICAgICB0cmFja0VsLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKDEwMDApLnBpcGUodGFrZVVudGlsKG1vdXNlTGVhdmUpKSksXG4gICAgICB0YXAodGhpcy51cGRhdGVTY3JvbGxiYXJTaXplLmJpbmQodGhpcywgc2Nyb2xsRGlyZWN0aW9uKSksXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBzdWJzLmFkZChtb3VzZUxlYXZlLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmtlZXBEaXNwbGF5VGh1bWIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cmFja0VsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIHRyYWNrRWwuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICB9KSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCkpO1xuXG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICB0aGlzLnN1YnNYID0gc3VicztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJykge1xuICAgICAgdGhpcy5zdWJzWSA9IHN1YnM7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrVHJhY2soc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBjb25zdCBlbGVtZW50VHJhY2sgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudHJhY2tYIDogdGhpcy50cmFja1k7XG4gICAgY29uc3QgZWxlbWVudFRodW1iID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRodW1iWCA6IHRoaXMudGh1bWJZO1xuICAgIGNvbnN0IHN1YnMgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMuc3Vic1ggOiB0aGlzLnN1YnNZO1xuXG4gICAgc3Vicy5hZGQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGVsZW1lbnRUcmFjaywgJ2NsaWNrJykuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTY3JvbGxUaHVtYigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgJiYgZS5jbGllbnRYIDwgZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIHx8IChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiBlLmNsaWVudFkgPCBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbiwgZSwgJ3Ntb290aCcsIDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbiwgZSwgJ3Ntb290aCcsIC0xICogZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAtMSAqIGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJhZ0FuZERyb3BUaHVtYihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG4gICAgY29uc3Qgc3VicyA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy5zdWJzWCA6IHRoaXMuc3Vic1k7XG4gICAgbGV0IGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcblxuICAgIHN1YnMuYWRkKGdldERyYWdFdmVudEJ5RWxlbWVudCh7XG4gICAgICBlbGVtZW50TW91c2VEb3duOiBlbGVtZW50VGh1bWIsXG4gICAgICBmdW5jdGlvbk1vdXNlRG93bjogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5pc1Njcm9sbFRodW1iLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5rZWVwRGlzcGxheVRodW1iLnNldCh0cnVlKTtcbiAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIG1vdXNlRXZlbnQuY2xpZW50WDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gbW91c2VFdmVudC5jbGllbnRZO1xuICAgICAgfSxcbiAgICAgIGZ1bmN0aW9uTW91c2VVcDogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5rZWVwRGlzcGxheVRodW1iLnNldChmYWxzZSk7XG4gICAgICAgIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcbiAgICAgICAgaWYgKCFjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKG1vdXNlRXZlbnQsIHRoaXMuRWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgIGVsZW1lbnRUcmFjay5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTY3JvbGxUaHVtYi5zZXQoZmFsc2UpO1xuICAgICAgICB9LCAyNTApO1xuICAgICAgfSxcbiAgICAgIG9uRGVzdHJveTogdGhpcy5vbkRlc3Ryb3lcbiAgICB9KS5zdWJzY3JpYmUoKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50LCAnYXV0bycsIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIGU6IE1vdXNlRXZlbnQsIGJlaGF2aW9yOiAnYXV0bycgfCAnc21vb3RoJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRYIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyBsZW5ndGhUaHVtYlRvUG9pbnRDbGljaztcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKSkgKiAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpO1xuXG4gICAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgbGVmdDogc2Nyb2xsTGVmdCwgYmVoYXZpb3IgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRZIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCkpICogKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IHRvcDogc2Nyb2xsVG9wLCBiZWhhdmlvciB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iV2lkdGggPSAoY29udGFpbmVyV2lkdGggLyBjb250ZW50V2lkdGgpICogKGNvbnRhaW5lcldpZHRoKTtcblxuICAgICAgdGhpcy50aHVtYlguc3R5bGUud2lkdGggPSBgJHt0aHVtYldpZHRofXB4YDtcbiAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBpZiAoY29udGVudFdpZHRoID4gY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0IC8gY29udGVudEhlaWdodCkgKiAoY29udGFpbmVySGVpZ2h0KTtcblxuICAgIHRoaXMudGh1bWJZLnN0eWxlLmhlaWdodCA9IGAke01hdGgubWF4KDIwLCB0aHVtYkhlaWdodCl9cHhgO1xuICAgIHRoaXMudHJhY2tZLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgaWYgKGNvbnRlbnRIZWlnaHQgPiBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgIHRoaXMudHJhY2tZLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oJ1knKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5FbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKHNjcm9sbExlZnQgLyAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpKSAqIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKTtcblxuICAgICAgdGhpcy50aHVtYlguc3R5bGUubGVmdCA9IGAke3RodW1iUG9zaXRpb259cHhgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSAoc2Nyb2xsVG9wIC8gKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpKSAqIChjb250YWluZXJIZWlnaHQgLSB0aGlzLnRodW1iWS5vZmZzZXRIZWlnaHQpO1xuXG4gICAgdGhpcy50aHVtYlkuc3R5bGUudG9wID0gYCR7dGh1bWJQb3NpdGlvbn1weGA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpdkNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzWS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbn0iXX0=
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEksT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFPN0YsTUFBTSxPQUFPLHNDQUFzQztJQUNqRCxtQkFBbUI7SUFDRixNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDOzs0QkFFZixJQUFJLENBQUMsY0FBYyxFQUFFOzs7MkJBR3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQTJCMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7MkJBR3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs7Ozs4QkFJekIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztrQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7Ozs7Ozs2QkFRWixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDO2lCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7OztHQU1yQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ0UsYUFBYSxHQUFHLE1B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QUU5QyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNoRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FwWlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0M7OzRGQUF0QyxzQ0FBc0M7a0JBTGxELFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNoZWNrTW91c2VPdmVySW5Db250YWluZXIsIGdldERyYWdFdmVudEJ5RWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJU2Nyb2xsT3ZlcmxheU9wdGlvbnMsIFRZUEVfU0NST0xMX0RJUkVDVElPTiB9IGZyb20gXCIuL3Njcm9sbC5pbnRlcmZhY2VcIjtcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlcyA9IGNvbXB1dGVkKCgpID0+IGBcbiAgICAgIC5zY3JvbGxiYXItdHJhY2t7XG4gICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiR7dGhpcy5zY3JvbGxiYXJDb2xvcigpfTtcbiAgICAgIH1cbiAgICAgIC5zY3JvbGxiYXItdHJhY2s6aG92ZXJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbGJhckhvdmVyQ29sb3IoKX07XG4gICAgICB9XG4gICAgICAuc2Nyb2xsYmFyLXRyYWNrLVgge1xuICAgICAgICB3aWR0aDoxMDAlO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10cmFjay1ZIHtcbiAgICAgICAgaGVpZ2h0OjEwMCU7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYntcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjoke3RoaXMuc2Nyb2xsVGh1bWJDb2xvcigpfTtcbiAgICAgIH1cbiAgICAgIC5zY3JvbGxiYXItdGh1bWI6aG92ZXJ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6JHt0aGlzLnNjcm9sbFRodW1iSG92ZXJDb2xvcigpfTtcbiAgICAgIH1cblxuICAgICAgLnNjcm9sbGJhci10aHVtYi1YIHtcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAke3RoaXMuc2Nyb2xsYmFyUGFkZGluZygpICogMn1weCk7XG4gICAgICAgIGJvdHRvbTogJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKX1weDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuXG4gICAgICAuc2Nyb2xsYmFyLXRodW1iLVkge1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKSAqIDJ9cHgpO1xuICAgICAgICByaWdodDogJHt0aGlzLnNjcm9sbGJhclBhZGRpbmcoKX1weDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgfVxuICBgLCB7fSlcbiAgcHJpdmF0ZSBpc1Njcm9sbFRodW1iID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBrZWVwRGlzcGxheVRodW1iID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdWJzWCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBzdWJzWSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBzY3JvbGxiYXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxiYXJXaWR0aCA/PyAxMCk7IC8vIENoaeG7gXUgcuG7mW5nIHRoYW5oIGN14buZblxuICBwcml2YXRlIHNjcm9sbGJhclBhZGRpbmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyUGFkZGluZyA/PyAyKTsgLy8gQ2hp4buBdSBy4buZbmcgdGhhbmggY3Xhu5luXG4gIHByaXZhdGUgc2Nyb2xsYmFyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyQ29sb3IgPz8gJycpO1xuICBwcml2YXRlIHNjcm9sbGJhckhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyQ29sb3IgPz8gJyNDREQwRDY0MCcpO1xuICBwcml2YXRlIHNjcm9sbFRodW1iQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJDb2xvciA/PyAnI0NERDBENicpO1xuICBwcml2YXRlIHNjcm9sbFRodW1iSG92ZXJDb2xvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxUaHVtYkhvdmVyQ29sb3IgPz8gJyM5Q0EyQUQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXZDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1g6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNrWTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aHVtYlk6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGRlYnVnTW9kZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlSW5pdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXIgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgb3B0aW9ucyA9IGlucHV0PElTY3JvbGxPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZD4oT2JqZWN0LmFzc2lnbih7fSkpO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxYID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDaGVja1Njcm9sbFkgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFNjcm9sbCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWSA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsVG9wID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxCb3R0b20gPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlbmRlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaWdub3JlSW5pdCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgdGhpcy5jbGFzc0NvbnRhaW5lcigpPy5zcGxpdCgnICcpLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgfSk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdvdmVyZmxvdy1oaWRkZW4nLCBvcHRpb25zPy5zY3JvbGxYID09PSAnaGlkZGVuJyAmJiBvcHRpb25zPy5zY3JvbGxZID09PSAnaGlkZGVuJyk7XG4gICAgICAgIGlmIChvcHRpb25zPy5zY3JvbGxYICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMuc3Vic1gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLnRyYWNrWC5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRodW1iWC5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRyYWNrWC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnNjcm9sbGJhcldpZHRoKCl9cHhgO1xuICAgICAgICAgIHRoaXMuY3JlYXRlU2Nyb2xsYmFyKCdYJywgdGhpcy50cmFja1gsIHRoaXMudGh1bWJYKTtcbiAgICAgICAgICB0aGlzLmJpbmRFdmVudHNTY3JvbGxCYXIoJ1gnLCB0aGlzLnRyYWNrWCk7XG5cbiAgICAgICAgICB0aGlzLmhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKCdYJyk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tUcmFjaygnWCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnM/LnNjcm9sbFkgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgdGhpcy50cmFja1kuY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50aHVtYlkuY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50cmFja1kuc3R5bGUud2lkdGggPSBgJHt0aGlzLnNjcm9sbGJhcldpZHRoKCl9cHhgO1xuICAgICAgICAgIHRoaXMuc3Vic1kudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWScsIHRoaXMudHJhY2tZLCB0aGlzLnRodW1iWSk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdZJywgdGhpcy50cmFja1kpO1xuXG4gICAgICAgICAgdGhpcy5oYW5kbGVyRHJhZ0FuZERyb3BUaHVtYignWScpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNsaWNrVHJhY2soJ1knKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9KTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTY3JvbGwoKSB8fCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2Nyb2xsYmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCwgdGh1bWJFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBpZFN0eWxlVGFnID0gXCIjaWQtc3R5bGUtdGFnLWN1c3RvbS1zY3JvbGwtb3ZlcmxheVwiXG4gICAgY29uc3Qgc3R5bGVFbEN1c3RvbVNjcm9sbE92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFN0eWxlVGFnKTtcblxuICAgIGlmICghc3R5bGVFbEN1c3RvbVNjcm9sbE92ZXJsYXkpIHtcbiAgICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGVFbC5zZXRBdHRyaWJ1dGUoJ2lkJywgaWRTdHlsZVRhZyk7XG4gICAgICBzdHlsZUVsLmlubmVySFRNTCA9IHRoaXMuc3R5bGVzKCk7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZUVsKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZXNQcm9wZXJ0eSA9IHtcbiAgICAgIFwiYm94LXNpemluZ1wiOiBcImJvcmRlci1ib3hcIixcbiAgICAgIFwic2Nyb2xsYmFyLXdpZHRoXCI6IFwibm9uZVwiLFxuICAgICAgXCJzY3JvbGxiYXItY29sb3JcIjogXCJ0cmFuc3BhcmVudCB0cmFuc3BhcmVudFwiLFxuICAgICAgXCJvdmVyZmxvd1wiOiBcImhpZGRlblwiLFxuICAgICAgXCJvdmVyZmxvdy14XCI6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxYIHx8ICdzY3JvbGwnfWAsXG4gICAgICBcIm92ZXJmbG93LXlcIjogYCR7dGhpcy5vcHRpb25zKCk/LnNjcm9sbFkgfHwgJ3Njcm9sbCd9YFxuICAgIH0gYXMgYW55O1xuXG4gICAgT2JqZWN0LmtleXMoc3R5bGVzUHJvcGVydHkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLkVsZW1lbnQsIGtleSwgc3R5bGVzUHJvcGVydHlba2V5XSwgMSk7XG4gICAgfSk7XG5cbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFja2ApO1xuICAgIHRyYWNrRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRyYWNrLSR7c2Nyb2xsRGlyZWN0aW9ufWApO1xuXG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWJgKTtcbiAgICB0aHVtYkVsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10aHVtYi0ke3Njcm9sbERpcmVjdGlvbn1gKTtcbiAgICB0cmFja0VsLmFwcGVuZENoaWxkKHRodW1iRWwpO1xuICAgIGlmICh0aGlzLkVsZW1lbnQuY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KCcgJykuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiAoWyd3LWZ1bGwnLCAndy1zY3JlZW4nLCAnaC1mdWxsJywgJ2gtc2NyZWVuJywgJ3Nocmluay0wJ10uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpIHx8IGNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykgfHwgL14oIT8pKGh8dyktXFxbWzAtOV0rcHhcXF0kLy50ZXN0KGNsYXNzTmFtZSkpICYmICF0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICAgIGlmICghdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnbWluLWgtJykpIHtcbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWluLWgtMCcpO1xuXG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi13LScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi13LTAnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kaXZDb250YWluZXIuYXBwZW5kQ2hpbGQodHJhY2tFbCk7XG5cbiAgICBpZiAoIXRoaXMuZGl2Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uKSB7XG4gICAgICB0aGlzLkVsZW1lbnQucGFyZW50RWxlbWVudD8uaW5zZXJ0QmVmb3JlKHRoaXMuZGl2Q29udGFpbmVyLCB0aGlzLkVsZW1lbnQpO1xuICAgICAgdGhpcy5kaXZDb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIH1cbiAgICB0aGlzLmRpdkNvbnRhaW5lci5hcHBlbmQodGhpcy5FbGVtZW50KTtcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUoc2Nyb2xsRGlyZWN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZEV2ZW50c1Njcm9sbEJhcihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgdHJhY2tFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgc2Nyb2xsTGVmdCA9IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCBzY3JvbGxUb3AgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHN1YnM6IFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudDxFdmVudD4odGhpcy5FbGVtZW50LCAnc2Nyb2xsJykucGlwZSh0YXAoKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLkVsZW1lbnQ7XG5cbiAgICAgIHRoaXMub3V0U2Nyb2xsLmVtaXQoZXZlbnQpO1xuICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsTGVmdCAmJiAodGFyZ2V0LnNjcm9sbExlZnQgKyB0YXJnZXQub2Zmc2V0V2lkdGggPj0gdGFyZ2V0LnNjcm9sbFdpZHRoKSkge1xuICAgICAgICAgIHRhcmdldC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbFdpZHRoIC0gdGFyZ2V0Lm9mZnNldFdpZHRoIC0gKHRhcmdldC5vZmZzZXRXaWR0aCAtIHRhcmdldC5jbGllbnRXaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbExlZnQgIT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICB0aGlzLm91dFNjcm9sbFguZW1pdChldmVudCk7XG5cbiAgICAgICAgfVxuICAgICAgICBzY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG4gICAgICBzY3JvbGxUb3AgPSB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgICAgdGhpcy5vdXRTY3JvbGxZLmVtaXQoZXZlbnQpO1xuXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vdXRTY3JvbGxUb3AuZW1pdChldmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQuc2Nyb2xsSGVpZ2h0IDw9IHRhcmdldC5zY3JvbGxUb3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0ICsgMykge1xuICAgICAgICByZXR1cm4gdGhpcy5vdXRTY3JvbGxCb3R0b20uZW1pdChldmVudCk7XG4gICAgICB9XG4gICAgfSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgpO1xuXG4gICAgc3Vicy5hZGQoZnJvbUV2ZW50KGRvY3VtZW50LCAncmVzaXplJykucGlwZSh0YXAodGhpcy51cGRhdGVTY3JvbGxiYXJTaXplLmJpbmQodGhpcywgc2Nyb2xsRGlyZWN0aW9uKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgpKTtcblxuICAgIGNvbnN0IG1vdXNlTGVhdmUgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWxlYXZlJyk7XG4gICAgY29uc3QgbW91c2VlbnRlciA9IGZyb21FdmVudCh0aGlzLmRpdkNvbnRhaW5lciwgJ21vdXNlZW50ZXInKTtcblxuICAgIHN1YnMuYWRkKG1vdXNlZW50ZXIucGlwZSh0YXAoKCkgPT4ge1xuICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnICYmICF0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWE9wYWNpdHkwIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1knICYmICF0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWU9wYWNpdHkwKSB7XG4gICAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gaW50ZXJ2YWwoMTAwMCkucGlwZSh0YWtlVW50aWwobW91c2VMZWF2ZSkpKSxcbiAgICAgIHRhcCh0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUuYmluZCh0aGlzLCBzY3JvbGxEaXJlY3Rpb24pKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICApLnN1YnNjcmliZSgpKTtcblxuICAgIHN1YnMuYWRkKG1vdXNlTGVhdmUucGlwZSh0YXAoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMua2VlcERpc3BsYXlUaHVtYigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgIH0pLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKSk7XG5cbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIHRoaXMuc3Vic1ggPSBzdWJzO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1knKSB7XG4gICAgICB0aGlzLnN1YnNZID0gc3VicztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tUcmFjayhzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG4gICAgY29uc3Qgc3VicyA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy5zdWJzWCA6IHRoaXMuc3Vic1k7XG5cbiAgICBzdWJzLmFkZChmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudFRyYWNrLCAnY2xpY2snKS5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Njcm9sbFRodW1iKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyAmJiBlLmNsaWVudFggPCBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgfHwgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1knICYmIGUuY2xpZW50WSA8IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgLTEgKiBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbiwgZSwgJ3Ntb290aCcsIC0xICogZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgY29uc3QgZWxlbWVudFRyYWNrID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRyYWNrWCA6IHRoaXMudHJhY2tZO1xuICAgIGNvbnN0IGVsZW1lbnRUaHVtYiA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50aHVtYlggOiB0aGlzLnRodW1iWTtcbiAgICBjb25zdCBzdWJzID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnN1YnNYIDogdGhpcy5zdWJzWTtcbiAgICBsZXQgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwO1xuXG4gICAgc3Vicy5hZGQoZ2V0RHJhZ0V2ZW50QnlFbGVtZW50KHtcbiAgICAgIGVsZW1lbnRNb3VzZURvd246IGVsZW1lbnRUaHVtYixcbiAgICAgIGZ1bmN0aW9uTW91c2VEb3duOiAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KHRydWUpO1xuICAgICAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbW91c2VFdmVudC5jbGllbnRYO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBtb3VzZUV2ZW50LmNsaWVudFk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb25Nb3VzZVVwOiAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwO1xuICAgICAgICBpZiAoIWNoZWNrTW91c2VPdmVySW5Db250YWluZXIobW91c2VFdmVudCwgdGhpcy5FbGVtZW50KSkge1xuICAgICAgICAgIGVsZW1lbnRUcmFjay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgZWxlbWVudFRyYWNrLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Njcm9sbFRodW1iLnNldChmYWxzZSk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgICB9LFxuICAgICAgb25EZXN0cm95OiB0aGlzLm9uRGVzdHJveVxuICAgIH0pLnN1YnNjcmliZSgobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIG1vdXNlRXZlbnQsICdhdXRvJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2spXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgZTogTW91c2VFdmVudCwgYmVoYXZpb3I6ICdhdXRvJyB8ICdzbW9vdGgnLCBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IDApIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSBlLmNsaWVudFggLSB0aGlzLkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGgpKSAqIChjb250ZW50V2lkdGggLSBjb250YWluZXJXaWR0aCk7XG5cbiAgICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoeyBsZWZ0OiBzY3JvbGxMZWZ0LCBiZWhhdmlvciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5FbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWSgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSBlLmNsaWVudFkgLSB0aGlzLkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2s7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gKHRodW1iUG9zaXRpb24gLyAoY29udGFpbmVySGVpZ2h0IC0gdGhpcy50aHVtYlkub2Zmc2V0SGVpZ2h0KSkgKiAoY29udGVudEhlaWdodCAtIGNvbnRhaW5lckhlaWdodCk7XG5cbiAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgdG9wOiBzY3JvbGxUb3AsIGJlaGF2aW9yIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgY29uc3QgdGh1bWJXaWR0aCA9IChjb250YWluZXJXaWR0aCAvIGNvbnRlbnRXaWR0aCkgKiAoY29udGFpbmVyV2lkdGgpO1xuXG4gICAgICB0aGlzLnRodW1iWC5zdHlsZS53aWR0aCA9IGAke3RodW1iV2lkdGh9cHhgO1xuICAgICAgdGhpcy50cmFja1guc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGlmIChjb250ZW50V2lkdGggPiBjb250YWluZXJXaWR0aCkge1xuICAgICAgICB0aGlzLnRyYWNrWC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9IChjb250YWluZXJIZWlnaHQgLyBjb250ZW50SGVpZ2h0KSAqIChjb250YWluZXJIZWlnaHQpO1xuXG4gICAgdGhpcy50aHVtYlkuc3R5bGUuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoMjAsIHRodW1iSGVpZ2h0KX1weGA7XG4gICAgdGhpcy50cmFja1kuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBpZiAoY29udGVudEhlaWdodCA+IGNvbnRhaW5lckhlaWdodCkge1xuICAgICAgdGhpcy50cmFja1kuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbignWScpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSAoc2Nyb2xsTGVmdCAvIChjb250ZW50V2lkdGggLSBjb250YWluZXJXaWR0aCkpICogKGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGgpO1xuXG4gICAgICB0aGlzLnRodW1iWC5zdHlsZS5sZWZ0ID0gYCR7dGh1bWJQb3NpdGlvbn1weGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5FbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWSgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IChzY3JvbGxUb3AgLyAoY29udGVudEhlaWdodCAtIGNvbnRhaW5lckhlaWdodCkpICogKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCk7XG5cbiAgICB0aGlzLnRodW1iWS5zdHlsZS50b3AgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGl2Q29udGFpbmVyLnJlbW92ZSgpO1xuICAgIHRoaXMuc3Vic1gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufSJdfQ==
@@ -1,7 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { computed, signal, input, output, inject, ElementRef, Renderer2, effect, untracked, Directive } from '@angular/core';
2
+ import { computed, signal, input, output, inject, ElementRef, Renderer2, effect, untracked, Directive, Component } from '@angular/core';
3
3
  import { getDragEventByElement, checkMouseOverInContainer } from '@libs-ui/utils';
4
4
  import { Subscription, Subject, fromEvent, tap, takeUntil, switchMap, interval } from 'rxjs';
5
+ import { CommonModule } from '@angular/common';
5
6
 
6
7
  /* eslint-disable @typescript-eslint/no-explicit-any */
7
8
  class LibsUiComponentsScrollOverlayDirective {
@@ -82,8 +83,6 @@ class LibsUiComponentsScrollOverlayDirective {
82
83
  debugMode = input(false);
83
84
  ignoreInit = input(false);
84
85
  classContainer = input('', { transform: value => value ?? '' });
85
- notShowScrollBarX = input();
86
- notShowScrollBarY = input();
87
86
  options = input(Object.assign({}));
88
87
  elementCheckScrollX = input();
89
88
  elementCheckScrollY = input();
@@ -354,7 +353,7 @@ class LibsUiComponentsScrollOverlayDirective {
354
353
  this.onDestroy.complete();
355
354
  }
356
355
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
357
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: LibsUiComponentsScrollOverlayDirective, isStandalone: true, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: { debugMode: { classPropertyName: "debugMode", publicName: "debugMode", isSignal: true, isRequired: false, transformFunction: null }, ignoreInit: { classPropertyName: "ignoreInit", publicName: "ignoreInit", isSignal: true, isRequired: false, transformFunction: null }, classContainer: { classPropertyName: "classContainer", publicName: "classContainer", isSignal: true, isRequired: false, transformFunction: null }, notShowScrollBarX: { classPropertyName: "notShowScrollBarX", publicName: "notShowScrollBarX", isSignal: true, isRequired: false, transformFunction: null }, notShowScrollBarY: { classPropertyName: "notShowScrollBarY", publicName: "notShowScrollBarY", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollX: { classPropertyName: "elementCheckScrollX", publicName: "elementCheckScrollX", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollY: { classPropertyName: "elementCheckScrollY", publicName: "elementCheckScrollY", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outScroll: "outScroll", outScrollX: "outScrollX", outScrollY: "outScrollY", outScrollTop: "outScrollTop", outScrollBottom: "outScrollBottom" }, ngImport: i0 });
356
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: LibsUiComponentsScrollOverlayDirective, isStandalone: true, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: { debugMode: { classPropertyName: "debugMode", publicName: "debugMode", isSignal: true, isRequired: false, transformFunction: null }, ignoreInit: { classPropertyName: "ignoreInit", publicName: "ignoreInit", isSignal: true, isRequired: false, transformFunction: null }, classContainer: { classPropertyName: "classContainer", publicName: "classContainer", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollX: { classPropertyName: "elementCheckScrollX", publicName: "elementCheckScrollX", isSignal: true, isRequired: false, transformFunction: null }, elementCheckScrollY: { classPropertyName: "elementCheckScrollY", publicName: "elementCheckScrollY", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outScroll: "outScroll", outScrollX: "outScrollX", outScrollY: "outScrollY", outScrollTop: "outScrollTop", outScrollBottom: "outScrollBottom" }, ngImport: i0 });
358
357
  }
359
358
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDirective, decorators: [{
360
359
  type: Directive,
@@ -367,9 +366,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
367
366
 
368
367
  ;
369
368
 
369
+ class LibsUiComponentsScrollOverlayDemoComponent {
370
+ // Demo content
371
+ longContent = signal(`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
372
+
373
+ Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.`);
374
+ longHorizontalContent = signal(`This is a very long horizontal content that will require scrolling to see all of it. It contains multiple sentences and words that extend beyond the container width. This demonstrates the horizontal scrolling capability of the scroll-overlay directive.`);
375
+ // Demo options
376
+ customStyleOptions = signal({
377
+ scrollbarWidth: 12,
378
+ scrollbarColor: '#f3f4f6',
379
+ scrollbarHoverColor: '#e5e7eb',
380
+ scrollThumbColor: '#3b82f6',
381
+ scrollThumbHoverColor: '#2563eb',
382
+ scrollbarPadding: 4
383
+ });
384
+ autoHideOptions = signal({
385
+ scrollYOpacity0: true,
386
+ scrollbarWidth: 8,
387
+ scrollbarColor: 'transparent',
388
+ scrollThumbColor: '#9ca3af',
389
+ scrollThumbHoverColor: '#6b7280'
390
+ });
391
+ horizontalOptions = signal({
392
+ scrollX: 'scroll',
393
+ scrollY: 'hidden',
394
+ scrollbarWidth: 8,
395
+ scrollbarColor: '#f3f4f6',
396
+ scrollThumbColor: '#3b82f6'
397
+ });
398
+ // Event handling
399
+ lastEvent = signal('No events yet');
400
+ onScroll(event) {
401
+ this.lastEvent.set('Scroll event fired');
402
+ }
403
+ onScrollTop(event) {
404
+ this.lastEvent.set('Reached top');
405
+ }
406
+ onScrollBottom(event) {
407
+ this.lastEvent.set('Reached bottom');
408
+ }
409
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
410
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LibsUiComponentsScrollOverlayDemoComponent, isStandalone: true, selector: "lib-scroll-overlay-demo", ngImport: i0, template: "<div class=\"demo-container\">\n <h2>Scroll Overlay Demo</h2>\n\n <div class=\"demo-intro\">\n <h3>Gi\u1EDBi thi\u1EC7u</h3>\n <p>Demo n\u00E0y minh h\u1ECDa c\u00E1c t\u00EDnh n\u0103ng v\u00E0 c\u00E1ch s\u1EED d\u1EE5ng c\u1EE7a directive `scroll-overlay`. Demo bao g\u1ED3m 5 v\u00ED d\u1EE5 ch\u00EDnh:</p>\n <ul>\n <li><strong>Basic Usage</strong>: S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh</li>\n <li><strong>Custom Styling</strong>: Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n</li>\n <li><strong>Auto Hide</strong>: \u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover</li>\n <li><strong>Horizontal Scroll</strong>: Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i</li>\n <li><strong>Event Handling</strong>: X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll</li>\n </ul>\n </div>\n\n <div class=\"demo-features\">\n <h3>T\u00EDnh n\u0103ng Demo</h3>\n <div class=\"features-grid\">\n <div class=\"feature-item\">\n <h4>Tu\u1EF3 bi\u1EBFn giao di\u1EC7n</h4>\n <p>Thay \u0111\u1ED5i m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc, padding c\u1EE7a thanh cu\u1ED9n</p>\n </div>\n <div class=\"feature-item\">\n <h4>Hi\u1EC7u \u1EE9ng t\u01B0\u01A1ng t\u00E1c</h4>\n <p>Hover effects, auto-hide khi kh\u00F4ng s\u1EED d\u1EE5ng</p>\n </div>\n <div class=\"feature-item\">\n <h4>\u0110a h\u01B0\u1EDBng cu\u1ED9n</h4>\n <p>H\u1ED7 tr\u1EE3 c\u1EA3 cu\u1ED9n d\u1ECDc v\u00E0 ngang</p>\n </div>\n <div class=\"feature-item\">\n <h4>Event handling</h4>\n <p>Theo d\u00F5i c\u00E1c s\u1EF1 ki\u1EC7n scroll (top, bottom, scroll)</p>\n </div>\n <div class=\"feature-item\">\n <h4>Responsive</h4>\n <p>Ho\u1EA1t \u0111\u1ED9ng t\u1ED1t tr\u00EAn m\u1ECDi k\u00EDch th\u01B0\u1EDBc m\u00E0n h\u00ECnh</p>\n </div>\n <div class=\"feature-item\">\n <h4>T\u00EDch h\u1EE3p d\u1EC5 d\u00E0ng</h4>\n <p>C\u00F3 th\u1EC3 th\u00EAm v\u00E0o b\u1EA5t k\u1EF3 container n\u00E0o</p>\n </div>\n </div>\n </div>\n\n <div class=\"demo-api\">\n <h3>API Reference</h3>\n\n <div class=\"api-section\">\n <h4>Inputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Input</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>options</td>\n <td>IScrollOverlayOptions</td>\n <td>Tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh thanh cu\u1ED9n</td>\n </tr>\n <tr>\n <td>debugMode</td>\n <td>boolean</td>\n <td>B\u1EADt ch\u1EBF \u0111\u1ED9 debug</td>\n </tr>\n <tr>\n <td>ignoreInit</td>\n <td>boolean</td>\n <td>B\u1ECF qua kh\u1EDFi t\u1EA1o directive</td>\n </tr>\n <tr>\n <td>classContainer</td>\n <td>string</td>\n <td>Th\u00EAm class cho container b\u1ECDc ngo\u00E0i</td>\n </tr>\n <tr>\n <td>notShowScrollBarX</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n ngang</td>\n </tr>\n <tr>\n <td>notShowScrollBarY</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n d\u1ECDc</td>\n </tr>\n <tr>\n <td>elementCheckScrollX</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll X</td>\n </tr>\n <tr>\n <td>elementCheckScrollY</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll Y</td>\n </tr>\n <tr>\n <td>elementScroll</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED th\u1EF1c hi\u1EC7n scroll</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Outputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Output</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>outScroll</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll b\u1EA5t k\u1EF3</td>\n </tr>\n <tr>\n <td>outScrollX</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u ngang</td>\n </tr>\n <tr>\n <td>outScrollY</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u d\u1ECDc</td>\n </tr>\n <tr>\n <td>outScrollTop</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi \u0111\u1EA7u (top)</td>\n </tr>\n <tr>\n <td>outScrollBottom</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi cu\u1ED1i (bottom)</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Interface</h4>\n <div class=\"interface-description\">\n <p>Interface <code>IScrollOverlayOptions</code> \u0111\u1ECBnh ngh\u0129a c\u00E1c tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh cho scroll-overlay directive:\n </p>\n <pre><code>export interface IScrollOverlayOptions {{ '{' }}\n scrollbarWidth?: number; // Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)\n scrollbarColor?: string; // M\u00E0u n\u1EC1n track\n scrollbarHoverColor?: string; // M\u00E0u n\u1EC1n track khi hover\n scrollThumbColor?: string; // M\u00E0u thumb\n scrollThumbHoverColor?: string; // M\u00E0u thumb khi hover\n scrollbarPadding?: number; // Padding c\u1EE7a scrollbar\n scrollX?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X\n scrollXOpacity0?: boolean; // \u1EA8n track X khi kh\u00F4ng hover\n scrollY?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y\n scrollYOpacity0?: boolean; // \u1EA8n track Y khi kh\u00F4ng hover\n{{ '}' }}</code></pre>\n </div>\n\n <div class=\"interface-usage\">\n <h5>V\u00ED d\u1EE5 s\u1EED d\u1EE5ng:</h5>\n <pre><code>// C\u1EA5u h\u00ECnh c\u01A1 b\u1EA3n\nconst basicOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh n\u00E2ng cao v\u1EDBi hover effects\nconst advancedOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollbarHoverColor: '#e5e7eb',\n scrollThumbColor: '#3b82f6',\n scrollThumbHoverColor: '#2563eb',\n scrollbarPadding: 4,\n scrollYOpacity0: true\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh cho scroll ngang\nconst horizontalOptions: IScrollOverlayOptions = {{ '{' }}\n scrollX: 'scroll',\n scrollY: 'hidden',\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};</code></pre>\n </div>\n\n <div class=\"interface-notes\">\n <h5>Ghi ch\u00FA:</h5>\n <ul>\n <li>T\u1EA5t c\u1EA3 c\u00E1c thu\u1ED9c t\u00EDnh \u0111\u1EC1u l\u00E0 optional (c\u00F3 d\u1EA5u ?)</li>\n <li>N\u1EBFu kh\u00F4ng cung c\u1EA5p gi\u00E1 tr\u1ECB, directive s\u1EBD s\u1EED d\u1EE5ng gi\u00E1 tr\u1ECB m\u1EB7c \u0111\u1ECBnh</li>\n <li>C\u00F3 th\u1EC3 k\u1EBFt h\u1EE3p nhi\u1EC1u options \u0111\u1EC3 t\u1EA1o ra giao di\u1EC7n thanh cu\u1ED9n ph\u00F9 h\u1EE3p</li>\n <li>M\u00E0u s\u1EAFc c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng b\u1EA5t k\u1EF3 \u0111\u1ECBnh d\u1EA1ng CSS color n\u00E0o (hex, rgb, rgba, etc.)</li>\n <li>scrollX v\u00E0 scrollY ch\u1EC9 nh\u1EADn m\u1ED9t trong hai gi\u00E1 tr\u1ECB: 'hidden' ho\u1EB7c 'scroll'</li>\n </ul>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Options (IScrollOverlayOptions)</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Thu\u1ED9c t\u00EDnh</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>scrollbarWidth</td>\n <td>number</td>\n <td>Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)</td>\n </tr>\n <tr>\n <td>scrollbarColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track</td>\n </tr>\n <tr>\n <td>scrollbarHoverColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track khi hover</td>\n </tr>\n <tr>\n <td>scrollThumbColor</td>\n <td>string</td>\n <td>M\u00E0u thumb</td>\n </tr>\n <tr>\n <td>scrollThumbHoverColor</td>\n <td>string</td>\n <td>M\u00E0u thumb khi hover</td>\n </tr>\n <tr>\n <td>scrollbarPadding</td>\n <td>number</td>\n <td>Padding c\u1EE7a scrollbar</td>\n </tr>\n <tr>\n <td>scrollX</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X</td>\n </tr>\n <tr>\n <td>scrollXOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track X khi kh\u00F4ng hover</td>\n </tr>\n <tr>\n <td>scrollY</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y</td>\n </tr>\n <tr>\n <td>scrollYOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track Y khi kh\u00F4ng hover</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- Basic Demo -->\n <div class=\"demo-section\">\n <h3>1. Basic Usage</h3>\n <div class=\"demo-description\">\n <p>S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh c\u1EE7a scroll-overlay directive.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px;\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Custom Styling Demo -->\n <div class=\"demo-section\">\n <h3>2. Custom Styling</h3>\n <div class=\"demo-description\">\n <p>Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6',\n scrollbarPadding: 4\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"customStyleOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Auto Hide Demo -->\n <div class=\"demo-section\">\n <h3>3. Auto Hide on Hover</h3>\n <div class=\"demo-description\">\n <p>\u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover v\u00E0o container.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollYOpacity0: true,\n scrollbarColor: 'transparent',\n scrollThumbColor: '#9ca3af'\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"autoHideOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Horizontal Scroll Demo -->\n <div class=\"demo-section\">\n <h3>4. Horizontal Scroll</h3>\n <div class=\"demo-description\">\n <p>Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollX: 'scroll',\n scrollY: 'hidden'\n {{ '}' }}\"&gt;\n &lt;div style=\"white-space: nowrap;\"&gt;\n N\u1ED9i dung ngang d\u00E0i...\n &lt;/div&gt;\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"horizontalOptions()\"\n style=\"width: 300px; height: 100px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px; white-space: nowrap;\">\n {{ longHorizontalContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Event Handling Demo -->\n <div class=\"demo-section\">\n <h3>5. Event Handling</h3>\n <div class=\"demo-description\">\n <p>X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n <div class=\"event-log\">\n <p>Last Event: {{ lastEvent() }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.demo-container{padding:24px;font-family:system-ui,-apple-system,sans-serif;max-width:1200px;margin:0 auto}.demo-intro{margin-bottom:32px}.demo-intro h3{color:#333;margin-bottom:16px}.demo-intro ul{list-style:none;padding:0}.demo-intro ul li{margin-bottom:8px;padding-left:20px;position:relative}.demo-intro ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.demo-features{margin-bottom:32px}.demo-features h3{color:#333;margin-bottom:16px}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.feature-item{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.feature-item h4{color:#1e40af;margin:0 0 8px}.feature-item p{margin:0;color:#64748b}.demo-api{margin-bottom:48px}.demo-api h3{color:#333;margin-bottom:24px}.api-section{margin-bottom:32px}.api-section h4{color:#1e40af;margin-bottom:16px}.api-table{overflow-x:auto}.api-table table{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.api-table table th,.api-table table td{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0}.api-table table th{background:#f8fafc;font-weight:600;color:#1e40af}.api-table table td{color:#64748b}.api-table table td:first-child{font-family:Fira Code,monospace;color:#334155}.api-table table td:nth-child(2){font-family:Fira Code,monospace;color:#3b82f6}.api-table table tr:last-child td{border-bottom:none}.demo-section{margin-bottom:48px}.demo-section h3{color:#333;margin-bottom:16px}.demo-description{margin-bottom:16px}.demo-description p{color:#64748b;margin-bottom:12px}.demo-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.demo-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155}.demo-box{display:flex;gap:16px;align-items:flex-start}.event-log{padding:16px;background:#f5f5f5;border-radius:4px;min-width:200px}.event-log p{margin:0;font-size:14px;color:#666}.demo-notes{margin-top:48px;padding:24px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0}.demo-notes h3{color:#333;margin-bottom:16px}.demo-notes ul{list-style:none;padding:0;margin:0}.demo-notes ul li{color:#64748b;margin-bottom:12px;padding-left:24px;position:relative}.demo-notes ul li:before{content:\"\\2192\";position:absolute;left:0;color:#3b82f6}.demo-notes ul li:last-child{margin-bottom:0}.interface-description{margin-bottom:24px}.interface-description p{color:#64748b;margin-bottom:16px}.interface-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage{margin-bottom:24px}.interface-usage h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-usage pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-usage pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage pre code .comment{color:#64748b}.interface-notes{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.interface-notes h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-notes ul{list-style:none;padding:0;margin:0}.interface-notes ul li{color:#64748b;margin-bottom:8px;padding-left:20px;position:relative}.interface-notes ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.interface-notes ul li:last-child{margin-bottom:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "ignoreInit", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY", "elementScroll"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }] });
411
+ }
412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsScrollOverlayDemoComponent, decorators: [{
413
+ type: Component,
414
+ args: [{ selector: 'lib-scroll-overlay-demo', standalone: true, imports: [CommonModule, LibsUiComponentsScrollOverlayDirective], template: "<div class=\"demo-container\">\n <h2>Scroll Overlay Demo</h2>\n\n <div class=\"demo-intro\">\n <h3>Gi\u1EDBi thi\u1EC7u</h3>\n <p>Demo n\u00E0y minh h\u1ECDa c\u00E1c t\u00EDnh n\u0103ng v\u00E0 c\u00E1ch s\u1EED d\u1EE5ng c\u1EE7a directive `scroll-overlay`. Demo bao g\u1ED3m 5 v\u00ED d\u1EE5 ch\u00EDnh:</p>\n <ul>\n <li><strong>Basic Usage</strong>: S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh</li>\n <li><strong>Custom Styling</strong>: Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n</li>\n <li><strong>Auto Hide</strong>: \u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover</li>\n <li><strong>Horizontal Scroll</strong>: Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i</li>\n <li><strong>Event Handling</strong>: X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll</li>\n </ul>\n </div>\n\n <div class=\"demo-features\">\n <h3>T\u00EDnh n\u0103ng Demo</h3>\n <div class=\"features-grid\">\n <div class=\"feature-item\">\n <h4>Tu\u1EF3 bi\u1EBFn giao di\u1EC7n</h4>\n <p>Thay \u0111\u1ED5i m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc, padding c\u1EE7a thanh cu\u1ED9n</p>\n </div>\n <div class=\"feature-item\">\n <h4>Hi\u1EC7u \u1EE9ng t\u01B0\u01A1ng t\u00E1c</h4>\n <p>Hover effects, auto-hide khi kh\u00F4ng s\u1EED d\u1EE5ng</p>\n </div>\n <div class=\"feature-item\">\n <h4>\u0110a h\u01B0\u1EDBng cu\u1ED9n</h4>\n <p>H\u1ED7 tr\u1EE3 c\u1EA3 cu\u1ED9n d\u1ECDc v\u00E0 ngang</p>\n </div>\n <div class=\"feature-item\">\n <h4>Event handling</h4>\n <p>Theo d\u00F5i c\u00E1c s\u1EF1 ki\u1EC7n scroll (top, bottom, scroll)</p>\n </div>\n <div class=\"feature-item\">\n <h4>Responsive</h4>\n <p>Ho\u1EA1t \u0111\u1ED9ng t\u1ED1t tr\u00EAn m\u1ECDi k\u00EDch th\u01B0\u1EDBc m\u00E0n h\u00ECnh</p>\n </div>\n <div class=\"feature-item\">\n <h4>T\u00EDch h\u1EE3p d\u1EC5 d\u00E0ng</h4>\n <p>C\u00F3 th\u1EC3 th\u00EAm v\u00E0o b\u1EA5t k\u1EF3 container n\u00E0o</p>\n </div>\n </div>\n </div>\n\n <div class=\"demo-api\">\n <h3>API Reference</h3>\n\n <div class=\"api-section\">\n <h4>Inputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Input</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>options</td>\n <td>IScrollOverlayOptions</td>\n <td>Tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh thanh cu\u1ED9n</td>\n </tr>\n <tr>\n <td>debugMode</td>\n <td>boolean</td>\n <td>B\u1EADt ch\u1EBF \u0111\u1ED9 debug</td>\n </tr>\n <tr>\n <td>ignoreInit</td>\n <td>boolean</td>\n <td>B\u1ECF qua kh\u1EDFi t\u1EA1o directive</td>\n </tr>\n <tr>\n <td>classContainer</td>\n <td>string</td>\n <td>Th\u00EAm class cho container b\u1ECDc ngo\u00E0i</td>\n </tr>\n <tr>\n <td>notShowScrollBarX</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n ngang</td>\n </tr>\n <tr>\n <td>notShowScrollBarY</td>\n <td>boolean</td>\n <td>Kh\u00F4ng hi\u1EC3n th\u1ECB thanh cu\u1ED9n d\u1ECDc</td>\n </tr>\n <tr>\n <td>elementCheckScrollX</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll X</td>\n </tr>\n <tr>\n <td>elementCheckScrollY</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED d\u00F9ng \u0111\u1EC3 ki\u1EC3m tra scroll Y</td>\n </tr>\n <tr>\n <td>elementScroll</td>\n <td>HTMLElement</td>\n <td>Ph\u1EA7n t\u1EED th\u1EF1c hi\u1EC7n scroll</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Outputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Output</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>outScroll</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll b\u1EA5t k\u1EF3</td>\n </tr>\n <tr>\n <td>outScrollX</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u ngang</td>\n </tr>\n <tr>\n <td>outScrollY</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll theo chi\u1EC1u d\u1ECDc</td>\n </tr>\n <tr>\n <td>outScrollTop</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi \u0111\u1EA7u (top)</td>\n </tr>\n <tr>\n <td>outScrollBottom</td>\n <td>Event</td>\n <td>B\u1EAFn ra khi scroll t\u1EDBi cu\u1ED1i (bottom)</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Interface</h4>\n <div class=\"interface-description\">\n <p>Interface <code>IScrollOverlayOptions</code> \u0111\u1ECBnh ngh\u0129a c\u00E1c tu\u1EF3 ch\u1ECDn c\u1EA5u h\u00ECnh cho scroll-overlay directive:\n </p>\n <pre><code>export interface IScrollOverlayOptions {{ '{' }}\n scrollbarWidth?: number; // Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)\n scrollbarColor?: string; // M\u00E0u n\u1EC1n track\n scrollbarHoverColor?: string; // M\u00E0u n\u1EC1n track khi hover\n scrollThumbColor?: string; // M\u00E0u thumb\n scrollThumbHoverColor?: string; // M\u00E0u thumb khi hover\n scrollbarPadding?: number; // Padding c\u1EE7a scrollbar\n scrollX?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X\n scrollXOpacity0?: boolean; // \u1EA8n track X khi kh\u00F4ng hover\n scrollY?: 'hidden' | 'scroll'; // Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y\n scrollYOpacity0?: boolean; // \u1EA8n track Y khi kh\u00F4ng hover\n{{ '}' }}</code></pre>\n </div>\n\n <div class=\"interface-usage\">\n <h5>V\u00ED d\u1EE5 s\u1EED d\u1EE5ng:</h5>\n <pre><code>// C\u1EA5u h\u00ECnh c\u01A1 b\u1EA3n\nconst basicOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh n\u00E2ng cao v\u1EDBi hover effects\nconst advancedOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollbarHoverColor: '#e5e7eb',\n scrollThumbColor: '#3b82f6',\n scrollThumbHoverColor: '#2563eb',\n scrollbarPadding: 4,\n scrollYOpacity0: true\n{{ '}' }};\n\n// C\u1EA5u h\u00ECnh cho scroll ngang\nconst horizontalOptions: IScrollOverlayOptions = {{ '{' }}\n scrollX: 'scroll',\n scrollY: 'hidden',\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};</code></pre>\n </div>\n\n <div class=\"interface-notes\">\n <h5>Ghi ch\u00FA:</h5>\n <ul>\n <li>T\u1EA5t c\u1EA3 c\u00E1c thu\u1ED9c t\u00EDnh \u0111\u1EC1u l\u00E0 optional (c\u00F3 d\u1EA5u ?)</li>\n <li>N\u1EBFu kh\u00F4ng cung c\u1EA5p gi\u00E1 tr\u1ECB, directive s\u1EBD s\u1EED d\u1EE5ng gi\u00E1 tr\u1ECB m\u1EB7c \u0111\u1ECBnh</li>\n <li>C\u00F3 th\u1EC3 k\u1EBFt h\u1EE3p nhi\u1EC1u options \u0111\u1EC3 t\u1EA1o ra giao di\u1EC7n thanh cu\u1ED9n ph\u00F9 h\u1EE3p</li>\n <li>M\u00E0u s\u1EAFc c\u00F3 th\u1EC3 s\u1EED d\u1EE5ng b\u1EA5t k\u1EF3 \u0111\u1ECBnh d\u1EA1ng CSS color n\u00E0o (hex, rgb, rgba, etc.)</li>\n <li>scrollX v\u00E0 scrollY ch\u1EC9 nh\u1EADn m\u1ED9t trong hai gi\u00E1 tr\u1ECB: 'hidden' ho\u1EB7c 'scroll'</li>\n </ul>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Options (IScrollOverlayOptions)</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Thu\u1ED9c t\u00EDnh</th>\n <th>Type</th>\n <th>M\u00F4 t\u1EA3</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>scrollbarWidth</td>\n <td>number</td>\n <td>Chi\u1EC1u r\u1ED9ng thanh cu\u1ED9n (px)</td>\n </tr>\n <tr>\n <td>scrollbarColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track</td>\n </tr>\n <tr>\n <td>scrollbarHoverColor</td>\n <td>string</td>\n <td>M\u00E0u n\u1EC1n track khi hover</td>\n </tr>\n <tr>\n <td>scrollThumbColor</td>\n <td>string</td>\n <td>M\u00E0u thumb</td>\n </tr>\n <tr>\n <td>scrollThumbHoverColor</td>\n <td>string</td>\n <td>M\u00E0u thumb khi hover</td>\n </tr>\n <tr>\n <td>scrollbarPadding</td>\n <td>number</td>\n <td>Padding c\u1EE7a scrollbar</td>\n </tr>\n <tr>\n <td>scrollX</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll X</td>\n </tr>\n <tr>\n <td>scrollXOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track X khi kh\u00F4ng hover</td>\n </tr>\n <tr>\n <td>scrollY</td>\n <td>'hidden'|'scroll'</td>\n <td>Ki\u1EC3u hi\u1EC3n th\u1ECB scroll Y</td>\n </tr>\n <tr>\n <td>scrollYOpacity0</td>\n <td>boolean</td>\n <td>\u1EA8n track Y khi kh\u00F4ng hover</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- Basic Demo -->\n <div class=\"demo-section\">\n <h3>1. Basic Usage</h3>\n <div class=\"demo-description\">\n <p>S\u1EED d\u1EE5ng c\u01A1 b\u1EA3n v\u1EDBi c\u1EA5u h\u00ECnh m\u1EB7c \u0111\u1ECBnh c\u1EE7a scroll-overlay directive.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px;\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Custom Styling Demo -->\n <div class=\"demo-section\">\n <h3>2. Custom Styling</h3>\n <div class=\"demo-description\">\n <p>Tu\u1EF3 ch\u1EC9nh m\u00E0u s\u1EAFc, k\u00EDch th\u01B0\u1EDBc v\u00E0 padding c\u1EE7a thanh cu\u1ED9n.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6',\n scrollbarPadding: 4\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"customStyleOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Auto Hide Demo -->\n <div class=\"demo-section\">\n <h3>3. Auto Hide on Hover</h3>\n <div class=\"demo-description\">\n <p>\u1EA8n/hi\u1EC7n thanh cu\u1ED9n khi hover v\u00E0o container.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollYOpacity0: true,\n scrollbarColor: 'transparent',\n scrollThumbColor: '#9ca3af'\n {{ '}' }}\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"autoHideOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Horizontal Scroll Demo -->\n <div class=\"demo-section\">\n <h3>4. Horizontal Scroll</h3>\n <div class=\"demo-description\">\n <p>Cu\u1ED9n ngang v\u1EDBi n\u1ED9i dung d\u00E0i.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollX: 'scroll',\n scrollY: 'hidden'\n {{ '}' }}\"&gt;\n &lt;div style=\"white-space: nowrap;\"&gt;\n N\u1ED9i dung ngang d\u00E0i...\n &lt;/div&gt;\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"horizontalOptions()\"\n style=\"width: 300px; height: 100px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px; white-space: nowrap;\">\n {{ longHorizontalContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Event Handling Demo -->\n <div class=\"demo-section\">\n <h3>5. Event Handling</h3>\n <div class=\"demo-description\">\n <p>X\u1EED l\u00FD c\u00E1c s\u1EF1 ki\u1EC7n scroll.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"&gt;\n N\u1ED9i dung d\u00E0i...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n <div class=\"event-log\">\n <p>Last Event: {{ lastEvent() }}</p>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.demo-container{padding:24px;font-family:system-ui,-apple-system,sans-serif;max-width:1200px;margin:0 auto}.demo-intro{margin-bottom:32px}.demo-intro h3{color:#333;margin-bottom:16px}.demo-intro ul{list-style:none;padding:0}.demo-intro ul li{margin-bottom:8px;padding-left:20px;position:relative}.demo-intro ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.demo-features{margin-bottom:32px}.demo-features h3{color:#333;margin-bottom:16px}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:16px}.feature-item{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.feature-item h4{color:#1e40af;margin:0 0 8px}.feature-item p{margin:0;color:#64748b}.demo-api{margin-bottom:48px}.demo-api h3{color:#333;margin-bottom:24px}.api-section{margin-bottom:32px}.api-section h4{color:#1e40af;margin-bottom:16px}.api-table{overflow-x:auto}.api-table table{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.api-table table th,.api-table table td{padding:12px 16px;text-align:left;border-bottom:1px solid #e2e8f0}.api-table table th{background:#f8fafc;font-weight:600;color:#1e40af}.api-table table td{color:#64748b}.api-table table td:first-child{font-family:Fira Code,monospace;color:#334155}.api-table table td:nth-child(2){font-family:Fira Code,monospace;color:#3b82f6}.api-table table tr:last-child td{border-bottom:none}.demo-section{margin-bottom:48px}.demo-section h3{color:#333;margin-bottom:16px}.demo-description{margin-bottom:16px}.demo-description p{color:#64748b;margin-bottom:12px}.demo-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.demo-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155}.demo-box{display:flex;gap:16px;align-items:flex-start}.event-log{padding:16px;background:#f5f5f5;border-radius:4px;min-width:200px}.event-log p{margin:0;font-size:14px;color:#666}.demo-notes{margin-top:48px;padding:24px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0}.demo-notes h3{color:#333;margin-bottom:16px}.demo-notes ul{list-style:none;padding:0;margin:0}.demo-notes ul li{color:#64748b;margin-bottom:12px;padding-left:24px;position:relative}.demo-notes ul li:before{content:\"\\2192\";position:absolute;left:0;color:#3b82f6}.demo-notes ul li:last-child{margin-bottom:0}.interface-description{margin-bottom:24px}.interface-description p{color:#64748b;margin-bottom:16px}.interface-description pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-description pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage{margin-bottom:24px}.interface-usage h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-usage pre{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;overflow-x:auto}.interface-usage pre code{font-family:Fira Code,monospace;font-size:14px;color:#334155;line-height:1.6}.interface-usage pre code .comment{color:#64748b}.interface-notes{background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0}.interface-notes h5{color:#1e40af;margin-bottom:12px;font-size:16px}.interface-notes ul{list-style:none;padding:0;margin:0}.interface-notes ul li{color:#64748b;margin-bottom:8px;padding-left:20px;position:relative}.interface-notes ul li:before{content:\"\\2022\";position:absolute;left:0;color:#3b82f6}.interface-notes ul li:last-child{margin-bottom:0}\n"] }]
415
+ }] });
416
+
370
417
  /**
371
418
  * Generated bundle index. Do not edit.
372
419
  */
373
420
 
374
- export { LibsUiComponentsScrollOverlayDirective };
421
+ export { LibsUiComponentsScrollOverlayDemoComponent, LibsUiComponentsScrollOverlayDirective };
375
422
  //# sourceMappingURL=libs-ui-components-scroll-overlay.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-scroll-overlay.mjs","sources":["../../../../../libs-ui/components/scroll-overlay/src/scroll-overlay.directive.ts","../../../../../libs-ui/components/scroll-overlay/src/scroll.interface.ts","../../../../../libs-ui/components/scroll-overlay/src/libs-ui-components-scroll-overlay.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Directive, ElementRef, OnDestroy, Renderer2, computed, effect, inject, input, output, signal, untracked } from \"@angular/core\";\nimport { checkMouseOverInContainer, getDragEventByElement } from '@libs-ui/utils';\nimport { Subject, Subscription, fromEvent, interval, switchMap, takeUntil, tap } from \"rxjs\";\nimport { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from \"./scroll.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsScrollOverlayDirective]',\n standalone: true\n})\nexport class LibsUiComponentsScrollOverlayDirective implements OnDestroy {\n // #region PROPERTY\n private readonly styles = computed(() => `\n .scrollbar-track{\n background-color:${this.scrollbarColor()};\n }\n .scrollbar-track:hover{\n background-color:${this.scrollbarHoverColor()};\n }\n .scrollbar-track-X {\n width:100%;\n position: absolute;\n bottom: 0;\n left: 0;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-track-Y {\n height:100%;\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-thumb{\n background-color:${this.scrollThumbColor()};\n }\n .scrollbar-thumb:hover{\n background-color:${this.scrollThumbHoverColor()};\n }\n\n .scrollbar-thumb-X {\n height: calc(100% - ${this.scrollbarPadding() * 2}px);\n bottom: ${this.scrollbarPadding()}px;\n border-radius: 4px;\n cursor: move;\n transition: background-color 0.3s;\n position: absolute;\n }\n\n .scrollbar-thumb-Y {\n width: calc(100% - ${this.scrollbarPadding() * 2}px);\n right: ${this.scrollbarPadding()}px;\n border-radius: 4px;\n cursor: move;\n transition: background-color 0.3s;\n position: absolute;\n }\n `, {})\n private isScrollThumb = signal<boolean>(false);\n private keepDisplayThumb = signal<boolean>(false);\n private subsX = new Subscription();\n private subsY = new Subscription();\n private scrollbarWidth = computed(() => this.options()?.scrollbarWidth ?? 10); // Chiều rộng thanh cuộn\n private scrollbarPadding = computed(() => this.options()?.scrollbarPadding ?? 2); // Chiều rộng thanh cuộn\n private scrollbarColor = computed(() => this.options()?.scrollbarColor ?? '');\n private scrollbarHoverColor = computed(() => this.options()?.scrollbarColor ?? '#CDD0D640');\n private scrollThumbColor = computed(() => this.options()?.scrollThumbColor ?? '#CDD0D6');\n private scrollThumbHoverColor = computed(() => this.options()?.scrollThumbHoverColor ?? '#9CA2AD');\n private readonly divContainer = document.createElement('div');\n private readonly trackX: HTMLElement = document.createElement('div');\n private readonly thumbX: HTMLElement = document.createElement('div');\n private readonly trackY: HTMLElement = document.createElement('div');\n private readonly thumbY: HTMLElement = document.createElement('div');\n private readonly onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly debugMode = input<boolean>(false);\n readonly ignoreInit = input<boolean>(false);\n readonly classContainer = input<string, string | undefined>('', { transform: value => value ?? '' });\n readonly notShowScrollBarX = input<boolean>();\n readonly notShowScrollBarY = input<boolean>();\n readonly options = input<IScrollOverlayOptions | undefined>(Object.assign({}));\n readonly elementCheckScrollX = input<HTMLElement>();\n readonly elementCheckScrollY = input<HTMLElement>();\n readonly elementScroll = input<HTMLElement>();\n\n // #region OUTPUT\n readonly outScroll = output<Event>();\n readonly outScrollX = output<Event>();\n readonly outScrollY = output<Event>();\n readonly outScrollTop = output<Event>();\n readonly outScrollBottom = output<Event>();\n\n // #region INJECT\n private element = inject(ElementRef);\n private render2 = inject(Renderer2);\n\n constructor() {\n effect(() => {\n if (this.ignoreInit()) {\n return;\n }\n const options = this.options();\n this.divContainer.className = '';\n this.classContainer()?.split(' ').forEach(className => {\n if (!className) {\n return;\n }\n this.divContainer.classList.add(className);\n });\n\n untracked(() => {\n this.Element.classList.toggle('overflow-hidden', options?.scrollX === 'hidden' && options?.scrollY === 'hidden');\n if (options?.scrollX !== 'hidden') {\n this.subsX.unsubscribe();\n this.trackX.className = '';\n this.thumbX.className = '';\n this.trackX.style.height = `${this.scrollbarWidth()}px`;\n this.createScrollbar('X', this.trackX, this.thumbX);\n this.bindEventsScrollBar('X', this.trackX);\n\n this.handlerDragAndDropThumb('X');\n this.handlerClickTrack('X');\n }\n\n if (options?.scrollY !== 'hidden') {\n this.trackY.className = '';\n this.thumbY.className = '';\n this.trackY.style.width = `${this.scrollbarWidth()}px`;\n this.subsY.unsubscribe();\n this.createScrollbar('Y', this.trackY, this.thumbY);\n this.bindEventsScrollBar('Y', this.trackY);\n\n this.handlerDragAndDropThumb('Y');\n this.handlerClickTrack('Y');\n }\n });\n\n });\n }\n\n // #region FUNCTIONS\n private get Element(): HTMLElement {\n return this.elementScroll() || this.element.nativeElement;\n }\n\n private createScrollbar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement, thumbEl: HTMLElement) {\n const idStyleTag = \"#id-style-tag-custom-scroll-overlay\"\n const styleElCustomScrollOverlay = document.getElementById(idStyleTag);\n\n if (!styleElCustomScrollOverlay) {\n const styleEl = document.createElement('style');\n styleEl.setAttribute('id', idStyleTag);\n styleEl.innerHTML = this.styles();\n document.head.append(styleEl);\n }\n\n const stylesProperty = {\n \"box-sizing\": \"border-box\",\n \"scrollbar-width\": \"none\",\n \"scrollbar-color\": \"transparent transparent\",\n \"overflow\": \"hidden\",\n \"overflow-x\": `${this.options()?.scrollX || 'scroll'}`,\n \"overflow-y\": `${this.options()?.scrollY || 'scroll'}`\n } as any;\n\n Object.keys(stylesProperty).forEach(key => {\n this.render2.setStyle(this.Element, key, stylesProperty[key], 1);\n });\n\n trackEl.classList.add(`scrollbar-track`);\n trackEl.classList.add(`scrollbar-track-${scrollDirection}`);\n\n thumbEl.classList.add(`scrollbar-thumb`);\n thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);\n trackEl.appendChild(thumbEl);\n if (this.Element.className) {\n this.Element.className.split(' ').forEach((className: string) => {\n if (className && (['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)(h|w)-\\[[0-9]+px\\]$/.test(className)) && !this.divContainer.classList.contains(className)) {\n this.divContainer.classList.add(className);\n }\n\n });\n if (!this.Element.className.includes('min-h-')) {\n this.divContainer.classList.add('min-h-0');\n\n }\n if (!this.Element.className.includes('min-w-')) {\n this.divContainer.classList.add('min-w-0');\n }\n }\n this.divContainer.appendChild(trackEl);\n\n if (!this.divContainer.style.position) {\n this.Element.parentElement?.insertBefore(this.divContainer, this.Element);\n this.divContainer.style.position = 'relative';\n }\n this.divContainer.append(this.Element);\n this.updateScrollbarSize(scrollDirection);\n }\n\n private bindEventsScrollBar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement) {\n let scrollLeft = this.Element.scrollLeft;\n let scrollTop = this.Element.scrollTop;\n const subs: Subscription = fromEvent<Event>(this.Element, 'scroll').pipe(tap((event) => {\n const target = this.Element;\n\n this.outScroll.emit(event);\n if (scrollDirection === 'X') {\n if (target.scrollLeft && (target.scrollLeft + target.offsetWidth >= target.scrollWidth)) {\n target.scrollLeft = target.scrollWidth - target.offsetWidth - (target.offsetWidth - target.clientWidth);\n }\n\n if (target.scrollLeft !== scrollLeft) {\n this.outScrollX.emit(event);\n\n }\n scrollLeft = target.scrollLeft;\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n if (target.scrollTop === scrollTop) {\n return\n }\n this.updateScrollbarPosition(scrollDirection);\n scrollTop = target.scrollTop;\n this.outScrollY.emit(event);\n\n if (target.scrollTop === 0) {\n return this.outScrollTop.emit(event);\n }\n\n if (target.scrollHeight <= target.scrollTop + target.offsetHeight + 3) {\n return this.outScrollBottom.emit(event);\n }\n }), takeUntil(this.onDestroy)).subscribe();\n\n subs.add(fromEvent(document, 'resize').pipe(tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy)).subscribe());\n\n const mouseLeave = fromEvent(this.divContainer, 'mouseleave');\n const mouseenter = fromEvent(this.divContainer, 'mouseenter');\n\n subs.add(mouseenter.pipe(tap(() => {\n if (scrollDirection === 'X' && !this.options()?.scrollXOpacity0 || scrollDirection === 'Y' && !this.options()?.scrollYOpacity0) {\n trackEl.style.visibility = 'visible';\n trackEl.style.opacity = '1';\n }\n this.updateScrollbarSize(scrollDirection);\n }),\n switchMap(() => interval(1000).pipe(takeUntil(mouseLeave))),\n tap(this.updateScrollbarSize.bind(this, scrollDirection)),\n takeUntil(this.onDestroy)\n ).subscribe());\n\n subs.add(mouseLeave.pipe(tap(() => {\n if (this.keepDisplayThumb()) {\n return;\n }\n trackEl.style.visibility = 'hidden';\n trackEl.style.opacity = '0';\n }), takeUntil(this.onDestroy)).subscribe());\n\n if (scrollDirection === 'X') {\n this.subsX = subs;\n\n return;\n }\n\n if (scrollDirection === 'Y') {\n this.subsY = subs;\n\n return;\n }\n }\n\n protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n\n subs.add(fromEvent<MouseEvent>(elementTrack, 'click').subscribe(e => {\n if (this.isScrollThumb()) {\n return;\n }\n if ((scrollDirection === 'X' && e.clientX < elementThumb.getBoundingClientRect().left) || (scrollDirection === 'Y' && e.clientY < elementThumb.getBoundingClientRect().top)) {\n this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', 0);\n return;\n }\n\n if (scrollDirection === 'X') {\n this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', -1 * elementThumb.getBoundingClientRect().width);\n return;\n }\n this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', -1 * elementThumb.getBoundingClientRect().height);\n }));\n }\n\n protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n let lengthThumbToPointClick = 0;\n\n subs.add(getDragEventByElement({\n elementMouseDown: elementThumb,\n functionMouseDown: (mouseEvent: MouseEvent) => {\n this.isScrollThumb.set(true);\n this.keepDisplayThumb.set(true);\n if (scrollDirection === 'X') {\n lengthThumbToPointClick = elementThumb.getBoundingClientRect().left - mouseEvent.clientX;\n return;\n }\n lengthThumbToPointClick = elementThumb.getBoundingClientRect().top - mouseEvent.clientY;\n },\n functionMouseUp: (mouseEvent: MouseEvent) => {\n this.keepDisplayThumb.set(false);\n lengthThumbToPointClick = 0;\n if (!checkMouseOverInContainer(mouseEvent, this.Element)) {\n elementTrack.style.visibility = 'hidden';\n elementTrack.style.opacity = '0';\n }\n setTimeout(() => {\n this.isScrollThumb.set(false);\n }, 250);\n },\n onDestroy: this.onDestroy\n }).subscribe((mouseEvent: MouseEvent) => {\n this.updateScrollPositionByUserAction(scrollDirection, mouseEvent, 'auto', lengthThumbToPointClick)\n }));\n }\n\n private updateScrollPositionByUserAction(scrollDirection: TYPE_SCROLL_DIRECTION, e: MouseEvent, behavior: 'auto' | 'smooth', lengthThumbToPointClick = 0) {\n e.stopPropagation();\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left + lengthThumbToPointClick;\n const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);\n\n this.Element.scroll({ left: scrollLeft, behavior });\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top + lengthThumbToPointClick;\n const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);\n\n this.Element.scroll({ top: scrollTop, behavior });\n }\n\n private updateScrollbarSize(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbWidth = (containerWidth / contentWidth) * (containerWidth);\n\n this.thumbX.style.width = `${thumbWidth}px`;\n this.trackX.style.display = 'none';\n if (contentWidth > containerWidth) {\n this.trackX.style.display = 'block';\n }\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbHeight = (containerHeight / contentHeight) * (containerHeight);\n\n this.thumbY.style.height = `${Math.max(20, thumbHeight)}px`;\n this.trackY.style.display = 'none';\n if (contentHeight > containerHeight) {\n this.trackY.style.display = 'block';\n }\n\n this.updateScrollbarPosition('Y');\n }\n\n private updateScrollbarPosition(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const scrollLeft = this.Element.scrollLeft;\n const thumbPosition = (scrollLeft / (contentWidth - containerWidth)) * (containerWidth - this.thumbX.offsetWidth);\n\n this.thumbX.style.left = `${thumbPosition}px`;\n\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const scrollTop = this.Element.scrollTop;\n const thumbPosition = (scrollTop / (contentHeight - containerHeight)) * (containerHeight - this.thumbY.offsetHeight);\n\n this.thumbY.style.top = `${thumbPosition}px`;\n }\n\n ngOnDestroy(): void {\n this.divContainer.remove();\n this.subsX.unsubscribe();\n this.subsY.unsubscribe();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n}","export type TYPE_SCROLL_DIRECTION = 'X' | 'Y';\nexport type TYPE_SCROLL_OVERFLOW = 'hidden' | 'scroll';\nexport interface IScrollOverlayOptions {\n scrollbarWidth?: number;\n scrollbarColor?: string;\n scrollbarHoverColor?: string;\n scrollThumbColor?: string;\n scrollThumbHoverColor?: string;\n scrollbarPadding?: number;\n scrollX?: TYPE_SCROLL_OVERFLOW;\n scrollXOpacity0?: boolean;\n scrollY?: TYPE_SCROLL_OVERFLOW;\n scrollYOpacity0?: boolean;\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-scroll-overlay.mjs","sources":["../../../../../libs-ui/components/scroll-overlay/src/scroll-overlay.directive.ts","../../../../../libs-ui/components/scroll-overlay/src/scroll.interface.ts","../../../../../libs-ui/components/scroll-overlay/src/demo/scroll-overlay.demo.ts","../../../../../libs-ui/components/scroll-overlay/src/demo/scroll-overlay.demo.html","../../../../../libs-ui/components/scroll-overlay/src/libs-ui-components-scroll-overlay.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Directive, ElementRef, OnDestroy, Renderer2, computed, effect, inject, input, output, signal, untracked } from \"@angular/core\";\nimport { checkMouseOverInContainer, getDragEventByElement } from '@libs-ui/utils';\nimport { Subject, Subscription, fromEvent, interval, switchMap, takeUntil, tap } from \"rxjs\";\nimport { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from \"./scroll.interface\";\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsScrollOverlayDirective]',\n standalone: true\n})\nexport class LibsUiComponentsScrollOverlayDirective implements OnDestroy {\n // #region PROPERTY\n private readonly styles = computed(() => `\n .scrollbar-track{\n background-color:${this.scrollbarColor()};\n }\n .scrollbar-track:hover{\n background-color:${this.scrollbarHoverColor()};\n }\n .scrollbar-track-X {\n width:100%;\n position: absolute;\n bottom: 0;\n left: 0;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-track-Y {\n height:100%;\n position: absolute;\n top: 0;\n right: 0;\n visibility: hidden;\n cursor: pointer;\n opacity: 0;\n z-index: 1;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n }\n\n .scrollbar-thumb{\n background-color:${this.scrollThumbColor()};\n }\n .scrollbar-thumb:hover{\n background-color:${this.scrollThumbHoverColor()};\n }\n\n .scrollbar-thumb-X {\n height: calc(100% - ${this.scrollbarPadding() * 2}px);\n bottom: ${this.scrollbarPadding()}px;\n border-radius: 4px;\n cursor: move;\n transition: background-color 0.3s;\n position: absolute;\n }\n\n .scrollbar-thumb-Y {\n width: calc(100% - ${this.scrollbarPadding() * 2}px);\n right: ${this.scrollbarPadding()}px;\n border-radius: 4px;\n cursor: move;\n transition: background-color 0.3s;\n position: absolute;\n }\n `, {})\n private isScrollThumb = signal<boolean>(false);\n private keepDisplayThumb = signal<boolean>(false);\n private subsX = new Subscription();\n private subsY = new Subscription();\n private scrollbarWidth = computed(() => this.options()?.scrollbarWidth ?? 10); // Chiều rộng thanh cuộn\n private scrollbarPadding = computed(() => this.options()?.scrollbarPadding ?? 2); // Chiều rộng thanh cuộn\n private scrollbarColor = computed(() => this.options()?.scrollbarColor ?? '');\n private scrollbarHoverColor = computed(() => this.options()?.scrollbarColor ?? '#CDD0D640');\n private scrollThumbColor = computed(() => this.options()?.scrollThumbColor ?? '#CDD0D6');\n private scrollThumbHoverColor = computed(() => this.options()?.scrollThumbHoverColor ?? '#9CA2AD');\n private readonly divContainer = document.createElement('div');\n private readonly trackX: HTMLElement = document.createElement('div');\n private readonly thumbX: HTMLElement = document.createElement('div');\n private readonly trackY: HTMLElement = document.createElement('div');\n private readonly thumbY: HTMLElement = document.createElement('div');\n private readonly onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly debugMode = input<boolean>(false);\n readonly ignoreInit = input<boolean>(false);\n readonly classContainer = input<string, string | undefined>('', { transform: value => value ?? '' });\n readonly options = input<IScrollOverlayOptions | undefined>(Object.assign({}));\n readonly elementCheckScrollX = input<HTMLElement>();\n readonly elementCheckScrollY = input<HTMLElement>();\n readonly elementScroll = input<HTMLElement>();\n\n // #region OUTPUT\n readonly outScroll = output<Event>();\n readonly outScrollX = output<Event>();\n readonly outScrollY = output<Event>();\n readonly outScrollTop = output<Event>();\n readonly outScrollBottom = output<Event>();\n\n // #region INJECT\n private element = inject(ElementRef);\n private render2 = inject(Renderer2);\n\n constructor() {\n effect(() => {\n if (this.ignoreInit()) {\n return;\n }\n const options = this.options();\n this.divContainer.className = '';\n this.classContainer()?.split(' ').forEach(className => {\n if (!className) {\n return;\n }\n this.divContainer.classList.add(className);\n });\n\n untracked(() => {\n this.Element.classList.toggle('overflow-hidden', options?.scrollX === 'hidden' && options?.scrollY === 'hidden');\n if (options?.scrollX !== 'hidden') {\n this.subsX.unsubscribe();\n this.trackX.className = '';\n this.thumbX.className = '';\n this.trackX.style.height = `${this.scrollbarWidth()}px`;\n this.createScrollbar('X', this.trackX, this.thumbX);\n this.bindEventsScrollBar('X', this.trackX);\n\n this.handlerDragAndDropThumb('X');\n this.handlerClickTrack('X');\n }\n\n if (options?.scrollY !== 'hidden') {\n this.trackY.className = '';\n this.thumbY.className = '';\n this.trackY.style.width = `${this.scrollbarWidth()}px`;\n this.subsY.unsubscribe();\n this.createScrollbar('Y', this.trackY, this.thumbY);\n this.bindEventsScrollBar('Y', this.trackY);\n\n this.handlerDragAndDropThumb('Y');\n this.handlerClickTrack('Y');\n }\n });\n\n });\n }\n\n // #region FUNCTIONS\n private get Element(): HTMLElement {\n return this.elementScroll() || this.element.nativeElement;\n }\n\n private createScrollbar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement, thumbEl: HTMLElement) {\n const idStyleTag = \"#id-style-tag-custom-scroll-overlay\"\n const styleElCustomScrollOverlay = document.getElementById(idStyleTag);\n\n if (!styleElCustomScrollOverlay) {\n const styleEl = document.createElement('style');\n styleEl.setAttribute('id', idStyleTag);\n styleEl.innerHTML = this.styles();\n document.head.append(styleEl);\n }\n\n const stylesProperty = {\n \"box-sizing\": \"border-box\",\n \"scrollbar-width\": \"none\",\n \"scrollbar-color\": \"transparent transparent\",\n \"overflow\": \"hidden\",\n \"overflow-x\": `${this.options()?.scrollX || 'scroll'}`,\n \"overflow-y\": `${this.options()?.scrollY || 'scroll'}`\n } as any;\n\n Object.keys(stylesProperty).forEach(key => {\n this.render2.setStyle(this.Element, key, stylesProperty[key], 1);\n });\n\n trackEl.classList.add(`scrollbar-track`);\n trackEl.classList.add(`scrollbar-track-${scrollDirection}`);\n\n thumbEl.classList.add(`scrollbar-thumb`);\n thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);\n trackEl.appendChild(thumbEl);\n if (this.Element.className) {\n this.Element.className.split(' ').forEach((className: string) => {\n if (className && (['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)(h|w)-\\[[0-9]+px\\]$/.test(className)) && !this.divContainer.classList.contains(className)) {\n this.divContainer.classList.add(className);\n }\n\n });\n if (!this.Element.className.includes('min-h-')) {\n this.divContainer.classList.add('min-h-0');\n\n }\n if (!this.Element.className.includes('min-w-')) {\n this.divContainer.classList.add('min-w-0');\n }\n }\n this.divContainer.appendChild(trackEl);\n\n if (!this.divContainer.style.position) {\n this.Element.parentElement?.insertBefore(this.divContainer, this.Element);\n this.divContainer.style.position = 'relative';\n }\n this.divContainer.append(this.Element);\n this.updateScrollbarSize(scrollDirection);\n }\n\n private bindEventsScrollBar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement) {\n let scrollLeft = this.Element.scrollLeft;\n let scrollTop = this.Element.scrollTop;\n const subs: Subscription = fromEvent<Event>(this.Element, 'scroll').pipe(tap((event) => {\n const target = this.Element;\n\n this.outScroll.emit(event);\n if (scrollDirection === 'X') {\n if (target.scrollLeft && (target.scrollLeft + target.offsetWidth >= target.scrollWidth)) {\n target.scrollLeft = target.scrollWidth - target.offsetWidth - (target.offsetWidth - target.clientWidth);\n }\n\n if (target.scrollLeft !== scrollLeft) {\n this.outScrollX.emit(event);\n\n }\n scrollLeft = target.scrollLeft;\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n if (target.scrollTop === scrollTop) {\n return\n }\n this.updateScrollbarPosition(scrollDirection);\n scrollTop = target.scrollTop;\n this.outScrollY.emit(event);\n\n if (target.scrollTop === 0) {\n return this.outScrollTop.emit(event);\n }\n\n if (target.scrollHeight <= target.scrollTop + target.offsetHeight + 3) {\n return this.outScrollBottom.emit(event);\n }\n }), takeUntil(this.onDestroy)).subscribe();\n\n subs.add(fromEvent(document, 'resize').pipe(tap(this.updateScrollbarSize.bind(this, scrollDirection)), takeUntil(this.onDestroy)).subscribe());\n\n const mouseLeave = fromEvent(this.divContainer, 'mouseleave');\n const mouseenter = fromEvent(this.divContainer, 'mouseenter');\n\n subs.add(mouseenter.pipe(tap(() => {\n if (scrollDirection === 'X' && !this.options()?.scrollXOpacity0 || scrollDirection === 'Y' && !this.options()?.scrollYOpacity0) {\n trackEl.style.visibility = 'visible';\n trackEl.style.opacity = '1';\n }\n this.updateScrollbarSize(scrollDirection);\n }),\n switchMap(() => interval(1000).pipe(takeUntil(mouseLeave))),\n tap(this.updateScrollbarSize.bind(this, scrollDirection)),\n takeUntil(this.onDestroy)\n ).subscribe());\n\n subs.add(mouseLeave.pipe(tap(() => {\n if (this.keepDisplayThumb()) {\n return;\n }\n trackEl.style.visibility = 'hidden';\n trackEl.style.opacity = '0';\n }), takeUntil(this.onDestroy)).subscribe());\n\n if (scrollDirection === 'X') {\n this.subsX = subs;\n\n return;\n }\n\n if (scrollDirection === 'Y') {\n this.subsY = subs;\n\n return;\n }\n }\n\n protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n\n subs.add(fromEvent<MouseEvent>(elementTrack, 'click').subscribe(e => {\n if (this.isScrollThumb()) {\n return;\n }\n if ((scrollDirection === 'X' && e.clientX < elementThumb.getBoundingClientRect().left) || (scrollDirection === 'Y' && e.clientY < elementThumb.getBoundingClientRect().top)) {\n this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', 0);\n return;\n }\n\n if (scrollDirection === 'X') {\n this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', -1 * elementThumb.getBoundingClientRect().width);\n return;\n }\n this.updateScrollPositionByUserAction(scrollDirection, e, 'smooth', -1 * elementThumb.getBoundingClientRect().height);\n }));\n }\n\n protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n const subs = scrollDirection === 'X' ? this.subsX : this.subsY;\n let lengthThumbToPointClick = 0;\n\n subs.add(getDragEventByElement({\n elementMouseDown: elementThumb,\n functionMouseDown: (mouseEvent: MouseEvent) => {\n this.isScrollThumb.set(true);\n this.keepDisplayThumb.set(true);\n if (scrollDirection === 'X') {\n lengthThumbToPointClick = elementThumb.getBoundingClientRect().left - mouseEvent.clientX;\n return;\n }\n lengthThumbToPointClick = elementThumb.getBoundingClientRect().top - mouseEvent.clientY;\n },\n functionMouseUp: (mouseEvent: MouseEvent) => {\n this.keepDisplayThumb.set(false);\n lengthThumbToPointClick = 0;\n if (!checkMouseOverInContainer(mouseEvent, this.Element)) {\n elementTrack.style.visibility = 'hidden';\n elementTrack.style.opacity = '0';\n }\n setTimeout(() => {\n this.isScrollThumb.set(false);\n }, 250);\n },\n onDestroy: this.onDestroy\n }).subscribe((mouseEvent: MouseEvent) => {\n this.updateScrollPositionByUserAction(scrollDirection, mouseEvent, 'auto', lengthThumbToPointClick)\n }));\n }\n\n private updateScrollPositionByUserAction(scrollDirection: TYPE_SCROLL_DIRECTION, e: MouseEvent, behavior: 'auto' | 'smooth', lengthThumbToPointClick = 0) {\n e.stopPropagation();\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbPosition = e.clientX - this.Element.getBoundingClientRect().left + lengthThumbToPointClick;\n const scrollLeft = (thumbPosition / (containerWidth - this.thumbX.offsetWidth)) * (contentWidth - containerWidth);\n\n this.Element.scroll({ left: scrollLeft, behavior });\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbPosition = e.clientY - this.Element.getBoundingClientRect().top + lengthThumbToPointClick;\n const scrollTop = (thumbPosition / (containerHeight - this.thumbY.offsetHeight)) * (contentHeight - containerHeight);\n\n this.Element.scroll({ top: scrollTop, behavior });\n }\n\n private updateScrollbarSize(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const thumbWidth = (containerWidth / contentWidth) * (containerWidth);\n\n this.thumbX.style.width = `${thumbWidth}px`;\n this.trackX.style.display = 'none';\n if (contentWidth > containerWidth) {\n this.trackX.style.display = 'block';\n }\n this.updateScrollbarPosition(scrollDirection);\n\n return;\n }\n\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const thumbHeight = (containerHeight / contentHeight) * (containerHeight);\n\n this.thumbY.style.height = `${Math.max(20, thumbHeight)}px`;\n this.trackY.style.display = 'none';\n if (contentHeight > containerHeight) {\n this.trackY.style.display = 'block';\n }\n\n this.updateScrollbarPosition('Y');\n }\n\n private updateScrollbarPosition(scrollDirection: TYPE_SCROLL_DIRECTION) {\n if (scrollDirection === 'X') {\n const containerWidth = this.Element.offsetWidth;\n const contentWidth = (this.elementCheckScrollX() || this.Element).scrollWidth;\n const scrollLeft = this.Element.scrollLeft;\n const thumbPosition = (scrollLeft / (contentWidth - containerWidth)) * (containerWidth - this.thumbX.offsetWidth);\n\n this.thumbX.style.left = `${thumbPosition}px`;\n\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const scrollTop = this.Element.scrollTop;\n const thumbPosition = (scrollTop / (contentHeight - containerHeight)) * (containerHeight - this.thumbY.offsetHeight);\n\n this.thumbY.style.top = `${thumbPosition}px`;\n }\n\n ngOnDestroy(): void {\n this.divContainer.remove();\n this.subsX.unsubscribe();\n this.subsY.unsubscribe();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n}","export type TYPE_SCROLL_DIRECTION = 'X' | 'Y';\nexport type TYPE_SCROLL_OVERFLOW = 'hidden' | 'scroll';\nexport interface IScrollOverlayOptions {\n scrollbarWidth?: number;\n scrollbarColor?: string;\n scrollbarHoverColor?: string;\n scrollThumbColor?: string;\n scrollThumbHoverColor?: string;\n scrollbarPadding?: number;\n scrollX?: TYPE_SCROLL_OVERFLOW;\n scrollXOpacity0?: boolean;\n scrollY?: TYPE_SCROLL_OVERFLOW;\n scrollYOpacity0?: boolean;\n};","import { Component, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LibsUiComponentsScrollOverlayDirective } from '../scroll-overlay.directive';\nimport { IScrollOverlayOptions } from '../scroll.interface';\n\n@Component({\n selector: 'lib-scroll-overlay-demo',\n standalone: true,\n imports: [CommonModule, LibsUiComponentsScrollOverlayDirective],\n templateUrl: './scroll-overlay.demo.html',\n styleUrls: ['./scroll-overlay.demo.scss']\n})\nexport class LibsUiComponentsScrollOverlayDemoComponent {\n // Demo content\n longContent = signal(`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\nSed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.`);\n\n longHorizontalContent = signal(`This is a very long horizontal content that will require scrolling to see all of it. It contains multiple sentences and words that extend beyond the container width. This demonstrates the horizontal scrolling capability of the scroll-overlay directive.`);\n\n // Demo options\n customStyleOptions = signal<IScrollOverlayOptions>({\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollbarHoverColor: '#e5e7eb',\n scrollThumbColor: '#3b82f6',\n scrollThumbHoverColor: '#2563eb',\n scrollbarPadding: 4\n });\n\n autoHideOptions = signal<IScrollOverlayOptions>({\n scrollYOpacity0: true,\n scrollbarWidth: 8,\n scrollbarColor: 'transparent',\n scrollThumbColor: '#9ca3af',\n scrollThumbHoverColor: '#6b7280'\n });\n\n horizontalOptions = signal<IScrollOverlayOptions>({\n scrollX: 'scroll',\n scrollY: 'hidden',\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n });\n\n // Event handling\n lastEvent = signal<string>('No events yet');\n\n onScroll(event: Event) {\n this.lastEvent.set('Scroll event fired');\n }\n\n onScrollTop(event: Event) {\n this.lastEvent.set('Reached top');\n }\n\n onScrollBottom(event: Event) {\n this.lastEvent.set('Reached bottom');\n }\n} ","<div class=\"demo-container\">\n <h2>Scroll Overlay Demo</h2>\n\n <div class=\"demo-intro\">\n <h3>Giới thiệu</h3>\n <p>Demo này minh họa các tính năng và cách sử dụng của directive `scroll-overlay`. Demo bao gồm 5 ví dụ chính:</p>\n <ul>\n <li><strong>Basic Usage</strong>: Sử dụng cơ bản với cấu hình mặc định</li>\n <li><strong>Custom Styling</strong>: Tuỳ chỉnh màu sắc, kích thước và padding của thanh cuộn</li>\n <li><strong>Auto Hide</strong>: Ẩn/hiện thanh cuộn khi hover</li>\n <li><strong>Horizontal Scroll</strong>: Cuộn ngang với nội dung dài</li>\n <li><strong>Event Handling</strong>: Xử lý các sự kiện scroll</li>\n </ul>\n </div>\n\n <div class=\"demo-features\">\n <h3>Tính năng Demo</h3>\n <div class=\"features-grid\">\n <div class=\"feature-item\">\n <h4>Tuỳ biến giao diện</h4>\n <p>Thay đổi màu sắc, kích thước, padding của thanh cuộn</p>\n </div>\n <div class=\"feature-item\">\n <h4>Hiệu ứng tương tác</h4>\n <p>Hover effects, auto-hide khi không sử dụng</p>\n </div>\n <div class=\"feature-item\">\n <h4>Đa hướng cuộn</h4>\n <p>Hỗ trợ cả cuộn dọc và ngang</p>\n </div>\n <div class=\"feature-item\">\n <h4>Event handling</h4>\n <p>Theo dõi các sự kiện scroll (top, bottom, scroll)</p>\n </div>\n <div class=\"feature-item\">\n <h4>Responsive</h4>\n <p>Hoạt động tốt trên mọi kích thước màn hình</p>\n </div>\n <div class=\"feature-item\">\n <h4>Tích hợp dễ dàng</h4>\n <p>Có thể thêm vào bất kỳ container nào</p>\n </div>\n </div>\n </div>\n\n <div class=\"demo-api\">\n <h3>API Reference</h3>\n\n <div class=\"api-section\">\n <h4>Inputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Input</th>\n <th>Type</th>\n <th>Mô tả</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>options</td>\n <td>IScrollOverlayOptions</td>\n <td>Tuỳ chọn cấu hình thanh cuộn</td>\n </tr>\n <tr>\n <td>debugMode</td>\n <td>boolean</td>\n <td>Bật chế độ debug</td>\n </tr>\n <tr>\n <td>ignoreInit</td>\n <td>boolean</td>\n <td>Bỏ qua khởi tạo directive</td>\n </tr>\n <tr>\n <td>classContainer</td>\n <td>string</td>\n <td>Thêm class cho container bọc ngoài</td>\n </tr>\n <tr>\n <td>notShowScrollBarX</td>\n <td>boolean</td>\n <td>Không hiển thị thanh cuộn ngang</td>\n </tr>\n <tr>\n <td>notShowScrollBarY</td>\n <td>boolean</td>\n <td>Không hiển thị thanh cuộn dọc</td>\n </tr>\n <tr>\n <td>elementCheckScrollX</td>\n <td>HTMLElement</td>\n <td>Phần tử dùng để kiểm tra scroll X</td>\n </tr>\n <tr>\n <td>elementCheckScrollY</td>\n <td>HTMLElement</td>\n <td>Phần tử dùng để kiểm tra scroll Y</td>\n </tr>\n <tr>\n <td>elementScroll</td>\n <td>HTMLElement</td>\n <td>Phần tử thực hiện scroll</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Outputs</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Output</th>\n <th>Type</th>\n <th>Mô tả</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>outScroll</td>\n <td>Event</td>\n <td>Bắn ra khi scroll bất kỳ</td>\n </tr>\n <tr>\n <td>outScrollX</td>\n <td>Event</td>\n <td>Bắn ra khi scroll theo chiều ngang</td>\n </tr>\n <tr>\n <td>outScrollY</td>\n <td>Event</td>\n <td>Bắn ra khi scroll theo chiều dọc</td>\n </tr>\n <tr>\n <td>outScrollTop</td>\n <td>Event</td>\n <td>Bắn ra khi scroll tới đầu (top)</td>\n </tr>\n <tr>\n <td>outScrollBottom</td>\n <td>Event</td>\n <td>Bắn ra khi scroll tới cuối (bottom)</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Interface</h4>\n <div class=\"interface-description\">\n <p>Interface <code>IScrollOverlayOptions</code> định nghĩa các tuỳ chọn cấu hình cho scroll-overlay directive:\n </p>\n <pre><code>export interface IScrollOverlayOptions {{ '{' }}\n scrollbarWidth?: number; // Chiều rộng thanh cuộn (px)\n scrollbarColor?: string; // Màu nền track\n scrollbarHoverColor?: string; // Màu nền track khi hover\n scrollThumbColor?: string; // Màu thumb\n scrollThumbHoverColor?: string; // Màu thumb khi hover\n scrollbarPadding?: number; // Padding của scrollbar\n scrollX?: 'hidden' | 'scroll'; // Kiểu hiển thị scroll X\n scrollXOpacity0?: boolean; // Ẩn track X khi không hover\n scrollY?: 'hidden' | 'scroll'; // Kiểu hiển thị scroll Y\n scrollYOpacity0?: boolean; // Ẩn track Y khi không hover\n{{ '}' }}</code></pre>\n </div>\n\n <div class=\"interface-usage\">\n <h5>Ví dụ sử dụng:</h5>\n <pre><code>// Cấu hình cơ bản\nconst basicOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};\n\n// Cấu hình nâng cao với hover effects\nconst advancedOptions: IScrollOverlayOptions = {{ '{' }}\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollbarHoverColor: '#e5e7eb',\n scrollThumbColor: '#3b82f6',\n scrollThumbHoverColor: '#2563eb',\n scrollbarPadding: 4,\n scrollYOpacity0: true\n{{ '}' }};\n\n// Cấu hình cho scroll ngang\nconst horizontalOptions: IScrollOverlayOptions = {{ '{' }}\n scrollX: 'scroll',\n scrollY: 'hidden',\n scrollbarWidth: 8,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6'\n{{ '}' }};</code></pre>\n </div>\n\n <div class=\"interface-notes\">\n <h5>Ghi chú:</h5>\n <ul>\n <li>Tất cả các thuộc tính đều là optional (có dấu ?)</li>\n <li>Nếu không cung cấp giá trị, directive sẽ sử dụng giá trị mặc định</li>\n <li>Có thể kết hợp nhiều options để tạo ra giao diện thanh cuộn phù hợp</li>\n <li>Màu sắc có thể sử dụng bất kỳ định dạng CSS color nào (hex, rgb, rgba, etc.)</li>\n <li>scrollX và scrollY chỉ nhận một trong hai giá trị: 'hidden' hoặc 'scroll'</li>\n </ul>\n </div>\n </div>\n\n <div class=\"api-section\">\n <h4>Options (IScrollOverlayOptions)</h4>\n <div class=\"api-table\">\n <table>\n <thead>\n <tr>\n <th>Thuộc tính</th>\n <th>Type</th>\n <th>Mô tả</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>scrollbarWidth</td>\n <td>number</td>\n <td>Chiều rộng thanh cuộn (px)</td>\n </tr>\n <tr>\n <td>scrollbarColor</td>\n <td>string</td>\n <td>Màu nền track</td>\n </tr>\n <tr>\n <td>scrollbarHoverColor</td>\n <td>string</td>\n <td>Màu nền track khi hover</td>\n </tr>\n <tr>\n <td>scrollThumbColor</td>\n <td>string</td>\n <td>Màu thumb</td>\n </tr>\n <tr>\n <td>scrollThumbHoverColor</td>\n <td>string</td>\n <td>Màu thumb khi hover</td>\n </tr>\n <tr>\n <td>scrollbarPadding</td>\n <td>number</td>\n <td>Padding của scrollbar</td>\n </tr>\n <tr>\n <td>scrollX</td>\n <td>'hidden'|'scroll'</td>\n <td>Kiểu hiển thị scroll X</td>\n </tr>\n <tr>\n <td>scrollXOpacity0</td>\n <td>boolean</td>\n <td>Ẩn track X khi không hover</td>\n </tr>\n <tr>\n <td>scrollY</td>\n <td>'hidden'|'scroll'</td>\n <td>Kiểu hiển thị scroll Y</td>\n </tr>\n <tr>\n <td>scrollYOpacity0</td>\n <td>boolean</td>\n <td>Ẩn track Y khi không hover</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- Basic Demo -->\n <div class=\"demo-section\">\n <h3>1. Basic Usage</h3>\n <div class=\"demo-description\">\n <p>Sử dụng cơ bản với cấu hình mặc định của scroll-overlay directive.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px;\"&gt;\n Nội dung dài...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Custom Styling Demo -->\n <div class=\"demo-section\">\n <h3>2. Custom Styling</h3>\n <div class=\"demo-description\">\n <p>Tuỳ chỉnh màu sắc, kích thước và padding của thanh cuộn.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollbarWidth: 12,\n scrollbarColor: '#f3f4f6',\n scrollThumbColor: '#3b82f6',\n scrollbarPadding: 4\n {{ '}' }}\"&gt;\n Nội dung dài...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"customStyleOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Auto Hide Demo -->\n <div class=\"demo-section\">\n <h3>3. Auto Hide on Hover</h3>\n <div class=\"demo-description\">\n <p>Ẩn/hiện thanh cuộn khi hover vào container.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollYOpacity0: true,\n scrollbarColor: 'transparent',\n scrollThumbColor: '#9ca3af'\n {{ '}' }}\"&gt;\n Nội dung dài...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"autoHideOptions()\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Horizontal Scroll Demo -->\n <div class=\"demo-section\">\n <h3>4. Horizontal Scroll</h3>\n <div class=\"demo-description\">\n <p>Cuộn ngang với nội dung dài.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n [options]=\"{{ '{' }}\"\n scrollX: 'scroll',\n scrollY: 'hidden'\n {{ '}' }}\"&gt;\n &lt;div style=\"white-space: nowrap;\"&gt;\n Nội dung ngang dài...\n &lt;/div&gt;\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n [options]=\"horizontalOptions()\"\n style=\"width: 300px; height: 100px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px; white-space: nowrap;\">\n {{ longHorizontalContent() }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Event Handling Demo -->\n <div class=\"demo-section\">\n <h3>5. Event Handling</h3>\n <div class=\"demo-description\">\n <p>Xử lý các sự kiện scroll.</p>\n <pre><code>&lt;div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"&gt;\n Nội dung dài...\n&lt;/div&gt;</code></pre>\n </div>\n <div class=\"demo-box\">\n <div LibsUiComponentsScrollOverlayDirective\n (outScroll)=\"onScroll($event)\"\n (outScrollTop)=\"onScrollTop($event)\"\n (outScrollBottom)=\"onScrollBottom($event)\"\n style=\"width: 300px; height: 200px; border: 1px solid #ddd;\">\n <div style=\"padding: 16px;\">\n {{ longContent() }}\n </div>\n </div>\n <div class=\"event-log\">\n <p>Last Event: {{ lastEvent() }}</p>\n </div>\n </div>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './scroll-overlay.directive';
2
2
  export * from './scroll.interface';
3
+ export * from './demo/scroll-overlay.demo';
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@libs-ui/components-scroll-overlay",
3
- "version": "0.2.205",
3
+ "version": "0.2.207",
4
4
  "peerDependencies": {
5
5
  "@angular/core": "^18.2.0",
6
- "@libs-ui/utils": "^0.2.205",
6
+ "@libs-ui/utils": "^0.2.207",
7
7
  "rxjs": "~7.8.0"
8
8
  },
9
9
  "sideEffects": false,
@@ -22,8 +22,6 @@ export declare class LibsUiComponentsScrollOverlayDirective implements OnDestroy
22
22
  readonly debugMode: import("@angular/core").InputSignal<boolean>;
23
23
  readonly ignoreInit: import("@angular/core").InputSignal<boolean>;
24
24
  readonly classContainer: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
25
- readonly notShowScrollBarX: import("@angular/core").InputSignal<boolean | undefined>;
26
- readonly notShowScrollBarY: import("@angular/core").InputSignal<boolean | undefined>;
27
25
  readonly options: import("@angular/core").InputSignal<IScrollOverlayOptions | undefined>;
28
26
  readonly elementCheckScrollX: import("@angular/core").InputSignal<HTMLElement | undefined>;
29
27
  readonly elementCheckScrollY: import("@angular/core").InputSignal<HTMLElement | undefined>;
@@ -46,5 +44,5 @@ export declare class LibsUiComponentsScrollOverlayDirective implements OnDestroy
46
44
  private updateScrollbarPosition;
47
45
  ngOnDestroy(): void;
48
46
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsScrollOverlayDirective, never>;
49
- static ɵdir: i0.ɵɵDirectiveDeclaration<LibsUiComponentsScrollOverlayDirective, "[LibsUiComponentsScrollOverlayDirective]", never, { "debugMode": { "alias": "debugMode"; "required": false; "isSignal": true; }; "ignoreInit": { "alias": "ignoreInit"; "required": false; "isSignal": true; }; "classContainer": { "alias": "classContainer"; "required": false; "isSignal": true; }; "notShowScrollBarX": { "alias": "notShowScrollBarX"; "required": false; "isSignal": true; }; "notShowScrollBarY": { "alias": "notShowScrollBarY"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "elementCheckScrollX": { "alias": "elementCheckScrollX"; "required": false; "isSignal": true; }; "elementCheckScrollY": { "alias": "elementCheckScrollY"; "required": false; "isSignal": true; }; "elementScroll": { "alias": "elementScroll"; "required": false; "isSignal": true; }; }, { "outScroll": "outScroll"; "outScrollX": "outScrollX"; "outScrollY": "outScrollY"; "outScrollTop": "outScrollTop"; "outScrollBottom": "outScrollBottom"; }, never, never, true, never>;
47
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LibsUiComponentsScrollOverlayDirective, "[LibsUiComponentsScrollOverlayDirective]", never, { "debugMode": { "alias": "debugMode"; "required": false; "isSignal": true; }; "ignoreInit": { "alias": "ignoreInit"; "required": false; "isSignal": true; }; "classContainer": { "alias": "classContainer"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "elementCheckScrollX": { "alias": "elementCheckScrollX"; "required": false; "isSignal": true; }; "elementCheckScrollY": { "alias": "elementCheckScrollY"; "required": false; "isSignal": true; }; "elementScroll": { "alias": "elementScroll"; "required": false; "isSignal": true; }; }, { "outScroll": "outScroll"; "outScrollX": "outScrollX"; "outScrollY": "outScrollY"; "outScrollTop": "outScrollTop"; "outScrollBottom": "outScrollBottom"; }, never, never, true, never>;
50
48
  }