@sd-angular/core 1.2.26 → 1.2.27

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.
Files changed (83) hide show
  1. package/bundles/sd-angular-core-button.umd.js +1 -0
  2. package/bundles/sd-angular-core-button.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-button.umd.min.js +1 -1
  4. package/bundles/sd-angular-core-button.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-date-range.umd.js +7 -1
  6. package/bundles/sd-angular-core-date-range.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-date-range.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-date-range.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-date-time.umd.js +57 -14
  10. package/bundles/sd-angular-core-date-time.umd.js.map +1 -1
  11. package/bundles/sd-angular-core-date-time.umd.min.js +1 -1
  12. package/bundles/sd-angular-core-date-time.umd.min.js.map +1 -1
  13. package/bundles/sd-angular-core-editor.umd.js +54 -41
  14. package/bundles/sd-angular-core-editor.umd.js.map +1 -1
  15. package/bundles/sd-angular-core-editor.umd.min.js +1 -1
  16. package/bundles/sd-angular-core-editor.umd.min.js.map +1 -1
  17. package/bundles/sd-angular-core-grid-material.umd.js +21 -3
  18. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  19. package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
  20. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  21. package/bundles/sd-angular-core-input-currency.umd.js +3 -0
  22. package/bundles/sd-angular-core-input-currency.umd.js.map +1 -1
  23. package/bundles/sd-angular-core-input-currency.umd.min.js +2 -2
  24. package/bundles/sd-angular-core-input-currency.umd.min.js.map +1 -1
  25. package/bundles/sd-angular-core-select-editor.umd.js +1 -0
  26. package/bundles/sd-angular-core-select-editor.umd.js.map +1 -1
  27. package/bundles/sd-angular-core-select-editor.umd.min.js +1 -1
  28. package/bundles/sd-angular-core-select-editor.umd.min.js.map +1 -1
  29. package/bundles/sd-angular-core-switch.umd.js +1 -0
  30. package/bundles/sd-angular-core-switch.umd.js.map +1 -1
  31. package/bundles/sd-angular-core-switch.umd.min.js +1 -1
  32. package/bundles/sd-angular-core-switch.umd.min.js.map +1 -1
  33. package/bundles/sd-angular-core-tab-router.umd.js +4 -1
  34. package/bundles/sd-angular-core-tab-router.umd.js.map +1 -1
  35. package/bundles/sd-angular-core-tab-router.umd.min.js +2 -2
  36. package/bundles/sd-angular-core-tab-router.umd.min.js.map +1 -1
  37. package/button/sd-angular-core-button.metadata.json +1 -1
  38. package/date-range/sd-angular-core-date-range.metadata.json +1 -1
  39. package/date-range/src/lib/date-range.component.d.ts +3 -2
  40. package/date-time/sd-angular-core-date-time.metadata.json +1 -1
  41. package/date-time/src/lib/date-time.component.d.ts +5 -0
  42. package/editor/sd-angular-core-editor.metadata.json +1 -1
  43. package/editor/src/lib/editor.component.d.ts +3 -2
  44. package/esm2015/button/src/lib/button.component.js +3 -2
  45. package/esm2015/date-range/src/lib/date-range.component.js +9 -3
  46. package/esm2015/date-time/src/lib/date-time.component.js +54 -15
  47. package/esm2015/editor/src/lib/editor.component.js +55 -42
  48. package/esm2015/grid-material/src/lib/components/desktop-command/desktop-command.component.js +3 -2
  49. package/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +10 -3
  50. package/esm2015/grid-material/src/lib/components/popup-export/popup-export.component.js +4 -2
  51. package/esm2015/grid-material/src/lib/components/popup-filter/popup-filter.component.js +12 -4
  52. package/esm2015/input-currency/src/lib/input-currency.component.js +5 -2
  53. package/esm2015/select-editor/src/lib/select-editor.component.js +3 -2
  54. package/esm2015/switch/src/lib/switch.component.js +3 -2
  55. package/esm2015/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.js +5 -2
  56. package/fesm2015/sd-angular-core-button.js +2 -1
  57. package/fesm2015/sd-angular-core-button.js.map +1 -1
  58. package/fesm2015/sd-angular-core-date-range.js +8 -2
  59. package/fesm2015/sd-angular-core-date-range.js.map +1 -1
  60. package/fesm2015/sd-angular-core-date-time.js +53 -14
  61. package/fesm2015/sd-angular-core-date-time.js.map +1 -1
  62. package/fesm2015/sd-angular-core-editor.js +54 -41
  63. package/fesm2015/sd-angular-core-editor.js.map +1 -1
  64. package/fesm2015/sd-angular-core-grid-material.js +22 -4
  65. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  66. package/fesm2015/sd-angular-core-input-currency.js +4 -1
  67. package/fesm2015/sd-angular-core-input-currency.js.map +1 -1
  68. package/fesm2015/sd-angular-core-select-editor.js +2 -1
  69. package/fesm2015/sd-angular-core-select-editor.js.map +1 -1
  70. package/fesm2015/sd-angular-core-switch.js +2 -1
  71. package/fesm2015/sd-angular-core-switch.js.map +1 -1
  72. package/fesm2015/sd-angular-core-tab-router.js +4 -1
  73. package/fesm2015/sd-angular-core-tab-router.js.map +1 -1
  74. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  75. package/grid-material/src/lib/components/grid-filter/grid-filter.component.d.ts +3 -2
  76. package/grid-material/src/lib/components/popup-filter/popup-filter.component.d.ts +3 -2
  77. package/input-currency/sd-angular-core-input-currency.metadata.json +1 -1
  78. package/package.json +1 -1
  79. package/{sd-angular-core-1.2.26.tgz → sd-angular-core-1.2.27.tgz} +0 -0
  80. package/select-editor/sd-angular-core-select-editor.metadata.json +1 -1
  81. package/switch/sd-angular-core-switch.metadata.json +1 -1
  82. package/tab-router/sd-angular-core-tab-router.metadata.json +1 -1
  83. package/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.d.ts +1 -0
@@ -23,6 +23,9 @@ export class SdTabRouterOutletComponent {
23
23
  _rootRoute.set(this, void 0);
24
24
  _subscription.set(this, new Subscription());
25
25
  _firstLoad.set(this, true);
26
+ this.tabTrackBy = (index, tab) => {
27
+ return tab.key;
28
+ };
26
29
  _closeTab.set(this, (tab) => {
27
30
  var _a;
28
31
  const { isActive, key: activeKey } = tab;
@@ -178,7 +181,7 @@ _rootRoute = new WeakMap(), _subscription = new WeakMap(), _firstLoad = new Weak
178
181
  SdTabRouterOutletComponent.decorators = [
179
182
  { type: Component, args: [{
180
183
  selector: 'sd-tab-router-outlet',
181
- template: "<sd-tab-router-nav [tabs]=\"tabs\" #tabRouterNav></sd-tab-router-nav>\r\n\r\n<div class=\"tab-router__list\">\r\n <ng-container *ngFor=\"let tab of tabs\">\r\n <div class=\"tab-router__pane\" [class.active]=\"tab.isActive\" [id]=\"tab.key\">\r\n <div class=\"tab-router__content\">\r\n <ng-container\r\n *ngComponentOutlet=\"tab.component; injector: tab.injector\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n",
184
+ template: "<sd-tab-router-nav [tabs]=\"tabs\" #tabRouterNav></sd-tab-router-nav>\r\n\r\n<div class=\"tab-router__list\">\r\n <ng-container *ngFor=\"let tab of tabs;trackBy:tabTrackBy\">\r\n <div class=\"tab-router__pane\" [class.active]=\"tab.isActive\" [id]=\"tab.key\">\r\n <div class=\"tab-router__content\">\r\n <ng-container\r\n *ngComponentOutlet=\"tab.component; injector: tab.injector\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n",
182
185
  styles: [":host{display:flex;flex-direction:column;height:calc(100vh - 64px);width:100%}:host ::ng-deep .sd-loading{max-height:100%;max-width:100%}::ng-deep page-layout{height:100%!important}.tab-router__list{flex:1}.tab-router__pane{display:none;height:100%;position:relative;width:100%}.tab-router__pane.active{display:block}.tab-router__content{bottom:0;height:100%;left:0;overflow:auto;position:absolute;right:0;top:0;width:100%}"]
183
186
  },] }
184
187
  ];
@@ -212,4 +215,4 @@ class SdOutletInjector {
212
215
  return this.parent.get(token, notFoundValue);
213
216
  }
214
217
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXJvdXRlci1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS90YWItcm91dGVyLyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21wb25lbnRzL3RhYi1yb3V0ZXItb3V0bGV0L3RhYi1yb3V0ZXItb3V0bGV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFNBQVMsRUFDVCxRQUFRLEVBS1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxjQUFjLEVBS2QsYUFBYSxFQUViLE1BQU0sRUFDTixnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSwrQkFBK0IsQ0FBQztBQUl2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFRL0IsTUFBTSxPQUFPLDBCQUEwQjtJQU9yQyxZQUNVLE1BQWMsRUFDZCxjQUE4QixFQUM5QixFQUFxQixFQUNyQixRQUFrQixFQUNsQixRQUFrQixFQUNsQixtQkFBMEMsRUFDMUMsZ0JBQW9DLEVBQ3BDLGVBQWdDO1FBUGhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIs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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcGlsZXIsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEluamVjdG9yLFxyXG4gIE5nTW9kdWxlUmVmLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVHlwZSxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGUsXHJcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBDaGlsZHJlbk91dGxldENvbnRleHRzLFxyXG4gIC8vIENoaWxkcmVuT3V0bGV0Q29udGV4dHMsXHJcbiAgRXZlbnQsXHJcbiAgTmF2aWdhdGlvbkVuZCxcclxuICBQUklNQVJZX09VVExFVCxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVzUmVjb2duaXplZCxcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7XHJcbiAgU2RUYWJBY3RpdmF0ZWQsXHJcbiAgU2RUYWJEZWFjdGl2YXRlZCxcclxufSBmcm9tICcuLi8uLi9ldmVudHMvdGFiLXJvdXRlci5ldmVudCc7XHJcblxyXG5pbXBvcnQgeyBTZFRhYiB9IGZyb20gJy4uLy4uL21vZGVscy90YWItcm91dGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zL3RhYi1yb3V0ZXIuYWN0aW9uJztcclxuaW1wb3J0IHsgU2RUYWJSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RUYWJSb3V0ZXJOYXZDb21wb25lbnQgfSBmcm9tICcuLi90YWItcm91dGVyLW5hdi90YWItcm91dGVyLW5hdi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RUYWJEZWNvcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLWRlY29yYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NkLXRhYi1yb3V0ZXItb3V0bGV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLXJvdXRlci1vdXRsZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYi1yb3V0ZXItb3V0bGV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFRhYlJvdXRlck91dGxldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgndGFiUm91dGVyTmF2JykgdGFiUm91dGVyTmF2OiBTZFRhYlJvdXRlck5hdkNvbXBvbmVudDtcclxuICB0YWJzOiBTZFRhYltdID0gW107XHJcblxyXG4gICNyb290Um91dGU6IEFjdGl2YXRlZFJvdXRlO1xyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgI2ZpcnN0TG9hZCA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBjb21waWxlcjogQ29tcGlsZXIsXHJcbiAgICBwcml2YXRlIHRhYkRlY29yYXRvclNlcnZpY2U6IFNkVGFiRGVjb3JhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgdGFiUm91dGVyU2VydmljZTogU2RUYWJSb3V0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZE5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgcm91dGVyLmV2ZW50c1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnQpID0+XHJcbiAgICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZXNSZWNvZ25pemVkIHx8XHJcbiAgICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGV2ZW50OiBSb3V0ZXNSZWNvZ25pemVkIHwgTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuI2ZpcnN0TG9hZCAmJiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgdGhpcy4jZmlyc3RMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy4jZ2V0QWN0aXZhdGVkUm91dGVTbmFwc2hvdChcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuI3Jvb3RSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3Q7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FjdGl2ZVJvdXRlKFxyXG4gICAgICAgICAgICAgIGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzIHx8IGV2ZW50LnVybCxcclxuICAgICAgICAgICAgICByb3V0ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXRoaXMuI2ZpcnN0TG9hZCAmJiBldmVudCBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLiNnZXRBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KGV2ZW50LnN0YXRlLnJvb3QpO1xyXG4gICAgICAgICAgICB0aGlzLiNyb290Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5yb290O1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNhY3RpdmVSb3V0ZShcclxuICAgICAgICAgICAgICBldmVudC51cmxBZnRlclJlZGlyZWN0cyB8fCBldmVudC51cmwsXHJcbiAgICAgICAgICAgICAgcm91dGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0YWJSb3V0ZXJTZXJ2aWNlLmFjdGlvbnMuc3Vic2NyaWJlKChldmVudDogU2RUYWJBY3Rpb24gfCBudWxsKSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbG9zZScpIHtcclxuICAgICAgICAgIHRoaXMuI2Nsb3NlVGFiKGV2ZW50LnRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAjY2xvc2VUYWIgPSAodGFiOiBTZFRhYikgPT4ge1xyXG4gICAgY29uc3QgeyBpc0FjdGl2ZSwga2V5OiBhY3RpdmVLZXkgfSA9IHRhYjtcclxuXHJcbiAgICBpZiAoaXNBY3RpdmUpIHtcclxuICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLnRhYnMuZmluZEluZGV4KCh7IGtleSB9KSA9PiBrZXkgPT09IGFjdGl2ZUtleSk7XHJcbiAgICAgIGNvbnN0IG5leHRUYWIgPSB0aGlzLnRhYnNbYWN0aXZlSW5kZXggKyAxXSB8fCB0aGlzLnRhYnNbYWN0aXZlSW5kZXggLSAxXTtcclxuICAgICAgaWYgKG5leHRUYWIpIHtcclxuICAgICAgICBjb25zdCB7IHVybDogbmV4dFVybCB9ID0gbmV4dFRhYjtcclxuICAgICAgICBjb25zdCBuZXh0UXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgICAgICAuLi4obmV4dFRhYi5xdWVyeVBhcmFtcyB8fCB7fSksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICE9PSBhY3RpdmVLZXkpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuZXh0VXJsXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IG5leHRRdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgICAgIHN3aXRjaFRhYjogdHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICE9PSBhY3RpdmVLZXkpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7XHJcbiAgICAgICAgICBzdGF0ZToge1xyXG4gICAgICAgICAgICBzd2l0Y2hUYWI6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYnMgPSB0aGlzLnRhYnMuZmlsdGVyKCh7IGtleSB9KSA9PiBrZXkgIT09IHRhYi5rZXkpO1xyXG4gICAgICB0aGlzLnRhYlJvdXRlck5hdj8uY2hlY2tVSSgpO1xyXG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNhY3RpdmVSb3V0ZSA9IGFzeW5jIChcclxuICAgIGZ1bGxVcmw6IHN0cmluZyxcclxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbFxyXG4gICkgPT4ge1xyXG4gICAgaWYgKCFyb3V0ZT8uY29tcG9uZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHJvdXRlLmNvbXBvbmVudCBhcyBUeXBlPGFueT47XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcclxuICAgICAgLi4uKHJvdXRlLnF1ZXJ5UGFyYW1zIHx8IHt9KSxcclxuICAgIH07XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIC4uLihyb3V0ZS5wYXJhbXMgfHwge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBbdXJsXSA9IGZ1bGxVcmwuc3BsaXQoJz8nKTtcclxuICAgIGNvbnN0IGtleSA9IGhhc2goeyB1cmwsIHF1ZXJ5UGFyYW1zIH0pO1xyXG5cclxuICAgIGxldCBleGlzdGVkSW5kZXggPSAtMTtcclxuICAgIGxldCBhY3RpdmF0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogU2RUYWIsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKHRhYi5rZXkgPT09IGtleSkge1xyXG4gICAgICAgIHRhYi5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgZXhpc3RlZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRhYi5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgYWN0aXZhdGVkSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgIHRoaXMudGFiUm91dGVyU2VydmljZS5wdXNoRXZlbnQodGFiLCBTZFRhYkRlYWN0aXZhdGVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGFiLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTtcclxuICAgIGlmIChleGlzdGVkSW5kZXggPj0gMCAmJiBjdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZT8uc3dpdGNoVGFiKSB7XHJcbiAgICAgIGNvbnN0IGV4aXN0ZWRUYWIgPSB0aGlzLnRhYnNbZXhpc3RlZEluZGV4XTtcclxuICAgICAgdGhpcy50YWJSb3V0ZXJTZXJ2aWNlLnNldEN1cnJlbnRUYWIoZXhpc3RlZFRhYik7XHJcbiAgICAgIHRoaXMudGFiUm91dGVyU2VydmljZS5wdXNoRXZlbnQoZXhpc3RlZFRhYiwgU2RUYWJBY3RpdmF0ZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHR5cGVvZiByb3V0ZT8ucGFyZW50Py5yb3V0ZUNvbmZpZz8ubG9hZENoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgcm91dGUucGFyZW50LnJvdXRlQ29uZmlnLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSBhd2FpdCB0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhtb2R1bGUpO1xyXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XHJcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkUm91dGUgPSB0aGlzLiNnZXRBY3RpdmF0ZWRSb3V0ZShcclxuICAgICAgICAgIHRoaXMuI3Jvb3RSb3V0ZSxcclxuICAgICAgICAgIGNvbXBvbmVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhYiA9IHtcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICAgIGNvbXBvbmVudCxcclxuICAgICAgICAgIGluamVjdG9yOiBuZXcgU2RPdXRsZXRJbmplY3RvcihhY3RpdmF0ZWRSb3V0ZSwgaW5qZWN0b3IpLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICBuYW1lOiB1cmwsXHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnRhYlJvdXRlclNlcnZpY2Uuc2V0Q3VycmVudFRhYih0YWIpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGFjdGl2YXRlZEluZGV4ID49IDAgJiZcclxuICAgICAgICAgIGN1cnJlbnROYXZpZ2F0aW9uPy5leHRyYXM/LnN0YXRlPy5yZXBsYWNlVGFiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGFjdGl2YXRlZEluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4aXN0ZWRJbmRleCA+PSAwICYmICFjdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZT8uc3dpdGNoVGFiKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYnNbZXhpc3RlZEluZGV4XSA9IHRhYjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudGFiUm91dGVyTmF2Py5jaGVja1VJKCk7XHJcbiAgICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gMTApIHtcclxuICAgICAgICB0aGlzLnNkTm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhcclxuICAgICAgICAgICdC4bqhbiDEkcOjIG3hu58gcXXDoSBuaGnhu4F1IHRhYi4gVnVpIGzDsm5nIHThuq90IGPDoWMgdGFiIGtow7RuZyBkw7luZyDEkeG7gyBo4buHIHRo4buRbmcgaG/huqF0IMSR4buZbmcgdOG7kXQgaMahbi4nXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgdGhpcy50YWJzLnNwbGljZSgwLCB0aGlzLnRhYnMubGVuZ3RoIC0gMTApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcblxyXG4gICNnZXRBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gKFxyXG4gICAgYWN0aXZhdGVkUm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFxyXG4gICk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0+IHtcclxuICAgIGlmICghYWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHdoaWxlIChhY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgYWN0aXZhdGVkUm91dGVTbmFwc2hvdCA9IGFjdGl2YXRlZFJvdXRlU25hcHNob3QuZmlyc3RDaGlsZDtcclxuICAgIH1cclxuICAgIHJldHVybiBhY3RpdmF0ZWRSb3V0ZVNuYXBzaG90O1xyXG4gIH07XHJcblxyXG4gICNnZXRBY3RpdmF0ZWRSb3V0ZSA9IChcclxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIGNvbXBvbmVudDogYW55XHJcbiAgKTogQWN0aXZhdGVkUm91dGUgfCBudWxsID0+IHtcclxuICAgIGlmICghYWN0aXZhdGVkUm91dGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGl2YXRlZFJvdXRlLmNvbXBvbmVudCAmJiBhY3RpdmF0ZWRSb3V0ZS5jb21wb25lbnQgPT09IGNvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm4gYWN0aXZhdGVkUm91dGU7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoYWN0aXZhdGVkUm91dGUuZmlyc3RDaGlsZCkge1xyXG4gICAgICBhY3RpdmF0ZWRSb3V0ZSA9IGFjdGl2YXRlZFJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgIGlmIChhY3RpdmF0ZWRSb3V0ZS5jb21wb25lbnQgJiYgYWN0aXZhdGVkUm91dGUuY29tcG9uZW50ID09PSBjb21wb25lbnQpIHtcclxuICAgICAgICByZXR1cm4gYWN0aXZhdGVkUm91dGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcbn1cclxuXHJcbmNsYXNzIFNkT3V0bGV0SW5qZWN0b3IgaW1wbGVtZW50cyBJbmplY3RvciB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGwsXHJcbiAgICAvLyBwcml2YXRlIGNoaWxkQ29udGV4dHM6IENoaWxkcmVuT3V0bGV0Q29udGV4dHMsXHJcbiAgICBwcml2YXRlIHBhcmVudDogYW55XHJcbiAgKSB7fVxyXG5cclxuICBnZXQodG9rZW46IGFueSwgbm90Rm91bmRWYWx1ZT86IGFueSk6IGFueSB7XHJcbiAgICBpZiAodG9rZW4gPT09IEFjdGl2YXRlZFJvdXRlICYmIHRoaXMucm91dGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRva2VuID09PSBDaGlsZHJlbk91dGxldENvbnRleHRzKSB7XHJcbiAgICAvLyAgIHJldHVybiB0aGlzLmNoaWxkQ29udGV4dHM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXJvdXRlci1vdXRsZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS90YWItcm91dGVyLyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21wb25lbnRzL3RhYi1yb3V0ZXItb3V0bGV0L3RhYi1yb3V0ZXItb3V0bGV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLFNBQVMsRUFDVCxRQUFRLEVBS1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxjQUFjLEVBS2QsYUFBYSxFQUViLE1BQU0sRUFDTixnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsR0FDakIsTUFBTSwrQkFBK0IsQ0FBQztBQUl2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFRL0IsTUFBTSxPQUFPLDBCQUEwQjtJQU9yQyxZQUNVLE1BQWMsRUFDZCxjQUE4QixFQUM5QixFQUFxQixFQUNyQixRQUFrQixFQUNsQixRQUFrQixFQUNsQixtQkFBMEMsRUFDMUMsZ0JBQW9DLEVBQ3BDLGVBQWdDO1FBUGhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFiMUMsU0FBSSxHQUFZLEVBQUUsQ0FBQztRQUVuQiw2QkFBMkI7UUFDM0Isd0JBQWdCLElBQUksWUFBWSxFQUFFLEVBQUM7UUFDbkMscUJBQWEsSUFBSSxFQUFDO1FBeURsQixlQUFVLEdBQUcsQ0FBQyxLQUFhLEVBQUUsR0FBVSxFQUFFLEVBQUU7WUFDekMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsQ0FBQTtRQUVELG9CQUFZLENBQUMsR0FBVSxFQUFFLEVBQUU7O1lBQ3pCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUV6QyxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDeEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLElBQUksT0FBTyxFQUFFO29CQUNYLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO29CQUNqQyxNQUFNLGVBQWUscUJBQ2hCLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FDL0IsQ0FBQztvQkFFRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO29CQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUM5QixXQUFXLEVBQUUsZUFBZTt3QkFDNUIsS0FBSyxFQUFFOzRCQUNMLFNBQVMsRUFBRSxJQUFJO3lCQUNoQjtxQkFDRixDQUFDLENBQUM7aUJBQ0o7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFO3dCQUM3QixLQUFLLEVBQUU7NEJBQ0wsU0FBUyxFQUFFLElBQUk7eUJBQ2hCO3FCQUNGLENBQUMsQ0FBQztpQkFDSjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLE9BQU8sR0FBRztnQkFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsRUFBQztRQUVGLHVCQUFlLENBQ2IsT0FBZSxFQUNmLEtBQW9DLEVBQ3BDLEVBQUU7O1lBQ0YsSUFBSSxFQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxTQUFTLENBQUEsRUFBRTtnQkFDckIsT0FBTzthQUNSO1lBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQXNCLENBQUM7WUFDL0MsTUFBTSxXQUFXLHFCQUNaLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FDN0IsQ0FBQztZQUNGLE1BQU0sTUFBTSxxQkFDUCxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQ3hCLENBQUM7WUFFRixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUV2QyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVUsRUFBRSxLQUFhLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRTtvQkFDbkIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3BCLFlBQVksR0FBRyxLQUFLLENBQUM7aUJBQ3RCO3FCQUFNO29CQUNMLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTt3QkFDaEIsY0FBYyxHQUFHLEtBQUssQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztxQkFDeEQ7b0JBQ0QsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7aUJBQ3RCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM3RCxJQUFJLFlBQVksSUFBSSxDQUFDLGlCQUFJLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLE1BQU0sMENBQUUsS0FBSywwQ0FBRSxTQUFTLENBQUEsRUFBRTtnQkFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7YUFDN0Q7aUJBQU07Z0JBQ0wsSUFBSSxvQkFBTyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSwwQ0FBRSxXQUFXLDBDQUFFLFlBQVksQ0FBQSxLQUFLLFVBQVUsRUFBRTtvQkFDbEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDN0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMvRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0MsTUFBTSxjQUFjLEdBQUcsc0RBQUEsSUFBSSw0Q0FFekIsU0FBUyxDQUNWLENBQUM7b0JBRUYsTUFBTSxHQUFHLEdBQUc7d0JBQ1YsR0FBRzt3QkFDSCxTQUFTO3dCQUNULFFBQVEsRUFBRSxJQUFJLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUM7d0JBQ3hELFFBQVEsRUFBRSxJQUFJO3dCQUNkLElBQUksRUFBRSxHQUFHO3dCQUNULEdBQUc7d0JBQ0gsTUFBTTt3QkFDTixXQUFXO3FCQUNaLENBQUM7b0JBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekMsSUFDRSxjQUFjLElBQUksQ0FBQyxpQkFDbkIsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsTUFBTSwwQ0FBRSxLQUFLLDBDQUFFLFVBQVUsQ0FBQSxFQUM1Qzt3QkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3JDO29CQUNELElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxjQUFDLGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLE1BQU0sMENBQUUsS0FBSywwQ0FBRSxTQUFTLENBQUEsRUFBRTt3QkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7cUJBQy9CO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNyQjtpQkFDRjtnQkFFRCxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLE9BQU8sR0FBRztnQkFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDakMseUZBQXlGLENBQzFGLENBQUM7aUJBQ0g7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDNUM7YUFDRjtZQUNELElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFBLEVBQUM7UUFFRixxQ0FBNkIsQ0FDM0Isc0JBQThDLEVBQ2YsRUFBRTtZQUNqQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLHNCQUFzQixDQUFDLFVBQVUsRUFBRTtnQkFDeEMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDO2FBQzVEO1lBQ0QsT0FBTyxzQkFBc0IsQ0FBQztRQUNoQyxDQUFDLEVBQUM7UUFFRiw2QkFBcUIsQ0FDbkIsY0FBOEIsRUFDOUIsU0FBYyxFQUNTLEVBQUU7WUFDekIsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELElBQUksY0FBYyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDdEUsT0FBTyxjQUFjLENBQUM7YUFDdkI7WUFDRCxPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hDLGNBQWMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDO2dCQUMzQyxJQUFJLGNBQWMsQ0FBQyxTQUFTLElBQUksY0FBYyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7b0JBQ3RFLE9BQU8sY0FBYyxDQUFDO2lCQUN2QjthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUM7UUF4TUEsNENBQW1CLEdBQUcsQ0FDcEIsTUFBTSxDQUFDLE1BQU07YUFDVixJQUFJLENBQ0gsTUFBTSxDQUNKLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLFlBQVksZ0JBQWdCO1lBQ2pDLEtBQUssWUFBWSxhQUFhLENBQ2pDLENBQ0Y7YUFDQSxTQUFTLENBQUMsQ0FBTyxLQUF1QyxFQUFFLEVBQUU7WUFDM0QsSUFBSSw0Q0FBbUIsS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDckQsdUJBQUEsSUFBSSxjQUFjLEtBQUssRUFBQztnQkFDeEIsTUFBTSxLQUFLLEdBQUcsOERBQUEsSUFBSSxFQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FDN0IsQ0FBQztnQkFDRix1QkFBQSxJQUFJLGNBQWMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFDO2dCQUMvQyxNQUFNLGdEQUFBLElBQUksRUFDUixLQUFLLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFDcEMsS0FBSyxDQUNOLENBQUM7Z0JBQ0YsT0FBTzthQUNSO1lBQ0QsSUFBSSx5Q0FBZ0IsSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUU7Z0JBQ3pELE1BQU0sS0FBSyxHQUFHLDhEQUFBLElBQUksRUFBNEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEUsdUJBQUEsSUFBSSxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBQztnQkFDL0MsTUFBTSxnREFBQSxJQUFJLEVBQ1IsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQ3BDLEtBQUssQ0FDTixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7UUFFRiw0Q0FBbUIsR0FBRyxDQUNwQixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBeUIsRUFBRSxFQUFFO1lBQy9ELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUNuQyw2Q0FBQSxJQUFJLEVBQVcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsNENBQW1CLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7Ozs7WUFuRUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLGlnQkFBaUQ7O2FBR2xEOzs7WUF2QkMsTUFBTTtZQVBOLGNBQWM7WUFYZCxpQkFBaUI7WUFHakIsUUFBUTtZQUZSLFFBQVE7WUErQkQscUJBQXFCO1lBSHJCLGtCQUFrQjtZQVJsQixlQUFlOzs7MkJBc0JyQixTQUFTLFNBQUMsY0FBYzs7QUEyTjNCLE1BQU0sZ0JBQWdCO0lBQ3BCLFlBQ1UsS0FBNEI7SUFDcEMsaURBQWlEO0lBQ3pDLE1BQVc7UUFGWCxVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QixXQUFNLEdBQU4sTUFBTSxDQUFLO0lBQ2xCLENBQUM7SUFFSixHQUFHLENBQUMsS0FBVSxFQUFFLGFBQW1CO1FBQ2pDLElBQUksS0FBSyxLQUFLLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNuQjtRQUVELDBDQUEwQztRQUMxQywrQkFBK0I7UUFDL0IsSUFBSTtRQUVKLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcGlsZXIsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEluamVjdG9yLFxyXG4gIE5nTW9kdWxlUmVmLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVHlwZSxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGUsXHJcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBDaGlsZHJlbk91dGxldENvbnRleHRzLFxyXG4gIC8vIENoaWxkcmVuT3V0bGV0Q29udGV4dHMsXHJcbiAgRXZlbnQsXHJcbiAgTmF2aWdhdGlvbkVuZCxcclxuICBQUklNQVJZX09VVExFVCxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVzUmVjb2duaXplZCxcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7XHJcbiAgU2RUYWJBY3RpdmF0ZWQsXHJcbiAgU2RUYWJEZWFjdGl2YXRlZCxcclxufSBmcm9tICcuLi8uLi9ldmVudHMvdGFiLXJvdXRlci5ldmVudCc7XHJcblxyXG5pbXBvcnQgeyBTZFRhYiB9IGZyb20gJy4uLy4uL21vZGVscy90YWItcm91dGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJBY3Rpb24gfSBmcm9tICcuLi8uLi9hY3Rpb25zL3RhYi1yb3V0ZXIuYWN0aW9uJztcclxuaW1wb3J0IHsgU2RUYWJSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RUYWJSb3V0ZXJOYXZDb21wb25lbnQgfSBmcm9tICcuLi90YWItcm91dGVyLW5hdi90YWItcm91dGVyLW5hdi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RUYWJEZWNvcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLWRlY29yYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NkLXRhYi1yb3V0ZXItb3V0bGV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLXJvdXRlci1vdXRsZXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYi1yb3V0ZXItb3V0bGV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZFRhYlJvdXRlck91dGxldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgndGFiUm91dGVyTmF2JykgdGFiUm91dGVyTmF2OiBTZFRhYlJvdXRlck5hdkNvbXBvbmVudDtcclxuICB0YWJzOiBTZFRhYltdID0gW107XHJcblxyXG4gICNyb290Um91dGU6IEFjdGl2YXRlZFJvdXRlO1xyXG4gICNzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgI2ZpcnN0TG9hZCA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBjb21waWxlcjogQ29tcGlsZXIsXHJcbiAgICBwcml2YXRlIHRhYkRlY29yYXRvclNlcnZpY2U6IFNkVGFiRGVjb3JhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgdGFiUm91dGVyU2VydmljZTogU2RUYWJSb3V0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZE5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgcm91dGVyLmV2ZW50c1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnQpID0+XHJcbiAgICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZXNSZWNvZ25pemVkIHx8XHJcbiAgICAgICAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGV2ZW50OiBSb3V0ZXNSZWNvZ25pemVkIHwgTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuI2ZpcnN0TG9hZCAmJiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgICAgdGhpcy4jZmlyc3RMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy4jZ2V0QWN0aXZhdGVkUm91dGVTbmFwc2hvdChcclxuICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuI3Jvb3RSb3V0ZSA9IHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnJvb3Q7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2FjdGl2ZVJvdXRlKFxyXG4gICAgICAgICAgICAgIGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzIHx8IGV2ZW50LnVybCxcclxuICAgICAgICAgICAgICByb3V0ZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIXRoaXMuI2ZpcnN0TG9hZCAmJiBldmVudCBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLiNnZXRBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KGV2ZW50LnN0YXRlLnJvb3QpO1xyXG4gICAgICAgICAgICB0aGlzLiNyb290Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5yb290O1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNhY3RpdmVSb3V0ZShcclxuICAgICAgICAgICAgICBldmVudC51cmxBZnRlclJlZGlyZWN0cyB8fCBldmVudC51cmwsXHJcbiAgICAgICAgICAgICAgcm91dGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0YWJSb3V0ZXJTZXJ2aWNlLmFjdGlvbnMuc3Vic2NyaWJlKChldmVudDogU2RUYWJBY3Rpb24gfCBudWxsKSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdjbG9zZScpIHtcclxuICAgICAgICAgIHRoaXMuI2Nsb3NlVGFiKGV2ZW50LnRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB0YWJUcmFja0J5ID0gKGluZGV4OiBudW1iZXIsIHRhYjogU2RUYWIpID0+IHtcclxuICAgIHJldHVybiB0YWIua2V5O1xyXG4gIH1cclxuXHJcbiAgI2Nsb3NlVGFiID0gKHRhYjogU2RUYWIpID0+IHtcclxuICAgIGNvbnN0IHsgaXNBY3RpdmUsIGtleTogYWN0aXZlS2V5IH0gPSB0YWI7XHJcblxyXG4gICAgaWYgKGlzQWN0aXZlKSB7XHJcbiAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy50YWJzLmZpbmRJbmRleCgoeyBrZXkgfSkgPT4ga2V5ID09PSBhY3RpdmVLZXkpO1xyXG4gICAgICBjb25zdCBuZXh0VGFiID0gdGhpcy50YWJzW2FjdGl2ZUluZGV4ICsgMV0gfHwgdGhpcy50YWJzW2FjdGl2ZUluZGV4IC0gMV07XHJcbiAgICAgIGlmIChuZXh0VGFiKSB7XHJcbiAgICAgICAgY29uc3QgeyB1cmw6IG5leHRVcmwgfSA9IG5leHRUYWI7XHJcbiAgICAgICAgY29uc3QgbmV4dFF1ZXJ5UGFyYW1zID0ge1xyXG4gICAgICAgICAgLi4uKG5leHRUYWIucXVlcnlQYXJhbXMgfHwge30pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFicy5maWx0ZXIoKHsga2V5IH0pID0+IGtleSAhPT0gYWN0aXZlS2V5KTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmV4dFVybF0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBuZXh0UXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICBzdGF0ZToge1xyXG4gICAgICAgICAgICBzd2l0Y2hUYWI6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFicy5maWx0ZXIoKHsga2V5IH0pID0+IGtleSAhPT0gYWN0aXZlS2V5KTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywge1xyXG4gICAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgICAgc3dpdGNoVGFiOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigoeyBrZXkgfSkgPT4ga2V5ICE9PSB0YWIua2V5KTtcclxuICAgICAgdGhpcy50YWJSb3V0ZXJOYXY/LmNoZWNrVUkoKTtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjYWN0aXZlUm91dGUgPSBhc3luYyAoXHJcbiAgICBmdWxsVXJsOiBzdHJpbmcsXHJcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGxcclxuICApID0+IHtcclxuICAgIGlmICghcm91dGU/LmNvbXBvbmVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb21wb25lbnQgPSByb3V0ZS5jb21wb25lbnQgYXMgVHlwZTxhbnk+O1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XHJcbiAgICAgIC4uLihyb3V0ZS5xdWVyeVBhcmFtcyB8fCB7fSksXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAuLi4ocm91dGUucGFyYW1zIHx8IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgW3VybF0gPSBmdWxsVXJsLnNwbGl0KCc/Jyk7XHJcbiAgICBjb25zdCBrZXkgPSBoYXNoKHsgdXJsLCBxdWVyeVBhcmFtcyB9KTtcclxuXHJcbiAgICBsZXQgZXhpc3RlZEluZGV4ID0gLTE7XHJcbiAgICBsZXQgYWN0aXZhdGVkSW5kZXggPSAtMTtcclxuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWI6IFNkVGFiLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmICh0YWIua2V5ID09PSBrZXkpIHtcclxuICAgICAgICB0YWIuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGV4aXN0ZWRJbmRleCA9IGluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0YWIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgIGFjdGl2YXRlZEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLnRhYlJvdXRlclNlcnZpY2UucHVzaEV2ZW50KHRhYiwgU2RUYWJEZWFjdGl2YXRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhYi5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvbiA9IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XHJcbiAgICBpZiAoZXhpc3RlZEluZGV4ID49IDAgJiYgY3VycmVudE5hdmlnYXRpb24/LmV4dHJhcz8uc3RhdGU/LnN3aXRjaFRhYikge1xyXG4gICAgICBjb25zdCBleGlzdGVkVGFiID0gdGhpcy50YWJzW2V4aXN0ZWRJbmRleF07XHJcbiAgICAgIHRoaXMudGFiUm91dGVyU2VydmljZS5zZXRDdXJyZW50VGFiKGV4aXN0ZWRUYWIpO1xyXG4gICAgICB0aGlzLnRhYlJvdXRlclNlcnZpY2UucHVzaEV2ZW50KGV4aXN0ZWRUYWIsIFNkVGFiQWN0aXZhdGVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygcm91dGU/LnBhcmVudD8ucm91dGVDb25maWc/LmxvYWRDaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IHJvdXRlLnBhcmVudC5yb3V0ZUNvbmZpZy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gYXdhaXQgdGhpcy5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmMobW9kdWxlKTtcclxuICAgICAgICBjb25zdCBpbmplY3RvciA9IGZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2YXRlZFJvdXRlID0gdGhpcy4jZ2V0QWN0aXZhdGVkUm91dGUoXHJcbiAgICAgICAgICB0aGlzLiNyb290Um91dGUsXHJcbiAgICAgICAgICBjb21wb25lbnRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCB0YWIgPSB7XHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgICBjb21wb25lbnQsXHJcbiAgICAgICAgICBpbmplY3RvcjogbmV3IFNkT3V0bGV0SW5qZWN0b3IoYWN0aXZhdGVkUm91dGUsIGluamVjdG9yKSxcclxuICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgbmFtZTogdXJsLFxyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50YWJSb3V0ZXJTZXJ2aWNlLnNldEN1cnJlbnRUYWIodGFiKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhY3RpdmF0ZWRJbmRleCA+PSAwICYmXHJcbiAgICAgICAgICBjdXJyZW50TmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZT8ucmVwbGFjZVRhYlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShhY3RpdmF0ZWRJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleGlzdGVkSW5kZXggPj0gMCAmJiAhY3VycmVudE5hdmlnYXRpb24/LmV4dHJhcz8uc3RhdGU/LnN3aXRjaFRhYikge1xyXG4gICAgICAgICAgdGhpcy50YWJzW2V4aXN0ZWRJbmRleF0gPSB0YWI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudGFicy5wdXNoKHRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRhYlJvdXRlck5hdj8uY2hlY2tVSSgpO1xyXG4gICAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgICAgdGhpcy5zZE5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoXHJcbiAgICAgICAgICAnQuG6oW4gxJHDoyBt4bufIHF1w6Egbmhp4buBdSB0YWIuIFZ1aSBsw7JuZyB04bqvdCBjw6FjIHRhYiBraMO0bmcgZMO5bmcgxJHhu4MgaOG7hyB0aOG7kW5nIGhv4bqhdCDEkeG7mW5nIHThu5F0IGjGoW4uJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGFicy5sZW5ndGggPiAxMikge1xyXG4gICAgICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCAtIDEwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG5cclxuICAjZ2V0QWN0aXZhdGVkUm91dGVTbmFwc2hvdCA9IChcclxuICAgIGFjdGl2YXRlZFJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RcclxuICApOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9PiB7XHJcbiAgICBpZiAoIWFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoYWN0aXZhdGVkUm91dGVTbmFwc2hvdC5maXJzdENoaWxkKSB7XHJcbiAgICAgIGFjdGl2YXRlZFJvdXRlU25hcHNob3QgPSBhY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcclxuICB9O1xyXG5cclxuICAjZ2V0QWN0aXZhdGVkUm91dGUgPSAoXHJcbiAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBjb21wb25lbnQ6IGFueVxyXG4gICk6IEFjdGl2YXRlZFJvdXRlIHwgbnVsbCA9PiB7XHJcbiAgICBpZiAoIWFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhY3RpdmF0ZWRSb3V0ZS5jb21wb25lbnQgJiYgYWN0aXZhdGVkUm91dGUuY29tcG9uZW50ID09PSBjb21wb25lbnQpIHtcclxuICAgICAgcmV0dXJuIGFjdGl2YXRlZFJvdXRlO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGFjdGl2YXRlZFJvdXRlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgYWN0aXZhdGVkUm91dGUgPSBhY3RpdmF0ZWRSb3V0ZS5maXJzdENoaWxkO1xyXG4gICAgICBpZiAoYWN0aXZhdGVkUm91dGUuY29tcG9uZW50ICYmIGFjdGl2YXRlZFJvdXRlLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGFjdGl2YXRlZFJvdXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG59XHJcblxyXG5jbGFzcyBTZE91dGxldEluamVjdG9yIGltcGxlbWVudHMgSW5qZWN0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUgfCBudWxsLFxyXG4gICAgLy8gcHJpdmF0ZSBjaGlsZENvbnRleHRzOiBDaGlsZHJlbk91dGxldENvbnRleHRzLFxyXG4gICAgcHJpdmF0ZSBwYXJlbnQ6IGFueVxyXG4gICkge31cclxuXHJcbiAgZ2V0KHRva2VuOiBhbnksIG5vdEZvdW5kVmFsdWU/OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRva2VuID09PSBBY3RpdmF0ZWRSb3V0ZSAmJiB0aGlzLnJvdXRlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0b2tlbiA9PT0gQ2hpbGRyZW5PdXRsZXRDb250ZXh0cykge1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5jaGlsZENvbnRleHRzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnBhcmVudC5nZXQodG9rZW4sIG5vdEZvdW5kVmFsdWUpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,4 +1,4 @@
1
- import { EventEmitter, Component, ChangeDetectorRef, ViewChild, Input, Output, NgModule } from '@angular/core';
1
+ import { EventEmitter, Component, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, Input, Output, NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { __classPrivateFieldGet, __classPrivateFieldSet } from 'tslib';
4
4
  import { Subscription, fromEvent } from 'rxjs';
@@ -60,6 +60,7 @@ SdButton.decorators = [
60
60
  { type: Component, args: [{
61
61
  selector: 'sd-button',
62
62
  template: "<button *ngIf=\"type === 'fill'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-fill\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'light'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-light\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'outline'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-outline\"\r\n [class.c-square]=\"icon && !title\" [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\"\r\n [color]=\"color\" [disabled]=\"isDisabled\" matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-stroked-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'link'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-link\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<ng-template #buttonContent>\r\n <ng-container *ngIf=\"title\">\r\n <ng-container *ngIf=\"!iconSuffix\">\r\n <mat-spinner *ngIf=\"loading\" strokeWidth=\"2\" mode=\"indeterminate\" diameter=\"18\" value=\"100\"\r\n class=\"d-inline-block\"></mat-spinner>\r\n <mat-icon *ngIf=\"!loading && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <span class=\"d-inline\" [ngClass]=\"{'ml-8': icon && !iconSuffix, 'mr-8': icon && iconSuffix}\">{{title}}</span>\r\n <mat-icon *ngIf=\"iconSuffix && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <ng-container *ngIf=\"!title\">\r\n <mat-icon [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n</ng-template>",
63
+ changeDetection: ChangeDetectionStrategy.OnPush,
63
64
  styles: [".text-black400{color:#757575}:host ::ng-deep button.c-button{font-size:16px;height:40px;line-height:20px;min-width:auto;padding:2px 16px!important}:host ::ng-deep button.c-button .mat-button-wrapper{align-items:center;display:flex;justify-content:center}:host ::ng-deep button.c-button.mat-button-disabled{background-color:#e9e9e9!important;color:#a6a6a6!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important;width:40px!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;font-weight:400;height:32px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-sm mat-icon{font-size:16px!important;height:16px!important;width:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;height:48px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-primary{background-color:#2962ff;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-success{background-color:#4caf50;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-warning{background-color:#ff9600;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-danger{background-color:#f82c13;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-secondary{background-color:#212121;color:#fff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-primary{background-color:#e7e9ff;color:#2962ff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-success{background-color:#dbefdc;color:#4caf50}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-warning{background-color:#ffeacc;color:#ff9600}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-danger{background-color:#fed5d0;color:#f82c13}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-secondary{background-color:#e9e9e9;color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-info,:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-secondary{color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-button.mat-info,:host ::ng-deep button.c-button.c-link.mat-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-link.mat-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-link.mat-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-link.mat-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-link.mat-button.mat-secondary{color:#212121}"]
64
65
  },] }
65
66
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-button.js","sources":["../../../../projects/sd-core/button/src/lib/button.component.ts","../../../../projects/sd-core/button/src/lib/button.module.ts","../../../../projects/sd-core/button/src/public-api.ts","../../../../projects/sd-core/button/sd-angular-core-button.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n OnInit,\r\n AfterViewInit,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { Subscription, fromEvent } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { MatButton } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'sd-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss']\r\n})\r\n\r\nexport class SdButton implements OnInit, AfterViewInit {\r\n @ViewChild('button') button: MatButton;\r\n #disabled = false;\r\n #initialized = false;\r\n isDisabled = false;\r\n @Input() type: 'fill' | 'light' | 'outline' | 'link' = 'light';\r\n @Input() color: 'primary' | 'accent' | 'warn' | 'info' | 'success' | 'warning' | 'danger' | 'secondary' = 'secondary';\r\n @Input() title: string;\r\n @Input() icon: string;\r\n @Input() width: string;\r\n @Input() size: 'sm' | 'lg';\r\n @Input() tooltip: string;\r\n @Input() iconSuffix = false;\r\n @Input() fontSet: 'material-icons' |\r\n 'material-icons-outlined' |\r\n 'material-icons-round' |\r\n 'material-icons-sharp' = 'material-icons';\r\n @Input() set disabled(value: boolean) {\r\n this.#disabled = value || false;\r\n if (this.#initialized) {\r\n this.#onChanges();\r\n }\r\n }\r\n @Input() loading = false;\r\n @Output() action = new EventEmitter();\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#onChanges();\r\n this.#subscription.add(fromEvent(this.button._elementRef.nativeElement, 'click').pipe(debounceTime(200)).subscribe($event => {\r\n if (this.loading) {\r\n return;\r\n }\r\n this.action.emit($event);\r\n }));\r\n this.#initialized = true;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #onChanges = () => {\r\n this.isDisabled = this.#disabled;\r\n this.ref.detectChanges();\r\n }\r\n\r\n onClick = ($event: any) => {\r\n if (this.loading) {\r\n return;\r\n }\r\n this.action.emit($event);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdButton } from './button.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule\r\n ],\r\n declarations: [\r\n SdButton\r\n ],\r\n exports: [\r\n SdButton\r\n ]\r\n})\r\nexport class SdButtonModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport { SdButtonModule } from './lib/button.module';\r\nexport * from './lib/button.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MAqBa,QAAQ;IA0BnB,YAAoB,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;QAxB1C,oBAAY,KAAK,EAAC;QAClB,uBAAe,KAAK,EAAC;QACrB,eAAU,GAAG,KAAK,CAAC;QACV,SAAI,GAA0C,OAAO,CAAC;QACtD,UAAK,GAA4F,WAAW,CAAC;QAM7G,eAAU,GAAG,KAAK,CAAC;QACnB,YAAO,GAGW,gBAAgB,CAAC;QAOnC,YAAO,GAAG,KAAK,CAAC;QACf,WAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QACtC,wBAAgB,IAAI,YAAY,EAAE,EAAC;QAsBnC,qBAAa;YACX,IAAI,CAAC,UAAU,0CAAiB,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,EAAA;QAED,YAAO,GAAG,CAAC,MAAW;YACpB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO;aACR;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAA;KA9BA;IAVD,IAAa,QAAQ,CAAC,KAAc;QAClC,uBAAA,IAAI,aAAa,KAAK,IAAI,KAAK,EAAC;QAChC,gDAAuB;YACrB,8CAAA,IAAI,CAAa,CAAC;SACnB;KACF;IAOD,QAAQ;KACP;IAED,eAAe;QACb,8CAAA,IAAI,CAAa,CAAC;QAClB,4CAAmB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;YACvH,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO;aACR;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAC,CAAC,CAAC;QACJ,uBAAA,IAAI,gBAAgB,IAAI,EAAC;KAC1B;IAED,WAAW;QACT,4CAAmB,WAAW,EAAE,CAAC;KAClC;;;;YAnDF,SAAS,SAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,w5EAAsC;;aAEvC;;;YAdC,iBAAiB;;;qBAiBhB,SAAS,SAAC,QAAQ;mBAIlB,KAAK;oBACL,KAAK;oBACL,KAAK;mBACL,KAAK;oBACL,KAAK;mBACL,KAAK;sBACL,KAAK;yBACL,KAAK;sBACL,KAAK;uBAIL,KAAK;sBAML,KAAK;qBACL,MAAM;;;MCtBI,cAAc;;;YAf1B,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,aAAa;oBACb,eAAe;oBACf,wBAAwB;oBACxB,gBAAgB;iBACjB;gBACD,YAAY,EAAE;oBACZ,QAAQ;iBACT;gBACD,OAAO,EAAE;oBACP,QAAQ;iBACT;aACF;;;ACtBD;;;;ACAA;;;;;;"}
1
+ {"version":3,"file":"sd-angular-core-button.js","sources":["../../../../projects/sd-core/button/src/lib/button.component.ts","../../../../projects/sd-core/button/src/lib/button.module.ts","../../../../projects/sd-core/button/src/public-api.ts","../../../../projects/sd-core/button/sd-angular-core-button.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n OnInit,\r\n AfterViewInit,\r\n ViewChild,\r\n ElementRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { Subscription, fromEvent } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { MatButton } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'sd-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n\r\nexport class SdButton implements OnInit, AfterViewInit {\r\n @ViewChild('button') button: MatButton;\r\n #disabled = false;\r\n #initialized = false;\r\n isDisabled = false;\r\n @Input() type: 'fill' | 'light' | 'outline' | 'link' = 'light';\r\n @Input() color: 'primary' | 'accent' | 'warn' | 'info' | 'success' | 'warning' | 'danger' | 'secondary' = 'secondary';\r\n @Input() title: string;\r\n @Input() icon: string;\r\n @Input() width: string;\r\n @Input() size: 'sm' | 'lg';\r\n @Input() tooltip: string;\r\n @Input() iconSuffix = false;\r\n @Input() fontSet: 'material-icons' |\r\n 'material-icons-outlined' |\r\n 'material-icons-round' |\r\n 'material-icons-sharp' = 'material-icons';\r\n @Input() set disabled(value: boolean) {\r\n this.#disabled = value || false;\r\n if (this.#initialized) {\r\n this.#onChanges();\r\n }\r\n }\r\n @Input() loading = false;\r\n @Output() action = new EventEmitter();\r\n #subscription = new Subscription();\r\n constructor(private ref: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#onChanges();\r\n this.#subscription.add(fromEvent(this.button._elementRef.nativeElement, 'click').pipe(debounceTime(200)).subscribe($event => {\r\n if (this.loading) {\r\n return;\r\n }\r\n this.action.emit($event);\r\n }));\r\n this.#initialized = true;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #onChanges = () => {\r\n this.isDisabled = this.#disabled;\r\n this.ref.detectChanges();\r\n }\r\n\r\n onClick = ($event: any) => {\r\n if (this.loading) {\r\n return;\r\n }\r\n this.action.emit($event);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdButton } from './button.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule\r\n ],\r\n declarations: [\r\n SdButton\r\n ],\r\n exports: [\r\n SdButton\r\n ]\r\n})\r\nexport class SdButtonModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport { SdButtonModule } from './lib/button.module';\r\nexport * from './lib/button.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MAuBa,QAAQ;IA0BnB,YAAoB,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;QAxB1C,oBAAY,KAAK,EAAC;QAClB,uBAAe,KAAK,EAAC;QACrB,eAAU,GAAG,KAAK,CAAC;QACV,SAAI,GAA0C,OAAO,CAAC;QACtD,UAAK,GAA4F,WAAW,CAAC;QAM7G,eAAU,GAAG,KAAK,CAAC;QACnB,YAAO,GAGW,gBAAgB,CAAC;QAOnC,YAAO,GAAG,KAAK,CAAC;QACf,WAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QACtC,wBAAgB,IAAI,YAAY,EAAE,EAAC;QAsBnC,qBAAa;YACX,IAAI,CAAC,UAAU,0CAAiB,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,EAAA;QAED,YAAO,GAAG,CAAC,MAAW;YACpB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO;aACR;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAA;KA9BA;IAVD,IAAa,QAAQ,CAAC,KAAc;QAClC,uBAAA,IAAI,aAAa,KAAK,IAAI,KAAK,EAAC;QAChC,gDAAuB;YACrB,8CAAA,IAAI,CAAa,CAAC;SACnB;KACF;IAOD,QAAQ;KACP;IAED,eAAe;QACb,8CAAA,IAAI,CAAa,CAAC;QAClB,4CAAmB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;YACvH,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO;aACR;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAC,CAAC,CAAC;QACJ,uBAAA,IAAI,gBAAgB,IAAI,EAAC;KAC1B;IAED,WAAW;QACT,4CAAmB,WAAW,EAAE,CAAC;KAClC;;;;YApDF,SAAS,SAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,w5EAAsC;gBAEtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;YAhBC,iBAAiB;;;qBAmBhB,SAAS,SAAC,QAAQ;mBAIlB,KAAK;oBACL,KAAK;oBACL,KAAK;mBACL,KAAK;oBACL,KAAK;mBACL,KAAK;sBACL,KAAK;yBACL,KAAK;sBACL,KAAK;uBAIL,KAAK;sBAML,KAAK;qBACL,MAAM;;;MCxBI,cAAc;;;YAf1B,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,aAAa;oBACb,eAAe;oBACf,wBAAwB;oBACxB,gBAAgB;iBACjB;gBACD,YAAY,EAAE;oBACZ,QAAQ;iBACT;gBACD,OAAO,EAAE;oBACP,QAAQ;iBACT;aACF;;;ACtBD;;;;ACAA;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { FORM_CONFIG } from '@sd-angular/core/common';
2
- import { EventEmitter, Component, Inject, Optional, Input, Output, NgModule } from '@angular/core';
2
+ import { EventEmitter, Component, ChangeDetectionStrategy, ChangeDetectorRef, Inject, Optional, Input, Output, NgModule } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import { FormControl, NgForm, FormsModule, ReactiveFormsModule } from '@angular/forms';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
@@ -30,7 +30,8 @@ const CUSTOM_DATE_FORMATS = {
30
30
  };
31
31
  const ɵ0 = CUSTOM_DATE_FORMATS;
32
32
  class SdDateRange {
33
- constructor(detectorService, formConfig) {
33
+ constructor(cdRef, detectorService, formConfig) {
34
+ this.cdRef = cdRef;
34
35
  this.detectorService = detectorService;
35
36
  this.formConfig = formConfig;
36
37
  this.id1 = `I${v4()}`;
@@ -66,6 +67,7 @@ class SdDateRange {
66
67
  }, {
67
68
  emitEvent: false
68
69
  });
70
+ this.cdRef.markForCheck();
69
71
  });
70
72
  this.onStartChange = (event) => {
71
73
  var _a;
@@ -113,8 +115,10 @@ class SdDateRange {
113
115
  this.fromChange.emit(null);
114
116
  this.toChange.emit(null);
115
117
  this.sdChange.emit(this.formControl.value);
118
+ this.cdRef.markForCheck();
116
119
  };
117
120
  this.isMobileOrTablet = !this.detectorService.isDesktop();
121
+ this.cdRef.markForCheck();
118
122
  }
119
123
  set name(val) {
120
124
  if (val) {
@@ -233,10 +237,12 @@ SdDateRange.decorators = [
233
237
  selector: 'sd-date-range',
234
238
  template: "<label *ngIf=\"!appearance && label\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n<mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{label}}</mat-label>\r\n <mat-date-range-input [max]=\"max\" [min]=\"min\" [rangePicker]=\"picker\" [disabled]=\"formControl.disabled\">\r\n <input [id]=\"id1\" autocomplete=\"off\" autocorrect=\"off\" matStartDate [formControl]=\"control1\"\r\n (dateInput)=\"onStartChange($event)\" [placeholder]=\"formControl.disabled ? '' : ('Start' | sdTranslate)\"\r\n [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId + 'input1'\">\r\n <input [id]=\"id2\" [autocomplete]=\"id2\" autocorrect=\"off\" matEndDate [formControl]=\"control2\"\r\n (dateInput)=\"onEndChange($event)\" [placeholder]=\"formControl.disabled ? '' : ('End' | sdTranslate)\"\r\n [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId + 'input2'\">\r\n </mat-date-range-input>\r\n <mat-icon *ngIf=\"control1?.value || control2?.value\" class=\"pointer sd-suffix-icon\" (click)=\"clear()\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl.disabled && picker.open()\" matSuffix>today\r\n </mat-icon>\r\n <mat-date-range-picker [touchUi]=\"isMobileOrTablet\" #picker></mat-date-range-picker>\r\n</mat-form-field>",
235
239
  providers: [{ provide: MAT_DATE_FORMATS, useValue: ɵ0 }],
240
+ changeDetection: ChangeDetectionStrategy.OnPush,
236
241
  styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field input.mat-end-date:disabled,:host ::ng-deep .mat-form-field input.mat-start-date:disabled{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}"]
237
242
  },] }
238
243
  ];
239
244
  SdDateRange.ctorParameters = () => [
245
+ { type: ChangeDetectorRef },
240
246
  { type: DeviceDetectorService },
241
247
  { type: undefined, decorators: [{ type: Inject, args: [FORM_CONFIG,] }, { type: Optional }] }
242
248
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-date-range.js","sources":["../../../../projects/sd-core/date-range/src/lib/date-range.component.ts","../../../../projects/sd-core/date-range/src/lib/date-range.module.ts","../../../../projects/sd-core/date-range/sd-angular-core-date-range.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n EventEmitter,\r\n Output,\r\n OnDestroy,\r\n AfterViewInit,\r\n OnInit,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\n\r\nimport { FormControl, FormGroup, NgForm } from '@angular/forms';\r\nimport { MatDatepickerInputEvent, } from '@angular/material/datepicker';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport moment, { Moment } from 'moment';\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { FORM_CONFIG, IFormConfiguration } from '@sd-angular/core/common';\r\n\r\nconst CUSTOM_DATE_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY'\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY'\r\n }\r\n};\r\n\r\n@Component({\r\n selector: 'sd-date-range',\r\n templateUrl: './date-range.component.html',\r\n styleUrls: ['./date-range.component.scss'],\r\n providers: [{ provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS }],\r\n})\r\nexport class SdDateRange implements OnDestroy, OnInit, AfterViewInit {\r\n id1 = `I${uuid.v4()}`;\r\n id2 = `I${uuid.v4()}`;\r\n #from: any = null;\r\n #to: any = null;\r\n isMobileOrTablet = false;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance;\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n formControl = new FormControl();\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n // @Input() disabled = false;\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n }\r\n qcId: string;\r\n label: string;\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-date-range',\r\n label: val\r\n });\r\n };\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n val = (val === '') || val;\r\n }\r\n min: Date;\r\n @Input('min') set _min(val: string) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n max: Date;\r\n @Input('max') set _max(val: string) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n @Input() set from(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#from !== val) {\r\n this.#from = val;\r\n this.#onChanges();\r\n }\r\n }\r\n @Input() set to(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#to !== val) {\r\n this.#to = val;\r\n this.#onChanges();\r\n }\r\n }\r\n @Output() sdChange = new EventEmitter<{ from: Date, to: Date }>();\r\n @Output() fromChange = new EventEmitter();\r\n @Output() toChange = new EventEmitter();\r\n\r\n control1 = new FormControl();\r\n #c1 = uuid.v4();\r\n control2 = new FormControl();\r\n #c2 = uuid.v4();\r\n #subscription = new Subscription();\r\n constructor(\r\n private detectorService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n this.isMobileOrTablet = !this.detectorService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#c1);\r\n this.#form?.removeControl(this.#c2);\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#form?.addControl(this.#c1, this.control1);\r\n this.#form?.addControl(this.#c2, this.control2);\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(merge(this.control1.valueChanges, this.control2.valueChanges).pipe(debounceTime(500)).subscribe(() => {\r\n const from = this.control1.value?.toDate() || null;\r\n const to = this.control2.value?.toDate() || null;\r\n if (this.#from !== from || this.#to !== to) {\r\n if (from && to) {\r\n this.sdChange.emit({\r\n from,\r\n to\r\n });\r\n } else if (!from && !to) {\r\n this.sdChange.emit({\r\n from: null,\r\n to: null\r\n });\r\n }\r\n }\r\n }));\r\n this.#onChanges();\r\n }\r\n\r\n #onChanges = () => {\r\n const from = Date.isDate(this.#from) ? moment(Date.toFormat(this.#from, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n const to = Date.isDate(this.#to) ? moment(Date.toFormat(this.#to, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.control1.setValue(from, {\r\n emitEvent: false\r\n });\r\n this.control2.setValue(to, {\r\n emitEvent: false\r\n });\r\n this.formControl.setValue({\r\n from: from,\r\n to: to\r\n }, {\r\n emitEvent: false\r\n });\r\n }\r\n\r\n onStartChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate() || null;\r\n if (value) {\r\n if (new Date(this.#from) !== value) {\r\n this.#from = value;\r\n this.fromChange.emit(value);\r\n }\r\n } else {\r\n this.#from = null;\r\n this.fromChange.emit(null);\r\n }\r\n }\r\n\r\n onEndChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate() || null;\r\n if (value) {\r\n if (new Date(this.#to) !== value) {\r\n this.#to = value;\r\n this.toChange.emit(value);\r\n }\r\n } else {\r\n this.#to = null;\r\n this.toChange.emit(null);\r\n }\r\n }\r\n\r\n clear = () => {\r\n this.control1.setValue(null, {\r\n emitEvent: false\r\n });\r\n this.control2.setValue(null, {\r\n emitEvent: false\r\n });\r\n this.formControl.setValue({\r\n from: null,\r\n to: null\r\n }, {\r\n emitEvent: false\r\n });\r\n this.#from = null;\r\n this.#to = null;\r\n this.fromChange.emit(null);\r\n this.toChange.emit(null);\r\n this.sdChange.emit(this.formControl.value);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { SdDateRange } from './date-range.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n SdTranslateModule\r\n ],\r\n declarations: [\r\n SdDateRange\r\n ],\r\n exports: [\r\n SdDateRange\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdDateRangeModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-date-range.js","sources":["../../../../projects/sd-core/date-range/src/lib/date-range.component.ts","../../../../projects/sd-core/date-range/src/lib/date-range.module.ts","../../../../projects/sd-core/date-range/sd-angular-core-date-range.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n EventEmitter,\r\n Output,\r\n OnDestroy,\r\n AfterViewInit,\r\n OnInit,\r\n Inject,\r\n Optional,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\n\r\nimport { FormControl, FormGroup, NgForm } from '@angular/forms';\r\nimport { MatDatepickerInputEvent, } from '@angular/material/datepicker';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport moment, { Moment } from 'moment';\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport { merge, Subscription } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { FORM_CONFIG, IFormConfiguration } from '@sd-angular/core/common';\r\n\r\nconst CUSTOM_DATE_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY'\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY'\r\n }\r\n};\r\n\r\n@Component({\r\n selector: 'sd-date-range',\r\n templateUrl: './date-range.component.html',\r\n styleUrls: ['./date-range.component.scss'],\r\n providers: [{ provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS }],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdDateRange implements OnDestroy, OnInit, AfterViewInit {\r\n id1 = `I${uuid.v4()}`;\r\n id2 = `I${uuid.v4()}`;\r\n #from: any = null;\r\n #to: any = null;\r\n isMobileOrTablet = false;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance;\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n formControl = new FormControl();\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n // @Input() disabled = false;\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n }\r\n qcId: string;\r\n label: string;\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-date-range',\r\n label: val\r\n });\r\n };\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n val = (val === '') || val;\r\n }\r\n min: Date;\r\n @Input('min') set _min(val: string) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n max: Date;\r\n @Input('max') set _max(val: string) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n @Input() set from(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#from !== val) {\r\n this.#from = val;\r\n this.#onChanges();\r\n }\r\n }\r\n @Input() set to(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#to !== val) {\r\n this.#to = val;\r\n this.#onChanges();\r\n }\r\n }\r\n @Output() sdChange = new EventEmitter<{ from: Date, to: Date }>();\r\n @Output() fromChange = new EventEmitter();\r\n @Output() toChange = new EventEmitter();\r\n\r\n control1 = new FormControl();\r\n #c1 = uuid.v4();\r\n control2 = new FormControl();\r\n #c2 = uuid.v4();\r\n #subscription = new Subscription();\r\n constructor(\r\n private cdRef: ChangeDetectorRef,\r\n private detectorService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n this.isMobileOrTablet = !this.detectorService.isDesktop();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#c1);\r\n this.#form?.removeControl(this.#c2);\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#form?.addControl(this.#c1, this.control1);\r\n this.#form?.addControl(this.#c2, this.control2);\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(merge(this.control1.valueChanges, this.control2.valueChanges).pipe(debounceTime(500)).subscribe(() => {\r\n const from = this.control1.value?.toDate() || null;\r\n const to = this.control2.value?.toDate() || null;\r\n if (this.#from !== from || this.#to !== to) {\r\n if (from && to) {\r\n this.sdChange.emit({\r\n from,\r\n to\r\n });\r\n } else if (!from && !to) {\r\n this.sdChange.emit({\r\n from: null,\r\n to: null\r\n });\r\n }\r\n }\r\n }));\r\n this.#onChanges();\r\n }\r\n\r\n #onChanges = () => {\r\n const from = Date.isDate(this.#from) ? moment(Date.toFormat(this.#from, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n const to = Date.isDate(this.#to) ? moment(Date.toFormat(this.#to, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.control1.setValue(from, {\r\n emitEvent: false\r\n });\r\n this.control2.setValue(to, {\r\n emitEvent: false\r\n });\r\n this.formControl.setValue({\r\n from: from,\r\n to: to\r\n }, {\r\n emitEvent: false\r\n });\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n onStartChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate() || null;\r\n if (value) {\r\n if (new Date(this.#from) !== value) {\r\n this.#from = value;\r\n this.fromChange.emit(value);\r\n }\r\n } else {\r\n this.#from = null;\r\n this.fromChange.emit(null);\r\n }\r\n }\r\n\r\n onEndChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate() || null;\r\n if (value) {\r\n if (new Date(this.#to) !== value) {\r\n this.#to = value;\r\n this.toChange.emit(value);\r\n }\r\n } else {\r\n this.#to = null;\r\n this.toChange.emit(null);\r\n }\r\n }\r\n\r\n clear = () => {\r\n this.control1.setValue(null, {\r\n emitEvent: false\r\n });\r\n this.control2.setValue(null, {\r\n emitEvent: false\r\n });\r\n this.formControl.setValue({\r\n from: null,\r\n to: null\r\n }, {\r\n emitEvent: false\r\n });\r\n this.#from = null;\r\n this.#to = null;\r\n this.fromChange.emit(null);\r\n this.toChange.emit(null);\r\n this.sdChange.emit(this.formControl.value);\r\n this.cdRef.markForCheck();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { SdDateRange } from './date-range.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n SdTranslateModule\r\n ],\r\n declarations: [\r\n SdDateRange\r\n ],\r\n exports: [\r\n SdDateRange\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdDateRangeModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
@@ -54,7 +54,6 @@ class SdDateTime {
54
54
  this.disableErrorMessage = false;
55
55
  this.formControl = new SdFormControl();
56
56
  _form.set(this, void 0);
57
- this.type = 'datetime';
58
57
  this.required = false;
59
58
  this.sdChange = new EventEmitter();
60
59
  this.modelChange = new EventEmitter();
@@ -92,28 +91,64 @@ class SdDateTime {
92
91
  //
93
92
  }, 100);
94
93
  };
94
+ this.onKeyDown = (event) => {
95
+ const key = event.keyCode || event.charCode;
96
+ let isShift = false;
97
+ if (key == 16) {
98
+ isShift = true;
99
+ }
100
+ //Allow only Numeric Keys.
101
+ if (((key >= 48 && key <= 57) || key == 8 || key <= 37 || key <= 39 || (key >= 96 && key <= 105) || key == 191 || key == 186) && isShift == false) {
102
+ return true;
103
+ }
104
+ else {
105
+ return false;
106
+ }
107
+ };
108
+ this.onKeyup = (event) => {
109
+ const currentVal = event.target.value;
110
+ const formControl = this.formControl;
111
+ let regex = /^([1-9]|([012][0-9])|(3[01]))\/([0]{0,1}[1-9]|1[012])\/\d\d\d\d$/g;
112
+ if (this.type === 'datetime' || this.type === 'time') {
113
+ regex = /^([1-9]|([012][0-9])|(3[01]))\/([0]{0,1}[1-9]|1[012])\/\d\d\d\d [012]{0,1}[0-9]:[0-6][0-9]$/g;
114
+ }
115
+ if (this.type === 'month') {
116
+ regex = /^([0]{0,1}[1-9]|1[012])\/\d\d\d\d [012]{0,1}[0-9]:[0-6][0-9]$/g;
117
+ }
118
+ const errorMessage = this.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm';
119
+ if (currentVal && !regex.test(currentVal)) {
120
+ setTimeout(() => {
121
+ this.isValid = true;
122
+ formControl.markAsDirty();
123
+ formControl.markAsTouched();
124
+ formControl.setErrors(Object.assign(Object.assign({}, formControl.errors), { date: `Chưa đúng định dạng ${errorMessage}` }));
125
+ }, 0);
126
+ }
127
+ else {
128
+ setTimeout(() => {
129
+ this.isValid = false;
130
+ formControl.setErrors(Object.assign(Object.assign({}, formControl.errors), { date: null }));
131
+ this.formControl.updateValueAndValidity();
132
+ }, 0);
133
+ }
134
+ };
95
135
  this.onChange = (event) => {
96
- var _a, _b, _c, _d;
136
+ var _a, _b, _c;
97
137
  const value = (_a = event.value) === null || _a === void 0 ? void 0 : _a.toDate();
98
- /**
99
- * Focus input khi `ngx-mat-datetime-picker` đang mở sẽ trigger hàm cancel() làm cho giá trị _selected không được update mới nhất
100
- * Case riêng trường hợp type = `datetime` thì xử lý focus element sau khi `ngx-mat-datetime-picker` emit event (closed)
101
- * @see https://github.com/h2qutc/ngx-mat-datetime-picker/blob/HEAD/projects/datetime-picker/src/lib/datetime-input.ts#L343
102
- */
103
138
  if (!this.dateTimePicker) {
104
139
  (_c = (_b = this.input) === null || _b === void 0 ? void 0 : _b.nativeElement) === null || _c === void 0 ? void 0 : _c.focus();
105
140
  }
106
- if (value) {
141
+ if (!this.isValid) {
107
142
  if (new Date(__classPrivateFieldGet(this, _date)) !== value) {
108
143
  this.modelChange.emit(value);
109
144
  this.sdChange.emit(value);
110
145
  }
111
146
  }
112
147
  else {
113
- if (!((_d = this.formControl) === null || _d === void 0 ? void 0 : _d.value)) {
114
- this.modelChange.emit(null);
115
- this.sdChange.emit(null);
116
- }
148
+ this.isValid = false;
149
+ this.formControl.setValue(null);
150
+ this.modelChange.emit(null);
151
+ this.sdChange.emit(null);
117
152
  }
118
153
  };
119
154
  this.clear = ($event) => {
@@ -170,6 +205,10 @@ class SdDateTime {
170
205
  }
171
206
  }
172
207
  }
208
+ set _type(val) {
209
+ this.type = val || 'datetime';
210
+ this.maxlength = this.type === 'datetime' ? 16 : 10;
211
+ }
173
212
  set disabled(val) {
174
213
  val = (val === '') || val;
175
214
  if (val) {
@@ -247,7 +286,7 @@ _date = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _subscripti
247
286
  SdDateTime.decorators = [
248
287
  { type: Component, args: [{
249
288
  selector: 'sd-date-time',
250
- template: "<label *ngIf=\"!appearance && label\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container\r\n *ngIf=\"sdView?.templateRef && !isFocused && !datePicker?.opened && !dateTimePicker?.opened; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field *ngIf=\"type === 'datetime' || type === 'time'\" class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" matInput (dateInput)=\"onChange($event)\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [formControl]=\"formControl\" [ngxMatDatetimePicker]=\"picker1\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" [min]=\"min\" [required]=\"required\" [max]=\"max\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\"\r\n [sdPopoverTriggerFor]=\"null\" [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\" #input />\r\n <!-- <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker1.open()\" matSuffix>today\r\n </mat-icon> -->\r\n <mat-icon *ngIf=\"formControl?.value && !required && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\">\r\n </mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker #picker1 [defaultTime]=\"defaultTime\" [touchUi]=\"isMobileOrTablet\" [showSpinners]=\"false\"\r\n (opened)=\"onFocus()\" (closed)=\"onBlur();focusInputElement()\">\r\n </ngx-mat-datetime-picker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"type === 'date'\" class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm' , 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" matInput (dateInput)=\"onChange($event)\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [formControl]=\"formControl\" [required]=\"required\" [matDatepicker]=\"picker2\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" [min]=\"min\" [max]=\"max\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\" [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\" #input />\r\n <mat-icon *ngIf=\"formControl?.value && !required && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker2.open()\" #btn matSuffix>today\r\n </mat-icon>\r\n\r\n <mat-datepicker #picker2 [touchUi]=\"isMobileOrTablet\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <ngx-mat-timepicker *ngIf=\"type === 'time'\" formControlName=\"name\" [disabled]=\"disabled\" showSpinners=\"false\" stepHour=\"1\"\r\n stepMinute=\"1\" stepSecond=\"1\">\r\n</ngx-mat-timepicker> -->\r\n <mat-form-field *ngIf=\"type === 'month'\" class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm' , 'no-padding-wrapper': disableErrorMessage}\" appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" matInput (dateInput)=\"onChange($event)\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [formControl]=\"formControl\" [required]=\"required\" [matDatepicker]=\"pickerMonth\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" [min]=\"min\" [max]=\"max\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [sdPopoverTriggerFor]=\"null\" [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\"\r\n #input />\r\n\r\n <mat-icon *ngIf=\"formControl?.value && !required && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && pickerMonth.open()\" #btn matSuffix>\r\n today\r\n </mat-icon>\r\n\r\n <mat-datepicker #pickerMonth [touchUi]=\"isMobileOrTablet\" startView=\"multi-year\"\r\n (monthSelected)=\"setMonthAndYear($event, pickerMonth)\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMin\">\r\n {{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMax\">\r\n {{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerParse\">\r\n {{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.customValidator\">\r\n {{ formControl?.errors?.customValidator }}\r\n </span>\r\n</sd-popover> -->",
289
+ template: "<label *ngIf=\"!appearance && label\" class=\"d-block mb-0 T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container\r\n *ngIf=\"sdView?.templateRef && !isFocused && !datePicker?.opened && !dateTimePicker?.opened; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field *ngIf=\"type === 'datetime' || type === 'time'\" class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" matInput (keyup)=\"onKeyup($event)\" (keydown)=\"onKeyDown($event)\" (dateChange)=\"onChange($event)\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [formControl]=\"formControl\" [ngxMatDatetimePicker]=\"picker1\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" [min]=\"min\" [required]=\"required\" [max]=\"max\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\"\r\n [sdPopoverTriggerFor]=\"null\" [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\" #input [maxLength]=\"maxlength\"/>\r\n <!-- <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker1.open()\" matSuffix>today\r\n </mat-icon> -->\r\n <mat-icon *ngIf=\"formControl?.value && !required && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\">\r\n </mat-datepicker-toggle>\r\n <ngx-mat-datetime-picker #picker1 [defaultTime]=\"defaultTime\" [touchUi]=\"isMobileOrTablet\" [showSpinners]=\"false\"\r\n (opened)=\"onFocus()\" (closed)=\"onBlur();focusInputElement()\">\r\n </ngx-mat-datetime-picker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"type === 'date'\" class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm' , 'no-padding-wrapper': disableErrorMessage}\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" matInput (keyup)=\"onKeyup($event)\" (keydown)=\"onKeyDown($event)\" (dateChange)=\"onChange($event)\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [formControl]=\"formControl\" [required]=\"required\" [matDatepicker]=\"picker2\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" [min]=\"min\" [max]=\"max\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [attr.data-qclabel]=\"label\" [attr.data-qcid]=\"qcId\" [sdPopoverTriggerFor]=\"null\"\r\n [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\" #input [maxLength]=\"maxlength\" />\r\n <mat-icon *ngIf=\"formControl?.value && !required && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && picker2.open()\" #btn matSuffix>today\r\n </mat-icon>\r\n\r\n <mat-datepicker #picker2 [touchUi]=\"isMobileOrTablet\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMin && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMax && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched && !isFocused\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.date && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.date }}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n <!-- <ngx-mat-timepicker *ngIf=\"type === 'time'\" formControlName=\"name\" [disabled]=\"disabled\" showSpinners=\"false\" stepHour=\"1\"\r\n stepMinute=\"1\" stepSecond=\"1\">\r\n</ngx-mat-timepicker> -->\r\n <mat-form-field *ngIf=\"type === 'month'\" class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm' , 'no-padding-wrapper': disableErrorMessage}\" appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" matInput (keyup)=\"onKeyup($event)\" (keydown)=\"onKeyDown($event)\" (dateChange)=\"onChange($event)\" [autocomplete]=\"id\" autocorrect=\"off\"\r\n [formControl]=\"formControl\" [required]=\"required\" [matDatepicker]=\"pickerMonth\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\" [min]=\"min\" [max]=\"max\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" [sdPopoverTriggerFor]=\"null\" [sdPopoverDisabled]=\"!disableErrorMessage || formControl.valid\"\r\n #input />\r\n\r\n <mat-icon *ngIf=\"formControl?.value && !required && !formControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-icon class=\"pointer sd-suffix-icon\" (click)=\"!formControl?.disabled && pickerMonth.open()\" #btn matSuffix>\r\n today\r\n </mat-icon>\r\n\r\n <mat-datepicker #pickerMonth [touchUi]=\"isMobileOrTablet\" startView=\"multi-year\"\r\n (monthSelected)=\"setMonthAndYear($event, pickerMonth)\"></mat-datepicker>\r\n\r\n <mat-error *ngIf=\"formControl?.errors?.required && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"This field is required\" | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMin && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatepickerMax && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.matDatetimePickerParse && formControl?.touched\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator && formControl?.touched && !disableErrorMessage\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}\r\n </ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>\r\n<!-- <sd-popover #error=\"sdPopover\" type=\"danger\" width=\"300px\">\r\n <span *ngIf=\"formControl.errors?.required\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMin\">\r\n {{ \"Min date\" | sdTranslate }}:\r\n <strong>{{ min | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerMax\">\r\n {{ \"Max date\" | sdTranslate }}:\r\n <strong>{{ max | date: \"dd/MM/yyyy HH:mm\" }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.matDatetimePickerParse\">\r\n {{ \"Parse error\" | sdTranslate }}:\r\n <strong>{{ formControl?.errors?.matDatetimePickerParse?.text }}</strong>\r\n </span>\r\n <span *ngIf=\"formControl?.errors?.customValidator\">\r\n {{ formControl?.errors?.customValidator }}\r\n </span>\r\n</sd-popover> -->\r\n",
251
290
  changeDetection: ChangeDetectionStrategy.OnPush,
252
291
  providers: [
253
292
  { provide: MAT_DATE_FORMATS, useValue: ɵ0 },
@@ -269,7 +308,7 @@ SdDateTime.propDecorators = {
269
308
  _max: [{ type: Input, args: ['max',] }],
270
309
  size: [{ type: Input }],
271
310
  form: [{ type: Input }],
272
- type: [{ type: Input }],
311
+ _type: [{ type: Input, args: ['type',] }],
273
312
  disabled: [{ type: Input }],
274
313
  _required: [{ type: Input, args: ['required',] }],
275
314
  _label: [{ type: Input, args: ['label',] }],
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-date-time.js","sources":["../../../../projects/sd-core/date-time/src/lib/date-time.component.ts","../../../../projects/sd-core/date-time/src/lib/date-time.module.ts","../../../../projects/sd-core/date-time/sd-angular-core-date-time.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n EventEmitter,\r\n Output,\r\n OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n OnInit,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ContentChild,\r\n ElementRef,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport moment, { Moment } from 'moment';\r\nimport { FormGroup, NgForm, Validators } from '@angular/forms';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { NgxMatDatetimePicker, NGX_MAT_DATE_FORMATS, } from '@angular-material-components/datetime-picker';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\n\r\nconst CUSTOM_DATETIME_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY HH:mm'\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY'\r\n }\r\n};\r\nconst CUSTOM_DATE_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY'\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY'\r\n }\r\n};\r\n@Component({\r\n selector: 'sd-date-time',\r\n templateUrl: './date-time.component.html',\r\n styleUrls: ['./date-time.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS },\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_DATETIME_FORMATS }\r\n ]\r\n})\r\nexport class SdDateTime implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n isMobileOrTablet = false;\r\n #date: any;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance;\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n val = (val === '') || val;\r\n }\r\n formControl = new SdFormControl();\r\n min: Date;\r\n @Input('min') set _min(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n max: Date;\r\n @Input('max') set _max(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n @Input() type: 'datetime' | 'date' | 'time' | 'month' = 'datetime';\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n if (this.required) {\r\n this.formControl.setValidators([Validators.required]);\r\n } else {\r\n this.formControl.clearValidators();\r\n }\r\n }\r\n qcId: string;\r\n label: string;\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-date-time',\r\n label: val\r\n });\r\n };\r\n @Input() placeholder: string;\r\n @Input() defaultTime: any;\r\n @Input() set minDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n @Input() set maxDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n @Input() validator: (value: any) => string | Promise<string>;\r\n @Output() sdChange = new EventEmitter();\r\n\r\n @Input() set model(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#date !== val) {\r\n this.#date = val;\r\n const date = Date.isDate(this.#date) ? moment(Date.toFormat(this.#date, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.formControl.setValue(date);\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ViewChild('input') input: ElementRef;\r\n @ViewChild(MatDatepicker) datePicker: MatDatepicker<Moment>;\r\n @ViewChild(NgxMatDatetimePicker) dateTimePicker: NgxMatDatetimePicker<Moment>;\r\n isFocused = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }));\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n }\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n }\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n }\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n }\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.input?.nativeElement?.focus();\r\n if (this.type === 'date') {\r\n this.datePicker?.open();\r\n } else {\r\n this.dateTimePicker?.open();\r\n }\r\n //\r\n }, 100);\r\n }\r\n\r\n focusInputElement() {\r\n this.input?.nativeElement?.focus();\r\n }\r\n\r\n onChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate();\r\n /**\r\n * Focus input khi `ngx-mat-datetime-picker` đang mở sẽ trigger hàm cancel() làm cho giá trị _selected không được update mới nhất\r\n * Case riêng trường hợp type = `datetime` thì xử lý focus element sau khi `ngx-mat-datetime-picker` emit event (closed)\r\n * @see https://github.com/h2qutc/ngx-mat-datetime-picker/blob/HEAD/projects/datetime-picker/src/lib/datetime-input.ts#L343\r\n */\r\n if (!this.dateTimePicker) {\r\n this.input?.nativeElement?.focus();\r\n }\r\n if (value) {\r\n if (new Date(this.#date) !== value) {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n }\r\n } else {\r\n if (!this.formControl?.value) {\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n }\r\n }\r\n\r\n clear = ($event: any) => {\r\n $event?.stopPropagation();\r\n if (this.formControl.value) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n }\r\n\r\n setMonthAndYear = (normalizedMonthAndYear: Moment, datepicker: MatDatepicker<Moment>) => {\r\n const ctrlValue = this.formControl.value || moment();\r\n ctrlValue.month(normalizedMonthAndYear.month());\r\n ctrlValue.year(normalizedMonthAndYear.year());\r\n this.formControl.setValue(ctrlValue);\r\n datepicker.close();\r\n this.modelChange.emit(ctrlValue);\r\n this.sdChange.emit(ctrlValue);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport {\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule\r\n} from '@angular-material-components/datetime-picker';\r\nimport { SdDateTime } from './date-time.component';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { NgxMatMomentModule } from '@angular-material-components/moment-adapter';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdPopoverModule } from '@sd-angular/core/popover';\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule,\r\n NgxMatMomentModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdPopoverModule\r\n ],\r\n declarations: [\r\n SdDateTime\r\n ],\r\n exports: [\r\n SdCommonModule,\r\n SdDateTime\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdDateTimeModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-date-time.js","sources":["../../../../projects/sd-core/date-time/src/lib/date-time.component.ts","../../../../projects/sd-core/date-time/src/lib/date-time.module.ts","../../../../projects/sd-core/date-time/sd-angular-core-date-time.ts"],"sourcesContent":["import {\r\n Component,\r\n Input,\r\n EventEmitter,\r\n Output,\r\n OnDestroy,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n OnInit,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ContentChild,\r\n ElementRef,\r\n Inject,\r\n Optional\r\n} from '@angular/core';\r\nimport * as uuid from 'uuid';\r\nimport hash from 'object-hash';\r\nimport moment, { Moment } from 'moment';\r\nimport { AbstractControl, FormGroup, NgForm, ValidatorFn, Validators } from '@angular/forms';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { NgxMatDatetimePicker, NGX_MAT_DATE_FORMATS, } from '@angular-material-components/datetime-picker';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { FORM_CONFIG, IFormConfiguration, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\n\r\nconst CUSTOM_DATETIME_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY HH:mm'\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY'\r\n }\r\n};\r\nconst CUSTOM_DATE_FORMATS = {\r\n parse: {\r\n dateInput: 'DD/MM/YYYY'\r\n },\r\n display: {\r\n dateInput: 'DD/MM/YYYY',\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY'\r\n }\r\n};\r\n@Component({\r\n selector: 'sd-date-time',\r\n templateUrl: './date-time.component.html',\r\n styleUrls: ['./date-time.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: MAT_DATE_FORMATS, useValue: CUSTOM_DATE_FORMATS },\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: CUSTOM_DATETIME_FORMATS }\r\n ]\r\n})\r\nexport class SdDateTime implements OnDestroy, OnInit, AfterViewInit {\r\n id = `I${uuid.v4()}`;\r\n isMobileOrTablet = false;\r\n #date: any;\r\n #name = uuid.v4();\r\n @Input() set name(val: string) {\r\n if (val) {\r\n this.#name = val;\r\n }\r\n }\r\n @Input() appearance: MatFormFieldAppearance;\r\n disableErrorMessage = false;\r\n @Input('disableErrorMessage') set _disableErrorMessage(val: boolean | '') {\r\n this.disableErrorMessage = (val === '') || val;\r\n val = (val === '') || val;\r\n }\r\n formControl = new SdFormControl();\r\n min: Date;\r\n @Input('min') set _min(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n max: Date;\r\n @Input('max') set _max(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n @Input() size: 'sm' | 'lg';\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n maxlength: number;\r\n type: 'datetime' | 'date' | 'time' | 'month';\r\n @Input('type') set _type(val: 'datetime' | 'date' | 'time' | 'month') {\r\n this.type = val || 'datetime';\r\n this.maxlength = this.type === 'datetime' ? 16 : 10;\r\n }\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n required = false;\r\n @Input('required') set _required(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n if (this.required) {\r\n this.formControl.setValidators([Validators.required]);\r\n } else {\r\n this.formControl.clearValidators();\r\n }\r\n }\r\n qcId: string;\r\n label: string;\r\n @Input('label') set _label(val: string) {\r\n this.label = val;\r\n this.qcId = hash({\r\n selector: 'sd-date-time',\r\n label: val\r\n });\r\n };\r\n @Input() placeholder: string;\r\n @Input() defaultTime: any;\r\n @Input() set minDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.min = new Date(val);\r\n } else {\r\n this.min = null;\r\n }\r\n }\r\n @Input() set maxDate(val: string | Date) {\r\n if (Date.isDate(val)) {\r\n this.max = new Date(val);\r\n } else {\r\n this.max = null;\r\n }\r\n }\r\n @Input() validator: (value: any) => string | Promise<string>;\r\n @Output() sdChange = new EventEmitter();\r\n\r\n @Input() set model(val: any) {\r\n if (!Date.isDate(val)) {\r\n val = null;\r\n }\r\n if (this.#date !== val) {\r\n this.#date = val;\r\n const date = Date.isDate(this.#date) ? moment(Date.toFormat(this.#date, 'MM/dd/yyyy HH:mm:ss'), 'MM/DD/YYYY HH:mm:ss') : null;\r\n this.formControl.setValue(date);\r\n }\r\n }\r\n @Output() modelChange = new EventEmitter();\r\n #subscription = new Subscription();\r\n @ContentChild(SdViewDefDirective) sdView: SdViewDefDirective;\r\n @ViewChild('input') input: ElementRef;\r\n @ViewChild(MatDatepicker) datePicker: MatDatepicker<Moment>;\r\n @ViewChild(NgxMatDatetimePicker) dateTimePicker: NgxMatDatetimePicker<Moment>;\r\n isFocused = false;\r\n constructor(\r\n private ref: ChangeDetectorRef,\r\n deviceService: DeviceDetectorService,\r\n @Inject(FORM_CONFIG) @Optional() private formConfig: IFormConfiguration) {\r\n this.isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n ngOnInit() {\r\n this.appearance = this.appearance || this.formConfig?.appearance;\r\n this.#subscription.add(this.formControl.sdChanges.subscribe(() => {\r\n // this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }));\r\n this.#form?.addControl(this.#name, this.formControl);\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n onFocus = () => {\r\n this.isFocused = true;\r\n }\r\n\r\n onBlur = () => {\r\n this.isFocused = false;\r\n }\r\n\r\n onClick = () => {\r\n if (this.sdView?.templateRef) {\r\n if (!this.formControl.disabled && !this.isFocused) {\r\n this.focus();\r\n }\r\n }\r\n }\r\n\r\n blur = () => {\r\n this.input?.nativeElement?.blur();\r\n }\r\n\r\n focus = () => {\r\n this.isFocused = true;\r\n setTimeout(() => {\r\n this.input?.nativeElement?.focus();\r\n if (this.type === 'date') {\r\n this.datePicker?.open();\r\n } else {\r\n this.dateTimePicker?.open();\r\n }\r\n //\r\n }, 100);\r\n }\r\n\r\n focusInputElement() {\r\n this.input?.nativeElement?.focus();\r\n }\r\n\r\n isValid: boolean;\r\n onKeyDown = (event) => {\r\n const key = event.keyCode || event.charCode;\r\n let isShift = false;\r\n if (key == 16) {\r\n isShift = true;\r\n }\r\n //Allow only Numeric Keys.\r\n if (((key >= 48 && key <= 57) || key == 8 || key <= 37 || key <= 39 || (key >= 96 && key <= 105) || key == 191 || key == 186) && isShift == false) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n onKeyup = (event) => {\r\n const currentVal: string = event.target.value;\r\n const formControl: AbstractControl = this.formControl;\r\n let regex = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d$/g;\r\n\r\n if (this.type === 'datetime' || this.type === 'time') {\r\n regex = /^([1-9]|([012][0-9])|(3[01]))\\/([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]$/g;\r\n }\r\n if (this.type === 'month') {\r\n regex = /^([0]{0,1}[1-9]|1[012])\\/\\d\\d\\d\\d [012]{0,1}[0-9]:[0-6][0-9]$/g;\r\n }\r\n\r\n const errorMessage = this.type === 'date' ? 'dd/MM/yyyy' : 'dd/MM/yyyy HH:mm';\r\n if (currentVal && !regex.test(currentVal)) {\r\n setTimeout(() => {\r\n this.isValid = true;\r\n formControl.markAsDirty();\r\n formControl.markAsTouched();\r\n formControl.setErrors({ ...formControl.errors, date: `Chưa đúng định dạng ${errorMessage}` });\r\n }, 0);\r\n\r\n } else {\r\n setTimeout(() => {\r\n this.isValid = false;\r\n formControl.setErrors({ ...formControl.errors, date: null });\r\n this.formControl.updateValueAndValidity();\r\n }, 0);\r\n }\r\n }\r\n\r\n onChange = (event: MatDatepickerInputEvent<Moment>) => {\r\n const value = event.value?.toDate();\r\n if (!this.dateTimePicker) {\r\n this.input?.nativeElement?.focus();\r\n }\r\n if (!this.isValid) {\r\n if (new Date(this.#date) !== value) {\r\n this.modelChange.emit(value);\r\n this.sdChange.emit(value);\r\n }\r\n } else {\r\n this.isValid = false;\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n }\r\n\r\n clear = ($event: any) => {\r\n $event?.stopPropagation();\r\n if (this.formControl.value) {\r\n this.formControl.setValue(null);\r\n this.modelChange.emit(null);\r\n this.sdChange.emit(null);\r\n }\r\n }\r\n\r\n setMonthAndYear = (normalizedMonthAndYear: Moment, datepicker: MatDatepicker<Moment>) => {\r\n const ctrlValue = this.formControl.value || moment();\r\n ctrlValue.month(normalizedMonthAndYear.month());\r\n ctrlValue.year(normalizedMonthAndYear.year());\r\n this.formControl.setValue(ctrlValue);\r\n datepicker.close();\r\n this.modelChange.emit(ctrlValue);\r\n this.sdChange.emit(ctrlValue);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport {\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule\r\n} from '@angular-material-components/datetime-picker';\r\nimport { SdDateTime } from './date-time.component';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { NgxMatMomentModule } from '@angular-material-components/moment-adapter';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SdCommonModule } from '@sd-angular/core/common';\r\nimport { SdPopoverModule } from '@sd-angular/core/popover';\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatDatepickerModule,\r\n MatMomentDateModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule,\r\n NgxMatMomentModule,\r\n SdTranslateModule,\r\n SdCommonModule,\r\n SdPopoverModule\r\n ],\r\n declarations: [\r\n SdDateTime\r\n ],\r\n exports: [\r\n SdCommonModule,\r\n SdDateTime\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdDateTimeModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuid.v4"],"mappings":"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"}