@libs-ui/components-scroll-overlay 0.2.356-38 → 0.2.356-40

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.
@@ -110,7 +110,7 @@ export class LibsUiComponentsScrollOverlayDirective {
110
110
  debugMode = input(false);
111
111
  ignoreInit = input(false);
112
112
  classContainer = input('', { transform: (value) => value ?? '' });
113
- options = input(Object.assign({}));
113
+ options = input({});
114
114
  elementCheckScrollX = input();
115
115
  elementCheckScrollY = input();
116
116
  elementScroll = input();
@@ -224,7 +224,7 @@ export class LibsUiComponentsScrollOverlayDirective {
224
224
  if (this.Element.className) {
225
225
  this.Element.className.split(' ').forEach((className) => {
226
226
  if (className &&
227
- (['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)) &&
227
+ (['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)[hw]-\[\d+px\]$/.test(className)) &&
228
228
  !this.divContainer.classList.contains(className)) {
229
229
  this.divContainer.classList.add(className);
230
230
  }
@@ -449,4 +449,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
449
449
  standalone: true,
450
450
  }]
451
451
  }], ctorParameters: () => [] });
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUdwRixNQUFNLFlBQVksR0FBRyxrQ0FBa0MsQ0FBQztBQUN4RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSw2QkFBNkIsR0FBRyxXQUFXLENBQUM7QUFDbEQsTUFBTSwwQkFBMEIsR0FBRyxTQUFTLENBQUM7QUFDN0MsTUFBTSxnQ0FBZ0MsR0FBRyxTQUFTLENBQUM7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxhQUFhLEdBQUc7Ozs7OzREQUtzQyw2QkFBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBeUJuQywwQkFBMEI7Ozs0REFHcEIsZ0NBQWdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0IzRixDQUFDO0FBRUYsTUFBTSxjQUFj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QUMsWUFBWSxDQUFDO1FBQ2hGLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxHQUFHLGVBQWUsQ0FBQztRQUMxRCxJQUFJLGlCQUFpQixJQUFJLENBQUM7WUFBRSxPQUFPO1FBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxhQUFhLElBQUksQ0FBQztJQUMvQyxDQUFDO3dHQXJaVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQzs7NEZBQXRDLHNDQUFzQztrQkFMbEQsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyLCBnZXREcmFnRXZlbnRCeUVsZW1lbnQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCwgaW50ZXJ2YWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElTY3JvbGxPdmVybGF5T3B0aW9ucywgVFlQRV9TQ1JPTExfRElSRUNUSU9OIH0gZnJvbSAnLi9zY3JvbGwuaW50ZXJmYWNlJztcblxuY29uc3QgU1RZTEVfVEFHX0lEID0gJ2xpYnMtdWktc2Nyb2xsLW92ZXJsYXktc3R5bGUtdGFnJztcbmNvbnN0IFNDUk9MTF9CT1RUT01fVE9MRVJBTkNFID0gMztcbmNvbnN0IE1JTl9USFVNQl9TSVpFID0gMjA7XG5jb25zdCBNT1VTRV9VUF9SRVNFVF9ERUxBWSA9IDI1MDtcbmNvbnN0IERFRkFVTFRfU0NST0xMQkFSX0hPVkVSX0NPTE9SID0gJyNDREQwRDY0MCc7XG5jb25zdCBERUZBVUxUX1NDUk9MTF9USFVNQl9DT0xPUiA9ICcjQ0REMEQ2JztcbmNvbnN0IERFRkFVTFRfU0NST0xMX1RIVU1CX0hPVkVSX0NPTE9SID0gJyM5Q0EyQUQnO1xuXG4vKipcbiAqIENTUyBjaGlhIHPhursgY2hvIG3hu41pIGluc3RhbmNlLiBNw6B1L3BhZGRpbmcgbOG6pXkgcXVhIENTUyB2YXJpYWJsZXMgxJHhu4MgbeG7l2lcbiAqIGRpcmVjdGl2ZSBpbnN0YW5jZSBjw7MgdGjhu4MgY3VzdG9tIMSR4buZYyBs4bqtcCBtw6Aga2jDtG5nIHBo4bqjaSByZS13cml0ZSBzdHlsZSB0YWcuXG4gKi9cbmNvbnN0IFNUWUxFX0NPTlRFTlQgPSBgXG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAuc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWJzLXVpLXNiLXRyYWNrLWNvbG9yLCB0cmFuc3BhcmVudCk7XG4gIH1cbiAgLmxpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyIC5zY3JvbGxiYXItdHJhY2s6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpYnMtdWktc2ItdHJhY2staG92ZXItY29sb3IsICR7REVGQVVMVF9TQ1JPTExCQVJfSE9WRVJfQ09MT1J9KTtcbiAgfVxuICAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1jb250YWluZXIgLnNjcm9sbGJhci10cmFjay1YIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDE7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2UsIHZpc2liaWxpdHkgMC4zcyBlYXNlO1xuICB9XG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAuc2Nyb2xsYmFyLXRyYWNrLVkge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMDtcbiAgICB6LWluZGV4OiAxO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgfVxuICAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1jb250YWluZXIgLnNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlicy11aS1zYi10aHVtYi1jb2xvciwgJHtERUZBVUxUX1NDUk9MTF9USFVNQl9DT0xPUn0pO1xuICB9XG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAuc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWJzLXVpLXNiLXRodW1iLWhvdmVyLWNvbG9yLCAke0RFRkFVTFRfU0NST0xMX1RIVU1CX0hPVkVSX0NPTE9SfSk7XG4gIH1cbiAgLmxpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyIC5zY3JvbGxiYXItdGh1bWItWCB7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSB2YXIoLS1saWJzLXVpLXNiLXBhZGRpbmctZG91YmxlLCA0cHgpKTtcbiAgICBib3R0b206IHZhcigtLWxpYnMtdWktc2ItcGFkZGluZywgMnB4KTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgY3Vyc29yOiBncmFiYmluZztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAuc2Nyb2xsYmFyLXRodW1iLVkge1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1saWJzLXVpLXNiLXBhZGRpbmctZG91YmxlLCA0cHgpKTtcbiAgICByaWdodDogdmFyKC0tbGlicy11aS1zYi1wYWRkaW5nLCAycHgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBjdXJzb3I6IGdyYWJiaW5nO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbiAgLmxpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWVsZW1lbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBlbnN1cmVTdHlsZVRhZyA9ICgpID0+IHtcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNUWUxFX1RBR19JRCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlRWwuaWQgPSBTVFlMRV9UQUdfSUQ7XG4gIHN0eWxlRWwudGV4dENvbnRlbnQgPSBTVFlMRV9DT05URU5UO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZUVsKTtcbn07XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSBpc1Njcm9sbFRodW1iID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBrZWVwRGlzcGxheVRodW1iID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdWJzWCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBzdWJzWSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgLyoqIFRpbWVyIHJlc2V0IGlzU2Nyb2xsVGh1bWIgc2F1IGRyYWcgZW5kIOKAlCBwaOG6o2kgY2xlYXIga2hpIGRlc3Ryb3kgxJHhu4MgdHLDoW5oIHNldCBzaWduYWwgdHLDqm4gaW5zdGFuY2UgxJHDoyB0ZWFyZG93bi4gKi9cbiAgcHJpdmF0ZSBtb3VzZVVwVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgLyoqIHJBRiB0aHJvdHRsZSBjaG8gc2Nyb2xsIGhhbmRsZXIg4oCUIGdvbSBtdWx0aXBsZSBzY3JvbGwgZXZlbnRzIHbhu4EgMSBs4bqnbiB1cGRhdGUgRE9NIG3hu5dpIGZyYW1lLiAqL1xuICBwcml2YXRlIHNjcm9sbFJhZlg/OiBudW1iZXI7XG4gIHByaXZhdGUgc2Nyb2xsUmFmWT86IG51bWJlcjtcbiAgLyoqIENhY2hlIGRpbWVuc2lvbnMg4oCUIHNraXAgRE9NIHdyaXRlIG7hur91IGvDrWNoIHRoxrDhu5tjIGtow7RuZyDEkeG7lWkgZ2nhu69hIDIgbOG6p24gcG9sbC4gKi9cbiAgcHJpdmF0ZSBsYXN0Q29udGVudFdpZHRoID0gMDtcbiAgcHJpdmF0ZSBsYXN0Q29udGVudEhlaWdodCA9IDA7XG4gIHByaXZhdGUgbGFzdENvbnRhaW5lcldpZHRoID0gMDtcbiAgcHJpdmF0ZSBsYXN0Q29udGFpbmVySGVpZ2h0ID0gMDtcblxuICBwcml2YXRlIHNjcm9sbGJhcldpZHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhcldpZHRoID8/IDEwKTtcbiAgcHJpdmF0ZSBzY3JvbGxiYXJQYWRkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhclBhZGRpbmcgPz8gMik7XG4gIHByaXZhdGUgc2Nyb2xsYmFyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFyQ29sb3IgPz8gJycpO1xuICBwcml2YXRlIHNjcm9sbGJhckhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsYmFySG92ZXJDb2xvciA/PyBERUZBVUxUX1NDUk9MTEJBUl9IT1ZFUl9DT0xPUik7XG4gIHByaXZhdGUgc2Nyb2xsVGh1bWJDb2xvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxUaHVtYkNvbG9yID8/IERFRkFVTFRfU0NST0xMX1RIVU1CX0NPTE9SKTtcbiAgcHJpdmF0ZSBzY3JvbGxUaHVtYkhvdmVyQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJIb3ZlckNvbG9yID8/IERFRkFVTFRfU0NST0xMX1RIVU1CX0hPVkVSX0NPTE9SKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRpdkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNrWDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aHVtYlg6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2tZOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRodW1iWTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGRlYnVnTW9kZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlSW5pdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NDb250YWluZXIgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBvcHRpb25zID0gaW5wdXQ8SVNjcm9sbE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkPihPYmplY3QuYXNzaWduKHt9KSk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDaGVja1Njcm9sbFggPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudENoZWNrU2Nyb2xsWSA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuICByZWFkb25seSBlbGVtZW50U2Nyb2xsID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxYID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxZID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxUb3AgPSBvdXRwdXQ8RXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dFNjcm9sbEJvdHRvbSA9IG91dHB1dDxFdmVudD4oKTtcblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVuZGVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gU2V0dXAgc2Nyb2xsYmFycyBraGkgb3B0aW9ucy9jbGFzc0NvbnRhaW5lciDEkeG7lWkuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZUluaXQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICBjb25zdCBjbGFzc0NvbnRhaW5lciA9IHRoaXMuY2xhc3NDb250YWluZXIoKTtcblxuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5zeW5jQ29udGFpbmVyRXh0cmFDbGFzc2VzKGNsYXNzQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ292ZXJmbG93LWhpZGRlbicsIG9wdGlvbnM/LnNjcm9sbFggPT09ICdoaWRkZW4nICYmIG9wdGlvbnM/LnNjcm9sbFkgPT09ICdoaWRkZW4nKTtcblxuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWCAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5zdWJzWCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICB0aGlzLnRyYWNrWC5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRodW1iWC5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRyYWNrWC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLnNjcm9sbGJhcldpZHRoKCl9cHhgO1xuICAgICAgICAgIHRoaXMuY3JlYXRlU2Nyb2xsYmFyKCdYJywgdGhpcy50cmFja1gsIHRoaXMudGh1bWJYKTtcbiAgICAgICAgICB0aGlzLmJpbmRFdmVudHNTY3JvbGxCYXIoJ1gnLCB0aGlzLnRyYWNrWCwgdGhpcy5zdWJzWCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyRHJhZ0FuZERyb3BUaHVtYignWCcsIHRoaXMuc3Vic1gpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckNsaWNrVHJhY2soJ1gnLCB0aGlzLnN1YnNYKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zPy5zY3JvbGxZICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgIHRoaXMuc3Vic1kudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLnN1YnNZID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgIHRoaXMudHJhY2tZLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudGh1bWJZLmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgIHRoaXMudHJhY2tZLnN0eWxlLndpZHRoID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWScsIHRoaXMudHJhY2tZLCB0aGlzLnRodW1iWSk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdZJywgdGhpcy50cmFja1ksIHRoaXMuc3Vic1kpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1knLCB0aGlzLnN1YnNZKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdZJywgdGhpcy5zdWJzWSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gU3luYyBDU1MgdmFyaWFibGVzIHBlci1pbnN0YW5jZSDigJQga2jDtG5nIMSR4bulbmcgc3R5bGUgdGFnIGNoaWEgc+G6uyBnaeG7r2EgY8OhYyBpbnN0YW5jZS5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc2JDb2xvciA9IHRoaXMuc2Nyb2xsYmFyQ29sb3IoKTtcbiAgICAgIGNvbnN0IHNiSG92ZXIgPSB0aGlzLnNjcm9sbGJhckhvdmVyQ29sb3IoKTtcbiAgICAgIGNvbnN0IHRoQ29sb3IgPSB0aGlzLnNjcm9sbFRodW1iQ29sb3IoKTtcbiAgICAgIGNvbnN0IHRoSG92ZXIgPSB0aGlzLnNjcm9sbFRodW1iSG92ZXJDb2xvcigpO1xuICAgICAgY29uc3QgcGFkZGluZyA9IHRoaXMuc2Nyb2xsYmFyUGFkZGluZygpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGl2U3R5bGUgPSB0aGlzLmRpdkNvbnRhaW5lci5zdHlsZTtcbiAgICAgICAgZGl2U3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS1zYi10cmFjay1jb2xvcicsIHNiQ29sb3IpO1xuICAgICAgICBkaXZTdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXNiLXRyYWNrLWhvdmVyLWNvbG9yJywgc2JIb3Zlcik7XG4gICAgICAgIGRpdlN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktc2ItdGh1bWItY29sb3InLCB0aENvbG9yKTtcbiAgICAgICAgZGl2U3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS1zYi10aHVtYi1ob3Zlci1jb2xvcicsIHRoSG92ZXIpO1xuICAgICAgICBkaXZTdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXNiLXBhZGRpbmcnLCBgJHtwYWRkaW5nfXB4YCk7XG4gICAgICAgIGRpdlN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktc2ItcGFkZGluZy1kb3VibGUnLCBgJHtwYWRkaW5nICogMn1weGApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBXaW5kb3cgcmVzaXplIOKGkiByZS1tZWFzdXJlIHRodW1iIHNpemUgY2hvIGPhuqMgMiB0cuG7pWMuXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUoJ1gnKTtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKCdZJyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VVcFRpbWVyKTtcbiAgICAgIGlmICh0aGlzLnNjcm9sbFJhZlgpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2Nyb2xsUmFmWCk7XG4gICAgICBpZiAodGhpcy5zY3JvbGxSYWZZKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbFJhZlkpO1xuICAgICAgdGhpcy5kaXZDb250YWluZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN1YnNYLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwcml2YXRlIGdldCBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U2Nyb2xsKCkgfHwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvKiogVGjDqm0gY8OhYyBjbGFzcyBjb25zdW1lciB0cnV54buBbiBxdWEgW2NsYXNzQ29udGFpbmVyXSBtw6Aga2jDtG5nIHjDs2EgY2xhc3MgaOG7hyB0aOG7kW5nIMSRw6Mgc2V0LiAqL1xuICBwcml2YXRlIHN5bmNDb250YWluZXJFeHRyYUNsYXNzZXMoY2xhc3NTdHI6IHN0cmluZykge1xuICAgIGNsYXNzU3RyXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmZvckVhY2goKGNsYXNzTmFtZSkgPT4gdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2Nyb2xsYmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCwgdGh1bWJFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbnN1cmVTdHlsZVRhZygpO1xuXG4gICAgY29uc3Qgc3R5bGVzUHJvcGVydHkgPSB7XG4gICAgICAnYm94LXNpemluZyc6ICdib3JkZXItYm94JyxcbiAgICAgICdzY3JvbGxiYXItd2lkdGgnOiAnbm9uZScsXG4gICAgICAnc2Nyb2xsYmFyLWNvbG9yJzogdGhpcy5vcHRpb25zKCk/Lmlnbm9yZVRyYW5zcGFyZW50U2Nyb2xsQmFyQ29sb3JEZWZhdWx0ID8gJ2F1dG8nIDogJ3RyYW5zcGFyZW50IHRyYW5zcGFyZW50JyxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICdvdmVyZmxvdy14JzogYCR7dGhpcy5vcHRpb25zKCk/LnNjcm9sbFggfHwgJ3Njcm9sbCd9YCxcbiAgICAgICdvdmVyZmxvdy15JzogYCR7dGhpcy5vcHRpb25zKCk/LnNjcm9sbFkgfHwgJ3Njcm9sbCd9YCxcbiAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgT2JqZWN0LmtleXMoc3R5bGVzUHJvcGVydHkpLmZvckVhY2goKGtleSkgPT4gdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuRWxlbWVudCwga2V5LCBzdHlsZXNQcm9wZXJ0eVtrZXldLCAxKSk7XG5cbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoJ3Njcm9sbGJhci10cmFjaycpO1xuICAgIHRyYWNrRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRyYWNrLSR7c2Nyb2xsRGlyZWN0aW9ufWApO1xuICAgIHRodW1iRWwuY2xhc3NMaXN0LmFkZCgnc2Nyb2xsYmFyLXRodW1iJyk7XG4gICAgdGh1bWJFbC5jbGFzc0xpc3QuYWRkKGBzY3JvbGxiYXItdGh1bWItJHtzY3JvbGxEaXJlY3Rpb259YCk7XG4gICAgdHJhY2tFbC5hcHBlbmRDaGlsZCh0aHVtYkVsKTtcblxuICAgIGlmICh0aGlzLkVsZW1lbnQuY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KCcgJykuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNsYXNzTmFtZSAmJlxuICAgICAgICAgIChbJ3ctZnVsbCcsICd3LXNjcmVlbicsICdoLWZ1bGwnLCAnaC1zY3JlZW4nLCAnc2hyaW5rLTAnXS5pbmNsdWRlcyhjbGFzc05hbWUpIHx8IGNsYXNzTmFtZS5pbmNsdWRlcygnbWluLWgtJykgfHwgY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4tdy0nKSB8fCAvXighPykoaHx3KS1cXFtbMC05XStweFxcXSQvLnRlc3QoY2xhc3NOYW1lKSkgJiZcbiAgICAgICAgICAhdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnbWluLWgtJykpIHtcbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWluLWgtMCcpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdtaW4tdy0nKSkge1xuICAgICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtaW4tdy0wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ2xpYnMtdWktc2Nyb2xsLW92ZXJsYXktZWxlbWVudCcpKSB7XG4gICAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdsaWJzLXVpLXNjcm9sbC1vdmVybGF5LWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ2xpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyJykpIHtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2xpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyJyk7XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZENoaWxkKHRyYWNrRWwpO1xuXG4gICAgaWYgKCF0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbikge1xuICAgICAgdGhpcy5FbGVtZW50LnBhcmVudEVsZW1lbnQ/Lmluc2VydEJlZm9yZSh0aGlzLmRpdkNvbnRhaW5lciwgdGhpcy5FbGVtZW50KTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gICAgdGhpcy5kaXZDb250YWluZXIuYXBwZW5kKHRoaXMuRWxlbWVudCk7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGJpbmRFdmVudHNTY3JvbGxCYXIoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHRyYWNrRWw6IEhUTUxFbGVtZW50LCBzdWJzOiBTdWJzY3JpcHRpb24pIHtcbiAgICBsZXQgc2Nyb2xsTGVmdCA9IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCBzY3JvbGxUb3AgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgIHN1YnMuYWRkKFxuICAgICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLkVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGV2ZW50KSA9PlxuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZVNjcm9sbEhhbmRsZShzY3JvbGxEaXJlY3Rpb24sICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5FbGVtZW50O1xuICAgICAgICAgICAgICB0aGlzLm91dFNjcm9sbC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICYmIHRhcmdldC5zY3JvbGxMZWZ0ICsgdGFyZ2V0Lm9mZnNldFdpZHRoID49IHRhcmdldC5zY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsV2lkdGggLSB0YXJnZXQub2Zmc2V0V2lkdGggLSAodGFyZ2V0Lm9mZnNldFdpZHRoIC0gdGFyZ2V0LmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm91dFNjcm9sbFguZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgICAgICBzY3JvbGxUb3AgPSB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICB0aGlzLm91dFNjcm9sbFkuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsVG9wID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdXRTY3JvbGxUb3AuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsSGVpZ2h0IDw9IHRhcmdldC5zY3JvbGxUb3AgKyB0YXJnZXQub2Zmc2V0SGVpZ2h0ICsgU0NST0xMX0JPVFRPTV9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm91dFNjcm9sbEJvdHRvbS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIGNvbnN0IG1vdXNlTGVhdmUgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWxlYXZlJyk7XG4gICAgY29uc3QgbW91c2VFbnRlciA9IGZyb21FdmVudCh0aGlzLmRpdkNvbnRhaW5lciwgJ21vdXNlZW50ZXInKTtcbiAgICBzdWJzLmFkZChcbiAgICAgIG1vdXNlRW50ZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICgoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgJiYgIXRoaXMub3B0aW9ucygpPy5zY3JvbGxYT3BhY2l0eTApIHx8IChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiAhdGhpcy5vcHRpb25zKCk/LnNjcm9sbFlPcGFjaXR5MCkpIHtcbiAgICAgICAgICAgICAgdHJhY2tFbC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICB0cmFja0VsLnN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclNpemUoc2Nyb2xsRGlyZWN0aW9uKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gaW50ZXJ2YWwoMTAwMCkucGlwZSh0YWtlVW50aWwobW91c2VMZWF2ZSkpKSxcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuXG4gICAgc3Vicy5hZGQoXG4gICAgICBtb3VzZUxlYXZlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5rZWVwRGlzcGxheVRodW1iKCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhY2tFbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB0cmFja0VsLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgLyoqIFRocm90dGxlIHNjcm9sbCBoYW5kbGVyIHRoZW8gZnJhbWUg4oCUIGdvbSBuaGnhu4F1IHNjcm9sbCBldmVudCB2w6BvIDEgbOG6p24gdXBkYXRlIERPTS4gKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZVNjcm9sbEhhbmRsZShzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgaGFuZGxlOiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBpZiAodGhpcy5zY3JvbGxSYWZYKSByZXR1cm47XG4gICAgICB0aGlzLnNjcm9sbFJhZlggPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNjcm9sbFJhZlggPSB1bmRlZmluZWQ7XG4gICAgICAgIGhhbmRsZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNjcm9sbFJhZlkpIHJldHVybjtcbiAgICB0aGlzLnNjcm9sbFJhZlkgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxSYWZZID0gdW5kZWZpbmVkO1xuICAgICAgaGFuZGxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrVHJhY2soc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHN1YnM6IFN1YnNjcmlwdGlvbikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG5cbiAgICBzdWJzLmFkZChcbiAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50VHJhY2ssICdjbGljaycpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxUaHVtYigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgJiYgZS5jbGllbnRYIDwgZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIHx8IChzY3JvbGxEaXJlY3Rpb24gPT09ICdZJyAmJiBlLmNsaWVudFkgPCBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbFBvc2l0aW9uQnlVc2VyQWN0aW9uKHNjcm9sbERpcmVjdGlvbiwgZSwgJ3Ntb290aCcsIC0xICogZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAtMSAqIGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIHN1YnM6IFN1YnNjcmlwdGlvbikge1xuICAgIGNvbnN0IGVsZW1lbnRUcmFjayA9IHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnID8gdGhpcy50cmFja1ggOiB0aGlzLnRyYWNrWTtcbiAgICBjb25zdCBlbGVtZW50VGh1bWIgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudGh1bWJYIDogdGhpcy50aHVtYlk7XG4gICAgbGV0IGxlbmd0aFRodW1iVG9Qb2ludENsaWNrID0gMDtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50KHtcbiAgICAgICAgZWxlbWVudE1vdXNlRG93bjogZWxlbWVudFRodW1iLFxuICAgICAgICBmdW5jdGlvbk1vdXNlRG93bjogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2Nyb2xsVGh1bWIuc2V0KHRydWUpO1xuICAgICAgICAgIHRoaXMua2VlcERpc3BsYXlUaHVtYi5zZXQodHJ1ZSk7XG4gICAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gbW91c2VFdmVudC5jbGllbnRYO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBtb3VzZUV2ZW50LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uTW91c2VVcDogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KGZhbHNlKTtcbiAgICAgICAgICBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IDA7XG4gICAgICAgICAgaWYgKCFjaGVja01vdXNlT3ZlckluQ29udGFpbmVyKG1vdXNlRXZlbnQsIHRoaXMuRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRUcmFjay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VVcFRpbWVyKTtcbiAgICAgICAgICB0aGlzLm1vdXNlVXBUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1Njcm9sbFRodW1iLnNldChmYWxzZSk7XG4gICAgICAgICAgfSwgTU9VU0VfVVBfUkVTRVRfREVMQVkpO1xuICAgICAgICB9LFxuICAgICAgICBkZXN0cm95UmVmOiB0aGlzLmRlc3Ryb3lSZWYsXG4gICAgICB9KS5zdWJzY3JpYmUoKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIG1vdXNlRXZlbnQsICdhdXRvJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2spO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgZTogTW91c2VFdmVudCwgYmVoYXZpb3I6ICdhdXRvJyB8ICdzbW9vdGgnLCBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IDApIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSBlLmNsaWVudFggLSB0aGlzLkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGgpKSAqIChjb250ZW50V2lkdGggLSBjb250YWluZXJXaWR0aCk7XG4gICAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgbGVmdDogc2Nyb2xsTGVmdCwgYmVoYXZpb3IgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRZIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9ICh0aHVtYlBvc2l0aW9uIC8gKGNvbnRhaW5lckhlaWdodCAtIHRoaXMudGh1bWJZLm9mZnNldEhlaWdodCkpICogKGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQpO1xuICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoeyB0b3A6IHNjcm9sbFRvcCwgYmVoYXZpb3IgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGJhclNpemUoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IHRoaXMubGFzdENvbnRhaW5lcldpZHRoICYmIGNvbnRlbnRXaWR0aCA9PT0gdGhpcy5sYXN0Q29udGVudFdpZHRoKSByZXR1cm47XG4gICAgICB0aGlzLmxhc3RDb250YWluZXJXaWR0aCA9IGNvbnRhaW5lcldpZHRoO1xuICAgICAgdGhpcy5sYXN0Q29udGVudFdpZHRoID0gY29udGVudFdpZHRoO1xuICAgICAgY29uc3QgdGh1bWJXaWR0aCA9IChjb250YWluZXJXaWR0aCAvIGNvbnRlbnRXaWR0aCkgKiBjb250YWluZXJXaWR0aDtcbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLndpZHRoID0gYCR7TWF0aC5tYXgoTUlOX1RIVU1CX1NJWkUsIHRodW1iV2lkdGgpfXB4YDtcbiAgICAgIHRoaXMudHJhY2tYLnN0eWxlLmRpc3BsYXkgPSBjb250ZW50V2lkdGggPiBjb250YWluZXJXaWR0aCA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGJhclBvc2l0aW9uKHNjcm9sbERpcmVjdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBpZiAoY29udGFpbmVySGVpZ2h0ID09PSB0aGlzLmxhc3RDb250YWluZXJIZWlnaHQgJiYgY29udGVudEhlaWdodCA9PT0gdGhpcy5sYXN0Q29udGVudEhlaWdodCkgcmV0dXJuO1xuICAgIHRoaXMubGFzdENvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lckhlaWdodDtcbiAgICB0aGlzLmxhc3RDb250ZW50SGVpZ2h0ID0gY29udGVudEhlaWdodDtcbiAgICBjb25zdCB0aHVtYkhlaWdodCA9IChjb250YWluZXJIZWlnaHQgLyBjb250ZW50SGVpZ2h0KSAqIGNvbnRhaW5lckhlaWdodDtcbiAgICB0aGlzLnRodW1iWS5zdHlsZS5oZWlnaHQgPSBgJHtNYXRoLm1heChNSU5fVEhVTUJfU0laRSwgdGh1bWJIZWlnaHQpfXB4YDtcbiAgICB0aGlzLnRyYWNrWS5zdHlsZS5kaXNwbGF5ID0gY29udGVudEhlaWdodCA+IGNvbnRhaW5lckhlaWdodCA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbignWScpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTikge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLkVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxYKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnN0IGRlbm9taW5hdG9yU2Nyb2xsID0gY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGg7XG4gICAgICBpZiAoZGVub21pbmF0b3JTY3JvbGwgPD0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgZGVub21pbmF0b3JUaHVtYiA9IGNvbnRhaW5lcldpZHRoIC0gdGhpcy50aHVtYlgub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gKHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0IC8gZGVub21pbmF0b3JTY3JvbGwpICogZGVub21pbmF0b3JUaHVtYjtcbiAgICAgIHRoaXMudGh1bWJYLnN0eWxlLmxlZnQgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5FbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWSgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IGRlbm9taW5hdG9yU2Nyb2xsID0gY29udGVudEhlaWdodCAtIGNvbnRhaW5lckhlaWdodDtcbiAgICBpZiAoZGVub21pbmF0b3JTY3JvbGwgPD0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGRlbm9taW5hdG9yVGh1bWIgPSBjb250YWluZXJIZWlnaHQgLSB0aGlzLnRodW1iWS5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9ICh0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wIC8gZGVub21pbmF0b3JTY3JvbGwpICogZGVub21pbmF0b3JUaHVtYjtcbiAgICB0aGlzLnRodW1iWS5zdHlsZS50b3AgPSBgJHt0aHVtYlBvc2l0aW9ufXB4YDtcbiAgfVxufVxuIl19
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLW92ZXJsYXkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3Njcm9sbC1vdmVybGF5L3NyYy9zY3JvbGwtb3ZlcmxheS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUdwRixNQUFNLFlBQVksR0FBRyxrQ0FBa0MsQ0FBQztBQUN4RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSw2QkFBNkIsR0FBRyxXQUFXLENBQUM7QUFDbEQsTUFBTSwwQkFBMEIsR0FBRyxTQUFTLENBQUM7QUFDN0MsTUFBTSxnQ0FBZ0MsR0FBRyxTQUFTLENBQUM7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxhQUFhLEdBQUc7Ozs7OzREQUtzQyw2QkFBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBeUJuQywwQkFBMEI7Ozs0REFHcEIsZ0NBQWdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBc0IzRixDQUFDO0FBRUYsTUFBTSxjQUFj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QUFpQixHQUFHLGFBQWEsR0FBRyxlQUFlLENBQUM7UUFDMUQsSUFBSSxpQkFBaUIsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUNuQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUNwRSxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsYUFBYSxJQUFJLENBQUM7SUFDL0MsQ0FBQzt3R0FyWlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0M7OzRGQUF0QyxzQ0FBc0M7a0JBTGxELFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lciwgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIGludGVydmFsLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJU2Nyb2xsT3ZlcmxheU9wdGlvbnMsIFRZUEVfU0NST0xMX0RJUkVDVElPTiB9IGZyb20gJy4vc2Nyb2xsLmludGVyZmFjZSc7XG5cbmNvbnN0IFNUWUxFX1RBR19JRCA9ICdsaWJzLXVpLXNjcm9sbC1vdmVybGF5LXN0eWxlLXRhZyc7XG5jb25zdCBTQ1JPTExfQk9UVE9NX1RPTEVSQU5DRSA9IDM7XG5jb25zdCBNSU5fVEhVTUJfU0laRSA9IDIwO1xuY29uc3QgTU9VU0VfVVBfUkVTRVRfREVMQVkgPSAyNTA7XG5jb25zdCBERUZBVUxUX1NDUk9MTEJBUl9IT1ZFUl9DT0xPUiA9ICcjQ0REMEQ2NDAnO1xuY29uc3QgREVGQVVMVF9TQ1JPTExfVEhVTUJfQ09MT1IgPSAnI0NERDBENic7XG5jb25zdCBERUZBVUxUX1NDUk9MTF9USFVNQl9IT1ZFUl9DT0xPUiA9ICcjOUNBMkFEJztcblxuLyoqXG4gKiBDU1MgY2hpYSBz4bq7IGNobyBt4buNaSBpbnN0YW5jZS4gTcOgdS9wYWRkaW5nIGzhuqV5IHF1YSBDU1MgdmFyaWFibGVzIMSR4buDIG3hu5dpXG4gKiBkaXJlY3RpdmUgaW5zdGFuY2UgY8OzIHRo4buDIGN1c3RvbSDEkeG7mWMgbOG6rXAgbcOgIGtow7RuZyBwaOG6o2kgcmUtd3JpdGUgc3R5bGUgdGFnLlxuICovXG5jb25zdCBTVFlMRV9DT05URU5UID0gYFxuICAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1jb250YWluZXIgLnNjcm9sbGJhci10cmFjayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlicy11aS1zYi10cmFjay1jb2xvciwgdHJhbnNwYXJlbnQpO1xuICB9XG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAuc2Nyb2xsYmFyLXRyYWNrOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1saWJzLXVpLXNiLXRyYWNrLWhvdmVyLWNvbG9yLCAke0RFRkFVTFRfU0NST0xMQkFSX0hPVkVSX0NPTE9SfSk7XG4gIH1cbiAgLmxpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyIC5zY3JvbGxiYXItdHJhY2stWCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMDtcbiAgICB6LWluZGV4OiAxO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB2aXNpYmlsaXR5IDAuM3MgZWFzZTtcbiAgfVxuICAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1jb250YWluZXIgLnNjcm9sbGJhci10cmFjay1ZIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgei1pbmRleDogMTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZSwgdmlzaWJpbGl0eSAwLjNzIGVhc2U7XG4gIH1cbiAgLmxpYnMtdWktc2Nyb2xsLW92ZXJsYXktY29udGFpbmVyIC5zY3JvbGxiYXItdGh1bWIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpYnMtdWktc2ItdGh1bWItY29sb3IsICR7REVGQVVMVF9TQ1JPTExfVEhVTUJfQ09MT1J9KTtcbiAgfVxuICAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1jb250YWluZXIgLnNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlicy11aS1zYi10aHVtYi1ob3Zlci1jb2xvciwgJHtERUZBVUxUX1NDUk9MTF9USFVNQl9IT1ZFUl9DT0xPUn0pO1xuICB9XG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAuc2Nyb2xsYmFyLXRodW1iLVgge1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tbGlicy11aS1zYi1wYWRkaW5nLWRvdWJsZSwgNHB4KSk7XG4gICAgYm90dG9tOiB2YXIoLS1saWJzLXVpLXNiLXBhZGRpbmcsIDJweCk7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuICAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1jb250YWluZXIgLnNjcm9sbGJhci10aHVtYi1ZIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gdmFyKC0tbGlicy11aS1zYi1wYWRkaW5nLWRvdWJsZSwgNHB4KSk7XG4gICAgcmlnaHQ6IHZhcigtLWxpYnMtdWktc2ItcGFkZGluZywgMnB4KTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgY3Vyc29yOiBncmFiYmluZztcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG4gIC5saWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lciAubGlicy11aS1zY3JvbGwtb3ZlcmxheS1lbGVtZW50Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgfVxuYDtcblxuY29uc3QgZW5zdXJlU3R5bGVUYWcgPSAoKSA9PiB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTVFlMRV9UQUdfSUQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZUVsLmlkID0gU1RZTEVfVEFHX0lEO1xuICBzdHlsZUVsLnRleHRDb250ZW50ID0gU1RZTEVfQ09OVEVOVDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGVFbCk7XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNTY3JvbGxUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkga2VlcERpc3BsYXlUaHVtYiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3Vic1ggPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc3Vic1kgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIC8qKiBUaW1lciByZXNldCBpc1Njcm9sbFRodW1iIHNhdSBkcmFnIGVuZCDigJQgcGjhuqNpIGNsZWFyIGtoaSBkZXN0cm95IMSR4buDIHRyw6FuaCBzZXQgc2lnbmFsIHRyw6puIGluc3RhbmNlIMSRw6MgdGVhcmRvd24uICovXG4gIHByaXZhdGUgbW91c2VVcFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIC8qKiByQUYgdGhyb3R0bGUgY2hvIHNjcm9sbCBoYW5kbGVyIOKAlCBnb20gbXVsdGlwbGUgc2Nyb2xsIGV2ZW50cyB24buBIDEgbOG6p24gdXBkYXRlIERPTSBt4buXaSBmcmFtZS4gKi9cbiAgcHJpdmF0ZSBzY3JvbGxSYWZYPzogbnVtYmVyO1xuICBwcml2YXRlIHNjcm9sbFJhZlk/OiBudW1iZXI7XG4gIC8qKiBDYWNoZSBkaW1lbnNpb25zIOKAlCBza2lwIERPTSB3cml0ZSBu4bq/dSBrw61jaCB0aMaw4bubYyBraMO0bmcgxJHhu5VpIGdp4buvYSAyIGzhuqduIHBvbGwuICovXG4gIHByaXZhdGUgbGFzdENvbnRlbnRXaWR0aCA9IDA7XG4gIHByaXZhdGUgbGFzdENvbnRlbnRIZWlnaHQgPSAwO1xuICBwcml2YXRlIGxhc3RDb250YWluZXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgbGFzdENvbnRhaW5lckhlaWdodCA9IDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxiYXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxiYXJXaWR0aCA/PyAxMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsYmFyUGFkZGluZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5zY3JvbGxiYXJQYWRkaW5nID8/IDIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbGJhckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckNvbG9yID8/ICcnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxiYXJIb3ZlckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbGJhckhvdmVyQ29sb3IgPz8gREVGQVVMVF9TQ1JPTExCQVJfSE9WRVJfQ09MT1IpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbFRodW1iQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsVGh1bWJDb2xvciA/PyBERUZBVUxUX1NDUk9MTF9USFVNQl9DT0xPUik7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Nyb2xsVGh1bWJIb3ZlckNvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LnNjcm9sbFRodW1iSG92ZXJDb2xvciA/PyBERUZBVUxUX1NDUk9MTF9USFVNQl9IT1ZFUl9DT0xPUik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkaXZDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFja1g6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJYOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNrWTogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0aHVtYlk6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBkZWJ1Z01vZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlnbm9yZUluaXQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzQ29udGFpbmVyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgb3B0aW9ucyA9IGlucHV0PElTY3JvbGxPdmVybGF5T3B0aW9ucyB8IHVuZGVmaW5lZD4oe30pO1xuICByZWFkb25seSBlbGVtZW50Q2hlY2tTY3JvbGxYID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRDaGVja1Njcm9sbFkgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFNjcm9sbCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWCA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsWSA9IG91dHB1dDxFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0U2Nyb2xsVG9wID0gb3V0cHV0PEV2ZW50PigpO1xuICByZWFkb25seSBvdXRTY3JvbGxCb3R0b20gPSBvdXRwdXQ8RXZlbnQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFNldHVwIHNjcm9sbGJhcnMga2hpIG9wdGlvbnMvY2xhc3NDb250YWluZXIgxJHhu5VpLlxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVJbml0KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuICAgICAgY29uc3QgY2xhc3NDb250YWluZXIgPSB0aGlzLmNsYXNzQ29udGFpbmVyKCk7XG5cbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3luY0NvbnRhaW5lckV4dHJhQ2xhc3NlcyhjbGFzc0NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdvdmVyZmxvdy1oaWRkZW4nLCBvcHRpb25zPy5zY3JvbGxYID09PSAnaGlkZGVuJyAmJiBvcHRpb25zPy5zY3JvbGxZID09PSAnaGlkZGVuJyk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnM/LnNjcm9sbFggIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuc3Vic1ggPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgdGhpcy50cmFja1guY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50aHVtYlguY2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgdGhpcy50cmFja1guc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5zY3JvbGxiYXJXaWR0aCgpfXB4YDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVNjcm9sbGJhcignWCcsIHRoaXMudHJhY2tYLCB0aGlzLnRodW1iWCk7XG4gICAgICAgICAgdGhpcy5iaW5kRXZlbnRzU2Nyb2xsQmFyKCdYJywgdGhpcy50cmFja1gsIHRoaXMuc3Vic1gpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlckRyYWdBbmREcm9wVGh1bWIoJ1gnLCB0aGlzLnN1YnNYKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJDbGlja1RyYWNrKCdYJywgdGhpcy5zdWJzWCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucz8uc2Nyb2xsWSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICB0aGlzLnN1YnNZLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5zdWJzWSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICB0aGlzLnRyYWNrWS5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRodW1iWS5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLnRyYWNrWS5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Nyb2xsYmFyV2lkdGgoKX1weGA7XG4gICAgICAgICAgdGhpcy5jcmVhdGVTY3JvbGxiYXIoJ1knLCB0aGlzLnRyYWNrWSwgdGhpcy50aHVtYlkpO1xuICAgICAgICAgIHRoaXMuYmluZEV2ZW50c1Njcm9sbEJhcignWScsIHRoaXMudHJhY2tZLCB0aGlzLnN1YnNZKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKCdZJywgdGhpcy5zdWJzWSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tUcmFjaygnWScsIHRoaXMuc3Vic1kpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFN5bmMgQ1NTIHZhcmlhYmxlcyBwZXItaW5zdGFuY2Ug4oCUIGtow7RuZyDEkeG7pW5nIHN0eWxlIHRhZyBjaGlhIHPhursgZ2nhu69hIGPDoWMgaW5zdGFuY2UuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNiQ29sb3IgPSB0aGlzLnNjcm9sbGJhckNvbG9yKCk7XG4gICAgICBjb25zdCBzYkhvdmVyID0gdGhpcy5zY3JvbGxiYXJIb3ZlckNvbG9yKCk7XG4gICAgICBjb25zdCB0aENvbG9yID0gdGhpcy5zY3JvbGxUaHVtYkNvbG9yKCk7XG4gICAgICBjb25zdCB0aEhvdmVyID0gdGhpcy5zY3JvbGxUaHVtYkhvdmVyQ29sb3IoKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLnNjcm9sbGJhclBhZGRpbmcoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpdlN0eWxlID0gdGhpcy5kaXZDb250YWluZXIuc3R5bGU7XG4gICAgICAgIGRpdlN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktc2ItdHJhY2stY29sb3InLCBzYkNvbG9yKTtcbiAgICAgICAgZGl2U3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS1zYi10cmFjay1ob3Zlci1jb2xvcicsIHNiSG92ZXIpO1xuICAgICAgICBkaXZTdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXNiLXRodW1iLWNvbG9yJywgdGhDb2xvcik7XG4gICAgICAgIGRpdlN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktc2ItdGh1bWItaG92ZXItY29sb3InLCB0aEhvdmVyKTtcbiAgICAgICAgZGl2U3R5bGUuc2V0UHJvcGVydHkoJy0tbGlicy11aS1zYi1wYWRkaW5nJywgYCR7cGFkZGluZ31weGApO1xuICAgICAgICBkaXZTdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXNiLXBhZGRpbmctZG91YmxlJywgYCR7cGFkZGluZyAqIDJ9cHhgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gV2luZG93IHJlc2l6ZSDihpIgcmUtbWVhc3VyZSB0aHVtYiBzaXplIGNobyBj4bqjIDIgdHLhu6VjLlxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKCdYJyk7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZSgnWScpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlVXBUaW1lcik7XG4gICAgICBpZiAodGhpcy5zY3JvbGxSYWZYKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbFJhZlgpO1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsUmFmWSkgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxSYWZZKTtcbiAgICAgIHRoaXMuZGl2Q29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgdGhpcy5zdWJzWC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5zdWJzWS51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBGVU5DVElPTlNcbiAgcHJpdmF0ZSBnZXQgRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFNjcm9sbCgpIHx8IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgLyoqIFRow6ptIGPDoWMgY2xhc3MgY29uc3VtZXIgdHJ1eeG7gW4gcXVhIFtjbGFzc0NvbnRhaW5lcl0gbcOgIGtow7RuZyB4w7NhIGNsYXNzIGjhu4cgdGjhu5FuZyDEkcOjIHNldC4gKi9cbiAgcHJpdmF0ZSBzeW5jQ29udGFpbmVyRXh0cmFDbGFzc2VzKGNsYXNzU3RyOiBzdHJpbmcpIHtcbiAgICBjbGFzc1N0clxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5mb3JFYWNoKChjbGFzc05hbWUpID0+IHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNjcm9sbGJhcihzY3JvbGxEaXJlY3Rpb246IFRZUEVfU0NST0xMX0RJUkVDVElPTiwgdHJhY2tFbDogSFRNTEVsZW1lbnQsIHRodW1iRWw6IEhUTUxFbGVtZW50KSB7XG4gICAgZW5zdXJlU3R5bGVUYWcoKTtcblxuICAgIGNvbnN0IHN0eWxlc1Byb3BlcnR5ID0ge1xuICAgICAgJ2JveC1zaXppbmcnOiAnYm9yZGVyLWJveCcsXG4gICAgICAnc2Nyb2xsYmFyLXdpZHRoJzogJ25vbmUnLFxuICAgICAgJ3Njcm9sbGJhci1jb2xvcic6IHRoaXMub3B0aW9ucygpPy5pZ25vcmVUcmFuc3BhcmVudFNjcm9sbEJhckNvbG9yRGVmYXVsdCA/ICdhdXRvJyA6ICd0cmFuc3BhcmVudCB0cmFuc3BhcmVudCcsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAnb3ZlcmZsb3cteCc6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxYIHx8ICdzY3JvbGwnfWAsXG4gICAgICAnb3ZlcmZsb3cteSc6IGAke3RoaXMub3B0aW9ucygpPy5zY3JvbGxZIHx8ICdzY3JvbGwnfWAsXG4gICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIE9iamVjdC5rZXlzKHN0eWxlc1Byb3BlcnR5KS5mb3JFYWNoKChrZXkpID0+IHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLkVsZW1lbnQsIGtleSwgc3R5bGVzUHJvcGVydHlba2V5XSwgMSkpO1xuXG4gICAgdHJhY2tFbC5jbGFzc0xpc3QuYWRkKCdzY3JvbGxiYXItdHJhY2snKTtcbiAgICB0cmFja0VsLmNsYXNzTGlzdC5hZGQoYHNjcm9sbGJhci10cmFjay0ke3Njcm9sbERpcmVjdGlvbn1gKTtcbiAgICB0aHVtYkVsLmNsYXNzTGlzdC5hZGQoJ3Njcm9sbGJhci10aHVtYicpO1xuICAgIHRodW1iRWwuY2xhc3NMaXN0LmFkZChgc2Nyb2xsYmFyLXRodW1iLSR7c2Nyb2xsRGlyZWN0aW9ufWApO1xuICAgIHRyYWNrRWwuYXBwZW5kQ2hpbGQodGh1bWJFbCk7XG5cbiAgICBpZiAodGhpcy5FbGVtZW50LmNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5zcGxpdCgnICcpLmZvckVhY2goKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjbGFzc05hbWUgJiZcbiAgICAgICAgICAoWyd3LWZ1bGwnLCAndy1zY3JlZW4nLCAnaC1mdWxsJywgJ2gtc2NyZWVuJywgJ3Nocmluay0wJ10uaW5jbHVkZXMoY2xhc3NOYW1lKSB8fCBjbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpIHx8IGNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykgfHwgL14oIT8pW2h3XS1cXFtcXGQrcHhcXF0kLy50ZXN0KGNsYXNzTmFtZSkpICYmXG4gICAgICAgICAgIXRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXRoaXMuRWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ21pbi1oLScpKSB7XG4gICAgICAgIHRoaXMuZGl2Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21pbi1oLTAnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5FbGVtZW50LmNsYXNzTmFtZS5pbmNsdWRlcygnbWluLXctJykpIHtcbiAgICAgICAgdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWluLXctMCcpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLkVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCdsaWJzLXVpLXNjcm9sbC1vdmVybGF5LWVsZW1lbnQnKSkge1xuICAgICAgICB0aGlzLkVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbGlicy11aS1zY3JvbGwtb3ZlcmxheS1lbGVtZW50Jyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXZDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdsaWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lcicpKSB7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdsaWJzLXVpLXNjcm9sbC1vdmVybGF5LWNvbnRhaW5lcicpO1xuICAgIH1cbiAgICB0aGlzLmRpdkNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmFja0VsKTtcblxuICAgIGlmICghdGhpcy5kaXZDb250YWluZXIuc3R5bGUucG9zaXRpb24pIHtcbiAgICAgIHRoaXMuRWxlbWVudC5wYXJlbnRFbGVtZW50Py5pbnNlcnRCZWZvcmUodGhpcy5kaXZDb250YWluZXIsIHRoaXMuRWxlbWVudCk7XG4gICAgICB0aGlzLmRpdkNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgfVxuICAgIHRoaXMuZGl2Q29udGFpbmVyLmFwcGVuZCh0aGlzLkVsZW1lbnQpO1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kRXZlbnRzU2Nyb2xsQmFyKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCB0cmFja0VsOiBIVE1MRWxlbWVudCwgc3ViczogU3Vic2NyaXB0aW9uKSB7XG4gICAgbGV0IHNjcm9sbExlZnQgPSB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgc2Nyb2xsVG9wID0gdGhpcy5FbGVtZW50LnNjcm9sbFRvcDtcbiAgICBzdWJzLmFkZChcbiAgICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5FbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChldmVudCkgPT5cbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVTY3JvbGxIYW5kbGUoc2Nyb2xsRGlyZWN0aW9uLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuRWxlbWVudDtcbiAgICAgICAgICAgICAgdGhpcy5vdXRTY3JvbGwuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsTGVmdCAmJiB0YXJnZXQuc2Nyb2xsTGVmdCArIHRhcmdldC5vZmZzZXRXaWR0aCA+PSB0YXJnZXQuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbFdpZHRoIC0gdGFyZ2V0Lm9mZnNldFdpZHRoIC0gKHRhcmdldC5vZmZzZXRXaWR0aCAtIHRhcmdldC5jbGllbnRXaWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuc2Nyb2xsTGVmdCAhPT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vdXRTY3JvbGxYLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgdGhpcy5vdXRTY3JvbGxZLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3V0U2Nyb2xsVG9wLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbEhlaWdodCA8PSB0YXJnZXQuc2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIFNDUk9MTF9CT1RUT01fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdXRTY3JvbGxCb3R0b20uZW1pdChldmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG5cbiAgICBjb25zdCBtb3VzZUxlYXZlID0gZnJvbUV2ZW50KHRoaXMuZGl2Q29udGFpbmVyLCAnbW91c2VsZWF2ZScpO1xuICAgIGNvbnN0IG1vdXNlRW50ZXIgPSBmcm9tRXZlbnQodGhpcy5kaXZDb250YWluZXIsICdtb3VzZWVudGVyJyk7XG4gICAgc3Vicy5hZGQoXG4gICAgICBtb3VzZUVudGVyXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnICYmICF0aGlzLm9wdGlvbnMoKT8uc2Nyb2xsWE9wYWNpdHkwKSB8fCAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWScgJiYgIXRoaXMub3B0aW9ucygpPy5zY3JvbGxZT3BhY2l0eTApKSB7XG4gICAgICAgICAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbik7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IGludGVydmFsKDEwMDApLnBpcGUodGFrZVVudGlsKG1vdXNlTGVhdmUpKSksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyU2l6ZShzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICAgIHN1YnMuYWRkKFxuICAgICAgbW91c2VMZWF2ZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMua2VlcERpc3BsYXlUaHVtYigpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYWNrRWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgdHJhY2tFbC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUaHJvdHRsZSBzY3JvbGwgaGFuZGxlciB0aGVvIGZyYW1lIOKAlCBnb20gbmhp4buBdSBzY3JvbGwgZXZlbnQgdsOgbyAxIGzhuqduIHVwZGF0ZSBET00uICovXG4gIHByaXZhdGUgc2NoZWR1bGVTY3JvbGxIYW5kbGUoc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIGhhbmRsZTogKCkgPT4gdm9pZCkge1xuICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsUmFmWCkgcmV0dXJuO1xuICAgICAgdGhpcy5zY3JvbGxSYWZYID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5zY3JvbGxSYWZYID0gdW5kZWZpbmVkO1xuICAgICAgICBoYW5kbGUoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zY3JvbGxSYWZZKSByZXR1cm47XG4gICAgdGhpcy5zY3JvbGxSYWZZID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsUmFmWSA9IHVuZGVmaW5lZDtcbiAgICAgIGhhbmRsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja1RyYWNrKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCBzdWJzOiBTdWJzY3JpcHRpb24pIHtcbiAgICBjb25zdCBlbGVtZW50VHJhY2sgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudHJhY2tYIDogdGhpcy50cmFja1k7XG4gICAgY29uc3QgZWxlbWVudFRodW1iID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRodW1iWCA6IHRoaXMudGh1bWJZO1xuXG4gICAgc3Vicy5hZGQoXG4gICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudFRyYWNrLCAnY2xpY2snKVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsVGh1bWIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnICYmIGUuY2xpZW50WCA8IGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSB8fCAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWScgJiYgZS5jbGllbnRZIDwgZWxlbWVudFRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxQb3NpdGlvbkJ5VXNlckFjdGlvbihzY3JvbGxEaXJlY3Rpb24sIGUsICdzbW9vdGgnLCAtMSAqIGVsZW1lbnRUaHVtYi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBlLCAnc21vb3RoJywgLTEgKiBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcmFnQW5kRHJvcFRodW1iKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OLCBzdWJzOiBTdWJzY3JpcHRpb24pIHtcbiAgICBjb25zdCBlbGVtZW50VHJhY2sgPSBzY3JvbGxEaXJlY3Rpb24gPT09ICdYJyA/IHRoaXMudHJhY2tYIDogdGhpcy50cmFja1k7XG4gICAgY29uc3QgZWxlbWVudFRodW1iID0gc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcgPyB0aGlzLnRodW1iWCA6IHRoaXMudGh1bWJZO1xuICAgIGxldCBsZW5ndGhUaHVtYlRvUG9pbnRDbGljayA9IDA7XG5cbiAgICBzdWJzLmFkZChcbiAgICAgIGdldERyYWdFdmVudEJ5RWxlbWVudCh7XG4gICAgICAgIGVsZW1lbnRNb3VzZURvd246IGVsZW1lbnRUaHVtYixcbiAgICAgICAgZnVuY3Rpb25Nb3VzZURvd246IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Njcm9sbFRodW1iLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmtlZXBEaXNwbGF5VGh1bWIuc2V0KHRydWUpO1xuICAgICAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gPT09ICdYJykge1xuICAgICAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIG1vdXNlRXZlbnQuY2xpZW50WDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSBlbGVtZW50VGh1bWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gbW91c2VFdmVudC5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbk1vdXNlVXA6IChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5rZWVwRGlzcGxheVRodW1iLnNldChmYWxzZSk7XG4gICAgICAgICAgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwO1xuICAgICAgICAgIGlmICghY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lcihtb3VzZUV2ZW50LCB0aGlzLkVsZW1lbnQpKSB7XG4gICAgICAgICAgICBlbGVtZW50VHJhY2suc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgZWxlbWVudFRyYWNrLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlVXBUaW1lcik7XG4gICAgICAgICAgdGhpcy5tb3VzZVVwVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxUaHVtYi5zZXQoZmFsc2UpO1xuICAgICAgICAgIH0sIE1PVVNFX1VQX1JFU0VUX0RFTEFZKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveVJlZjogdGhpcy5kZXN0cm95UmVmLFxuICAgICAgfSkuc3Vic2NyaWJlKChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50LCAnYXV0bycsIGxlbmd0aFRodW1iVG9Qb2ludENsaWNrKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsUG9zaXRpb25CeVVzZXJBY3Rpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04sIGU6IE1vdXNlRXZlbnQsIGJlaGF2aW9yOiAnYXV0bycgfCAnc21vb3RoJywgbGVuZ3RoVGh1bWJUb1BvaW50Q2xpY2sgPSAwKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCB0aHVtYlBvc2l0aW9uID0gZS5jbGllbnRYIC0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyBsZW5ndGhUaHVtYlRvUG9pbnRDbGljaztcbiAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoKSkgKiAoY29udGVudFdpZHRoIC0gY29udGFpbmVyV2lkdGgpO1xuICAgICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7IGxlZnQ6IHNjcm9sbExlZnQsIGJlaGF2aW9yIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9IGUuY2xpZW50WSAtIHRoaXMuRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBsZW5ndGhUaHVtYlRvUG9pbnRDbGljaztcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAodGh1bWJQb3NpdGlvbiAvIChjb250YWluZXJIZWlnaHQgLSB0aGlzLnRodW1iWS5vZmZzZXRIZWlnaHQpKSAqIChjb250ZW50SGVpZ2h0IC0gY29udGFpbmVySGVpZ2h0KTtcbiAgICB0aGlzLkVsZW1lbnQuc2Nyb2xsKHsgdG9wOiBzY3JvbGxUb3AsIGJlaGF2aW9yIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxiYXJTaXplKHNjcm9sbERpcmVjdGlvbjogVFlQRV9TQ1JPTExfRElSRUNUSU9OKSB7XG4gICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gJ1gnKSB7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFgoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbFdpZHRoO1xuICAgICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSB0aGlzLmxhc3RDb250YWluZXJXaWR0aCAmJiBjb250ZW50V2lkdGggPT09IHRoaXMubGFzdENvbnRlbnRXaWR0aCkgcmV0dXJuO1xuICAgICAgdGhpcy5sYXN0Q29udGFpbmVyV2lkdGggPSBjb250YWluZXJXaWR0aDtcbiAgICAgIHRoaXMubGFzdENvbnRlbnRXaWR0aCA9IGNvbnRlbnRXaWR0aDtcbiAgICAgIGNvbnN0IHRodW1iV2lkdGggPSAoY29udGFpbmVyV2lkdGggLyBjb250ZW50V2lkdGgpICogY29udGFpbmVyV2lkdGg7XG4gICAgICB0aGlzLnRodW1iWC5zdHlsZS53aWR0aCA9IGAke01hdGgubWF4KE1JTl9USFVNQl9TSVpFLCB0aHVtYldpZHRoKX1weGA7XG4gICAgICB0aGlzLnRyYWNrWC5zdHlsZS5kaXNwbGF5ID0gY29udGVudFdpZHRoID4gY29udGFpbmVyV2lkdGggPyAnYmxvY2snIDogJ25vbmUnO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxiYXJQb3NpdGlvbihzY3JvbGxEaXJlY3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLkVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSAodGhpcy5lbGVtZW50Q2hlY2tTY3JvbGxZKCkgfHwgdGhpcy5FbGVtZW50KS5zY3JvbGxIZWlnaHQ7XG4gICAgaWYgKGNvbnRhaW5lckhlaWdodCA9PT0gdGhpcy5sYXN0Q29udGFpbmVySGVpZ2h0ICYmIGNvbnRlbnRIZWlnaHQgPT09IHRoaXMubGFzdENvbnRlbnRIZWlnaHQpIHJldHVybjtcbiAgICB0aGlzLmxhc3RDb250YWluZXJIZWlnaHQgPSBjb250YWluZXJIZWlnaHQ7XG4gICAgdGhpcy5sYXN0Q29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHQ7XG4gICAgY29uc3QgdGh1bWJIZWlnaHQgPSAoY29udGFpbmVySGVpZ2h0IC8gY29udGVudEhlaWdodCkgKiBjb250YWluZXJIZWlnaHQ7XG4gICAgdGhpcy50aHVtYlkuc3R5bGUuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoTUlOX1RIVU1CX1NJWkUsIHRodW1iSGVpZ2h0KX1weGA7XG4gICAgdGhpcy50cmFja1kuc3R5bGUuZGlzcGxheSA9IGNvbnRlbnRIZWlnaHQgPiBjb250YWluZXJIZWlnaHQgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oJ1knKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsYmFyUG9zaXRpb24oc2Nyb2xsRGlyZWN0aW9uOiBUWVBFX1NDUk9MTF9ESVJFQ1RJT04pIHtcbiAgICBpZiAoc2Nyb2xsRGlyZWN0aW9uID09PSAnWCcpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5FbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gKHRoaXMuZWxlbWVudENoZWNrU2Nyb2xsWCgpIHx8IHRoaXMuRWxlbWVudCkuc2Nyb2xsV2lkdGg7XG4gICAgICBjb25zdCBkZW5vbWluYXRvclNjcm9sbCA9IGNvbnRlbnRXaWR0aCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgaWYgKGRlbm9taW5hdG9yU2Nyb2xsIDw9IDApIHJldHVybjtcbiAgICAgIGNvbnN0IGRlbm9taW5hdG9yVGh1bWIgPSBjb250YWluZXJXaWR0aCAtIHRoaXMudGh1bWJYLm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgdGh1bWJQb3NpdGlvbiA9ICh0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdCAvIGRlbm9taW5hdG9yU2Nyb2xsKSAqIGRlbm9taW5hdG9yVGh1bWI7XG4gICAgICB0aGlzLnRodW1iWC5zdHlsZS5sZWZ0ID0gYCR7dGh1bWJQb3NpdGlvbn1weGA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHRoaXMuRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgY29udGVudEhlaWdodCA9ICh0aGlzLmVsZW1lbnRDaGVja1Njcm9sbFkoKSB8fCB0aGlzLkVsZW1lbnQpLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBkZW5vbWluYXRvclNjcm9sbCA9IGNvbnRlbnRIZWlnaHQgLSBjb250YWluZXJIZWlnaHQ7XG4gICAgaWYgKGRlbm9taW5hdG9yU2Nyb2xsIDw9IDApIHJldHVybjtcbiAgICBjb25zdCBkZW5vbWluYXRvclRodW1iID0gY29udGFpbmVySGVpZ2h0IC0gdGhpcy50aHVtYlkub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IHRodW1iUG9zaXRpb24gPSAodGhpcy5FbGVtZW50LnNjcm9sbFRvcCAvIGRlbm9taW5hdG9yU2Nyb2xsKSAqIGRlbm9taW5hdG9yVGh1bWI7XG4gICAgdGhpcy50aHVtYlkuc3R5bGUudG9wID0gYCR7dGh1bWJQb3NpdGlvbn1weGA7XG4gIH1cbn1cbiJdfQ==
@@ -111,7 +111,7 @@ class LibsUiComponentsScrollOverlayDirective {
111
111
  debugMode = input(false);
112
112
  ignoreInit = input(false);
113
113
  classContainer = input('', { transform: (value) => value ?? '' });
114
- options = input(Object.assign({}));
114
+ options = input({});
115
115
  elementCheckScrollX = input();
116
116
  elementCheckScrollY = input();
117
117
  elementScroll = input();
@@ -225,7 +225,7 @@ class LibsUiComponentsScrollOverlayDirective {
225
225
  if (this.Element.className) {
226
226
  this.Element.className.split(' ').forEach((className) => {
227
227
  if (className &&
228
- (['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)) &&
228
+ (['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)[hw]-\[\d+px\]$/.test(className)) &&
229
229
  !this.divContainer.classList.contains(className)) {
230
230
  this.divContainer.classList.add(className);
231
231
  }
@@ -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/libs-ui-components-scroll-overlay.ts"],"sourcesContent":["import { DestroyRef, Directive, ElementRef, Renderer2, computed, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { checkMouseOverInContainer, getDragEventByElement } from '@libs-ui/utils';\nimport { Subscription, fromEvent, interval, switchMap, takeUntil, tap } from 'rxjs';\nimport { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from './scroll.interface';\n\nconst STYLE_TAG_ID = 'libs-ui-scroll-overlay-style-tag';\nconst SCROLL_BOTTOM_TOLERANCE = 3;\nconst MIN_THUMB_SIZE = 20;\nconst MOUSE_UP_RESET_DELAY = 250;\nconst DEFAULT_SCROLLBAR_HOVER_COLOR = '#CDD0D640';\nconst DEFAULT_SCROLL_THUMB_COLOR = '#CDD0D6';\nconst DEFAULT_SCROLL_THUMB_HOVER_COLOR = '#9CA2AD';\n\n/**\n * CSS chia sẻ cho mọi instance. Màu/padding lấy qua CSS variables để mỗi\n * directive instance có thể custom độc lập mà không phải re-write style tag.\n */\nconst STYLE_CONTENT = `\n .libs-ui-scroll-overlay-container .scrollbar-track {\n background-color: var(--libs-ui-sb-track-color, transparent);\n }\n .libs-ui-scroll-overlay-container .scrollbar-track:hover {\n background-color: var(--libs-ui-sb-track-hover-color, ${DEFAULT_SCROLLBAR_HOVER_COLOR});\n }\n .libs-ui-scroll-overlay-container .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 .libs-ui-scroll-overlay-container .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 .libs-ui-scroll-overlay-container .scrollbar-thumb {\n background-color: var(--libs-ui-sb-thumb-color, ${DEFAULT_SCROLL_THUMB_COLOR});\n }\n .libs-ui-scroll-overlay-container .scrollbar-thumb:hover {\n background-color: var(--libs-ui-sb-thumb-hover-color, ${DEFAULT_SCROLL_THUMB_HOVER_COLOR});\n }\n .libs-ui-scroll-overlay-container .scrollbar-thumb-X {\n height: calc(100% - var(--libs-ui-sb-padding-double, 4px));\n bottom: var(--libs-ui-sb-padding, 2px);\n border-radius: 4px;\n cursor: grabbing;\n transition: background-color 0.3s;\n position: absolute;\n }\n .libs-ui-scroll-overlay-container .scrollbar-thumb-Y {\n width: calc(100% - var(--libs-ui-sb-padding-double, 4px));\n right: var(--libs-ui-sb-padding, 2px);\n border-radius: 4px;\n cursor: grabbing;\n transition: background-color 0.3s;\n position: absolute;\n }\n .libs-ui-scroll-overlay-container .libs-ui-scroll-overlay-element::-webkit-scrollbar {\n width: 0 !important;\n height: 0 !important;\n }\n`;\n\nconst ensureStyleTag = () => {\n if (document.getElementById(STYLE_TAG_ID)) {\n return;\n }\n const styleEl = document.createElement('style');\n styleEl.id = STYLE_TAG_ID;\n styleEl.textContent = STYLE_CONTENT;\n document.head.append(styleEl);\n};\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsScrollOverlayDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsScrollOverlayDirective {\n // #region PROPERTY\n private isScrollThumb = signal<boolean>(false);\n private keepDisplayThumb = signal<boolean>(false);\n private subsX = new Subscription();\n private subsY = new Subscription();\n /** Timer reset isScrollThumb sau drag end — phải clear khi destroy để tránh set signal trên instance đã teardown. */\n private mouseUpTimer?: ReturnType<typeof setTimeout>;\n /** rAF throttle cho scroll handler — gom multiple scroll events về 1 lần update DOM mỗi frame. */\n private scrollRafX?: number;\n private scrollRafY?: number;\n /** Cache dimensions — skip DOM write nếu kích thước không đổi giữa 2 lần poll. */\n private lastContentWidth = 0;\n private lastContentHeight = 0;\n private lastContainerWidth = 0;\n private lastContainerHeight = 0;\n\n private scrollbarWidth = computed(() => this.options()?.scrollbarWidth ?? 10);\n private scrollbarPadding = computed(() => this.options()?.scrollbarPadding ?? 2);\n private scrollbarColor = computed(() => this.options()?.scrollbarColor ?? '');\n private scrollbarHoverColor = computed(() => this.options()?.scrollbarHoverColor ?? DEFAULT_SCROLLBAR_HOVER_COLOR);\n private scrollThumbColor = computed(() => this.options()?.scrollThumbColor ?? DEFAULT_SCROLL_THUMB_COLOR);\n private scrollThumbHoverColor = computed(() => this.options()?.scrollThumbHoverColor ?? DEFAULT_SCROLL_THUMB_HOVER_COLOR);\n\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\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 private destroyRef = inject(DestroyRef);\n\n constructor() {\n // Setup scrollbars khi options/classContainer đổi.\n effect(() => {\n if (this.ignoreInit()) {\n return;\n }\n const options = this.options();\n const classContainer = this.classContainer();\n\n untracked(() => {\n this.syncContainerExtraClasses(classContainer);\n this.Element.classList.toggle('overflow-hidden', options?.scrollX === 'hidden' && options?.scrollY === 'hidden');\n\n if (options?.scrollX !== 'hidden') {\n this.subsX.unsubscribe();\n this.subsX = new Subscription();\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, this.subsX);\n this.handlerDragAndDropThumb('X', this.subsX);\n this.handlerClickTrack('X', this.subsX);\n }\n\n if (options?.scrollY !== 'hidden') {\n this.subsY.unsubscribe();\n this.subsY = new Subscription();\n this.trackY.className = '';\n this.thumbY.className = '';\n this.trackY.style.width = `${this.scrollbarWidth()}px`;\n this.createScrollbar('Y', this.trackY, this.thumbY);\n this.bindEventsScrollBar('Y', this.trackY, this.subsY);\n this.handlerDragAndDropThumb('Y', this.subsY);\n this.handlerClickTrack('Y', this.subsY);\n }\n });\n });\n\n // Sync CSS variables per-instance — không đụng style tag chia sẻ giữa các instance.\n effect(() => {\n const sbColor = this.scrollbarColor();\n const sbHover = this.scrollbarHoverColor();\n const thColor = this.scrollThumbColor();\n const thHover = this.scrollThumbHoverColor();\n const padding = this.scrollbarPadding();\n untracked(() => {\n const divStyle = this.divContainer.style;\n divStyle.setProperty('--libs-ui-sb-track-color', sbColor);\n divStyle.setProperty('--libs-ui-sb-track-hover-color', sbHover);\n divStyle.setProperty('--libs-ui-sb-thumb-color', thColor);\n divStyle.setProperty('--libs-ui-sb-thumb-hover-color', thHover);\n divStyle.setProperty('--libs-ui-sb-padding', `${padding}px`);\n divStyle.setProperty('--libs-ui-sb-padding-double', `${padding * 2}px`);\n });\n });\n\n // Window resize → re-measure thumb size cho cả 2 trục.\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.updateScrollbarSize('X');\n this.updateScrollbarSize('Y');\n });\n\n this.destroyRef.onDestroy(() => {\n clearTimeout(this.mouseUpTimer);\n if (this.scrollRafX) cancelAnimationFrame(this.scrollRafX);\n if (this.scrollRafY) cancelAnimationFrame(this.scrollRafY);\n this.divContainer.remove();\n this.subsX.unsubscribe();\n this.subsY.unsubscribe();\n });\n }\n\n // #region FUNCTIONS\n private get Element(): HTMLElement {\n return this.elementScroll() || this.element.nativeElement;\n }\n\n /** Thêm các class consumer truyền qua [classContainer] mà không xóa class hệ thống đã set. */\n private syncContainerExtraClasses(classStr: string) {\n classStr\n .split(' ')\n .filter(Boolean)\n .forEach((className) => this.divContainer.classList.add(className));\n }\n\n private createScrollbar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement, thumbEl: HTMLElement) {\n ensureStyleTag();\n\n const stylesProperty = {\n 'box-sizing': 'border-box',\n 'scrollbar-width': 'none',\n 'scrollbar-color': this.options()?.ignoreTransparentScrollBarColorDefault ? 'auto' : 'transparent transparent',\n overflow: 'hidden',\n 'overflow-x': `${this.options()?.scrollX || 'scroll'}`,\n 'overflow-y': `${this.options()?.scrollY || 'scroll'}`,\n } as Record<string, string>;\n Object.keys(stylesProperty).forEach((key) => this.render2.setStyle(this.Element, key, stylesProperty[key], 1));\n\n trackEl.classList.add('scrollbar-track');\n trackEl.classList.add(`scrollbar-track-${scrollDirection}`);\n thumbEl.classList.add('scrollbar-thumb');\n thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);\n trackEl.appendChild(thumbEl);\n\n if (this.Element.className) {\n this.Element.className.split(' ').forEach((className: string) => {\n if (\n className &&\n (['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)) &&\n !this.divContainer.classList.contains(className)\n ) {\n this.divContainer.classList.add(className);\n }\n });\n if (!this.Element.className.includes('min-h-')) {\n this.divContainer.classList.add('min-h-0');\n }\n if (!this.Element.className.includes('min-w-')) {\n this.divContainer.classList.add('min-w-0');\n }\n if (!this.Element.className.includes('libs-ui-scroll-overlay-element')) {\n this.Element.classList.add('libs-ui-scroll-overlay-element');\n }\n }\n if (!this.divContainer.classList.contains('libs-ui-scroll-overlay-container')) {\n this.divContainer.classList.add('libs-ui-scroll-overlay-container');\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, subs: Subscription) {\n let scrollLeft = this.Element.scrollLeft;\n let scrollTop = this.Element.scrollTop;\n subs.add(\n fromEvent<Event>(this.Element, 'scroll')\n .pipe(\n tap((event) =>\n this.scheduleScrollHandle(scrollDirection, () => {\n const target = this.Element;\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 if (target.scrollLeft !== scrollLeft) {\n this.outScrollX.emit(event);\n }\n scrollLeft = target.scrollLeft;\n this.updateScrollbarPosition(scrollDirection);\n return;\n }\n if (target.scrollTop === scrollTop) {\n return;\n }\n this.updateScrollbarPosition(scrollDirection);\n scrollTop = target.scrollTop;\n this.outScrollY.emit(event);\n if (target.scrollTop === 0) {\n this.outScrollTop.emit(event);\n return;\n }\n if (target.scrollHeight <= target.scrollTop + target.offsetHeight + SCROLL_BOTTOM_TOLERANCE) {\n this.outScrollBottom.emit(event);\n }\n })\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe()\n );\n\n const mouseLeave = fromEvent(this.divContainer, 'mouseleave');\n const mouseEnter = fromEvent(this.divContainer, 'mouseenter');\n subs.add(\n mouseEnter\n .pipe(\n 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(() => {\n this.updateScrollbarSize(scrollDirection);\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe()\n );\n\n subs.add(\n mouseLeave\n .pipe(\n tap(() => {\n if (this.keepDisplayThumb()) {\n return;\n }\n trackEl.style.visibility = 'hidden';\n trackEl.style.opacity = '0';\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe()\n );\n }\n\n /** Throttle scroll handler theo frame — gom nhiều scroll event vào 1 lần update DOM. */\n private scheduleScrollHandle(scrollDirection: TYPE_SCROLL_DIRECTION, handle: () => void) {\n if (scrollDirection === 'X') {\n if (this.scrollRafX) return;\n this.scrollRafX = requestAnimationFrame(() => {\n this.scrollRafX = undefined;\n handle();\n });\n return;\n }\n if (this.scrollRafY) return;\n this.scrollRafY = requestAnimationFrame(() => {\n this.scrollRafY = undefined;\n handle();\n });\n }\n\n protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION, subs: Subscription) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n\n subs.add(\n fromEvent<MouseEvent>(elementTrack, 'click')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .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 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\n protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION, subs: Subscription) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n let lengthThumbToPointClick = 0;\n\n subs.add(\n 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 clearTimeout(this.mouseUpTimer);\n this.mouseUpTimer = setTimeout(() => {\n this.isScrollThumb.set(false);\n }, MOUSE_UP_RESET_DELAY);\n },\n destroyRef: this.destroyRef,\n }).subscribe((mouseEvent: MouseEvent) => {\n this.updateScrollPositionByUserAction(scrollDirection, mouseEvent, 'auto', lengthThumbToPointClick);\n })\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 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 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 if (containerWidth === this.lastContainerWidth && contentWidth === this.lastContentWidth) return;\n this.lastContainerWidth = containerWidth;\n this.lastContentWidth = contentWidth;\n const thumbWidth = (containerWidth / contentWidth) * containerWidth;\n this.thumbX.style.width = `${Math.max(MIN_THUMB_SIZE, thumbWidth)}px`;\n this.trackX.style.display = contentWidth > containerWidth ? 'block' : 'none';\n this.updateScrollbarPosition(scrollDirection);\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n if (containerHeight === this.lastContainerHeight && contentHeight === this.lastContentHeight) return;\n this.lastContainerHeight = containerHeight;\n this.lastContentHeight = contentHeight;\n const thumbHeight = (containerHeight / contentHeight) * containerHeight;\n this.thumbY.style.height = `${Math.max(MIN_THUMB_SIZE, thumbHeight)}px`;\n this.trackY.style.display = contentHeight > containerHeight ? 'block' : 'none';\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 denominatorScroll = contentWidth - containerWidth;\n if (denominatorScroll <= 0) return;\n const denominatorThumb = containerWidth - this.thumbX.offsetWidth;\n const thumbPosition = (this.Element.scrollLeft / denominatorScroll) * denominatorThumb;\n this.thumbX.style.left = `${thumbPosition}px`;\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const denominatorScroll = contentHeight - containerHeight;\n if (denominatorScroll <= 0) return;\n const denominatorThumb = containerHeight - this.thumbY.offsetHeight;\n const thumbPosition = (this.Element.scrollTop / denominatorScroll) * denominatorThumb;\n this.thumbY.style.top = `${thumbPosition}px`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-scroll-overlay.mjs","sources":["../../../../../libs-ui/components/scroll-overlay/src/scroll-overlay.directive.ts","../../../../../libs-ui/components/scroll-overlay/src/libs-ui-components-scroll-overlay.ts"],"sourcesContent":["import { DestroyRef, Directive, ElementRef, Renderer2, computed, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { checkMouseOverInContainer, getDragEventByElement } from '@libs-ui/utils';\nimport { Subscription, fromEvent, interval, switchMap, takeUntil, tap } from 'rxjs';\nimport { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from './scroll.interface';\n\nconst STYLE_TAG_ID = 'libs-ui-scroll-overlay-style-tag';\nconst SCROLL_BOTTOM_TOLERANCE = 3;\nconst MIN_THUMB_SIZE = 20;\nconst MOUSE_UP_RESET_DELAY = 250;\nconst DEFAULT_SCROLLBAR_HOVER_COLOR = '#CDD0D640';\nconst DEFAULT_SCROLL_THUMB_COLOR = '#CDD0D6';\nconst DEFAULT_SCROLL_THUMB_HOVER_COLOR = '#9CA2AD';\n\n/**\n * CSS chia sẻ cho mọi instance. Màu/padding lấy qua CSS variables để mỗi\n * directive instance có thể custom độc lập mà không phải re-write style tag.\n */\nconst STYLE_CONTENT = `\n .libs-ui-scroll-overlay-container .scrollbar-track {\n background-color: var(--libs-ui-sb-track-color, transparent);\n }\n .libs-ui-scroll-overlay-container .scrollbar-track:hover {\n background-color: var(--libs-ui-sb-track-hover-color, ${DEFAULT_SCROLLBAR_HOVER_COLOR});\n }\n .libs-ui-scroll-overlay-container .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 .libs-ui-scroll-overlay-container .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 .libs-ui-scroll-overlay-container .scrollbar-thumb {\n background-color: var(--libs-ui-sb-thumb-color, ${DEFAULT_SCROLL_THUMB_COLOR});\n }\n .libs-ui-scroll-overlay-container .scrollbar-thumb:hover {\n background-color: var(--libs-ui-sb-thumb-hover-color, ${DEFAULT_SCROLL_THUMB_HOVER_COLOR});\n }\n .libs-ui-scroll-overlay-container .scrollbar-thumb-X {\n height: calc(100% - var(--libs-ui-sb-padding-double, 4px));\n bottom: var(--libs-ui-sb-padding, 2px);\n border-radius: 4px;\n cursor: grabbing;\n transition: background-color 0.3s;\n position: absolute;\n }\n .libs-ui-scroll-overlay-container .scrollbar-thumb-Y {\n width: calc(100% - var(--libs-ui-sb-padding-double, 4px));\n right: var(--libs-ui-sb-padding, 2px);\n border-radius: 4px;\n cursor: grabbing;\n transition: background-color 0.3s;\n position: absolute;\n }\n .libs-ui-scroll-overlay-container .libs-ui-scroll-overlay-element::-webkit-scrollbar {\n width: 0 !important;\n height: 0 !important;\n }\n`;\n\nconst ensureStyleTag = () => {\n if (document.getElementById(STYLE_TAG_ID)) {\n return;\n }\n const styleEl = document.createElement('style');\n styleEl.id = STYLE_TAG_ID;\n styleEl.textContent = STYLE_CONTENT;\n document.head.append(styleEl);\n};\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsScrollOverlayDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsScrollOverlayDirective {\n // #region PROPERTY\n private readonly isScrollThumb = signal<boolean>(false);\n private readonly keepDisplayThumb = signal<boolean>(false);\n private subsX = new Subscription();\n private subsY = new Subscription();\n /** Timer reset isScrollThumb sau drag end — phải clear khi destroy để tránh set signal trên instance đã teardown. */\n private mouseUpTimer?: ReturnType<typeof setTimeout>;\n /** rAF throttle cho scroll handler — gom multiple scroll events về 1 lần update DOM mỗi frame. */\n private scrollRafX?: number;\n private scrollRafY?: number;\n /** Cache dimensions — skip DOM write nếu kích thước không đổi giữa 2 lần poll. */\n private lastContentWidth = 0;\n private lastContentHeight = 0;\n private lastContainerWidth = 0;\n private lastContainerHeight = 0;\n\n private readonly scrollbarWidth = computed(() => this.options()?.scrollbarWidth ?? 10);\n private readonly scrollbarPadding = computed(() => this.options()?.scrollbarPadding ?? 2);\n private readonly scrollbarColor = computed(() => this.options()?.scrollbarColor ?? '');\n private readonly scrollbarHoverColor = computed(() => this.options()?.scrollbarHoverColor ?? DEFAULT_SCROLLBAR_HOVER_COLOR);\n private readonly scrollThumbColor = computed(() => this.options()?.scrollThumbColor ?? DEFAULT_SCROLL_THUMB_COLOR);\n private readonly scrollThumbHoverColor = computed(() => this.options()?.scrollThumbHoverColor ?? DEFAULT_SCROLL_THUMB_HOVER_COLOR);\n\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\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>({});\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 readonly element = inject(ElementRef);\n private readonly render2 = inject(Renderer2);\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n // Setup scrollbars khi options/classContainer đổi.\n effect(() => {\n if (this.ignoreInit()) {\n return;\n }\n const options = this.options();\n const classContainer = this.classContainer();\n\n untracked(() => {\n this.syncContainerExtraClasses(classContainer);\n this.Element.classList.toggle('overflow-hidden', options?.scrollX === 'hidden' && options?.scrollY === 'hidden');\n\n if (options?.scrollX !== 'hidden') {\n this.subsX.unsubscribe();\n this.subsX = new Subscription();\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, this.subsX);\n this.handlerDragAndDropThumb('X', this.subsX);\n this.handlerClickTrack('X', this.subsX);\n }\n\n if (options?.scrollY !== 'hidden') {\n this.subsY.unsubscribe();\n this.subsY = new Subscription();\n this.trackY.className = '';\n this.thumbY.className = '';\n this.trackY.style.width = `${this.scrollbarWidth()}px`;\n this.createScrollbar('Y', this.trackY, this.thumbY);\n this.bindEventsScrollBar('Y', this.trackY, this.subsY);\n this.handlerDragAndDropThumb('Y', this.subsY);\n this.handlerClickTrack('Y', this.subsY);\n }\n });\n });\n\n // Sync CSS variables per-instance — không đụng style tag chia sẻ giữa các instance.\n effect(() => {\n const sbColor = this.scrollbarColor();\n const sbHover = this.scrollbarHoverColor();\n const thColor = this.scrollThumbColor();\n const thHover = this.scrollThumbHoverColor();\n const padding = this.scrollbarPadding();\n untracked(() => {\n const divStyle = this.divContainer.style;\n divStyle.setProperty('--libs-ui-sb-track-color', sbColor);\n divStyle.setProperty('--libs-ui-sb-track-hover-color', sbHover);\n divStyle.setProperty('--libs-ui-sb-thumb-color', thColor);\n divStyle.setProperty('--libs-ui-sb-thumb-hover-color', thHover);\n divStyle.setProperty('--libs-ui-sb-padding', `${padding}px`);\n divStyle.setProperty('--libs-ui-sb-padding-double', `${padding * 2}px`);\n });\n });\n\n // Window resize → re-measure thumb size cho cả 2 trục.\n fromEvent(window, 'resize')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.updateScrollbarSize('X');\n this.updateScrollbarSize('Y');\n });\n\n this.destroyRef.onDestroy(() => {\n clearTimeout(this.mouseUpTimer);\n if (this.scrollRafX) cancelAnimationFrame(this.scrollRafX);\n if (this.scrollRafY) cancelAnimationFrame(this.scrollRafY);\n this.divContainer.remove();\n this.subsX.unsubscribe();\n this.subsY.unsubscribe();\n });\n }\n\n // #region FUNCTIONS\n private get Element(): HTMLElement {\n return this.elementScroll() || this.element.nativeElement;\n }\n\n /** Thêm các class consumer truyền qua [classContainer] mà không xóa class hệ thống đã set. */\n private syncContainerExtraClasses(classStr: string) {\n classStr\n .split(' ')\n .filter(Boolean)\n .forEach((className) => this.divContainer.classList.add(className));\n }\n\n private createScrollbar(scrollDirection: TYPE_SCROLL_DIRECTION, trackEl: HTMLElement, thumbEl: HTMLElement) {\n ensureStyleTag();\n\n const stylesProperty = {\n 'box-sizing': 'border-box',\n 'scrollbar-width': 'none',\n 'scrollbar-color': this.options()?.ignoreTransparentScrollBarColorDefault ? 'auto' : 'transparent transparent',\n overflow: 'hidden',\n 'overflow-x': `${this.options()?.scrollX || 'scroll'}`,\n 'overflow-y': `${this.options()?.scrollY || 'scroll'}`,\n } as Record<string, string>;\n Object.keys(stylesProperty).forEach((key) => this.render2.setStyle(this.Element, key, stylesProperty[key], 1));\n\n trackEl.classList.add('scrollbar-track');\n trackEl.classList.add(`scrollbar-track-${scrollDirection}`);\n thumbEl.classList.add('scrollbar-thumb');\n thumbEl.classList.add(`scrollbar-thumb-${scrollDirection}`);\n trackEl.appendChild(thumbEl);\n\n if (this.Element.className) {\n this.Element.className.split(' ').forEach((className: string) => {\n if (\n className &&\n (['w-full', 'w-screen', 'h-full', 'h-screen', 'shrink-0'].includes(className) || className.includes('min-h-') || className.includes('min-w-') || /^(!?)[hw]-\\[\\d+px\\]$/.test(className)) &&\n !this.divContainer.classList.contains(className)\n ) {\n this.divContainer.classList.add(className);\n }\n });\n if (!this.Element.className.includes('min-h-')) {\n this.divContainer.classList.add('min-h-0');\n }\n if (!this.Element.className.includes('min-w-')) {\n this.divContainer.classList.add('min-w-0');\n }\n if (!this.Element.className.includes('libs-ui-scroll-overlay-element')) {\n this.Element.classList.add('libs-ui-scroll-overlay-element');\n }\n }\n if (!this.divContainer.classList.contains('libs-ui-scroll-overlay-container')) {\n this.divContainer.classList.add('libs-ui-scroll-overlay-container');\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, subs: Subscription) {\n let scrollLeft = this.Element.scrollLeft;\n let scrollTop = this.Element.scrollTop;\n subs.add(\n fromEvent<Event>(this.Element, 'scroll')\n .pipe(\n tap((event) =>\n this.scheduleScrollHandle(scrollDirection, () => {\n const target = this.Element;\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 if (target.scrollLeft !== scrollLeft) {\n this.outScrollX.emit(event);\n }\n scrollLeft = target.scrollLeft;\n this.updateScrollbarPosition(scrollDirection);\n return;\n }\n if (target.scrollTop === scrollTop) {\n return;\n }\n this.updateScrollbarPosition(scrollDirection);\n scrollTop = target.scrollTop;\n this.outScrollY.emit(event);\n if (target.scrollTop === 0) {\n this.outScrollTop.emit(event);\n return;\n }\n if (target.scrollHeight <= target.scrollTop + target.offsetHeight + SCROLL_BOTTOM_TOLERANCE) {\n this.outScrollBottom.emit(event);\n }\n })\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe()\n );\n\n const mouseLeave = fromEvent(this.divContainer, 'mouseleave');\n const mouseEnter = fromEvent(this.divContainer, 'mouseenter');\n subs.add(\n mouseEnter\n .pipe(\n 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(() => {\n this.updateScrollbarSize(scrollDirection);\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe()\n );\n\n subs.add(\n mouseLeave\n .pipe(\n tap(() => {\n if (this.keepDisplayThumb()) {\n return;\n }\n trackEl.style.visibility = 'hidden';\n trackEl.style.opacity = '0';\n }),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe()\n );\n }\n\n /** Throttle scroll handler theo frame — gom nhiều scroll event vào 1 lần update DOM. */\n private scheduleScrollHandle(scrollDirection: TYPE_SCROLL_DIRECTION, handle: () => void) {\n if (scrollDirection === 'X') {\n if (this.scrollRafX) return;\n this.scrollRafX = requestAnimationFrame(() => {\n this.scrollRafX = undefined;\n handle();\n });\n return;\n }\n if (this.scrollRafY) return;\n this.scrollRafY = requestAnimationFrame(() => {\n this.scrollRafY = undefined;\n handle();\n });\n }\n\n protected handlerClickTrack(scrollDirection: TYPE_SCROLL_DIRECTION, subs: Subscription) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n\n subs.add(\n fromEvent<MouseEvent>(elementTrack, 'click')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .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 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\n protected handlerDragAndDropThumb(scrollDirection: TYPE_SCROLL_DIRECTION, subs: Subscription) {\n const elementTrack = scrollDirection === 'X' ? this.trackX : this.trackY;\n const elementThumb = scrollDirection === 'X' ? this.thumbX : this.thumbY;\n let lengthThumbToPointClick = 0;\n\n subs.add(\n 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 clearTimeout(this.mouseUpTimer);\n this.mouseUpTimer = setTimeout(() => {\n this.isScrollThumb.set(false);\n }, MOUSE_UP_RESET_DELAY);\n },\n destroyRef: this.destroyRef,\n }).subscribe((mouseEvent: MouseEvent) => {\n this.updateScrollPositionByUserAction(scrollDirection, mouseEvent, 'auto', lengthThumbToPointClick);\n })\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 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 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 if (containerWidth === this.lastContainerWidth && contentWidth === this.lastContentWidth) return;\n this.lastContainerWidth = containerWidth;\n this.lastContentWidth = contentWidth;\n const thumbWidth = (containerWidth / contentWidth) * containerWidth;\n this.thumbX.style.width = `${Math.max(MIN_THUMB_SIZE, thumbWidth)}px`;\n this.trackX.style.display = contentWidth > containerWidth ? 'block' : 'none';\n this.updateScrollbarPosition(scrollDirection);\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n if (containerHeight === this.lastContainerHeight && contentHeight === this.lastContentHeight) return;\n this.lastContainerHeight = containerHeight;\n this.lastContentHeight = contentHeight;\n const thumbHeight = (containerHeight / contentHeight) * containerHeight;\n this.thumbY.style.height = `${Math.max(MIN_THUMB_SIZE, thumbHeight)}px`;\n this.trackY.style.display = contentHeight > containerHeight ? 'block' : 'none';\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 denominatorScroll = contentWidth - containerWidth;\n if (denominatorScroll <= 0) return;\n const denominatorThumb = containerWidth - this.thumbX.offsetWidth;\n const thumbPosition = (this.Element.scrollLeft / denominatorScroll) * denominatorThumb;\n this.thumbX.style.left = `${thumbPosition}px`;\n return;\n }\n const containerHeight = this.Element.offsetHeight;\n const contentHeight = (this.elementCheckScrollY() || this.Element).scrollHeight;\n const denominatorScroll = contentHeight - containerHeight;\n if (denominatorScroll <= 0) return;\n const denominatorThumb = containerHeight - this.thumbY.offsetHeight;\n const thumbPosition = (this.Element.scrollTop / denominatorScroll) * denominatorThumb;\n this.thumbY.style.top = `${thumbPosition}px`;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@libs-ui/components-scroll-overlay",
3
- "version": "0.2.356-38",
3
+ "version": "0.2.356-40",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/utils": "0.2.356-38",
6
+ "@libs-ui/utils": "0.2.356-40",
7
7
  "rxjs": "~7.8.0"
8
8
  },
9
9
  "sideEffects": false,
@@ -2,8 +2,8 @@ import { Subscription } from 'rxjs';
2
2
  import { IScrollOverlayOptions, TYPE_SCROLL_DIRECTION } from './scroll.interface';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class LibsUiComponentsScrollOverlayDirective {
5
- private isScrollThumb;
6
- private keepDisplayThumb;
5
+ private readonly isScrollThumb;
6
+ private readonly keepDisplayThumb;
7
7
  private subsX;
8
8
  private subsY;
9
9
  /** Timer reset isScrollThumb sau drag end — phải clear khi destroy để tránh set signal trên instance đã teardown. */
@@ -16,12 +16,12 @@ export declare class LibsUiComponentsScrollOverlayDirective {
16
16
  private lastContentHeight;
17
17
  private lastContainerWidth;
18
18
  private lastContainerHeight;
19
- private scrollbarWidth;
20
- private scrollbarPadding;
21
- private scrollbarColor;
22
- private scrollbarHoverColor;
23
- private scrollThumbColor;
24
- private scrollThumbHoverColor;
19
+ private readonly scrollbarWidth;
20
+ private readonly scrollbarPadding;
21
+ private readonly scrollbarColor;
22
+ private readonly scrollbarHoverColor;
23
+ private readonly scrollThumbColor;
24
+ private readonly scrollThumbHoverColor;
25
25
  private readonly divContainer;
26
26
  private readonly trackX;
27
27
  private readonly thumbX;
@@ -39,9 +39,9 @@ export declare class LibsUiComponentsScrollOverlayDirective {
39
39
  readonly outScrollY: import("@angular/core").OutputEmitterRef<Event>;
40
40
  readonly outScrollTop: import("@angular/core").OutputEmitterRef<Event>;
41
41
  readonly outScrollBottom: import("@angular/core").OutputEmitterRef<Event>;
42
- private element;
43
- private render2;
44
- private destroyRef;
42
+ private readonly element;
43
+ private readonly render2;
44
+ private readonly destroyRef;
45
45
  constructor();
46
46
  private get Element();
47
47
  /** Thêm các class consumer truyền qua [classContainer] mà không xóa class hệ thống đã set. */