@taiga-ui/addon-mobile 2.87.0 → 2.89.0

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 (87) hide show
  1. package/bundles/taiga-ui-addon-mobile-components-pull-to-refresh.umd.js +229 -110
  2. package/bundles/taiga-ui-addon-mobile-components-pull-to-refresh.umd.js.map +1 -1
  3. package/bundles/taiga-ui-addon-mobile-components-pull-to-refresh.umd.min.js +1 -1
  4. package/bundles/taiga-ui-addon-mobile-components-pull-to-refresh.umd.min.js.map +1 -1
  5. package/bundles/taiga-ui-addon-mobile-components-sheet.umd.js +11 -3
  6. package/bundles/taiga-ui-addon-mobile-components-sheet.umd.js.map +1 -1
  7. package/bundles/taiga-ui-addon-mobile-components-sheet.umd.min.js +1 -1
  8. package/bundles/taiga-ui-addon-mobile-components-sheet.umd.min.js.map +1 -1
  9. package/bundles/taiga-ui-addon-mobile-directives-elastic-sticky.umd.js +14 -27
  10. package/bundles/taiga-ui-addon-mobile-directives-elastic-sticky.umd.js.map +1 -1
  11. package/bundles/taiga-ui-addon-mobile-directives-elastic-sticky.umd.min.js +1 -1
  12. package/bundles/taiga-ui-addon-mobile-directives-elastic-sticky.umd.min.js.map +1 -1
  13. package/bundles/taiga-ui-addon-mobile.umd.js +4 -12
  14. package/bundles/taiga-ui-addon-mobile.umd.js.map +1 -1
  15. package/bundles/taiga-ui-addon-mobile.umd.min.js +1 -1
  16. package/components/pull-to-refresh/index.d.ts +2 -0
  17. package/components/pull-to-refresh/loader-android/loader-android.component.d.ts +10 -2
  18. package/components/pull-to-refresh/loader-ios/loader-ios.component.d.ts +7 -1
  19. package/components/pull-to-refresh/pull-to-refresh.component.d.ts +10 -7
  20. package/components/pull-to-refresh/pull-to-refresh.providers.d.ts +15 -6
  21. package/components/pull-to-refresh/pull-to-refresh.service.d.ts +14 -0
  22. package/components/pull-to-refresh/pull-to-refresh.tokens.d.ts +5 -0
  23. package/components/pull-to-refresh/taiga-ui-addon-mobile-components-pull-to-refresh.metadata.json +1 -1
  24. package/components/sheet/sheet.service.d.ts +2 -1
  25. package/components/sheet/taiga-ui-addon-mobile-components-sheet.metadata.json +1 -1
  26. package/directives/elastic-sticky/elastic-sticky.service.d.ts +1 -2
  27. package/directives/elastic-sticky/taiga-ui-addon-mobile-directives-elastic-sticky.metadata.json +1 -1
  28. package/esm2015/components/pull-to-refresh/index.js +3 -1
  29. package/esm2015/components/pull-to-refresh/loader-android/loader-android.component.js +39 -16
  30. package/esm2015/components/pull-to-refresh/loader-ios/loader-ios.component.js +22 -13
  31. package/esm2015/components/pull-to-refresh/pull-to-refresh.component.js +46 -30
  32. package/esm2015/components/pull-to-refresh/pull-to-refresh.module.js +4 -3
  33. package/esm2015/components/pull-to-refresh/pull-to-refresh.providers.js +22 -27
  34. package/esm2015/components/pull-to-refresh/pull-to-refresh.service.js +52 -0
  35. package/esm2015/components/pull-to-refresh/pull-to-refresh.tokens.js +8 -0
  36. package/esm2015/components/sheet/sheet.service.js +16 -5
  37. package/esm2015/directives/elastic-sticky/elastic-sticky.service.js +12 -25
  38. package/esm2015/index.js +1 -2
  39. package/esm5/components/pull-to-refresh/index.js +3 -1
  40. package/esm5/components/pull-to-refresh/loader-android/loader-android.component.js +51 -16
  41. package/esm5/components/pull-to-refresh/loader-ios/loader-ios.component.js +26 -13
  42. package/esm5/components/pull-to-refresh/pull-to-refresh.component.js +48 -36
  43. package/esm5/components/pull-to-refresh/pull-to-refresh.module.js +4 -3
  44. package/esm5/components/pull-to-refresh/pull-to-refresh.providers.js +22 -32
  45. package/esm5/components/pull-to-refresh/pull-to-refresh.service.js +75 -0
  46. package/esm5/components/pull-to-refresh/pull-to-refresh.tokens.js +8 -0
  47. package/esm5/components/sheet/sheet.service.js +16 -5
  48. package/esm5/directives/elastic-sticky/elastic-sticky.service.js +13 -27
  49. package/esm5/index.js +1 -2
  50. package/fesm2015/taiga-ui-addon-mobile-components-pull-to-refresh.js +176 -90
  51. package/fesm2015/taiga-ui-addon-mobile-components-pull-to-refresh.js.map +1 -1
  52. package/fesm2015/taiga-ui-addon-mobile-components-sheet.js +12 -4
  53. package/fesm2015/taiga-ui-addon-mobile-components-sheet.js.map +1 -1
  54. package/fesm2015/taiga-ui-addon-mobile-directives-elastic-sticky.js +11 -24
  55. package/fesm2015/taiga-ui-addon-mobile-directives-elastic-sticky.js.map +1 -1
  56. package/fesm2015/taiga-ui-addon-mobile.js +0 -1
  57. package/fesm2015/taiga-ui-addon-mobile.js.map +1 -1
  58. package/fesm5/taiga-ui-addon-mobile-components-pull-to-refresh.js +226 -110
  59. package/fesm5/taiga-ui-addon-mobile-components-pull-to-refresh.js.map +1 -1
  60. package/fesm5/taiga-ui-addon-mobile-components-sheet.js +12 -4
  61. package/fesm5/taiga-ui-addon-mobile-components-sheet.js.map +1 -1
  62. package/fesm5/taiga-ui-addon-mobile-directives-elastic-sticky.js +12 -26
  63. package/fesm5/taiga-ui-addon-mobile-directives-elastic-sticky.js.map +1 -1
  64. package/fesm5/taiga-ui-addon-mobile.js +0 -1
  65. package/fesm5/taiga-ui-addon-mobile.js.map +1 -1
  66. package/index.d.ts +0 -1
  67. package/package.json +4 -4
  68. package/taiga-ui-addon-mobile.metadata.json +1 -1
  69. package/bundles/taiga-ui-addon-mobile-tokens.umd.js +0 -16
  70. package/bundles/taiga-ui-addon-mobile-tokens.umd.js.map +0 -1
  71. package/bundles/taiga-ui-addon-mobile-tokens.umd.min.js +0 -2
  72. package/bundles/taiga-ui-addon-mobile-tokens.umd.min.js.map +0 -1
  73. package/esm2015/tokens/index.js +0 -2
  74. package/esm2015/tokens/loaded.js +0 -6
  75. package/esm2015/tokens/taiga-ui-addon-mobile-tokens.js +0 -5
  76. package/esm5/tokens/index.js +0 -2
  77. package/esm5/tokens/loaded.js +0 -6
  78. package/esm5/tokens/taiga-ui-addon-mobile-tokens.js +0 -5
  79. package/fesm2015/taiga-ui-addon-mobile-tokens.js +0 -13
  80. package/fesm2015/taiga-ui-addon-mobile-tokens.js.map +0 -1
  81. package/fesm5/taiga-ui-addon-mobile-tokens.js +0 -13
  82. package/fesm5/taiga-ui-addon-mobile-tokens.js.map +0 -1
  83. package/tokens/index.d.ts +0 -1
  84. package/tokens/loaded.d.ts +0 -3
  85. package/tokens/package.json +0 -13
  86. package/tokens/taiga-ui-addon-mobile-tokens.d.ts +0 -4
  87. package/tokens/taiga-ui-addon-mobile-tokens.metadata.json +0 -1
@@ -1,11 +1,16 @@
1
1
  import { __assign, __decorate, __param, __read, __spread } from "tslib";
2
+ import { DOCUMENT } from '@angular/common';
2
3
  import { Inject, Injectable } from '@angular/core';
4
+ import { tuiGetNativeFocused } from '@taiga-ui/cdk';
3
5
  import { BehaviorSubject, EMPTY, Observable } from 'rxjs';
4
6
  import { TUI_SHEET_OPTIONS } from './sheet-options';
5
7
  import * as i0 from "@angular/core";
6
- import * as i1 from "./sheet-options";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "./sheet-options";
10
+ // @dynamic
7
11
  var TuiSheetService = /** @class */ (function () {
8
- function TuiSheetService(options) {
12
+ function TuiSheetService(doc, options) {
13
+ this.doc = doc;
9
14
  this.options = options;
10
15
  this.sheets$ = new BehaviorSubject([]);
11
16
  }
@@ -20,6 +25,10 @@ var TuiSheetService = /** @class */ (function () {
20
25
  var sheet = __assign(__assign(__assign({}, _this.options), options), { content: content,
21
26
  completeWith: completeWith,
22
27
  $implicit: $implicit, scroll$: EMPTY });
28
+ var focused = tuiGetNativeFocused(_this.doc);
29
+ if (focused instanceof HTMLElement && sheet.overlay) {
30
+ focused.blur();
31
+ }
23
32
  _this.sheets$.next(__spread(_this.sheets$.value, [sheet]));
24
33
  return function () {
25
34
  _this.sheets$.next(_this.sheets$.value.filter(function (item) { return item !== sheet; }));
@@ -27,16 +36,18 @@ var TuiSheetService = /** @class */ (function () {
27
36
  });
28
37
  };
29
38
  TuiSheetService.ctorParameters = function () { return [
39
+ { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
30
40
  { type: undefined, decorators: [{ type: Inject, args: [TUI_SHEET_OPTIONS,] }] }
31
41
  ]; };
32
- TuiSheetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TuiSheetService_Factory() { return new TuiSheetService(i0.ɵɵinject(i1.TUI_SHEET_OPTIONS)); }, token: TuiSheetService, providedIn: "root" });
42
+ TuiSheetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TuiSheetService_Factory() { return new TuiSheetService(i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i2.TUI_SHEET_OPTIONS)); }, token: TuiSheetService, providedIn: "root" });
33
43
  TuiSheetService = __decorate([
34
44
  Injectable({
35
45
  providedIn: "root",
36
46
  }),
37
- __param(0, Inject(TUI_SHEET_OPTIONS))
47
+ __param(0, Inject(DOCUMENT)),
48
+ __param(1, Inject(TUI_SHEET_OPTIONS))
38
49
  ], TuiSheetService);
39
50
  return TuiSheetService;
40
51
  }());
41
52
  export { TuiSheetService };
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvY29tcG9uZW50cy9zaGVldC8iLCJzb3VyY2VzIjpbInNoZWV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUd4RCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7OztBQUtuRTtJQUdJLHlCQUF3RCxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUZ2RSxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBRWEsQ0FBQztJQUVwRiw4QkFBSSxHQUFKLFVBQ0ksT0FBeUMsRUFDekMsT0FBc0M7UUFGMUMsaUJBd0JDO1FBdEJHLHdCQUFBLEVBQUEsWUFBc0M7UUFFdEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFBLFNBQVM7WUFDM0IsSUFBTSxZQUFZLEdBQUcsVUFBQyxNQUFTO2dCQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QixTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDO1lBQ0YsSUFBTSxLQUFLLGtDQUNKLEtBQUksQ0FBQyxPQUFPLEdBQ1osT0FBTyxLQUNWLE9BQU8sU0FBQTtnQkFDUCxZQUFZLGNBQUE7Z0JBQ1osU0FBUyxXQUFBLEVBQ1QsT0FBTyxFQUFFLEtBQUssR0FDakIsQ0FBQztZQUVGLEtBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFLLEtBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFFLEtBQUssR0FBRSxDQUFDO1lBRWxELE9BQU87Z0JBQ0gsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxLQUFLLEtBQUssRUFBZCxDQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7Z0RBMUJZLE1BQU0sU0FBQyxpQkFBaUI7OztJQUg1QixlQUFlO1FBSDNCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7UUFJZSxXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO09BSDdCLGVBQWUsQ0E4QjNCOzBCQXhDRDtDQXdDQyxBQTlCRCxJQThCQztTQTlCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNDb250ZW50fSBmcm9tICdAdGlua29mZi9uZy1wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtUdWlTaGVldH0gZnJvbSAnLi9zaGVldCc7XG5pbXBvcnQge1RVSV9TSEVFVF9PUFRJT05TLCBUdWlTaGVldE9wdGlvbnN9IGZyb20gJy4vc2hlZXQtb3B0aW9ucyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBgcm9vdGAsXG59KVxuZXhwb3J0IGNsYXNzIFR1aVNoZWV0U2VydmljZSB7XG4gICAgcmVhZG9ubHkgc2hlZXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VHVpU2hlZXQ8YW55LCBhbnk+Pj4oW10pO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChUVUlfU0hFRVRfT1BUSU9OUykgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUdWlTaGVldE9wdGlvbnMpIHt9XG5cbiAgICBvcGVuPEc+KFxuICAgICAgICBjb250ZW50OiBQb2x5bW9ycGhldXNDb250ZW50PFR1aVNoZWV0PEc+PixcbiAgICAgICAgb3B0aW9uczogUGFydGlhbDxUdWlTaGVldE9wdGlvbnM+ID0ge30sXG4gICAgKTogT2JzZXJ2YWJsZTxHPiB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgkaW1wbGljaXQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxldGVXaXRoID0gKHJlc3VsdDogRyk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdC5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc2hlZXQ6IFR1aVNoZWV0PGFueT4gPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZVdpdGgsXG4gICAgICAgICAgICAgICAgJGltcGxpY2l0LFxuICAgICAgICAgICAgICAgIHNjcm9sbCQ6IEVNUFRZLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zaGVldHMkLm5leHQoWy4uLnRoaXMuc2hlZXRzJC52YWx1ZSwgc2hlZXRdKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0cyQubmV4dCh0aGlzLnNoZWV0cyQudmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gc2hlZXQpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvY29tcG9uZW50cy9zaGVldC8iLCJzb3VyY2VzIjpbInNoZWV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUVuRSxXQUFXO0FBSVg7SUFHSSx5QkFDdUMsR0FBYSxFQUNKLE9BQXdCO1FBRGpDLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDSixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUovRCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBS25FLENBQUM7SUFFSiw4QkFBSSxHQUFKLFVBQ0ksT0FBeUMsRUFDekMsT0FBc0M7UUFGMUMsaUJBNkJDO1FBM0JHLHdCQUFBLEVBQUEsWUFBc0M7UUFFdEMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFBLFNBQVM7WUFDM0IsSUFBTSxZQUFZLEdBQUcsVUFBQyxNQUFTO2dCQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QixTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDO1lBQ0YsSUFBTSxLQUFLLGtDQUNKLEtBQUksQ0FBQyxPQUFPLEdBQ1osT0FBTyxLQUNWLE9BQU8sU0FBQTtnQkFDUCxZQUFZLGNBQUE7Z0JBQ1osU0FBUyxXQUFBLEVBQ1QsT0FBTyxFQUFFLEtBQUssR0FDakIsQ0FBQztZQUNGLElBQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEtBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUU5QyxJQUFJLE9BQU8sWUFBWSxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDakQsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2xCO1lBRUQsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQUssS0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUUsS0FBSyxHQUFFLENBQUM7WUFFbEQsT0FBTztnQkFDSCxLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxJQUFJLEtBQUssS0FBSyxFQUFkLENBQWMsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztnQkFqQzJDLFFBQVEsdUJBQS9DLE1BQU0sU0FBQyxRQUFRO2dEQUNmLE1BQU0sU0FBQyxpQkFBaUI7OztJQUxwQixlQUFlO1FBSDNCLFVBQVUsQ0FBQztZQUNSLFVBQVUsRUFBRSxNQUFNO1NBQ3JCLENBQUM7UUFLTyxXQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNoQixXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO09BTHJCLGVBQWUsQ0FzQzNCOzBCQW5ERDtDQW1EQyxBQXRDRCxJQXNDQztTQXRDWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpR2V0TmF0aXZlRm9jdXNlZH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0aW5rb2ZmL25nLXBvbHltb3JwaGV1cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgRU1QVFksIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aVNoZWV0fSBmcm9tICcuL3NoZWV0JztcbmltcG9ydCB7VFVJX1NIRUVUX09QVElPTlMsIFR1aVNoZWV0T3B0aW9uc30gZnJvbSAnLi9zaGVldC1vcHRpb25zJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBgcm9vdGAsXG59KVxuZXhwb3J0IGNsYXNzIFR1aVNoZWV0U2VydmljZSB7XG4gICAgcmVhZG9ubHkgc2hlZXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VHVpU2hlZXQ8YW55LCBhbnk+Pj4oW10pO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jOiBEb2N1bWVudCxcbiAgICAgICAgQEluamVjdChUVUlfU0hFRVRfT1BUSU9OUykgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUdWlTaGVldE9wdGlvbnMsXG4gICAgKSB7fVxuXG4gICAgb3BlbjxHPihcbiAgICAgICAgY29udGVudDogUG9seW1vcnBoZXVzQ29udGVudDxUdWlTaGVldDxHPj4sXG4gICAgICAgIG9wdGlvbnM6IFBhcnRpYWw8VHVpU2hlZXRPcHRpb25zPiA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8Rz4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoJGltcGxpY2l0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlV2l0aCA9IChyZXN1bHQ6IEcpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICRpbXBsaWNpdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHNoZWV0OiBUdWlTaGVldDxhbnk+ID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgY29tcGxldGVXaXRoLFxuICAgICAgICAgICAgICAgICRpbXBsaWNpdCxcbiAgICAgICAgICAgICAgICBzY3JvbGwkOiBFTVBUWSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gdHVpR2V0TmF0aXZlRm9jdXNlZCh0aGlzLmRvYyk7XG5cbiAgICAgICAgICAgIGlmIChmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgc2hlZXQub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIGZvY3VzZWQuYmx1cigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNoZWV0cyQubmV4dChbLi4udGhpcy5zaGVldHMkLnZhbHVlLCBzaGVldF0pO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXRzJC5uZXh0KHRoaXMuc2hlZXRzJC52YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBzaGVldCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -1,58 +1,44 @@
1
1
  import { __decorate, __extends, __param } from "tslib";
2
- import { ElementRef, Inject, Injectable, NgZone, Optional } from '@angular/core';
3
- import { WINDOW } from '@ng-web-apis/common';
4
- import { getElementOffset, TuiDestroyService, tuiZoneOptimized, typedFromEvent, } from '@taiga-ui/cdk';
2
+ import { ElementRef, Inject, Injectable, NgZone, Self } from '@angular/core';
3
+ import { TuiDestroyService, tuiGetElementOffset, tuiScrollFrom, tuiZoneOptimized, } from '@taiga-ui/cdk';
5
4
  import { SCROLL_REF_SELECTOR, TUI_SCROLL_REF } from '@taiga-ui/core';
6
5
  import { Observable } from 'rxjs';
7
6
  import { distinctUntilChanged, map, skip, startWith, switchMap, take, takeUntil, } from 'rxjs/operators';
8
7
  // @dynamic
9
8
  var TuiElasticStickyService = /** @class */ (function (_super) {
10
9
  __extends(TuiElasticStickyService, _super);
11
- function TuiElasticStickyService(scrollRef, _a, ngZone, windowRef, destroy$) {
10
+ function TuiElasticStickyService(scrollRef, _a, ngZone, destroy$) {
12
11
  var nativeElement = _a.nativeElement;
13
- var _this = _super.call(this, function (subscriber) {
12
+ return _super.call(this, function (subscriber) {
14
13
  return ngZone.onStable
15
14
  .pipe(take(1), switchMap(function () {
16
- var _a;
17
- var closest = nativeElement.closest(SCROLL_REF_SELECTOR);
18
- var host = (_a = scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.nativeElement) !== null && _a !== void 0 ? _a : closest;
15
+ var host = nativeElement.closest(SCROLL_REF_SELECTOR) ||
16
+ scrollRef.nativeElement;
19
17
  var offsetHeight = nativeElement.offsetHeight;
20
- var offsetTop = _this.getInitialOffset(host || windowRef, nativeElement);
21
- return typedFromEvent(host || windowRef, "scroll").pipe(map(function () {
18
+ var offsetTop = tuiGetElementOffset(host, nativeElement).offsetTop;
19
+ return tuiScrollFrom(host).pipe(map(function () {
22
20
  return Math.max(1 -
23
- Math.max(Math.round(host
24
- ? host.scrollTop
25
- : windowRef.pageYOffset) - offsetTop, 0) /
21
+ Math.max(Math.round(host.scrollTop) - offsetTop, 0) /
26
22
  offsetHeight, 0);
27
23
  }));
28
24
  }), startWith(1), distinctUntilChanged(), skip(1), tuiZoneOptimized(ngZone), takeUntil(destroy$))
29
25
  .subscribe(subscriber);
30
26
  }) || this;
31
- return _this;
32
27
  }
33
- TuiElasticStickyService.prototype.getInitialOffset = function (host, element) {
34
- // TODO: iframe warning
35
- return host instanceof Element
36
- ? getElementOffset(host, element).offsetTop
37
- : element.getBoundingClientRect().top;
38
- };
39
28
  TuiElasticStickyService.ctorParameters = function () { return [
40
- { type: ElementRef, decorators: [{ type: Optional }, { type: Inject, args: [TUI_SCROLL_REF,] }] },
29
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
41
30
  { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
42
31
  { type: NgZone, decorators: [{ type: Inject, args: [NgZone,] }] },
43
- { type: Window, decorators: [{ type: Inject, args: [WINDOW,] }] },
44
- { type: TuiDestroyService, decorators: [{ type: Inject, args: [TuiDestroyService,] }] }
32
+ { type: TuiDestroyService, decorators: [{ type: Self }, { type: Inject, args: [TuiDestroyService,] }] }
45
33
  ]; };
46
34
  TuiElasticStickyService = __decorate([
47
35
  Injectable(),
48
- __param(0, Optional()),
49
36
  __param(0, Inject(TUI_SCROLL_REF)),
50
37
  __param(1, Inject(ElementRef)),
51
38
  __param(2, Inject(NgZone)),
52
- __param(3, Inject(WINDOW)),
53
- __param(4, Inject(TuiDestroyService))
39
+ __param(3, Self()), __param(3, Inject(TuiDestroyService))
54
40
  ], TuiElasticStickyService);
55
41
  return TuiElasticStickyService;
56
42
  }(Observable));
57
43
  export { TuiElasticStickyService };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxhc3RpYy1zdGlja3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvZGlyZWN0aXZlcy9lbGFzdGljLXN0aWNreS8iLCJzb3VyY2VzIjpbImVsYXN0aWMtc3RpY2t5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsY0FBYyxHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxJQUFJLEVBQ0osU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsV0FBVztBQUVYO0lBQTZDLDJDQUFrQjtJQUMzRCxpQ0FHSSxTQUF5QyxFQUNyQixFQUF3QyxFQUM1QyxNQUFjLEVBQ2QsU0FBaUIsRUFDTixRQUEyQjtZQUhqQyxnQ0FBYTtRQUp0QyxZQVNJLGtCQUFNLFVBQUEsVUFBVTtZQUNaLE9BQUEsTUFBTSxDQUFDLFFBQVE7aUJBQ1YsSUFBSSxDQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUM7O2dCQUNOLElBQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDM0QsSUFBTSxJQUFJLFNBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLGFBQWEsbUNBQUksT0FBTyxDQUFDO2dCQUMxQyxJQUFBLHlDQUFZLENBQWtCO2dCQUNyQyxJQUFNLFNBQVMsR0FBRyxLQUFJLENBQUMsZ0JBQWdCLENBQ25DLElBQUksSUFBSSxTQUFTLEVBQ2pCLGFBQWEsQ0FDaEIsQ0FBQztnQkFFRixPQUFPLGNBQWMsQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDbkQsR0FBRyxDQUFDO29CQUNBLE9BQUEsSUFBSSxDQUFDLEdBQUcsQ0FDSixDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFHLENBQ0osSUFBSSxDQUFDLEtBQUssQ0FDTixJQUFJOzRCQUNBLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUzs0QkFDaEIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQzlCLEdBQUcsU0FBUyxFQUNiLENBQUMsQ0FDSjs0QkFDRyxZQUFZLEVBQ3BCLENBQUMsQ0FDSjtnQkFaRCxDQVlDLENBQ0osQ0FDSixDQUFDO1lBQ04sQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUNaLG9CQUFvQixFQUFFLEVBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFDeEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUN0QjtpQkFDQSxTQUFTLENBQUMsVUFBVSxDQUFDO1FBcEMxQixDQW9DMEIsQ0FDN0IsU0FDSjs7SUFBRCxDQUFDO0lBRU8sa0RBQWdCLEdBQXhCLFVBQXlCLElBQXNCLEVBQUUsT0FBb0I7UUFDakUsdUJBQXVCO1FBQ3ZCLE9BQU8sSUFBSSxZQUFZLE9BQU87WUFDMUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO1lBQzNDLENBQUMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDOUMsQ0FBQzs7Z0JBcERjLFVBQVUsdUJBRnBCLFFBQVEsWUFDUixNQUFNLFNBQUMsY0FBYztnQkFFZSxVQUFVLHVCQUE5QyxNQUFNLFNBQUMsVUFBVTtnQkFDTSxNQUFNLHVCQUE3QixNQUFNLFNBQUMsTUFBTTtnQkFDYSxNQUFNLHVCQUFoQyxNQUFNLFNBQUMsTUFBTTtnQkFDdUIsaUJBQWlCLHVCQUFyRCxNQUFNLFNBQUMsaUJBQWlCOztJQVJwQix1QkFBdUI7UUFEbkMsVUFBVSxFQUFFO1FBR0osV0FBQSxRQUFRLEVBQUUsQ0FBQTtRQUNWLFdBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRXRCLFdBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2xCLFdBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2QsV0FBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDZCxXQUFBLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO09BUnJCLHVCQUF1QixDQXlEbkM7SUFBRCw4QkFBQztDQUFBLEFBekRELENBQTZDLFVBQVUsR0F5RHREO1NBekRZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7V0lORE9XfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7XG4gICAgZ2V0RWxlbWVudE9mZnNldCxcbiAgICBUdWlEZXN0cm95U2VydmljZSxcbiAgICB0dWlab25lT3B0aW1pemVkLFxuICAgIHR5cGVkRnJvbUV2ZW50LFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7U0NST0xMX1JFRl9TRUxFQ1RPUiwgVFVJX1NDUk9MTF9SRUZ9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBza2lwLFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZSxcbiAgICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUdWlFbGFzdGljU3RpY2t5U2VydmljZSBleHRlbmRzIE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoVFVJX1NDUk9MTF9SRUYpXG4gICAgICAgIHNjcm9sbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBudWxsLFxuICAgICAgICBASW5qZWN0KEVsZW1lbnRSZWYpIHtuYXRpdmVFbGVtZW50fTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoTmdab25lKSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChXSU5ET1cpIHdpbmRvd1JlZjogV2luZG93LFxuICAgICAgICBASW5qZWN0KFR1aURlc3Ryb3lTZXJ2aWNlKSBkZXN0cm95JDogVHVpRGVzdHJveVNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHN1YnNjcmliZXIgPT5cbiAgICAgICAgICAgIG5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdCA9IG5hdGl2ZUVsZW1lbnQuY2xvc2VzdChTQ1JPTExfUkVGX1NFTEVDVE9SKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3QgPSBzY3JvbGxSZWY/Lm5hdGl2ZUVsZW1lbnQgPz8gY2xvc2VzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtvZmZzZXRIZWlnaHR9ID0gbmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IHRoaXMuZ2V0SW5pdGlhbE9mZnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0IHx8IHdpbmRvd1JlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVkRnJvbUV2ZW50KGhvc3QgfHwgd2luZG93UmVmLCBgc2Nyb2xsYCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhvc3Quc2Nyb2xsVG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3aW5kb3dSZWYucGFnZVlPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLSBvZmZzZXRUb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoMSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgICAgIHR1aVpvbmVPcHRpbWl6ZWQobmdab25lKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKGRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShzdWJzY3JpYmVyKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluaXRpYWxPZmZzZXQoaG9zdDogRWxlbWVudCB8IFdpbmRvdywgZWxlbWVudDogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICAvLyBUT0RPOiBpZnJhbWUgd2FybmluZ1xuICAgICAgICByZXR1cm4gaG9zdCBpbnN0YW5jZW9mIEVsZW1lbnRcbiAgICAgICAgICAgID8gZ2V0RWxlbWVudE9mZnNldChob3N0LCBlbGVtZW50KS5vZmZzZXRUb3BcbiAgICAgICAgICAgIDogZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgfVxufVxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxhc3RpYy1zdGlja3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvZGlyZWN0aXZlcy9lbGFzdGljLXN0aWNreS8iLCJzb3VyY2VzIjpbImVsYXN0aWMtc3RpY2t5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixnQkFBZ0IsR0FDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUNILG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLFdBQVc7QUFFWDtJQUE2QywyQ0FBa0I7SUFDM0QsaUNBQzRCLFNBQWtDLEVBQ3RDLEVBQXdDLEVBQzVDLE1BQWMsRUFDSyxRQUEyQjtZQUZ6QyxnQ0FBYTtlQUlsQyxrQkFBTSxVQUFBLFVBQVU7WUFDWixPQUFBLE1BQU0sQ0FBQyxRQUFRO2lCQUNWLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDO2dCQUNOLElBQU0sSUFBSSxHQUNOLGFBQWEsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7b0JBQzFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7Z0JBQ3JCLElBQUEseUNBQVksQ0FBa0I7Z0JBQzlCLElBQUEsOERBQVMsQ0FBNkM7Z0JBRTdELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDM0IsR0FBRyxDQUFDO29CQUNBLE9BQUEsSUFBSSxDQUFDLEdBQUcsQ0FDSixDQUFDO3dCQUNHLElBQUksQ0FBQyxHQUFHLENBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxFQUN0QyxDQUFDLENBQ0o7NEJBQ0csWUFBWSxFQUNwQixDQUFDLENBQ0o7Z0JBUkQsQ0FRQyxDQUNKLENBQ0osQ0FBQztZQUNOLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFDWixvQkFBb0IsRUFBRSxFQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQ3hCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FDdEI7aUJBQ0EsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQTlCMUIsQ0E4QjBCLENBQzdCO0lBQ0wsQ0FBQzs7Z0JBdENzQyxVQUFVLHVCQUE1QyxNQUFNLFNBQUMsY0FBYztnQkFDZSxVQUFVLHVCQUE5QyxNQUFNLFNBQUMsVUFBVTtnQkFDTSxNQUFNLHVCQUE3QixNQUFNLFNBQUMsTUFBTTtnQkFDK0IsaUJBQWlCLHVCQUE3RCxJQUFJLFlBQUksTUFBTSxTQUFDLGlCQUFpQjs7SUFMNUIsdUJBQXVCO1FBRG5DLFVBQVUsRUFBRTtRQUdKLFdBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3RCLFdBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2xCLFdBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2QsV0FBQSxJQUFJLEVBQUUsQ0FBQSxFQUFFLFdBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7T0FMN0IsdUJBQXVCLENBeUNuQztJQUFELDhCQUFDO0NBQUEsQUF6Q0QsQ0FBNkMsVUFBVSxHQXlDdEQ7U0F6Q1ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFbGVtZW50UmVmLCBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgU2VsZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIFR1aURlc3Ryb3lTZXJ2aWNlLFxuICAgIHR1aUdldEVsZW1lbnRPZmZzZXQsXG4gICAgdHVpU2Nyb2xsRnJvbSxcbiAgICB0dWlab25lT3B0aW1pemVkLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7U0NST0xMX1JFRl9TRUxFQ1RPUiwgVFVJX1NDUk9MTF9SRUZ9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBza2lwLFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZSxcbiAgICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUdWlFbGFzdGljU3RpY2t5U2VydmljZSBleHRlbmRzIE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoVFVJX1NDUk9MTF9SRUYpIHNjcm9sbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBJbmplY3QoRWxlbWVudFJlZikge25hdGl2ZUVsZW1lbnR9OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgQEluamVjdChOZ1pvbmUpIG5nWm9uZTogTmdab25lLFxuICAgICAgICBAU2VsZigpIEBJbmplY3QoVHVpRGVzdHJveVNlcnZpY2UpIGRlc3Ryb3kkOiBUdWlEZXN0cm95U2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoc3Vic2NyaWJlciA9PlxuICAgICAgICAgICAgbmdab25lLm9uU3RhYmxlXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBob3N0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsb3Nlc3QoU0NST0xMX1JFRl9TRUxFQ1RPUikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtvZmZzZXRIZWlnaHR9ID0gbmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtvZmZzZXRUb3B9ID0gdHVpR2V0RWxlbWVudE9mZnNldChob3N0LCBuYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1aVNjcm9sbEZyb20oaG9zdCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChob3N0LnNjcm9sbFRvcCkgLSBvZmZzZXRUb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoMSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgICAgIHNraXAoMSksXG4gICAgICAgICAgICAgICAgICAgIHR1aVpvbmVPcHRpbWl6ZWQobmdab25lKSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKGRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShzdWJzY3JpYmVyKSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
package/esm5/index.js CHANGED
@@ -2,6 +2,5 @@ export * from '@taiga-ui/addon-mobile/components';
2
2
  export * from '@taiga-ui/addon-mobile/const';
3
3
  export * from '@taiga-ui/addon-mobile/directives';
4
4
  export * from '@taiga-ui/addon-mobile/enums';
5
- export * from '@taiga-ui/addon-mobile/tokens';
6
5
  export * from '@taiga-ui/addon-mobile/utils';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkvYWRkb24tbW9iaWxlLyIsInNvdXJjZXMiOlsiaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL2NvbXBvbmVudHMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9jb25zdCc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9lbnVtcyc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS90b2tlbnMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS90eXBlcyc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvYWRkb24tbW9iaWxlL3V0aWxzJztcbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkvYWRkb24tbW9iaWxlLyIsInNvdXJjZXMiOlsiaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw4QkFBOEIsQ0FBQztBQUc3QyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9jb21wb25lbnRzJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvY29uc3QnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9hZGRvbi1tb2JpbGUvdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2FkZG9uLW1vYmlsZS91dGlscyc7XG4iXX0=
@@ -1,55 +1,35 @@
1
1
  import { __decorate, __param } from 'tslib';
2
- import { Input, HostBinding, Component, ChangeDetectionStrategy, InjectionToken, ElementRef, Inject, Output, NgModule } from '@angular/core';
3
- import { TuiDestroyService, TUI_IS_IOS, typedFromEvent, tuiPure, TuiOverscrollModule, TuiRepeatTimesModule } from '@taiga-ui/cdk';
4
- import { merge, of, Observable } from 'rxjs';
5
- import { filter, switchMap, map, takeUntil, endWith, mapTo, scan, distinctUntilChanged } from 'rxjs/operators';
6
- import { TUI_LOADED } from '@taiga-ui/addon-mobile/tokens';
2
+ import { InjectionToken, Inject, Component, ChangeDetectionStrategy, inject, ElementRef, Injectable, HostBinding, Self, Input, Output, NgModule } from '@angular/core';
3
+ import { POLYMORPHEUS_CONTEXT, PolymorpheusComponent, PolymorpheusModule } from '@tinkoff/ng-polymorpheus';
4
+ import { TUI_IS_IOS, tuiTypedFromEvent, tuiScrollFrom, TuiDestroyService, tuiDefaultProp, TuiRepeatTimesModule } from '@taiga-ui/cdk';
5
+ import { TUI_SCROLL_REF, TuiSvgModule } from '@taiga-ui/core';
6
+ import { EMPTY, Observable } from 'rxjs';
7
+ import { startWith, switchMap, filter, map, tap, takeUntil, endWith, scan, takeWhile, distinctUntilChanged, share } from 'rxjs/operators';
7
8
  import { CommonModule } from '@angular/common';
8
- import { TuiSvgModule } from '@taiga-ui/core';
9
9
 
10
- const HIDDEN_DISTANCE = 2;
11
- const ROTATE_X_DEFAULT = 180;
12
- const ROTATE_X_MAX = 500;
13
- const ROTATE_X_MULTIPLIER = 2.3;
14
- let TuiMobileLoaderAndroidComponent = class TuiMobileLoaderAndroidComponent {
15
- constructor() {
16
- this.pulled = 0;
17
- }
18
- get transform() {
19
- const rotateX = Math.min(ROTATE_X_DEFAULT + this.pulled * ROTATE_X_MULTIPLIER, ROTATE_X_MAX);
20
- return `rotate(${rotateX} 0 0)`;
21
- }
22
- get hidden() {
23
- return this.pulled < HIDDEN_DISTANCE;
24
- }
25
- };
26
- __decorate([
27
- Input()
28
- ], TuiMobileLoaderAndroidComponent.prototype, "pulled", void 0);
29
- __decorate([
30
- HostBinding('class._hidden')
31
- ], TuiMobileLoaderAndroidComponent.prototype, "hidden", null);
32
- TuiMobileLoaderAndroidComponent = __decorate([
33
- Component({
34
- selector: 'tui-mobile-android-loader',
35
- template: "<svg\n *ngIf=\"pulled !== 100; else loading\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.transform]=\"transform\"\n>\n <defs>\n <mask id=\"mask-1\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"white\"\n />\n </mask>\n </defs>\n <g mask=\"url(#mask-1)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"black\"\n />\n </g>\n</svg>\n<ng-template #loading>\n <svg\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-loading\"\n >\n <circle\n cx=\"50\"\n cy=\"50\"\n r=\"50\"\n stroke-dasharray=\"314\"\n class=\"t-circle\"\n ></circle>\n </svg>\n</ng-template>\n",
36
- changeDetection: ChangeDetectionStrategy.OnPush,
37
- styles: [":host{box-shadow:0 .5rem 1rem rgba(0,0,0,.16);display:flex;height:2.25rem;width:2.25rem;background-color:#fff;border-radius:6.25rem;align-items:center;justify-content:center}:host._hidden{visibility:hidden;transition:none}.t-loading{display:block;width:1rem;border-radius:100%;animation:3s linear infinite tuiLoaderRotate}.t-circle{fill:none;stroke:var(--tui-text-01);stroke-width:1.5rem;animation:3s linear infinite tuiLoaderDashOffset}"]
38
- })
39
- ], TuiMobileLoaderAndroidComponent);
10
+ /**
11
+ * Pull threshold in pixels until loading starts
12
+ */
13
+ const TUI_PULL_TO_REFRESH_THRESHOLD = new InjectionToken(`[TUI_PULL_TO_REFRESH_THRESHOLD]`, {
14
+ factory: () => 50,
15
+ });
40
16
 
41
17
  const LOADED_STEP = 8;
42
18
  const ROTATE_X_STEP = 30;
43
19
  let TuiMobileLoaderIOSComponent = class TuiMobileLoaderIOSComponent {
44
- constructor() {
45
- this.pulled = 0;
20
+ constructor(context, threshold) {
21
+ this.context = context;
22
+ this.threshold = threshold;
46
23
  this.steps = 12;
47
24
  }
48
25
  get finished() {
49
- return this.pulled >= 100;
26
+ return this.percent >= 100;
27
+ }
28
+ get percent() {
29
+ return (this.context.$implicit * 100) / this.threshold;
50
30
  }
51
31
  isShown(index) {
52
- return this.pulled > (index + 1) * LOADED_STEP;
32
+ return this.percent > (index + 1) * LOADED_STEP;
53
33
  }
54
34
  calculateTransform(index) {
55
35
  return `rotate(${index * ROTATE_X_STEP} 50 50)`;
@@ -58,87 +38,193 @@ let TuiMobileLoaderIOSComponent = class TuiMobileLoaderIOSComponent {
58
38
  return `${(index * LOADED_STEP) / 100}s`;
59
39
  }
60
40
  };
61
- __decorate([
62
- Input()
63
- ], TuiMobileLoaderIOSComponent.prototype, "pulled", void 0);
41
+ TuiMobileLoaderIOSComponent.ctorParameters = () => [
42
+ { type: undefined, decorators: [{ type: Inject, args: [POLYMORPHEUS_CONTEXT,] }] },
43
+ { type: Number, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_THRESHOLD,] }] }
44
+ ];
64
45
  TuiMobileLoaderIOSComponent = __decorate([
65
46
  Component({
66
47
  selector: 'tui-mobile-ios-loader',
67
48
  template: "<svg\n width=\"36\"\n height=\"36\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"xMidYMid\"\n>\n <ng-container *tuiRepeatTimes=\"let index of steps\">\n <g\n *ngIf=\"isShown(index)\"\n [attr.transform]=\"calculateTransform(index)\"\n >\n <rect\n x=\"47\"\n y=\"22\"\n rx=\"7.05\"\n ry=\"3.3\"\n width=\"6\"\n height=\"16\"\n fill=\"#c7c9cc\"\n >\n <animate\n *ngIf=\"finished\"\n attributeName=\"opacity\"\n values=\"1;0\"\n keyTimes=\"0;1\"\n dur=\"1s\"\n repeatCount=\"indefinite\"\n [attr.begin]=\"calculateAnimationBegin(index)\"\n ></animate>\n </rect>\n </g>\n </ng-container>\n</svg>\n",
68
49
  changeDetection: ChangeDetectionStrategy.OnPush,
69
- providers: [TuiDestroyService]
70
- })
50
+ styles: [":host{position:absolute;top:-.5rem;left:50%;margin-left:-1.125rem}"]
51
+ }),
52
+ __param(0, Inject(POLYMORPHEUS_CONTEXT)),
53
+ __param(1, Inject(TUI_PULL_TO_REFRESH_THRESHOLD))
71
54
  ], TuiMobileLoaderIOSComponent);
55
+ const TUI_IOS_LOADER = new PolymorpheusComponent(TuiMobileLoaderIOSComponent);
56
+
57
+ /**
58
+ * Stream that emits when loading is over
59
+ */
60
+ const TUI_PULL_TO_REFRESH_LOADED = new InjectionToken(`[TUI_PULL_TO_REFRESH_LOADED]`, {
61
+ factory: () => EMPTY,
62
+ });
63
+ /**
64
+ * Loading indicator component that gets current pull distance in pixels as context
65
+ */
66
+ const TUI_PULL_TO_REFRESH_COMPONENT = new InjectionToken(`[TUI_PULL_TO_REFRESH_COMPONENT]`, {
67
+ factory: () => (inject(TUI_IS_IOS) ? TUI_IOS_LOADER : TUI_ANDROID_LOADER),
68
+ });
69
+ /**
70
+ * @deprecated renamed to {@link TUI_PULL_TO_REFRESH_LOADED}
71
+ */
72
+ const TUI_LOADED = TUI_PULL_TO_REFRESH_LOADED;
72
73
 
73
74
  const MICRO_OFFSET = Math.pow(10, -6);
74
- const PULLED_DISTANCE = 50;
75
- const TUI_PULLING = new InjectionToken(`Stream that emits content pulling`);
76
- const TUI_PULL_TO_REFRESH_PROVIDERS = [
77
- {
78
- provide: TUI_PULLING,
79
- deps: [TUI_IS_IOS, TUI_LOADED, ElementRef],
80
- useFactory: pullingFactory,
81
- },
75
+ // @dynamic
76
+ let TuiPullToRefreshService = class TuiPullToRefreshService extends Observable {
77
+ constructor(el, scrollRef, loaded$, threshold, component) {
78
+ super(subscriber => (component ? this.pulling$ : EMPTY).subscribe(subscriber));
79
+ this.el = el;
80
+ this.scrollRef = scrollRef;
81
+ this.loaded$ = loaded$;
82
+ this.threshold = threshold;
83
+ // Hack for iOS to determine if pulling stopped due to scroll
84
+ // because Safari does not support `touch-action: pan-down`
85
+ this.touched = false;
86
+ this.pulling$ = this.loaded$.pipe(startWith(null), switchMap(() => tuiTypedFromEvent(this.element, `touchstart`, { passive: true }).pipe(filter(() => !this.scrollTop), map(({ touches }) => touches[0].clientY), switchMap(start => tuiTypedFromEvent(this.element, `touchmove`).pipe(tap(() => {
87
+ this.touched = true;
88
+ }), map(({ touches }) => touches[0].clientY - start), filter(distance => distance > 0), takeUntil(tuiTypedFromEvent(this.element, `touchend`).pipe(tap(() => {
89
+ this.touched = false;
90
+ }))), takeUntil(tuiScrollFrom(this.scrollRef.nativeElement)), endWith(0))), scan((prev, current) => !current && !this.touched && prev > this.threshold
91
+ ? this.threshold
92
+ : current + current * MICRO_OFFSET, 0), takeWhile(distance => distance !== this.threshold, true), startWith(0))), distinctUntilChanged(), share());
93
+ }
94
+ get element() {
95
+ return this.el.nativeElement;
96
+ }
97
+ get scrollTop() {
98
+ return this.scrollRef.nativeElement.scrollTop;
99
+ }
100
+ };
101
+ TuiPullToRefreshService.ctorParameters = () => [
102
+ { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
103
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
104
+ { type: Observable, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_LOADED,] }] },
105
+ { type: Number, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_THRESHOLD,] }] },
106
+ { type: undefined, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_COMPONENT,] }] }
82
107
  ];
83
- // eslint-disable-next-line @typescript-eslint/naming-convention
84
- function pullingFactory(isIOS, loaded$, { nativeElement }) {
85
- return merge(typedFromEvent(nativeElement, `touchstart`, { passive: true }).pipe(filter(() => nativeElement.scrollTop === 0), switchMap(touchStart => typedFromEvent(nativeElement, `touchmove`).pipe(map(touchMove => touchMove.touches[0].clientY - touchStart.touches[0].clientY), takeUntil(typedFromEvent(nativeElement, `touchend`)), endWith(0)))), loaded$.pipe(mapTo(NaN))).pipe(scan((max, current) => {
86
- if (Number.isNaN(current)) {
87
- return 0;
88
- }
89
- const androidLoading = !isIOS && max === PULLED_DISTANCE;
90
- const dropped = current === 0 && max > PULLED_DISTANCE;
91
- return androidLoading || dropped ? PULLED_DISTANCE : current + MICRO_OFFSET;
92
- }, 0));
93
- }
108
+ TuiPullToRefreshService = __decorate([
109
+ Injectable(),
110
+ __param(0, Inject(ElementRef)),
111
+ __param(1, Inject(TUI_SCROLL_REF)),
112
+ __param(2, Inject(TUI_PULL_TO_REFRESH_LOADED)),
113
+ __param(3, Inject(TUI_PULL_TO_REFRESH_THRESHOLD)),
114
+ __param(4, Inject(TUI_PULL_TO_REFRESH_COMPONENT))
115
+ ], TuiPullToRefreshService);
116
+
117
+ const ROTATE_X_DEFAULT = 180;
118
+ const ROTATE_X_MAX = 500;
119
+ const ROTATE_X_MULTIPLIER = 2.3;
120
+ let TuiMobileLoaderAndroidComponent = class TuiMobileLoaderAndroidComponent {
121
+ constructor(context, threshold) {
122
+ this.context = context;
123
+ this.threshold = threshold;
124
+ }
125
+ get transform() {
126
+ const rotateX = Math.min(ROTATE_X_DEFAULT + this.percent * ROTATE_X_MULTIPLIER, ROTATE_X_MAX);
127
+ return `rotate(${rotateX} 0 0)`;
128
+ }
129
+ get percent() {
130
+ return (this.context.$implicit * 100) / this.threshold;
131
+ }
132
+ get opacity() {
133
+ return this.context.$implicit / (this.threshold * 1.5);
134
+ }
135
+ get dropped() {
136
+ return (this.context.$implicit <= MICRO_OFFSET ||
137
+ this.context.$implicit === this.threshold);
138
+ }
139
+ get hostTransform() {
140
+ return `translateY(${Math.min(this.context.$implicit, this.threshold * 1.5)}px)`;
141
+ }
142
+ };
143
+ TuiMobileLoaderAndroidComponent.ctorParameters = () => [
144
+ { type: undefined, decorators: [{ type: Inject, args: [POLYMORPHEUS_CONTEXT,] }] },
145
+ { type: Number, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_THRESHOLD,] }] }
146
+ ];
147
+ __decorate([
148
+ HostBinding('class._visible')
149
+ ], TuiMobileLoaderAndroidComponent.prototype, "percent", null);
150
+ __decorate([
151
+ HostBinding('class._dropped')
152
+ ], TuiMobileLoaderAndroidComponent.prototype, "dropped", null);
153
+ __decorate([
154
+ HostBinding('style.transform')
155
+ ], TuiMobileLoaderAndroidComponent.prototype, "hostTransform", null);
156
+ TuiMobileLoaderAndroidComponent = __decorate([
157
+ Component({
158
+ selector: 'tui-mobile-android-loader',
159
+ template: "<div class=\"t-wrapper\">\n <svg\n *ngIf=\"percent !== 100; else loading\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.transform]=\"transform\"\n [style.opacity]=\"opacity\"\n >\n <defs>\n <mask id=\"mask-1\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"white\"\n />\n </mask>\n </defs>\n <g mask=\"url(#mask-1)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21 12C21 7.03 16.97 3 12 3C7.03 3 3 7.03 3 12C3 16.97 7.03 21 12 21C14.06 21 15.96 20.3 17.48 19.14L16.06 17.7C14.91 18.51 13.51 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5C15.87 5 19 8.13 19 12H16L20 16L24 12H21Z\"\n fill=\"black\"\n />\n </g>\n </svg>\n</div>\n<ng-template #loading>\n <svg\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"t-loading\"\n >\n <circle\n cx=\"50\"\n cy=\"50\"\n r=\"50\"\n stroke-dasharray=\"314\"\n class=\"t-circle\"\n ></circle>\n </svg>\n</ng-template>\n",
160
+ changeDetection: ChangeDetectionStrategy.OnPush,
161
+ styles: [":host{transition-property:opacity;transition-duration:var(--tui-duration,300ms);transition-timing-function:ease-in-out;position:-webkit-sticky;position:sticky;top:0;z-index:1;display:block;height:0;opacity:0}:host._visible{opacity:1}:host._dropped{transition:transform var(--tui-duration) cubic-bezier(.4,0,.2,1),opacity var(--tui-duration) var(--tui-duration)}.t-wrapper{box-shadow:0 .5rem 1rem rgba(0,0,0,.16);position:absolute;top:-2.5rem;left:50%;display:flex;height:2.25rem;width:2.25rem;background-color:var(--tui-secondary);border-radius:6.25rem;align-items:center;justify-content:center;margin-left:-1.125rem}.t-loading{display:block;width:1rem;border-radius:100%;animation:3s linear infinite tuiLoaderRotate}.t-circle{fill:none;stroke:var(--tui-text-01);stroke-width:1.5rem;animation:3s linear infinite tuiLoaderDashOffset}@keyframes tuiLoaderDashOffset{0%,100%{stroke-dashoffset:-66}50%{stroke-dashoffset:-314}}@keyframes tuiLoaderRotate{0%{transform:rotate(0)}50%{transform:rotate(1turn)}100%{transform:rotate(3turn)}}"]
162
+ }),
163
+ __param(0, Inject(POLYMORPHEUS_CONTEXT)),
164
+ __param(1, Inject(TUI_PULL_TO_REFRESH_THRESHOLD))
165
+ ], TuiMobileLoaderAndroidComponent);
166
+ const TUI_ANDROID_LOADER = new PolymorpheusComponent(TuiMobileLoaderAndroidComponent);
94
167
 
95
- const IOS_LOADING_DISTANCE = PULLED_DISTANCE / 2;
96
- const ANDROID_MAX_DISTANCE = PULLED_DISTANCE * 1.5;
97
- function translateY(distance) {
98
- return `translateY(${distance}px)`;
99
- }
100
168
  let TuiPullToRefreshComponent = class TuiPullToRefreshComponent {
101
- constructor(isIOS, pulling$) {
169
+ constructor(destroy$, { nativeElement }, isIOS, threshold, component, pulling$) {
102
170
  this.isIOS = isIOS;
171
+ this.threshold = threshold;
172
+ this.component = component;
103
173
  this.pulling$ = pulling$;
104
- this.pulled = this.pulling$.pipe(distinctUntilChanged(), filter(distance => distance === PULLED_DISTANCE), mapTo(undefined));
105
- this.pulledInPercent$ = this.pulling$.pipe(map(distance => (distance * 100) / PULLED_DISTANCE));
106
- this.dropped$ = this.pulling$.pipe(map(distance => distance <= MICRO_OFFSET || distance === PULLED_DISTANCE), distinctUntilChanged());
107
- this.contentTransform$ = this.isIOS
108
- ? this.pulling$.pipe(map(distance => distance === PULLED_DISTANCE ? IOS_LOADING_DISTANCE : distance), map(translateY))
109
- : of(null);
110
- }
111
- get loaderTransform$() {
112
- return this.pulling$.pipe(map(distance => translateY(Math.min(distance, ANDROID_MAX_DISTANCE))));
174
+ this.styleHandler = this.isIOS
175
+ ? distance => ({ transform: `translateY(${distance / 2}px)` })
176
+ : () => null;
177
+ this.pulled = this.pulling$.pipe(filter(distance => distance === this.threshold));
178
+ this.dropped$ = this.pulling$.pipe(map(distance => distance <= MICRO_OFFSET || distance === this.threshold), distinctUntilChanged());
179
+ // Ensure scrolling down is impossible while pulling
180
+ tuiScrollFrom(nativeElement)
181
+ .pipe(startWith(null), takeUntil(destroy$))
182
+ .subscribe(() => {
183
+ if (nativeElement.scrollTop) {
184
+ nativeElement.style.touchAction = '';
185
+ }
186
+ else {
187
+ nativeElement.style.touchAction = 'pan-down';
188
+ }
189
+ });
113
190
  }
114
191
  };
115
192
  TuiPullToRefreshComponent.ctorParameters = () => [
193
+ { type: Observable, decorators: [{ type: Inject, args: [TuiDestroyService,] }, { type: Self }] },
194
+ { type: ElementRef, decorators: [{ type: Inject, args: [TUI_SCROLL_REF,] }] },
116
195
  { type: Boolean, decorators: [{ type: Inject, args: [TUI_IS_IOS,] }] },
117
- { type: Observable, decorators: [{ type: Inject, args: [TUI_PULLING,] }] }
196
+ { type: Number, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_THRESHOLD,] }] },
197
+ { type: undefined, decorators: [{ type: Inject, args: [TUI_PULL_TO_REFRESH_COMPONENT,] }] },
198
+ { type: Observable, decorators: [{ type: Inject, args: [TuiPullToRefreshService,] }] }
118
199
  ];
200
+ __decorate([
201
+ Input(),
202
+ tuiDefaultProp()
203
+ ], TuiPullToRefreshComponent.prototype, "styleHandler", void 0);
119
204
  __decorate([
120
205
  Output()
121
206
  ], TuiPullToRefreshComponent.prototype, "pulled", void 0);
122
- __decorate([
123
- tuiPure
124
- ], TuiPullToRefreshComponent.prototype, "loaderTransform$", null);
125
207
  TuiPullToRefreshComponent = __decorate([
126
208
  Component({
127
209
  selector: 'tui-pull-to-refresh',
128
- template: "<div\n tuiOverscroll\n [class.t-drop-animation]=\"dropped$ | async\"\n [style.transform]=\"contentTransform$ | async\"\n>\n <ng-content></ng-content>\n</div>\n\n<tui-mobile-ios-loader\n *ngIf=\"isIOS; else androidLoader\"\n class=\"t-ios-spinner\"\n [pulled]=\"(pulledInPercent$ | async) || 0\"\n></tui-mobile-ios-loader>\n\n<ng-template #androidLoader>\n <tui-mobile-android-loader\n class=\"t-android-loader\"\n [class.t-drop-animation]=\"dropped$ | async\"\n [style.transform]=\"loaderTransform$ | async\"\n [pulled]=\"(pulledInPercent$ | async) || 0\"\n ></tui-mobile-android-loader>\n</ng-template>\n",
210
+ template: "<div\n polymorpheus-outlet\n [content]=\"component\"\n [context]=\"{$implicit: (pulling$ | async) || 0}\"\n></div>\n\n<div\n [class.t-drop]=\"dropped$ | async\"\n [ngStyle]=\"styleHandler((pulling$ | async) || 0)\"\n>\n <ng-content></ng-content>\n</div>\n",
129
211
  changeDetection: ChangeDetectionStrategy.OnPush,
130
- providers: [TUI_PULL_TO_REFRESH_PROVIDERS],
131
- styles: [":host{position:relative;display:block;overflow:hidden}.t-ios-spinner{position:absolute;top:-.5rem;left:50%;margin-left:-1.125rem}.t-android-loader{position:absolute;top:-1.5rem;left:50%;margin-left:-1.125rem}.t-drop-animation{transition:all var(--tui-duration) cubic-bezier(.4,0,.2,1)}"]
212
+ providers: [TuiPullToRefreshService, TuiDestroyService],
213
+ styles: [".t-drop{transition:all var(--tui-duration) cubic-bezier(.4,0,.2,1)}"]
132
214
  }),
133
- __param(0, Inject(TUI_IS_IOS)),
134
- __param(1, Inject(TUI_PULLING))
215
+ __param(0, Inject(TuiDestroyService)), __param(0, Self()),
216
+ __param(1, Inject(TUI_SCROLL_REF)),
217
+ __param(2, Inject(TUI_IS_IOS)),
218
+ __param(3, Inject(TUI_PULL_TO_REFRESH_THRESHOLD)),
219
+ __param(4, Inject(TUI_PULL_TO_REFRESH_COMPONENT)),
220
+ __param(5, Inject(TuiPullToRefreshService))
135
221
  ], TuiPullToRefreshComponent);
136
222
 
137
223
  let TuiPullToRefreshModule = class TuiPullToRefreshModule {
138
224
  };
139
225
  TuiPullToRefreshModule = __decorate([
140
226
  NgModule({
141
- imports: [CommonModule, TuiSvgModule, TuiOverscrollModule, TuiRepeatTimesModule],
227
+ imports: [CommonModule, TuiSvgModule, TuiRepeatTimesModule, PolymorpheusModule],
142
228
  declarations: [
143
229
  TuiPullToRefreshComponent,
144
230
  TuiMobileLoaderAndroidComponent,
@@ -152,5 +238,5 @@ TuiPullToRefreshModule = __decorate([
152
238
  * Generated bundle index. Do not edit.
153
239
  */
154
240
 
155
- export { MICRO_OFFSET, PULLED_DISTANCE, TUI_PULLING, TUI_PULL_TO_REFRESH_PROVIDERS, TuiMobileLoaderAndroidComponent, TuiMobileLoaderIOSComponent, TuiPullToRefreshComponent, TuiPullToRefreshModule, pullingFactory };
241
+ export { MICRO_OFFSET, TUI_ANDROID_LOADER, TUI_IOS_LOADER, TUI_LOADED, TUI_PULL_TO_REFRESH_COMPONENT, TUI_PULL_TO_REFRESH_LOADED, TUI_PULL_TO_REFRESH_THRESHOLD, TuiMobileLoaderAndroidComponent, TuiMobileLoaderIOSComponent, TuiPullToRefreshComponent, TuiPullToRefreshModule, TuiPullToRefreshService };
156
242
  //# sourceMappingURL=taiga-ui-addon-mobile-components-pull-to-refresh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-addon-mobile-components-pull-to-refresh.js","sources":["ng://@taiga-ui/addon-mobile/components/pull-to-refresh/loader-android/loader-android.component.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/loader-ios/loader-ios.component.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.providers.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.component.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.module.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/taiga-ui-addon-mobile-components-pull-to-refresh.ts"],"sourcesContent":["import {ChangeDetectionStrategy, Component, HostBinding, Input} from '@angular/core';\n\nconst HIDDEN_DISTANCE = 2;\nconst ROTATE_X_DEFAULT = 180;\nconst ROTATE_X_MAX = 500;\nconst ROTATE_X_MULTIPLIER = 2.3;\n\n@Component({\n selector: 'tui-mobile-android-loader',\n templateUrl: './loader-android.template.html',\n styleUrls: ['./loader-android.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiMobileLoaderAndroidComponent {\n @Input()\n pulled = 0;\n\n get transform(): string {\n const rotateX = Math.min(\n ROTATE_X_DEFAULT + this.pulled * ROTATE_X_MULTIPLIER,\n ROTATE_X_MAX,\n );\n\n return `rotate(${rotateX} 0 0)`;\n }\n\n @HostBinding('class._hidden')\n get hidden(): boolean {\n return this.pulled < HIDDEN_DISTANCE;\n }\n}\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {TuiDestroyService} from '@taiga-ui/cdk';\n\nconst LOADED_STEP = 8;\nconst ROTATE_X_STEP = 30;\n\n@Component({\n selector: 'tui-mobile-ios-loader',\n templateUrl: './loader-ios.template.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TuiDestroyService],\n})\nexport class TuiMobileLoaderIOSComponent {\n @Input()\n pulled = 0;\n\n readonly steps = 12;\n\n get finished(): boolean {\n return this.pulled >= 100;\n }\n\n isShown(index: number): boolean {\n return this.pulled > (index + 1) * LOADED_STEP;\n }\n\n calculateTransform(index: number): string {\n return `rotate(${index * ROTATE_X_STEP} 50 50)`;\n }\n\n calculateAnimationBegin(index: number): string {\n return `${(index * LOADED_STEP) / 100}s`;\n }\n}\n","import {ElementRef, InjectionToken, Provider} from '@angular/core';\nimport {TUI_LOADED} from '@taiga-ui/addon-mobile/tokens';\nimport {TUI_IS_IOS, typedFromEvent} from '@taiga-ui/cdk';\nimport {merge, Observable} from 'rxjs';\nimport {endWith, filter, map, mapTo, scan, switchMap, takeUntil} from 'rxjs/operators';\n\nexport const MICRO_OFFSET = 10 ** -6;\nexport const PULLED_DISTANCE = 50;\n\nexport const TUI_PULLING = new InjectionToken<Observable<number>>(\n `Stream that emits content pulling`,\n);\n\nexport const TUI_PULL_TO_REFRESH_PROVIDERS: Provider[] = [\n {\n provide: TUI_PULLING,\n deps: [TUI_IS_IOS, TUI_LOADED, ElementRef],\n useFactory: pullingFactory,\n },\n];\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function pullingFactory(\n isIOS: boolean,\n loaded$: Observable<unknown>,\n {nativeElement}: ElementRef<HTMLElement>,\n): Observable<number> {\n return merge(\n typedFromEvent(nativeElement, `touchstart`, {passive: true}).pipe(\n filter(() => nativeElement.scrollTop === 0),\n switchMap(touchStart =>\n typedFromEvent(nativeElement, `touchmove`).pipe(\n map(\n touchMove =>\n touchMove.touches[0].clientY - touchStart.touches[0].clientY,\n ),\n takeUntil(typedFromEvent(nativeElement, `touchend`)),\n endWith(0),\n ),\n ),\n ),\n loaded$.pipe(mapTo(NaN)),\n ).pipe(\n scan((max, current) => {\n if (Number.isNaN(current)) {\n return 0;\n }\n\n const androidLoading = !isIOS && max === PULLED_DISTANCE;\n const dropped = current === 0 && max > PULLED_DISTANCE;\n\n return androidLoading || dropped ? PULLED_DISTANCE : current + MICRO_OFFSET;\n }, 0),\n );\n}\n","import {ChangeDetectionStrategy, Component, Inject, Output} from '@angular/core';\nimport {TUI_IS_IOS, tuiPure} from '@taiga-ui/cdk';\nimport {Observable, of} from 'rxjs';\nimport {distinctUntilChanged, filter, map, mapTo} from 'rxjs/operators';\n\nimport {\n MICRO_OFFSET,\n PULLED_DISTANCE,\n TUI_PULL_TO_REFRESH_PROVIDERS,\n TUI_PULLING,\n} from './pull-to-refresh.providers';\n\nconst IOS_LOADING_DISTANCE = PULLED_DISTANCE / 2;\nconst ANDROID_MAX_DISTANCE = PULLED_DISTANCE * 1.5;\n\nfunction translateY(distance: number): string {\n return `translateY(${distance}px)`;\n}\n\n@Component({\n selector: 'tui-pull-to-refresh',\n templateUrl: './pull-to-refresh.template.html',\n styleUrls: ['./pull-to-refresh.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TUI_PULL_TO_REFRESH_PROVIDERS],\n})\nexport class TuiPullToRefreshComponent {\n @Output()\n readonly pulled: Observable<void> = this.pulling$.pipe(\n distinctUntilChanged(),\n filter(distance => distance === PULLED_DISTANCE),\n mapTo(undefined),\n );\n\n readonly pulledInPercent$: Observable<number> = this.pulling$.pipe(\n map(distance => (distance * 100) / PULLED_DISTANCE),\n );\n\n readonly dropped$: Observable<boolean> = this.pulling$.pipe(\n map(distance => distance <= MICRO_OFFSET || distance === PULLED_DISTANCE),\n distinctUntilChanged(),\n );\n\n readonly contentTransform$: Observable<string | null> = this.isIOS\n ? this.pulling$.pipe(\n map(distance =>\n distance === PULLED_DISTANCE ? IOS_LOADING_DISTANCE : distance,\n ),\n map(translateY),\n )\n : of(null);\n\n constructor(\n @Inject(TUI_IS_IOS) readonly isIOS: boolean,\n @Inject(TUI_PULLING) private readonly pulling$: Observable<number>,\n ) {}\n\n @tuiPure\n get loaderTransform$(): Observable<string> {\n return this.pulling$.pipe(\n map(distance => translateY(Math.min(distance, ANDROID_MAX_DISTANCE))),\n );\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiOverscrollModule, TuiRepeatTimesModule} from '@taiga-ui/cdk';\nimport {TuiSvgModule} from '@taiga-ui/core';\n\nimport {TuiMobileLoaderAndroidComponent} from './loader-android/loader-android.component';\nimport {TuiMobileLoaderIOSComponent} from './loader-ios/loader-ios.component';\nimport {TuiPullToRefreshComponent} from './pull-to-refresh.component';\n\n@NgModule({\n imports: [CommonModule, TuiSvgModule, TuiOverscrollModule, TuiRepeatTimesModule],\n declarations: [\n TuiPullToRefreshComponent,\n TuiMobileLoaderAndroidComponent,\n TuiMobileLoaderIOSComponent,\n ],\n exports: [TuiPullToRefreshComponent],\n})\nexport class TuiPullToRefreshModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-addon-mobile-components-pull-to-refresh.js","sources":["ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.tokens.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/loader-ios/loader-ios.component.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.providers.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.service.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/loader-android/loader-android.component.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.component.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/pull-to-refresh.module.ts","ng://@taiga-ui/addon-mobile/components/pull-to-refresh/taiga-ui-addon-mobile-components-pull-to-refresh.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\n/**\n * Pull threshold in pixels until loading starts\n */\n\nexport const TUI_PULL_TO_REFRESH_THRESHOLD = new InjectionToken<number>(\n `[TUI_PULL_TO_REFRESH_THRESHOLD]`,\n {\n factory: () => 50,\n },\n);\n","import {ChangeDetectionStrategy, Component, Inject} from '@angular/core';\nimport {TuiContextWithImplicit} from '@taiga-ui/cdk';\nimport {POLYMORPHEUS_CONTEXT, PolymorpheusComponent} from '@tinkoff/ng-polymorpheus';\n\nimport {TUI_PULL_TO_REFRESH_THRESHOLD} from '../pull-to-refresh.tokens';\n\nconst LOADED_STEP = 8;\nconst ROTATE_X_STEP = 30;\n\n@Component({\n selector: 'tui-mobile-ios-loader',\n templateUrl: './loader-ios.template.html',\n styleUrls: ['./loader-ios.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiMobileLoaderIOSComponent {\n readonly steps = 12;\n\n constructor(\n @Inject(POLYMORPHEUS_CONTEXT)\n private readonly context: TuiContextWithImplicit<number>,\n @Inject(TUI_PULL_TO_REFRESH_THRESHOLD) private readonly threshold: number,\n ) {}\n\n get finished(): boolean {\n return this.percent >= 100;\n }\n\n get percent(): number {\n return (this.context.$implicit * 100) / this.threshold;\n }\n\n isShown(index: number): boolean {\n return this.percent > (index + 1) * LOADED_STEP;\n }\n\n calculateTransform(index: number): string {\n return `rotate(${index * ROTATE_X_STEP} 50 50)`;\n }\n\n calculateAnimationBegin(index: number): string {\n return `${(index * LOADED_STEP) / 100}s`;\n }\n}\n\nexport const TUI_IOS_LOADER = new PolymorpheusComponent(TuiMobileLoaderIOSComponent);\n","import {inject, InjectionToken} from '@angular/core';\nimport {TUI_IS_IOS, TuiContextWithImplicit} from '@taiga-ui/cdk';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\nimport {EMPTY, Observable} from 'rxjs';\n\nimport {TUI_ANDROID_LOADER} from './loader-android/loader-android.component';\nimport {TUI_IOS_LOADER} from './loader-ios/loader-ios.component';\n\n/**\n * Stream that emits when loading is over\n */\nexport const TUI_PULL_TO_REFRESH_LOADED = new InjectionToken<Observable<unknown>>(\n `[TUI_PULL_TO_REFRESH_LOADED]`,\n {\n factory: () => EMPTY,\n },\n);\n\n/**\n * Loading indicator component that gets current pull distance in pixels as context\n */\nexport const TUI_PULL_TO_REFRESH_COMPONENT = new InjectionToken<\n PolymorpheusContent<TuiContextWithImplicit<number>>\n>(`[TUI_PULL_TO_REFRESH_COMPONENT]`, {\n factory: () => (inject(TUI_IS_IOS) ? TUI_IOS_LOADER : TUI_ANDROID_LOADER),\n});\n\n/**\n * @deprecated renamed to {@link TUI_PULL_TO_REFRESH_LOADED}\n */\nexport const TUI_LOADED = TUI_PULL_TO_REFRESH_LOADED;\n","import {ElementRef, Inject, Injectable} from '@angular/core';\nimport {tuiScrollFrom, tuiTypedFromEvent} from '@taiga-ui/cdk';\nimport {TUI_SCROLL_REF} from '@taiga-ui/core';\nimport {EMPTY, Observable} from 'rxjs';\nimport {\n distinctUntilChanged,\n endWith,\n filter,\n map,\n scan,\n share,\n startWith,\n switchMap,\n takeUntil,\n takeWhile,\n tap,\n} from 'rxjs/operators';\n\nimport {\n TUI_PULL_TO_REFRESH_COMPONENT,\n TUI_PULL_TO_REFRESH_LOADED,\n} from './pull-to-refresh.providers';\nimport {TUI_PULL_TO_REFRESH_THRESHOLD} from './pull-to-refresh.tokens';\n\nexport const MICRO_OFFSET = 10 ** -6;\n\n// @dynamic\n@Injectable()\nexport class TuiPullToRefreshService extends Observable<number> {\n // Hack for iOS to determine if pulling stopped due to scroll\n // because Safari does not support `touch-action: pan-down`\n private touched = false;\n\n private readonly pulling$ = this.loaded$.pipe(\n startWith(null),\n switchMap(() =>\n tuiTypedFromEvent(this.element, `touchstart`, {passive: true}).pipe(\n filter(() => !this.scrollTop),\n map(({touches}) => touches[0].clientY),\n switchMap(start =>\n tuiTypedFromEvent(this.element, `touchmove`).pipe(\n tap((): void => {\n this.touched = true;\n }),\n map(({touches}) => touches[0].clientY - start),\n filter(distance => distance > 0),\n takeUntil(\n tuiTypedFromEvent(this.element, `touchend`).pipe(\n tap((): void => {\n this.touched = false;\n }),\n ),\n ),\n takeUntil(tuiScrollFrom(this.scrollRef.nativeElement)),\n endWith(0),\n ),\n ),\n scan(\n (prev, current) =>\n !current && !this.touched && prev > this.threshold\n ? this.threshold\n : current + current * MICRO_OFFSET,\n 0,\n ),\n takeWhile(distance => distance !== this.threshold, true),\n startWith(0),\n ),\n ),\n distinctUntilChanged(),\n share(),\n );\n\n constructor(\n @Inject(ElementRef) private readonly el: ElementRef<HTMLElement>,\n @Inject(TUI_SCROLL_REF) private readonly scrollRef: ElementRef<HTMLElement>,\n @Inject(TUI_PULL_TO_REFRESH_LOADED) private readonly loaded$: Observable<unknown>,\n @Inject(TUI_PULL_TO_REFRESH_THRESHOLD) private readonly threshold: number,\n @Inject(TUI_PULL_TO_REFRESH_COMPONENT) component: unknown,\n ) {\n super(subscriber => (component ? this.pulling$ : EMPTY).subscribe(subscriber));\n }\n\n private get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private get scrollTop(): number {\n return this.scrollRef.nativeElement.scrollTop;\n }\n}\n","import {ChangeDetectionStrategy, Component, HostBinding, Inject} from '@angular/core';\nimport {TuiContextWithImplicit} from '@taiga-ui/cdk';\nimport {POLYMORPHEUS_CONTEXT, PolymorpheusComponent} from '@tinkoff/ng-polymorpheus';\n\nimport {MICRO_OFFSET} from '../pull-to-refresh.service';\nimport {TUI_PULL_TO_REFRESH_THRESHOLD} from '../pull-to-refresh.tokens';\n\nconst ROTATE_X_DEFAULT = 180;\nconst ROTATE_X_MAX = 500;\nconst ROTATE_X_MULTIPLIER = 2.3;\n\n@Component({\n selector: 'tui-mobile-android-loader',\n templateUrl: './loader-android.template.html',\n styleUrls: ['./loader-android.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiMobileLoaderAndroidComponent {\n constructor(\n @Inject(POLYMORPHEUS_CONTEXT)\n private readonly context: TuiContextWithImplicit<number>,\n @Inject(TUI_PULL_TO_REFRESH_THRESHOLD) private readonly threshold: number,\n ) {}\n\n get transform(): string {\n const rotateX = Math.min(\n ROTATE_X_DEFAULT + this.percent * ROTATE_X_MULTIPLIER,\n ROTATE_X_MAX,\n );\n\n return `rotate(${rotateX} 0 0)`;\n }\n\n @HostBinding('class._visible')\n get percent(): number {\n return (this.context.$implicit * 100) / this.threshold;\n }\n\n get opacity(): number {\n return this.context.$implicit / (this.threshold * 1.5);\n }\n\n @HostBinding('class._dropped')\n get dropped(): boolean {\n return (\n this.context.$implicit <= MICRO_OFFSET ||\n this.context.$implicit === this.threshold\n );\n }\n\n @HostBinding('style.transform')\n get hostTransform(): string {\n return `translateY(${Math.min(this.context.$implicit, this.threshold * 1.5)}px)`;\n }\n}\n\nexport const TUI_ANDROID_LOADER = new PolymorpheusComponent(\n TuiMobileLoaderAndroidComponent,\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n Output,\n Self,\n} from '@angular/core';\nimport {\n TUI_IS_IOS,\n TuiContextWithImplicit,\n tuiDefaultProp,\n TuiDestroyService,\n TuiHandler,\n tuiScrollFrom,\n} from '@taiga-ui/cdk';\nimport {TUI_SCROLL_REF} from '@taiga-ui/core';\nimport {PolymorpheusContent} from '@tinkoff/ng-polymorpheus';\nimport {Observable} from 'rxjs';\nimport {distinctUntilChanged, filter, map, startWith, takeUntil} from 'rxjs/operators';\n\nimport {TUI_PULL_TO_REFRESH_COMPONENT} from './pull-to-refresh.providers';\nimport {MICRO_OFFSET, TuiPullToRefreshService} from './pull-to-refresh.service';\nimport {TUI_PULL_TO_REFRESH_THRESHOLD} from './pull-to-refresh.tokens';\n\n@Component({\n selector: 'tui-pull-to-refresh',\n templateUrl: './pull-to-refresh.template.html',\n styleUrls: ['./pull-to-refresh.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TuiPullToRefreshService, TuiDestroyService],\n})\nexport class TuiPullToRefreshComponent {\n @Input()\n @tuiDefaultProp()\n styleHandler: TuiHandler<number, Record<string, any> | null> = this.isIOS\n ? distance => ({transform: `translateY(${distance / 2}px)`})\n : () => null;\n\n @Output()\n readonly pulled: Observable<unknown> = this.pulling$.pipe(\n filter(distance => distance === this.threshold),\n );\n\n readonly dropped$: Observable<boolean> = this.pulling$.pipe(\n map(distance => distance <= MICRO_OFFSET || distance === this.threshold),\n distinctUntilChanged(),\n );\n\n constructor(\n @Inject(TuiDestroyService) @Self() destroy$: Observable<unknown>,\n @Inject(TUI_SCROLL_REF) {nativeElement}: ElementRef<HTMLElement>,\n @Inject(TUI_IS_IOS) private readonly isIOS: boolean,\n @Inject(TUI_PULL_TO_REFRESH_THRESHOLD) private readonly threshold: number,\n @Inject(TUI_PULL_TO_REFRESH_COMPONENT)\n readonly component: PolymorpheusContent<TuiContextWithImplicit<number>>,\n @Inject(TuiPullToRefreshService) readonly pulling$: Observable<number>,\n ) {\n // Ensure scrolling down is impossible while pulling\n tuiScrollFrom(nativeElement)\n .pipe(startWith(null), takeUntil(destroy$))\n .subscribe(() => {\n if (nativeElement.scrollTop) {\n nativeElement.style.touchAction = '';\n } else {\n nativeElement.style.touchAction = 'pan-down';\n }\n });\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TuiRepeatTimesModule} from '@taiga-ui/cdk';\nimport {TuiSvgModule} from '@taiga-ui/core';\nimport {PolymorpheusModule} from '@tinkoff/ng-polymorpheus';\n\nimport {TuiMobileLoaderAndroidComponent} from './loader-android/loader-android.component';\nimport {TuiMobileLoaderIOSComponent} from './loader-ios/loader-ios.component';\nimport {TuiPullToRefreshComponent} from './pull-to-refresh.component';\n\n@NgModule({\n imports: [CommonModule, TuiSvgModule, TuiRepeatTimesModule, PolymorpheusModule],\n declarations: [\n TuiPullToRefreshComponent,\n TuiMobileLoaderAndroidComponent,\n TuiMobileLoaderIOSComponent,\n ],\n exports: [TuiPullToRefreshComponent],\n})\nexport class TuiPullToRefreshModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}