@taiga-ui/addon-table 4.66.0 → 5.0.0-canary.8b64ec1

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 (98) hide show
  1. package/README.md +2 -2
  2. package/components/reorder/reorder.component.d.ts +7 -10
  3. package/components/reorder/reorder.options.d.ts +1 -3
  4. package/components/table/directives/cell.directive.d.ts +2 -2
  5. package/components/table/directives/head.directive.d.ts +2 -2
  6. package/components/table/directives/resized.directive.d.ts +2 -1
  7. package/components/table/directives/sort-by.directive.d.ts +6 -11
  8. package/components/table/directives/sortable.directive.d.ts +6 -8
  9. package/components/table/directives/table.directive.d.ts +9 -23
  10. package/components/table/index.d.ts +0 -2
  11. package/components/table/pipes/table-sort.pipe.d.ts +6 -5
  12. package/components/table/table-expand/table-expand.component.d.ts +4 -6
  13. package/components/table/table.d.ts +1 -2
  14. package/components/table/table.options.d.ts +1 -19
  15. package/components/table/tbody/tbody.component.d.ts +5 -8
  16. package/components/table/td/td.component.d.ts +3 -2
  17. package/components/table/th/th.component.d.ts +8 -8
  18. package/components/table/th-group/th-group.component.d.ts +4 -7
  19. package/components/table/tr/tr.component.d.ts +3 -7
  20. package/components/table-pagination/table-pagination.component.d.ts +14 -19
  21. package/components/table-pagination/table-pagination.options.d.ts +1 -3
  22. package/directives/table-control/checkbox-row.directive.d.ts +2 -2
  23. package/directives/table-control/checkbox-table.directive.d.ts +2 -1
  24. package/directives/table-filters/abstract-table-filter.d.ts +2 -1
  25. package/directives/table-filters/generic-filter.directive.d.ts +2 -2
  26. package/directives/table-filters/table-filter.directive.d.ts +3 -3
  27. package/fesm2022/taiga-ui-addon-table-components-reorder.mjs +37 -50
  28. package/fesm2022/taiga-ui-addon-table-components-reorder.mjs.map +1 -1
  29. package/fesm2022/taiga-ui-addon-table-components-table-pagination.mjs +36 -77
  30. package/fesm2022/taiga-ui-addon-table-components-table-pagination.mjs.map +1 -1
  31. package/fesm2022/taiga-ui-addon-table-components-table.mjs +212 -406
  32. package/fesm2022/taiga-ui-addon-table-components-table.mjs.map +1 -1
  33. package/fesm2022/taiga-ui-addon-table-directives-table-control.mjs +26 -28
  34. package/fesm2022/taiga-ui-addon-table-directives-table-control.mjs.map +1 -1
  35. package/fesm2022/taiga-ui-addon-table-directives-table-filters.mjs +24 -32
  36. package/fesm2022/taiga-ui-addon-table-directives-table-filters.mjs.map +1 -1
  37. package/fesm2022/taiga-ui-addon-table-tokens.mjs.map +1 -1
  38. package/package.json +13 -30
  39. package/tokens/i18n.d.ts +2 -2
  40. package/components/table/directives/direction-order.directive.d.ts +0 -11
  41. package/components/table/providers/table.provider.d.ts +0 -5
  42. package/esm2022/components/index.mjs +0 -4
  43. package/esm2022/components/reorder/index.mjs +0 -3
  44. package/esm2022/components/reorder/reorder.component.mjs +0 -112
  45. package/esm2022/components/reorder/reorder.options.mjs +0 -16
  46. package/esm2022/components/reorder/taiga-ui-addon-table-components-reorder.mjs +0 -5
  47. package/esm2022/components/table/caption/caption.component.mjs +0 -12
  48. package/esm2022/components/table/directives/cell.directive.mjs +0 -21
  49. package/esm2022/components/table/directives/direction-order.directive.mjs +0 -33
  50. package/esm2022/components/table/directives/head.directive.mjs +0 -22
  51. package/esm2022/components/table/directives/resized.directive.mjs +0 -30
  52. package/esm2022/components/table/directives/sort-by.directive.mjs +0 -59
  53. package/esm2022/components/table/directives/sortable.directive.mjs +0 -51
  54. package/esm2022/components/table/directives/stuck.directive.mjs +0 -37
  55. package/esm2022/components/table/directives/table.directive.mjs +0 -133
  56. package/esm2022/components/table/directives/thead.directive.mjs +0 -30
  57. package/esm2022/components/table/index.mjs +0 -21
  58. package/esm2022/components/table/pipes/table-sort.pipe.mjs +0 -31
  59. package/esm2022/components/table/providers/table.provider.mjs +0 -18
  60. package/esm2022/components/table/table-expand/table-expand.component.mjs +0 -66
  61. package/esm2022/components/table/table.mjs +0 -35
  62. package/esm2022/components/table/table.options.mjs +0 -26
  63. package/esm2022/components/table/taiga-ui-addon-table-components-table.mjs +0 -5
  64. package/esm2022/components/table/tbody/tbody.component.mjs +0 -47
  65. package/esm2022/components/table/td/td.component.mjs +0 -22
  66. package/esm2022/components/table/th/th.component.mjs +0 -87
  67. package/esm2022/components/table/th-group/th-group.component.mjs +0 -33
  68. package/esm2022/components/table/tr/tr.component.mjs +0 -40
  69. package/esm2022/components/table-pagination/index.mjs +0 -3
  70. package/esm2022/components/table-pagination/table-pagination.component.mjs +0 -99
  71. package/esm2022/components/table-pagination/table-pagination.options.mjs +0 -21
  72. package/esm2022/components/table-pagination/taiga-ui-addon-table-components-table-pagination.mjs +0 -5
  73. package/esm2022/components/taiga-ui-addon-table-components.mjs +0 -5
  74. package/esm2022/directives/index.mjs +0 -3
  75. package/esm2022/directives/table-control/checkbox-row.directive.mjs +0 -45
  76. package/esm2022/directives/table-control/checkbox-table.directive.mjs +0 -30
  77. package/esm2022/directives/table-control/index.mjs +0 -5
  78. package/esm2022/directives/table-control/table-control.directive.mjs +0 -32
  79. package/esm2022/directives/table-control/table-control.mjs +0 -9
  80. package/esm2022/directives/table-control/taiga-ui-addon-table-directives-table-control.mjs +0 -5
  81. package/esm2022/directives/table-filters/abstract-table-filter.mjs +0 -3
  82. package/esm2022/directives/table-filters/generic-filter.directive.mjs +0 -26
  83. package/esm2022/directives/table-filters/index.mjs +0 -7
  84. package/esm2022/directives/table-filters/table-filter.directive.mjs +0 -44
  85. package/esm2022/directives/table-filters/table-filter.mjs +0 -2
  86. package/esm2022/directives/table-filters/table-filters.directive.mjs +0 -37
  87. package/esm2022/directives/table-filters/table-filters.mjs +0 -11
  88. package/esm2022/directives/table-filters/table-filters.pipe.mjs +0 -22
  89. package/esm2022/directives/table-filters/taiga-ui-addon-table-directives-table-filters.mjs +0 -5
  90. package/esm2022/directives/taiga-ui-addon-table-directives.mjs +0 -5
  91. package/esm2022/index.mjs +0 -4
  92. package/esm2022/taiga-ui-addon-table.mjs +0 -5
  93. package/esm2022/tokens/i18n.mjs +0 -15
  94. package/esm2022/tokens/index.mjs +0 -2
  95. package/esm2022/tokens/taiga-ui-addon-table-tokens.mjs +0 -5
  96. package/esm2022/types/comparator.mjs +0 -2
  97. package/esm2022/types/index.mjs +0 -2
  98. package/esm2022/types/taiga-ui-addon-table-types.mjs +0 -5
@@ -1,13 +1,13 @@
1
- import { AsyncPipe, NgForOf } from '@angular/common';
2
1
  import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, EventEmitter, Component, ChangeDetectionStrategy, Input, Output } from '@angular/core';
2
+ import { linkedSignal, inject, model, input, ChangeDetectionStrategy, Component } from '@angular/core';
4
3
  import { TUI_TABLE_SHOW_HIDE_MESSAGE } from '@taiga-ui/addon-table/tokens';
4
+ import { TUI_STRINGIFY } from '@taiga-ui/cdk/constants';
5
5
  import { TuiButton } from '@taiga-ui/core/components/button';
6
6
  import { TuiIcon } from '@taiga-ui/core/components/icon';
7
7
  import * as i1 from '@taiga-ui/kit/components/tiles';
8
- import { TUI_TILES_REORDER, tuiTilesShift, TuiTiles } from '@taiga-ui/kit/components/tiles';
8
+ import { tuiTilesShift, TUI_TILES_REORDER, TuiTiles } from '@taiga-ui/kit/components/tiles';
9
9
  import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
10
- import { tuiProvideOptions } from '@taiga-ui/cdk/utils/miscellaneous';
10
+ import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
11
11
 
12
12
  const TUI_REORDER_DEFAULT_OPTIONS = {
13
13
  icons: {
@@ -16,30 +16,28 @@ const TUI_REORDER_DEFAULT_OPTIONS = {
16
16
  drag: '@tui.grip-vertical',
17
17
  },
18
18
  };
19
- const TUI_REORDER_OPTIONS = new InjectionToken(ngDevMode ? 'TUI_REORDER_OPTIONS' : '', {
20
- factory: () => TUI_REORDER_DEFAULT_OPTIONS,
21
- });
22
- function tuiReorderOptionsProvider(options) {
23
- return tuiProvideOptions(TUI_REORDER_OPTIONS, options, TUI_REORDER_DEFAULT_OPTIONS);
24
- }
19
+ const [TUI_REORDER_OPTIONS, tuiReorderOptionsProvider] = tuiCreateOptions(TUI_REORDER_DEFAULT_OPTIONS);
25
20
 
26
21
  class TuiReorder {
27
22
  constructor() {
28
23
  this.dragging = false;
29
24
  this.order = new Map();
30
- this.unsortedItems = [];
25
+ this.unsortedItems = linkedSignal({
26
+ source: () => this.items(),
27
+ computation: (items, previous) => {
28
+ const previousUnsortedItems = previous?.value ?? [];
29
+ if (items.length !== previousUnsortedItems.length ||
30
+ !items.every((item) => previousUnsortedItems.includes(item))) {
31
+ return items;
32
+ }
33
+ return previousUnsortedItems;
34
+ },
35
+ });
31
36
  this.options = inject(TUI_REORDER_OPTIONS);
32
- this.showHideText$ = inject(TUI_TABLE_SHOW_HIDE_MESSAGE);
33
- this.enabled = [];
34
- this.itemsChange = new EventEmitter();
35
- this.enabledChange = new EventEmitter();
36
- this.content = ({ $implicit, }) => String($implicit);
37
- }
38
- set items(items) {
39
- if (items.length !== this.unsortedItems.length ||
40
- !items.every((item) => this.unsortedItems.includes(item))) {
41
- this.unsortedItems = items;
42
- }
37
+ this.showHideText = inject(TUI_TABLE_SHOW_HIDE_MESSAGE);
38
+ this.enabled = model([]);
39
+ this.items = model([]);
40
+ this.content = input(TUI_STRINGIFY);
43
41
  }
44
42
  onDrag() {
45
43
  this.dragging = true;
@@ -52,21 +50,21 @@ class TuiReorder {
52
50
  this.updateItems();
53
51
  }
54
52
  isEnabled(item) {
55
- return this.enabled.includes(item);
53
+ return this.enabled().includes(item);
56
54
  }
57
55
  getIcon(item) {
58
56
  return this.isEnabled(item) ? this.options.icons.hide : this.options.icons.show;
59
57
  }
60
58
  toggle(toggled) {
61
- this.enabled = this.isEnabled(toggled)
62
- ? this.enabled.filter((item) => item !== toggled)
63
- : this.enabled.concat(toggled);
59
+ this.enabled.update((enabled) => this.isEnabled(toggled)
60
+ ? enabled.filter((item) => item !== toggled)
61
+ : enabled.concat(toggled));
64
62
  this.updateEnabled();
65
63
  }
66
64
  move(index, direction) {
67
65
  const oldIndex = this.order.get(index) ?? index;
68
66
  if ((!oldIndex && direction < 0) ||
69
- (oldIndex === this.unsortedItems.length - 1 && direction > 0)) {
67
+ (oldIndex === this.unsortedItems().length - 1 && direction > 0)) {
70
68
  return;
71
69
  }
72
70
  const newIndex = oldIndex + direction;
@@ -77,32 +75,31 @@ class TuiReorder {
77
75
  this.updateItems();
78
76
  }
79
77
  getSortedItems() {
80
- const items = new Array(this.unsortedItems.length);
81
- this.unsortedItems.forEach((item, index) => {
78
+ const unsortedItems = this.unsortedItems();
79
+ const items = Array.from({ length: unsortedItems.length });
80
+ unsortedItems.forEach((item, index) => {
82
81
  items[this.order.get(index) ?? index] = item;
83
82
  });
84
83
  return items;
85
84
  }
86
85
  updateItems() {
87
- this.itemsChange.emit(this.getSortedItems());
86
+ this.items.set(this.getSortedItems());
88
87
  this.updateEnabled();
89
88
  }
90
89
  updateEnabled() {
91
- const enabled = this.getSortedItems().filter((item) => this.isEnabled(item));
92
- this.enabled = enabled;
93
- this.enabledChange.emit(enabled);
90
+ this.enabled.set(this.getSortedItems().filter((item) => this.isEnabled(item)));
94
91
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiReorder, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiReorder, isStandalone: true, selector: "tui-reorder", inputs: { enabled: "enabled", items: "items", content: "content" }, outputs: { itemsChange: "itemsChange", enabledChange: "enabledChange" }, host: { listeners: { "focusout.stop": "(0)", "pointerdown.zoneless": "onDrag()", "document:pointerup.zoneless": "onDrop()" } }, providers: [
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TuiReorder, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: TuiReorder, isStandalone: true, selector: "tui-reorder", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { enabled: "enabledChange", items: "itemsChange" }, host: { listeners: { "focusout.stop": "(0)", "pointerdown.zoneless": "onDrag()", "document:pointerup.zoneless": "onDrop()" } }, providers: [
97
94
  {
98
95
  provide: TUI_TILES_REORDER,
99
96
  useValue: tuiTilesShift,
100
97
  },
101
- ], ngImport: i0, template: "<tui-tiles\n class=\"t-wrapper\"\n [(order)]=\"order\"\n>\n <tui-tile\n *ngFor=\"let item of unsortedItems; let index = index\"\n [style.order]=\"order.get(index)\"\n >\n <div\n class=\"t-item\"\n [class.t-item_disabled]=\"!isEnabled(item)\"\n >\n <div\n tuiTileHandle\n class=\"t-draggable\"\n >\n <tui-icon\n class=\"t-icon\"\n [icon]=\"options.icons.drag\"\n />\n <ng-container *polymorpheusOutlet=\"content as template; context: {$implicit: item, index: index}\">\n {{ template }}\n </ng-container>\n </div>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [iconStart]=\"getIcon(item)\"\n (click)=\"toggle(item)\"\n (keydown.arrowDown.prevent)=\"move(index, 1)\"\n (keydown.arrowUp.prevent)=\"move(index, -1)\"\n >\n {{ showHideText$ | async }}\n </button>\n </div>\n </tui-tile>\n</tui-tiles>\n", styles: [":host{display:block;font:var(--tui-font-text-s);padding:.5rem 0;-webkit-user-select:none;user-select:none}.t-wrapper{grid-auto-rows:2rem}.t-draggable{cursor:ns-resize;flex:1 1 auto}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:flex;block-size:2rem;align-items:center;padding:0 .75rem;background:var(--tui-background-base)}.t-item_disabled{opacity:var(--tui-disabled-opacity)}.t-item_disabled .t-button{color:var(--tui-text-primary);opacity:1}.t-item:hover{background:var(--tui-background-base-alt)}.t-item:hover .t-button{opacity:1}.t-icon{margin-inline-end:.5rem;color:var(--tui-text-tertiary);border-width:.25rem}.t-button{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;margin-inline-start:auto;opacity:0}.t-button:focus{opacity:1}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "component", type: i1.TuiTilesComponent, selector: "tui-tiles", inputs: ["debounce", "order"], outputs: ["orderChange"] }, { kind: "component", type: i1.TuiTile, selector: "tui-tile", inputs: ["width", "height"] }, { kind: "directive", type: i1.TuiTileHandle, selector: "[tuiTileHandle]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
98
+ ], ngImport: i0, template: "<tui-tiles\n class=\"t-wrapper\"\n [(order)]=\"order\"\n>\n @for (item of unsortedItems(); track item) {\n <tui-tile [style.order]=\"order.get($index)\">\n <div\n class=\"t-item\"\n [class.t-item_disabled]=\"!isEnabled(item)\"\n >\n <div\n tuiTileHandle\n class=\"t-draggable\"\n >\n <tui-icon\n class=\"t-icon\"\n [icon]=\"options.icons.drag\"\n />\n <ng-container\n *polymorpheusOutlet=\"content() as template; context: {$implicit: item, index: $index}\"\n >\n {{ template }}\n </ng-container>\n </div>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [iconStart]=\"getIcon(item)\"\n (click)=\"toggle(item)\"\n (keydown.arrowDown.prevent)=\"move($index, 1)\"\n (keydown.arrowUp.prevent)=\"move($index, -1)\"\n >\n {{ showHideText() }}\n </button>\n </div>\n </tui-tile>\n }\n</tui-tiles>\n", styles: [":host{display:block;font:var(--tui-font-body-s);padding:.5rem 0;-webkit-user-select:none;user-select:none}.t-wrapper{grid-auto-rows:2rem}.t-draggable{cursor:ns-resize;flex:1 1 auto}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:flex;block-size:2rem;align-items:center;padding:0 .75rem;background:var(--tui-background-base)}.t-item_disabled{opacity:var(--tui-disabled-opacity)}.t-item_disabled .t-button{color:var(--tui-text-primary);opacity:1}.t-item:hover{background:var(--tui-background-base-alt)}.t-item:hover .t-button{opacity:1}.t-icon{margin-inline-end:.5rem;color:var(--tui-text-tertiary)}.t-icon:before{font-size:1rem}.t-button{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;margin-inline-start:auto;opacity:0}.t-button:focus{opacity:1}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "component", type: i1.TuiTilesComponent, selector: "tui-tiles", inputs: ["debounce", "order"], outputs: ["orderChange"] }, { kind: "component", type: i1.TuiTile, selector: "tui-tile", inputs: ["width", "height"] }, { kind: "directive", type: i1.TuiTileHandle, selector: "[tuiTileHandle]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
102
99
  }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiReorder, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TuiReorder, decorators: [{
104
101
  type: Component,
105
- args: [{ standalone: true, selector: 'tui-reorder', imports: [AsyncPipe, NgForOf, PolymorpheusOutlet, TuiButton, TuiIcon, TuiTiles], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
102
+ args: [{ selector: 'tui-reorder', imports: [PolymorpheusOutlet, TuiButton, TuiIcon, TuiTiles], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
106
103
  {
107
104
  provide: TUI_TILES_REORDER,
108
105
  useValue: tuiTilesShift,
@@ -111,18 +108,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
111
108
  '(focusout.stop)': '(0)',
112
109
  '(pointerdown.zoneless)': 'onDrag()',
113
110
  '(document:pointerup.zoneless)': 'onDrop()',
114
- }, template: "<tui-tiles\n class=\"t-wrapper\"\n [(order)]=\"order\"\n>\n <tui-tile\n *ngFor=\"let item of unsortedItems; let index = index\"\n [style.order]=\"order.get(index)\"\n >\n <div\n class=\"t-item\"\n [class.t-item_disabled]=\"!isEnabled(item)\"\n >\n <div\n tuiTileHandle\n class=\"t-draggable\"\n >\n <tui-icon\n class=\"t-icon\"\n [icon]=\"options.icons.drag\"\n />\n <ng-container *polymorpheusOutlet=\"content as template; context: {$implicit: item, index: index}\">\n {{ template }}\n </ng-container>\n </div>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [iconStart]=\"getIcon(item)\"\n (click)=\"toggle(item)\"\n (keydown.arrowDown.prevent)=\"move(index, 1)\"\n (keydown.arrowUp.prevent)=\"move(index, -1)\"\n >\n {{ showHideText$ | async }}\n </button>\n </div>\n </tui-tile>\n</tui-tiles>\n", styles: [":host{display:block;font:var(--tui-font-text-s);padding:.5rem 0;-webkit-user-select:none;user-select:none}.t-wrapper{grid-auto-rows:2rem}.t-draggable{cursor:ns-resize;flex:1 1 auto}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:flex;block-size:2rem;align-items:center;padding:0 .75rem;background:var(--tui-background-base)}.t-item_disabled{opacity:var(--tui-disabled-opacity)}.t-item_disabled .t-button{color:var(--tui-text-primary);opacity:1}.t-item:hover{background:var(--tui-background-base-alt)}.t-item:hover .t-button{opacity:1}.t-icon{margin-inline-end:.5rem;color:var(--tui-text-tertiary);border-width:.25rem}.t-button{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;margin-inline-start:auto;opacity:0}.t-button:focus{opacity:1}\n"] }]
115
- }], propDecorators: { enabled: [{
116
- type: Input
117
- }], itemsChange: [{
118
- type: Output
119
- }], enabledChange: [{
120
- type: Output
121
- }], items: [{
122
- type: Input
123
- }], content: [{
124
- type: Input
125
- }] } });
111
+ }, template: "<tui-tiles\n class=\"t-wrapper\"\n [(order)]=\"order\"\n>\n @for (item of unsortedItems(); track item) {\n <tui-tile [style.order]=\"order.get($index)\">\n <div\n class=\"t-item\"\n [class.t-item_disabled]=\"!isEnabled(item)\"\n >\n <div\n tuiTileHandle\n class=\"t-draggable\"\n >\n <tui-icon\n class=\"t-icon\"\n [icon]=\"options.icons.drag\"\n />\n <ng-container\n *polymorpheusOutlet=\"content() as template; context: {$implicit: item, index: $index}\"\n >\n {{ template }}\n </ng-container>\n </div>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [iconStart]=\"getIcon(item)\"\n (click)=\"toggle(item)\"\n (keydown.arrowDown.prevent)=\"move($index, 1)\"\n (keydown.arrowUp.prevent)=\"move($index, -1)\"\n >\n {{ showHideText() }}\n </button>\n </div>\n </tui-tile>\n }\n</tui-tiles>\n", styles: [":host{display:block;font:var(--tui-font-body-s);padding:.5rem 0;-webkit-user-select:none;user-select:none}.t-wrapper{grid-auto-rows:2rem}.t-draggable{cursor:ns-resize;flex:1 1 auto}.t-item{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;display:flex;block-size:2rem;align-items:center;padding:0 .75rem;background:var(--tui-background-base)}.t-item_disabled{opacity:var(--tui-disabled-opacity)}.t-item_disabled .t-button{color:var(--tui-text-primary);opacity:1}.t-item:hover{background:var(--tui-background-base-alt)}.t-item:hover .t-button{opacity:1}.t-icon{margin-inline-end:.5rem;color:var(--tui-text-tertiary)}.t-icon:before{font-size:1rem}.t-button{transition-property:opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;margin-inline-start:auto;opacity:0}.t-button:focus{opacity:1}\n"] }]
112
+ }] });
126
113
 
127
114
  /**
128
115
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-addon-table-components-reorder.mjs","sources":["../../../projects/addon-table/components/reorder/reorder.options.ts","../../../projects/addon-table/components/reorder/reorder.component.ts","../../../projects/addon-table/components/reorder/reorder.template.html","../../../projects/addon-table/components/reorder/taiga-ui-addon-table-components-reorder.ts"],"sourcesContent":["import {InjectionToken, type Provider} from '@angular/core';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport interface TuiReorderOptions {\n readonly icons: {\n readonly drag: string;\n readonly hide: string;\n readonly show: string;\n };\n}\n\nexport const TUI_REORDER_DEFAULT_OPTIONS: TuiReorderOptions = {\n icons: {\n hide: '@tui.eye-off',\n show: '@tui.eye',\n drag: '@tui.grip-vertical',\n },\n};\n\nexport const TUI_REORDER_OPTIONS = new InjectionToken(\n ngDevMode ? 'TUI_REORDER_OPTIONS' : '',\n {\n factory: () => TUI_REORDER_DEFAULT_OPTIONS,\n },\n);\n\nexport function tuiReorderOptionsProvider(options: Partial<TuiReorderOptions>): Provider {\n return tuiProvideOptions(TUI_REORDER_OPTIONS, options, TUI_REORDER_DEFAULT_OPTIONS);\n}\n","import {AsyncPipe, NgForOf} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n} from '@angular/core';\nimport {TUI_TABLE_SHOW_HIDE_MESSAGE} from '@taiga-ui/addon-table/tokens';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {TUI_TILES_REORDER, TuiTiles, tuiTilesShift} from '@taiga-ui/kit/components/tiles';\nimport {type PolymorpheusContent, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {TUI_REORDER_OPTIONS} from './reorder.options';\n\n@Component({\n standalone: true,\n selector: 'tui-reorder',\n imports: [AsyncPipe, NgForOf, PolymorpheusOutlet, TuiButton, TuiIcon, TuiTiles],\n templateUrl: './reorder.template.html',\n styleUrls: ['./reorder.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TUI_TILES_REORDER,\n useValue: tuiTilesShift,\n },\n ],\n host: {\n '(focusout.stop)': '(0)',\n '(pointerdown.zoneless)': 'onDrag()',\n '(document:pointerup.zoneless)': 'onDrop()',\n },\n})\nexport class TuiReorder<T> {\n private dragging = false;\n\n protected order = new Map<number, number>();\n protected unsortedItems: readonly T[] = [];\n protected readonly options = inject(TUI_REORDER_OPTIONS);\n protected readonly showHideText$ = inject(TUI_TABLE_SHOW_HIDE_MESSAGE);\n\n @Input()\n public enabled: readonly T[] = [];\n\n @Output()\n public readonly itemsChange = new EventEmitter<T[]>();\n\n @Output()\n public readonly enabledChange = new EventEmitter<T[]>();\n\n @Input()\n public set items(items: readonly T[]) {\n if (\n items.length !== this.unsortedItems.length ||\n !items.every((item) => this.unsortedItems.includes(item))\n ) {\n this.unsortedItems = items;\n }\n }\n\n @Input()\n public content: PolymorpheusContent<TuiContext<T> & {index: number}> = ({\n $implicit,\n }) => String($implicit);\n\n protected onDrag(): void {\n this.dragging = true;\n }\n\n protected onDrop(): void {\n if (!this.dragging) {\n return;\n }\n\n this.dragging = false;\n this.updateItems();\n }\n\n protected isEnabled(item: T): boolean {\n return this.enabled.includes(item);\n }\n\n protected getIcon(item: T): string {\n return this.isEnabled(item) ? this.options.icons.hide : this.options.icons.show;\n }\n\n protected toggle(toggled: T): void {\n this.enabled = this.isEnabled(toggled)\n ? this.enabled.filter((item) => item !== toggled)\n : this.enabled.concat(toggled);\n\n this.updateEnabled();\n }\n\n protected move(index: number, direction: number): void {\n const oldIndex = this.order.get(index) ?? index;\n\n if (\n (!oldIndex && direction < 0) ||\n (oldIndex === this.unsortedItems.length - 1 && direction > 0)\n ) {\n return;\n }\n\n const newIndex = oldIndex + direction;\n const oldItem = Array.from(this.order.values()).findIndex(\n (item) => item === newIndex,\n );\n\n this.order.set(index, newIndex);\n this.order.set(oldItem, oldIndex);\n this.order = new Map(this.order);\n\n this.updateItems();\n }\n\n private getSortedItems(): T[] {\n const items = new Array(this.unsortedItems.length);\n\n this.unsortedItems.forEach((item, index) => {\n items[this.order.get(index) ?? index] = item;\n });\n\n return items;\n }\n\n private updateItems(): void {\n this.itemsChange.emit(this.getSortedItems());\n this.updateEnabled();\n }\n\n private updateEnabled(): void {\n const enabled = this.getSortedItems().filter((item) => this.isEnabled(item));\n\n this.enabled = enabled;\n this.enabledChange.emit(enabled);\n }\n}\n","<tui-tiles\n class=\"t-wrapper\"\n [(order)]=\"order\"\n>\n <tui-tile\n *ngFor=\"let item of unsortedItems; let index = index\"\n [style.order]=\"order.get(index)\"\n >\n <div\n class=\"t-item\"\n [class.t-item_disabled]=\"!isEnabled(item)\"\n >\n <div\n tuiTileHandle\n class=\"t-draggable\"\n >\n <tui-icon\n class=\"t-icon\"\n [icon]=\"options.icons.drag\"\n />\n <ng-container *polymorpheusOutlet=\"content as template; context: {$implicit: item, index: index}\">\n {{ template }}\n </ng-container>\n </div>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [iconStart]=\"getIcon(item)\"\n (click)=\"toggle(item)\"\n (keydown.arrowDown.prevent)=\"move(index, 1)\"\n (keydown.arrowUp.prevent)=\"move(index, -1)\"\n >\n {{ showHideText$ | async }}\n </button>\n </div>\n </tui-tile>\n</tui-tiles>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AAWa,MAAA,2BAA2B,GAAsB;AAC1D,IAAA,KAAK,EAAE;AACH,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,IAAI,EAAE,oBAAoB;AAC7B,KAAA;EACH;AAEW,MAAA,mBAAmB,GAAG,IAAI,cAAc,CACjD,SAAS,GAAG,qBAAqB,GAAG,EAAE,EACtC;AACI,IAAA,OAAO,EAAE,MAAM,2BAA2B;AAC7C,CAAA,EACH;AAEI,SAAU,yBAAyB,CAAC,OAAmC,EAAA;IACzE,OAAO,iBAAiB,CAAC,mBAAmB,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAC;AACxF;;ACVA,MAmBa,UAAU,CAAA;AAnBvB,IAAA,WAAA,GAAA;QAoBY,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAEf,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClC,IAAa,CAAA,aAAA,GAAiB,EAAE,CAAC;AACxB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACtC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAGhE,IAAO,CAAA,OAAA,GAAiB,EAAE,CAAC;AAGlB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;AAGtC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAO,CAAC;AAajD,QAAA,IAAA,CAAA,OAAO,GAAyD,CAAC,EACpE,SAAS,GACZ,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;AA0E3B,KAAA;IAvFG,IACW,KAAK,CAAC,KAAmB,EAAA;QAChC,IACI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM;AAC1C,YAAA,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAC3D;AACE,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC9B,SAAA;KACJ;IAOS,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACxB;IAES,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAES,IAAA,SAAS,CAAC,IAAO,EAAA;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACtC;AAES,IAAA,OAAO,CAAC,IAAO,EAAA;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;KACnF;AAES,IAAA,MAAM,CAAC,OAAU,EAAA;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAClC,cAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,OAAO,CAAC;cAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAES,IAAI,CAAC,KAAa,EAAE,SAAiB,EAAA;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAEhD,QAAA,IACI,CAAC,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC;AAC3B,aAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,EAC/D;YACE,OAAO;AACV,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CACrD,CAAC,IAAI,KAAK,IAAI,KAAK,QAAQ,CAC9B,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAEO,cAAc,GAAA;QAClB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACvC,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;AACjD,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,KAAK,CAAC;KAChB;IAEO,WAAW,GAAA;QACf,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAEO,aAAa,GAAA;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAE7E,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACpC;+GAvGQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,EAZR,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,aAAa;AAC1B,aAAA;SACJ,EC9BL,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0wCAwCA,EDnBc,MAAA,EAAA,CAAA,u3BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAS,EAAE,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,mHAAE,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,uEAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FAgB3D,UAAU,EAAA,UAAA,EAAA,CAAA;kBAnBtB,SAAS;iCACM,IAAI,EAAA,QAAA,EACN,aAAa,EACd,OAAA,EAAA,CAAC,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,mBAG9D,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,aAAa;AAC1B,yBAAA;qBACJ,EACK,IAAA,EAAA;AACF,wBAAA,iBAAiB,EAAE,KAAK;AACxB,wBAAA,wBAAwB,EAAE,UAAU;AACpC,wBAAA,+BAA+B,EAAE,UAAU;AAC9C,qBAAA,EAAA,QAAA,EAAA,0wCAAA,EAAA,MAAA,EAAA,CAAA,u3BAAA,CAAA,EAAA,CAAA;8BAWM,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIU,WAAW,EAAA,CAAA;sBAD1B,MAAM;gBAIS,aAAa,EAAA,CAAA;sBAD5B,MAAM;gBAII,KAAK,EAAA,CAAA;sBADf,KAAK;gBAWC,OAAO,EAAA,CAAA;sBADb,KAAK;;;AEhEV;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-addon-table-components-reorder.mjs","sources":["../../../projects/addon-table/components/reorder/reorder.options.ts","../../../projects/addon-table/components/reorder/reorder.component.ts","../../../projects/addon-table/components/reorder/reorder.template.html","../../../projects/addon-table/components/reorder/taiga-ui-addon-table-components-reorder.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiReorderOptions {\n readonly icons: {\n readonly drag: string;\n readonly hide: string;\n readonly show: string;\n };\n}\n\nexport const TUI_REORDER_DEFAULT_OPTIONS: TuiReorderOptions = {\n icons: {\n hide: '@tui.eye-off',\n show: '@tui.eye',\n drag: '@tui.grip-vertical',\n },\n};\n\nexport const [TUI_REORDER_OPTIONS, tuiReorderOptionsProvider] = tuiCreateOptions(\n TUI_REORDER_DEFAULT_OPTIONS,\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n linkedSignal,\n model,\n} from '@angular/core';\nimport {TUI_TABLE_SHOW_HIDE_MESSAGE} from '@taiga-ui/addon-table/tokens';\nimport {TUI_STRINGIFY} from '@taiga-ui/cdk/constants';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {TUI_TILES_REORDER, TuiTiles, tuiTilesShift} from '@taiga-ui/kit/components/tiles';\nimport {type PolymorpheusContent, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {TUI_REORDER_OPTIONS} from './reorder.options';\n\n@Component({\n selector: 'tui-reorder',\n imports: [PolymorpheusOutlet, TuiButton, TuiIcon, TuiTiles],\n templateUrl: './reorder.template.html',\n styleUrl: './reorder.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: TUI_TILES_REORDER,\n useValue: tuiTilesShift,\n },\n ],\n host: {\n '(focusout.stop)': '(0)',\n '(pointerdown.zoneless)': 'onDrag()',\n '(document:pointerup.zoneless)': 'onDrop()',\n },\n})\nexport class TuiReorder<T> {\n private dragging = false;\n\n protected order = new Map<number, number>();\n protected readonly unsortedItems = linkedSignal<readonly T[], readonly T[]>({\n source: () => this.items(),\n computation: (items, previous) => {\n const previousUnsortedItems = previous?.value ?? [];\n\n if (\n items.length !== previousUnsortedItems.length ||\n !items.every((item) => previousUnsortedItems.includes(item))\n ) {\n return items;\n }\n\n return previousUnsortedItems;\n },\n });\n\n protected readonly options = inject(TUI_REORDER_OPTIONS);\n protected readonly showHideText = inject(TUI_TABLE_SHOW_HIDE_MESSAGE);\n\n public readonly enabled = model<readonly T[]>([]);\n\n public readonly items = model<readonly T[]>([]);\n\n public readonly content =\n input<PolymorpheusContent<TuiContext<T> & {index: number}>>(TUI_STRINGIFY);\n\n protected onDrag(): void {\n this.dragging = true;\n }\n\n protected onDrop(): void {\n if (!this.dragging) {\n return;\n }\n\n this.dragging = false;\n this.updateItems();\n }\n\n protected isEnabled(item: T): boolean {\n return this.enabled().includes(item);\n }\n\n protected getIcon(item: T): string {\n return this.isEnabled(item) ? this.options.icons.hide : this.options.icons.show;\n }\n\n protected toggle(toggled: T): void {\n this.enabled.update((enabled) =>\n this.isEnabled(toggled)\n ? enabled.filter((item) => item !== toggled)\n : enabled.concat(toggled),\n );\n\n this.updateEnabled();\n }\n\n protected move(index: number, direction: number): void {\n const oldIndex = this.order.get(index) ?? index;\n\n if (\n (!oldIndex && direction < 0) ||\n (oldIndex === this.unsortedItems().length - 1 && direction > 0)\n ) {\n return;\n }\n\n const newIndex = oldIndex + direction;\n const oldItem = Array.from(this.order.values()).findIndex(\n (item) => item === newIndex,\n );\n\n this.order.set(index, newIndex);\n this.order.set(oldItem, oldIndex);\n this.order = new Map(this.order);\n\n this.updateItems();\n }\n\n private getSortedItems(): T[] {\n const unsortedItems = this.unsortedItems();\n const items = Array.from<T>({length: unsortedItems.length});\n\n unsortedItems.forEach((item, index) => {\n items[this.order.get(index) ?? index] = item;\n });\n\n return items;\n }\n\n private updateItems(): void {\n this.items.set(this.getSortedItems());\n this.updateEnabled();\n }\n\n private updateEnabled(): void {\n this.enabled.set(this.getSortedItems().filter((item) => this.isEnabled(item)));\n }\n}\n","<tui-tiles\n class=\"t-wrapper\"\n [(order)]=\"order\"\n>\n @for (item of unsortedItems(); track item) {\n <tui-tile [style.order]=\"order.get($index)\">\n <div\n class=\"t-item\"\n [class.t-item_disabled]=\"!isEnabled(item)\"\n >\n <div\n tuiTileHandle\n class=\"t-draggable\"\n >\n <tui-icon\n class=\"t-icon\"\n [icon]=\"options.icons.drag\"\n />\n <ng-container\n *polymorpheusOutlet=\"content() as template; context: {$implicit: item, index: $index}\"\n >\n {{ template }}\n </ng-container>\n </div>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [iconStart]=\"getIcon(item)\"\n (click)=\"toggle(item)\"\n (keydown.arrowDown.prevent)=\"move($index, 1)\"\n (keydown.arrowUp.prevent)=\"move($index, -1)\"\n >\n {{ showHideText() }}\n </button>\n </div>\n </tui-tile>\n }\n</tui-tiles>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- import { AsyncPipe, NgForOf, NgIf } from '@angular/common';
2
1
  import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, EventEmitter, Component, ChangeDetectionStrategy, Input, Output } from '@angular/core';
2
+ import { inject, computed, input, model, output, ChangeDetectionStrategy, Component } from '@angular/core';
4
3
  import { TUI_TABLE_PAGINATION_TEXTS } from '@taiga-ui/addon-table/tokens';
5
4
  import { TuiButton } from '@taiga-ui/core/components/button';
6
5
  import * as i1 from '@taiga-ui/core/components/data-list';
7
6
  import { TuiDataList } from '@taiga-ui/core/components/data-list';
8
7
  import { TuiIcon } from '@taiga-ui/core/components/icon';
9
8
  import { TuiLink } from '@taiga-ui/core/components/link';
10
- import { TuiDropdownDirective, TuiDropdownOpen } from '@taiga-ui/core/directives/dropdown';
11
- import { TUI_SPIN_ICONS, TUI_SPIN_TEXTS, TUI_COMMON_ICONS } from '@taiga-ui/core/tokens';
9
+ import * as i2 from '@taiga-ui/core/portals/dropdown';
10
+ import { TuiDropdown } from '@taiga-ui/core/portals/dropdown';
11
+ import { TUI_COMMON_ICONS, TUI_SPIN_TEXTS } from '@taiga-ui/core/tokens';
12
12
  import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
13
- import { tuiProvideOptions } from '@taiga-ui/cdk/utils/miscellaneous';
13
+ import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
14
14
 
15
15
  function defaultSizeOptionContent({ $implicit }) {
16
16
  return `${$implicit}`;
@@ -24,97 +24,56 @@ const TUI_TABLE_PAGINATION_DEFAULT_OPTIONS = {
24
24
  /**
25
25
  * Default parameters for TablePagination component
26
26
  */
27
- const TUI_TABLE_PAGINATION_OPTIONS = new InjectionToken(ngDevMode ? 'TUI_TABLE_PAGINATION_OPTIONS' : '', {
28
- factory: () => TUI_TABLE_PAGINATION_DEFAULT_OPTIONS,
29
- });
30
- function tuiTablePaginationOptionsProvider(options) {
31
- return tuiProvideOptions(TUI_TABLE_PAGINATION_OPTIONS, options, TUI_TABLE_PAGINATION_DEFAULT_OPTIONS);
32
- }
27
+ const [TUI_TABLE_PAGINATION_OPTIONS, tuiTablePaginationOptionsProvider] = tuiCreateOptions(TUI_TABLE_PAGINATION_DEFAULT_OPTIONS);
33
28
 
34
29
  class TuiTablePagination {
35
30
  constructor() {
36
31
  this.options = inject(TUI_TABLE_PAGINATION_OPTIONS);
37
- this.open = false;
38
- this.icons = inject(TUI_SPIN_ICONS);
39
- this.spinTexts$ = inject(TUI_SPIN_TEXTS);
40
- this.texts$ = inject(TUI_TABLE_PAGINATION_TEXTS);
41
- this.commonIcons = inject(TUI_COMMON_ICONS);
42
- this.items = this.options.items;
43
- this.total = 0;
44
- this.page = 0;
45
- this.size = this.options.size;
46
- this.paginationChange = new EventEmitter();
32
+ this.icons = inject(TUI_COMMON_ICONS);
33
+ this.spinTexts = inject(TUI_SPIN_TEXTS);
34
+ this.texts = inject(TUI_TABLE_PAGINATION_TEXTS);
35
+ this.pages = computed(() => Math.ceil(this.total() / this.size()));
36
+ this.end = computed(() => Math.min(this.start + this.size(), this.total()));
37
+ this.rightDisabled = computed(() => this.end() === this.total());
38
+ this.pagination = computed(() => {
39
+ return {
40
+ page: this.page(),
41
+ size: this.size(),
42
+ };
43
+ });
44
+ this.items = input(this.options.items);
45
+ this.total = input(0);
46
+ this.page = model(0);
47
+ this.size = model(this.options.size);
48
+ this.paginationChange = output();
47
49
  }
48
50
  onItem(size) {
49
51
  const { start } = this;
50
- this.size = size;
51
- this.open = false;
52
- this.page = Math.floor(start / this.size);
53
- this.paginationChange.emit(this.pagination);
54
- }
55
- get pages() {
56
- return Math.ceil(this.total / this.size);
57
- }
58
- get showPages() {
59
- return this.options.showPages;
52
+ this.size.set(size);
53
+ this.page.set(Math.floor(start / this.size()));
54
+ this.paginationChange.emit(this.pagination());
60
55
  }
61
56
  get sizeOptionContent() {
62
57
  return this.options.sizeOptionContent;
63
58
  }
64
59
  get start() {
65
- return Math.min(this.page, Math.floor(this.total / this.size)) * this.size;
66
- }
67
- get end() {
68
- return Math.min(this.start + this.size, this.total);
69
- }
70
- get leftDisabled() {
71
- return !this.start;
72
- }
73
- get rightDisabled() {
74
- return this.end === this.total;
75
- }
76
- get pagination() {
77
- return {
78
- page: this.page,
79
- size: this.size,
80
- };
60
+ return (Math.min(this.page(), Math.floor(this.total() / this.size())) * this.size());
81
61
  }
82
62
  back() {
83
- this.page--;
84
- this.paginationChange.emit(this.pagination);
63
+ this.page.update((page) => page - 1);
64
+ this.paginationChange.emit(this.pagination());
85
65
  }
86
66
  forth() {
87
- this.page++;
88
- this.paginationChange.emit(this.pagination);
67
+ this.page.update((page) => page + 1);
68
+ this.paginationChange.emit(this.pagination());
89
69
  }
90
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTablePagination, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiTablePagination, isStandalone: true, selector: "tui-table-pagination", inputs: { items: "items", total: "total", page: "page", size: "size" }, outputs: { paginationChange: "paginationChange" }, ngImport: i0, template: "<ng-container *ngIf=\"texts$ | async as texts\">\n <span class=\"t-pages\">\n <ng-container *ngIf=\"showPages\">\n {{ texts.pages }}\n <strong class=\"t-strong\">{{ pages }}</strong>\n </ng-container>\n </span>\n <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n {{ texts.linesPerPage }}\n\n <button\n *ngIf=\"total !== 0; else zeroTotal\"\n tuiLink\n type=\"button\"\n [tuiDropdown]=\"content\"\n [(tuiDropdownOpen)]=\"open\"\n >\n <strong>{{ start + 1 }}\u2013{{ end }}</strong>\n </button>\n <ng-template #zeroTotal>\n <strong>0 - 0</strong>\n </ng-template>\n <ng-template #content>\n <tui-data-list size=\"s\">\n <ng-container *ngFor=\"let item of items\">\n <button\n tuiOption\n type=\"button\"\n class=\"t-item\"\n (click)=\"onItem(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"sizeOptionContent as text; context: {$implicit: item, total: total}\"\n >\n {{ text }}\n </ng-container>\n <tui-icon\n *ngIf=\"item === size; else fakeIcon\"\n class=\"t-checkmark\"\n [icon]=\"commonIcons.check\"\n />\n\n <ng-template #fakeIcon>\n <span class=\"t-checkmark\"></span>\n </ng-template>\n </button>\n </ng-container>\n </tui-data-list>\n </ng-template>\n {{ texts.of }}\n <strong class=\"t-strong\">{{ total }}</strong>\n </span>\n <ng-container *ngIf=\"spinTexts$ | async as spinTexts\">\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button t-button_back\"\n [disabled]=\"leftDisabled\"\n [iconStart]=\"icons.decrement\"\n (click)=\"back()\"\n >\n {{ spinTexts[0] }}\n </button>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [disabled]=\"rightDisabled\"\n [iconStart]=\"icons.increment\"\n (click)=\"forth()\"\n >\n {{ spinTexts[1] }}\n </button>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;font:var(--tui-font-text-s);align-items:center;color:var(--tui-text-tertiary)}.t-strong{color:var(--tui-text-primary)}.t-pages{margin-inline-end:auto}.t-item{min-inline-size:5.5rem;box-sizing:border-box}.t-checkmark{min-inline-size:1rem;font-size:1rem;margin-inline-start:.25rem}.t-button{transform:scaleX(var(--tui-inline))}.t-button_back{margin-inline-end:.25rem;margin-inline-start:1.5rem}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "component", type: i1.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "directive", type: TuiDropdownDirective, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: ["tuiDropdown"], exportAs: ["tuiDropdown"] }, { kind: "directive", type: TuiDropdownOpen, selector: "[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]", inputs: ["tuiDropdownEnabled", "tuiDropdownOpen"], outputs: ["tuiDropdownOpenChange"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TuiTablePagination, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: TuiTablePagination, isStandalone: true, selector: "tui-table-pagination", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { page: "pageChange", size: "sizeChange", paginationChange: "paginationChange" }, ngImport: i0, template: "@if (texts(); as texts) {\n <span class=\"t-pages\">\n @if (options.showPages) {\n {{ texts.pages }}\n <strong class=\"t-strong\">{{ pages() }}</strong>\n }\n </span>\n <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n {{ texts.linesPerPage }}\n @if (total() !== 0) {\n <button\n tuiDropdown\n tuiDropdownAuto\n tuiLink\n type=\"button\"\n >\n <strong>{{ start + 1 }}\u2013{{ end() }}</strong>\n <tui-data-list\n *tuiDropdown=\"let close\"\n size=\"s\"\n >\n @for (item of items(); track item) {\n <button\n tuiOption\n type=\"button\"\n class=\"t-item\"\n (click)=\"close(); onItem(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"\n sizeOptionContent as text;\n context: {$implicit: item, total: total()}\n \"\n >\n {{ text }}\n </ng-container>\n @if (item === size()) {\n <tui-icon\n class=\"t-checkmark\"\n [icon]=\"icons.check\"\n />\n } @else {\n <span class=\"t-checkmark\"></span>\n }\n </button>\n }\n </tui-data-list>\n </button>\n } @else {\n <strong>0 - 0</strong>\n }\n {{ texts.of }}\n <strong class=\"t-strong\">{{ total() }}</strong>\n </span>\n @if (spinTexts(); as spinTexts) {\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button t-button_back\"\n [disabled]=\"!start\"\n [iconStart]=\"icons.decrement\"\n (click)=\"back()\"\n >\n {{ spinTexts[0] }}\n </button>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [disabled]=\"rightDisabled()\"\n [iconStart]=\"icons.increment\"\n (click)=\"forth()\"\n >\n {{ spinTexts[1] }}\n </button>\n }\n}\n", styles: [":host{display:flex;font:var(--tui-font-body-s);align-items:center;color:var(--tui-text-tertiary)}.t-strong{color:var(--tui-text-primary)}.t-pages{margin-inline-end:auto}.t-item{min-inline-size:5.5rem;box-sizing:border-box}.t-checkmark{min-inline-size:1rem;font-size:1rem;margin-inline-start:auto}.t-button{transform:scaleX(var(--tui-inline))}.t-button_back{margin-inline-end:.25rem;margin-inline-start:1.5rem}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: i1.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i1.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: i2.TuiDropdownDirective, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: ["tuiDropdown"], exportAs: ["tuiDropdown"] }, { kind: "directive", type: i2.TuiDropdownOpen, selector: "[tuiDropdown][tuiDropdownAuto],[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]", inputs: ["tuiDropdownEnabled", "tuiDropdownOpen"], outputs: ["tuiDropdownOpenChange"] }, { kind: "directive", type: i2.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
72
  }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTablePagination, decorators: [{
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: TuiTablePagination, decorators: [{
94
74
  type: Component,
95
- args: [{ standalone: true, selector: 'tui-table-pagination', imports: [
96
- AsyncPipe,
97
- NgForOf,
98
- NgIf,
99
- PolymorpheusOutlet,
100
- TuiButton,
101
- TuiDataList,
102
- TuiDropdownDirective,
103
- TuiDropdownOpen,
104
- TuiIcon,
105
- TuiLink,
106
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"texts$ | async as texts\">\n <span class=\"t-pages\">\n <ng-container *ngIf=\"showPages\">\n {{ texts.pages }}\n <strong class=\"t-strong\">{{ pages }}</strong>\n </ng-container>\n </span>\n <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n {{ texts.linesPerPage }}\n\n <button\n *ngIf=\"total !== 0; else zeroTotal\"\n tuiLink\n type=\"button\"\n [tuiDropdown]=\"content\"\n [(tuiDropdownOpen)]=\"open\"\n >\n <strong>{{ start + 1 }}\u2013{{ end }}</strong>\n </button>\n <ng-template #zeroTotal>\n <strong>0 - 0</strong>\n </ng-template>\n <ng-template #content>\n <tui-data-list size=\"s\">\n <ng-container *ngFor=\"let item of items\">\n <button\n tuiOption\n type=\"button\"\n class=\"t-item\"\n (click)=\"onItem(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"sizeOptionContent as text; context: {$implicit: item, total: total}\"\n >\n {{ text }}\n </ng-container>\n <tui-icon\n *ngIf=\"item === size; else fakeIcon\"\n class=\"t-checkmark\"\n [icon]=\"commonIcons.check\"\n />\n\n <ng-template #fakeIcon>\n <span class=\"t-checkmark\"></span>\n </ng-template>\n </button>\n </ng-container>\n </tui-data-list>\n </ng-template>\n {{ texts.of }}\n <strong class=\"t-strong\">{{ total }}</strong>\n </span>\n <ng-container *ngIf=\"spinTexts$ | async as spinTexts\">\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button t-button_back\"\n [disabled]=\"leftDisabled\"\n [iconStart]=\"icons.decrement\"\n (click)=\"back()\"\n >\n {{ spinTexts[0] }}\n </button>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [disabled]=\"rightDisabled\"\n [iconStart]=\"icons.increment\"\n (click)=\"forth()\"\n >\n {{ spinTexts[1] }}\n </button>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;font:var(--tui-font-text-s);align-items:center;color:var(--tui-text-tertiary)}.t-strong{color:var(--tui-text-primary)}.t-pages{margin-inline-end:auto}.t-item{min-inline-size:5.5rem;box-sizing:border-box}.t-checkmark{min-inline-size:1rem;font-size:1rem;margin-inline-start:.25rem}.t-button{transform:scaleX(var(--tui-inline))}.t-button_back{margin-inline-end:.25rem;margin-inline-start:1.5rem}\n"] }]
107
- }], propDecorators: { items: [{
108
- type: Input
109
- }], total: [{
110
- type: Input
111
- }], page: [{
112
- type: Input
113
- }], size: [{
114
- type: Input
115
- }], paginationChange: [{
116
- type: Output
117
- }] } });
75
+ args: [{ selector: 'tui-table-pagination', imports: [PolymorpheusOutlet, TuiButton, TuiDataList, TuiDropdown, TuiIcon, TuiLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (texts(); as texts) {\n <span class=\"t-pages\">\n @if (options.showPages) {\n {{ texts.pages }}\n <strong class=\"t-strong\">{{ pages() }}</strong>\n }\n </span>\n <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n {{ texts.linesPerPage }}\n @if (total() !== 0) {\n <button\n tuiDropdown\n tuiDropdownAuto\n tuiLink\n type=\"button\"\n >\n <strong>{{ start + 1 }}\u2013{{ end() }}</strong>\n <tui-data-list\n *tuiDropdown=\"let close\"\n size=\"s\"\n >\n @for (item of items(); track item) {\n <button\n tuiOption\n type=\"button\"\n class=\"t-item\"\n (click)=\"close(); onItem(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"\n sizeOptionContent as text;\n context: {$implicit: item, total: total()}\n \"\n >\n {{ text }}\n </ng-container>\n @if (item === size()) {\n <tui-icon\n class=\"t-checkmark\"\n [icon]=\"icons.check\"\n />\n } @else {\n <span class=\"t-checkmark\"></span>\n }\n </button>\n }\n </tui-data-list>\n </button>\n } @else {\n <strong>0 - 0</strong>\n }\n {{ texts.of }}\n <strong class=\"t-strong\">{{ total() }}</strong>\n </span>\n @if (spinTexts(); as spinTexts) {\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button t-button_back\"\n [disabled]=\"!start\"\n [iconStart]=\"icons.decrement\"\n (click)=\"back()\"\n >\n {{ spinTexts[0] }}\n </button>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [disabled]=\"rightDisabled()\"\n [iconStart]=\"icons.increment\"\n (click)=\"forth()\"\n >\n {{ spinTexts[1] }}\n </button>\n }\n}\n", styles: [":host{display:flex;font:var(--tui-font-body-s);align-items:center;color:var(--tui-text-tertiary)}.t-strong{color:var(--tui-text-primary)}.t-pages{margin-inline-end:auto}.t-item{min-inline-size:5.5rem;box-sizing:border-box}.t-checkmark{min-inline-size:1rem;font-size:1rem;margin-inline-start:auto}.t-button{transform:scaleX(var(--tui-inline))}.t-button_back{margin-inline-end:.25rem;margin-inline-start:1.5rem}\n"] }]
76
+ }] });
118
77
 
119
78
  /**
120
79
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-addon-table-components-table-pagination.mjs","sources":["../../../projects/addon-table/components/table-pagination/table-pagination.options.ts","../../../projects/addon-table/components/table-pagination/table-pagination.component.ts","../../../projects/addon-table/components/table-pagination/table-pagination.template.html","../../../projects/addon-table/components/table-pagination/taiga-ui-addon-table-components-table-pagination.ts"],"sourcesContent":["import {InjectionToken, type Provider} from '@angular/core';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nfunction defaultSizeOptionContent({$implicit}: TuiContext<number>): string {\n return `${$implicit}`;\n}\n\nexport interface TuiTablePaginationOptions {\n readonly items: readonly number[];\n readonly showPages: boolean;\n readonly size: number;\n readonly sizeOptionContent: PolymorpheusContent<TuiContext<number> & {total: number}>;\n}\n\nexport const TUI_TABLE_PAGINATION_DEFAULT_OPTIONS: TuiTablePaginationOptions = {\n sizeOptionContent: defaultSizeOptionContent,\n showPages: true,\n items: [10, 20, 50, 100],\n size: 10,\n};\n\n/**\n * Default parameters for TablePagination component\n */\nexport const TUI_TABLE_PAGINATION_OPTIONS = new InjectionToken(\n ngDevMode ? 'TUI_TABLE_PAGINATION_OPTIONS' : '',\n {\n factory: () => TUI_TABLE_PAGINATION_DEFAULT_OPTIONS,\n },\n);\n\nexport function tuiTablePaginationOptionsProvider(\n options: Partial<TuiTablePaginationOptions>,\n): Provider {\n return tuiProvideOptions(\n TUI_TABLE_PAGINATION_OPTIONS,\n options,\n TUI_TABLE_PAGINATION_DEFAULT_OPTIONS,\n );\n}\n","import {AsyncPipe, NgForOf, NgIf} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n} from '@angular/core';\nimport {TUI_TABLE_PAGINATION_TEXTS} from '@taiga-ui/addon-table/tokens';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiDataList} from '@taiga-ui/core/components/data-list';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiDropdownDirective, TuiDropdownOpen} from '@taiga-ui/core/directives/dropdown';\nimport {TUI_COMMON_ICONS, TUI_SPIN_ICONS, TUI_SPIN_TEXTS} from '@taiga-ui/core/tokens';\nimport {PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {\n TUI_TABLE_PAGINATION_OPTIONS,\n type TuiTablePaginationOptions,\n} from './table-pagination.options';\n\nexport interface TuiTablePaginationEvent {\n readonly page: number;\n readonly size: number;\n}\n\n@Component({\n standalone: true,\n selector: 'tui-table-pagination',\n imports: [\n AsyncPipe,\n NgForOf,\n NgIf,\n PolymorpheusOutlet,\n TuiButton,\n TuiDataList,\n TuiDropdownDirective,\n TuiDropdownOpen,\n TuiIcon,\n TuiLink,\n ],\n templateUrl: './table-pagination.template.html',\n styleUrls: ['./table-pagination.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiTablePagination {\n private readonly options = inject(TUI_TABLE_PAGINATION_OPTIONS);\n\n protected open = false;\n protected readonly icons = inject(TUI_SPIN_ICONS);\n protected readonly spinTexts$ = inject(TUI_SPIN_TEXTS);\n protected readonly texts$ = inject(TUI_TABLE_PAGINATION_TEXTS);\n protected readonly commonIcons = inject(TUI_COMMON_ICONS);\n\n @Input()\n public items: readonly number[] = this.options.items;\n\n @Input()\n public total = 0;\n\n @Input()\n public page = 0;\n\n @Input()\n public size = this.options.size;\n\n @Output()\n public readonly paginationChange = new EventEmitter<TuiTablePaginationEvent>();\n\n public onItem(size: number): void {\n const {start} = this;\n\n this.size = size;\n this.open = false;\n this.page = Math.floor(start / this.size);\n this.paginationChange.emit(this.pagination);\n }\n\n protected get pages(): number {\n return Math.ceil(this.total / this.size);\n }\n\n protected get showPages(): boolean {\n return this.options.showPages;\n }\n\n protected get sizeOptionContent(): TuiTablePaginationOptions['sizeOptionContent'] {\n return this.options.sizeOptionContent;\n }\n\n protected get start(): number {\n return Math.min(this.page, Math.floor(this.total / this.size)) * this.size;\n }\n\n protected get end(): number {\n return Math.min(this.start + this.size, this.total);\n }\n\n protected get leftDisabled(): boolean {\n return !this.start;\n }\n\n protected get rightDisabled(): boolean {\n return this.end === this.total;\n }\n\n protected get pagination(): TuiTablePaginationEvent {\n return {\n page: this.page,\n size: this.size,\n };\n }\n\n protected back(): void {\n this.page--;\n this.paginationChange.emit(this.pagination);\n }\n\n protected forth(): void {\n this.page++;\n this.paginationChange.emit(this.pagination);\n }\n}\n","<ng-container *ngIf=\"texts$ | async as texts\">\n <span class=\"t-pages\">\n <ng-container *ngIf=\"showPages\">\n {{ texts.pages }}\n <strong class=\"t-strong\">{{ pages }}</strong>\n </ng-container>\n </span>\n <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n {{ texts.linesPerPage }}\n\n <button\n *ngIf=\"total !== 0; else zeroTotal\"\n tuiLink\n type=\"button\"\n [tuiDropdown]=\"content\"\n [(tuiDropdownOpen)]=\"open\"\n >\n <strong>{{ start + 1 }}–{{ end }}</strong>\n </button>\n <ng-template #zeroTotal>\n <strong>0 - 0</strong>\n </ng-template>\n <ng-template #content>\n <tui-data-list size=\"s\">\n <ng-container *ngFor=\"let item of items\">\n <button\n tuiOption\n type=\"button\"\n class=\"t-item\"\n (click)=\"onItem(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"sizeOptionContent as text; context: {$implicit: item, total: total}\"\n >\n {{ text }}\n </ng-container>\n <tui-icon\n *ngIf=\"item === size; else fakeIcon\"\n class=\"t-checkmark\"\n [icon]=\"commonIcons.check\"\n />\n\n <ng-template #fakeIcon>\n <span class=\"t-checkmark\"></span>\n </ng-template>\n </button>\n </ng-container>\n </tui-data-list>\n </ng-template>\n {{ texts.of }}\n <strong class=\"t-strong\">{{ total }}</strong>\n </span>\n <ng-container *ngIf=\"spinTexts$ | async as spinTexts\">\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button t-button_back\"\n [disabled]=\"leftDisabled\"\n [iconStart]=\"icons.decrement\"\n (click)=\"back()\"\n >\n {{ spinTexts[0] }}\n </button>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [disabled]=\"rightDisabled\"\n [iconStart]=\"icons.increment\"\n (click)=\"forth()\"\n >\n {{ spinTexts[1] }}\n </button>\n </ng-container>\n</ng-container>\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-table-components-table-pagination.mjs","sources":["../../../projects/addon-table/components/table-pagination/table-pagination.options.ts","../../../projects/addon-table/components/table-pagination/table-pagination.component.ts","../../../projects/addon-table/components/table-pagination/table-pagination.template.html","../../../projects/addon-table/components/table-pagination/taiga-ui-addon-table-components-table-pagination.ts"],"sourcesContent":["import {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nfunction defaultSizeOptionContent({$implicit}: TuiContext<number>): string {\n return `${$implicit}`;\n}\n\nexport interface TuiTablePaginationOptions {\n readonly items: readonly number[];\n readonly showPages: boolean;\n readonly size: number;\n readonly sizeOptionContent: PolymorpheusContent<TuiContext<number> & {total: number}>;\n}\n\nexport const TUI_TABLE_PAGINATION_DEFAULT_OPTIONS: TuiTablePaginationOptions = {\n sizeOptionContent: defaultSizeOptionContent,\n showPages: true,\n items: [10, 20, 50, 100],\n size: 10,\n};\n\n/**\n * Default parameters for TablePagination component\n */\nexport const [TUI_TABLE_PAGINATION_OPTIONS, tuiTablePaginationOptionsProvider] =\n tuiCreateOptions(TUI_TABLE_PAGINATION_DEFAULT_OPTIONS);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport {TUI_TABLE_PAGINATION_TEXTS} from '@taiga-ui/addon-table/tokens';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiDataList} from '@taiga-ui/core/components/data-list';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {TuiLink} from '@taiga-ui/core/components/link';\nimport {TuiDropdown} from '@taiga-ui/core/portals/dropdown';\nimport {TUI_COMMON_ICONS, TUI_SPIN_TEXTS} from '@taiga-ui/core/tokens';\nimport {PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {\n TUI_TABLE_PAGINATION_OPTIONS,\n type TuiTablePaginationOptions,\n} from './table-pagination.options';\n\nexport interface TuiTablePaginationEvent {\n readonly page: number;\n readonly size: number;\n}\n\n@Component({\n selector: 'tui-table-pagination',\n imports: [PolymorpheusOutlet, TuiButton, TuiDataList, TuiDropdown, TuiIcon, TuiLink],\n templateUrl: './table-pagination.template.html',\n styleUrl: './table-pagination.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiTablePagination {\n protected readonly options = inject(TUI_TABLE_PAGINATION_OPTIONS);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly spinTexts = inject(TUI_SPIN_TEXTS);\n protected readonly texts = inject(TUI_TABLE_PAGINATION_TEXTS);\n protected readonly pages = computed(() => Math.ceil(this.total() / this.size()));\n protected readonly end = computed(() =>\n Math.min(this.start + this.size(), this.total()),\n );\n\n protected readonly rightDisabled = computed(() => this.end() === this.total());\n protected readonly pagination = computed<TuiTablePaginationEvent>(() => {\n return {\n page: this.page(),\n size: this.size(),\n };\n });\n\n public readonly items = input<readonly number[]>(this.options.items);\n public readonly total = input(0);\n public readonly page = model(0);\n public readonly size = model(this.options.size);\n public readonly paginationChange = output<TuiTablePaginationEvent>();\n\n public onItem(size: number): void {\n const {start} = this;\n\n this.size.set(size);\n this.page.set(Math.floor(start / this.size()));\n this.paginationChange.emit(this.pagination());\n }\n\n protected get sizeOptionContent(): TuiTablePaginationOptions['sizeOptionContent'] {\n return this.options.sizeOptionContent;\n }\n\n protected get start(): number {\n return (\n Math.min(this.page(), Math.floor(this.total() / this.size())) * this.size()\n );\n }\n\n protected back(): void {\n this.page.update((page) => page - 1);\n this.paginationChange.emit(this.pagination());\n }\n\n protected forth(): void {\n this.page.update((page) => page + 1);\n this.paginationChange.emit(this.pagination());\n }\n}\n","@if (texts(); as texts) {\n <span class=\"t-pages\">\n @if (options.showPages) {\n {{ texts.pages }}\n <strong class=\"t-strong\">{{ pages() }}</strong>\n }\n </span>\n <span automation-id=\"tui-table-pagination__lines-per-page-wrapper\">\n {{ texts.linesPerPage }}\n @if (total() !== 0) {\n <button\n tuiDropdown\n tuiDropdownAuto\n tuiLink\n type=\"button\"\n >\n <strong>{{ start + 1 }}–{{ end() }}</strong>\n <tui-data-list\n *tuiDropdown=\"let close\"\n size=\"s\"\n >\n @for (item of items(); track item) {\n <button\n tuiOption\n type=\"button\"\n class=\"t-item\"\n (click)=\"close(); onItem(item)\"\n >\n <ng-container\n *polymorpheusOutlet=\"\n sizeOptionContent as text;\n context: {$implicit: item, total: total()}\n \"\n >\n {{ text }}\n </ng-container>\n @if (item === size()) {\n <tui-icon\n class=\"t-checkmark\"\n [icon]=\"icons.check\"\n />\n } @else {\n <span class=\"t-checkmark\"></span>\n }\n </button>\n }\n </tui-data-list>\n </button>\n } @else {\n <strong>0 - 0</strong>\n }\n {{ texts.of }}\n <strong class=\"t-strong\">{{ total() }}</strong>\n </span>\n @if (spinTexts(); as spinTexts) {\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button t-button_back\"\n [disabled]=\"!start\"\n [iconStart]=\"icons.decrement\"\n (click)=\"back()\"\n >\n {{ spinTexts[0] }}\n </button>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [disabled]=\"rightDisabled()\"\n [iconStart]=\"icons.increment\"\n (click)=\"forth()\"\n >\n {{ spinTexts[1] }}\n </button>\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}