@tekus/design-system 5.33.0 → 5.34.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.
- package/fesm2022/tekus-design-system-components-action-group.mjs +3 -3
- package/fesm2022/tekus-design-system-components-action-group.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-autocomplete.mjs +3 -3
- package/fesm2022/tekus-design-system-components-autocomplete.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-badge.mjs +3 -3
- package/fesm2022/tekus-design-system-components-badge.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-bread-crumps.mjs +3 -3
- package/fesm2022/tekus-design-system-components-bread-crumps.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-button.mjs +3 -3
- package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-card-list.mjs +3 -3
- package/fesm2022/tekus-design-system-components-card-list.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-card.mjs +3 -3
- package/fesm2022/tekus-design-system-components-card.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-checkbox.mjs +3 -3
- package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-chip.mjs +51 -0
- package/fesm2022/tekus-design-system-components-chip.mjs.map +1 -0
- package/fesm2022/tekus-design-system-components-color-picker.mjs +9 -9
- package/fesm2022/tekus-design-system-components-color-picker.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-date-picker.mjs +3 -3
- package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-drawer.mjs +19 -9
- package/fesm2022/tekus-design-system-components-drawer.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-dropdown.mjs +3 -3
- package/fesm2022/tekus-design-system-components-dropdown.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-fallback-view.mjs +3 -3
- package/fesm2022/tekus-design-system-components-fallback-view.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-icon.mjs +3 -3
- package/fesm2022/tekus-design-system-components-icon.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-input-number.mjs +3 -3
- package/fesm2022/tekus-design-system-components-input-number.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-input-text.mjs +3 -3
- package/fesm2022/tekus-design-system-components-input-text.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-menu.mjs +3 -3
- package/fesm2022/tekus-design-system-components-menu.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-message.mjs +3 -3
- package/fesm2022/tekus-design-system-components-message.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-modal.mjs +6 -6
- package/fesm2022/tekus-design-system-components-modal.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-multiselect.mjs +18 -8
- package/fesm2022/tekus-design-system-components-multiselect.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-pagination.mjs +3 -3
- package/fesm2022/tekus-design-system-components-pagination.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-panel-menu.mjs +3 -3
- package/fesm2022/tekus-design-system-components-panel-menu.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-panel.mjs +3 -3
- package/fesm2022/tekus-design-system-components-panel.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-progress-bar.mjs +3 -3
- package/fesm2022/tekus-design-system-components-progress-bar.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-radio-button.mjs +3 -3
- package/fesm2022/tekus-design-system-components-radio-button.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-select.mjs +9 -9
- package/fesm2022/tekus-design-system-components-select.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-sidebar-layout.mjs +6 -6
- package/fesm2022/tekus-design-system-components-sidebar-layout.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-status-bar.mjs +3 -3
- package/fesm2022/tekus-design-system-components-status-bar.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-stepper.mjs +3 -3
- package/fesm2022/tekus-design-system-components-stepper.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-table.mjs +76 -8
- package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-tabs.mjs +3 -3
- package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-tag.mjs +3 -3
- package/fesm2022/tekus-design-system-components-tag.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-textarea.mjs +3 -3
- package/fesm2022/tekus-design-system-components-textarea.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-time-ago.mjs +3 -3
- package/fesm2022/tekus-design-system-components-time-ago.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-time-picker.mjs +3 -3
- package/fesm2022/tekus-design-system-components-time-picker.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-toast.mjs +3 -3
- package/fesm2022/tekus-design-system-components-toast.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-toggle.mjs +3 -3
- package/fesm2022/tekus-design-system-components-toggle.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-toolbar.mjs +369 -113
- package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-tooltip.mjs +3 -3
- package/fesm2022/tekus-design-system-components-tooltip.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-topbar.mjs +3 -3
- package/fesm2022/tekus-design-system-components-topbar.mjs.map +1 -1
- package/fesm2022/tekus-design-system-core-types.mjs +32 -3
- package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
- package/fesm2022/tekus-design-system-core.mjs +32 -3
- package/fesm2022/tekus-design-system-core.mjs.map +1 -1
- package/fesm2022/tekus-design-system-directives-gird-item.mjs +3 -3
- package/fesm2022/tekus-design-system-directives-gird-item.mjs.map +1 -1
- package/package.json +7 -2
- package/types/tekus-design-system-components-chip.d.ts +36 -0
- package/types/tekus-design-system-components-drawer.d.ts +14 -3
- package/types/tekus-design-system-components-multiselect.d.ts +11 -1
- package/types/tekus-design-system-components-table.d.ts +6 -2
- package/types/tekus-design-system-components-toolbar.d.ts +185 -98
|
@@ -1,135 +1,269 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
-
import {
|
|
2
|
+
import { inject, model, input, output, signal, viewChild, computed, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { toSignal, toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
5
|
+
import { map, combineLatest, distinctUntilChanged, switchMap, EMPTY, timer } from 'rxjs';
|
|
6
|
+
import * as i1 from 'primeng/popover';
|
|
7
|
+
import { PopoverModule } from 'primeng/popover';
|
|
5
8
|
import { ButtonComponent } from '@tekus/design-system/components/button';
|
|
6
|
-
import { SelectComponent } from '@tekus/design-system/components/select';
|
|
7
9
|
import { InputTextComponent } from '@tekus/design-system/components/input-text';
|
|
10
|
+
import { CheckboxComponent } from '@tekus/design-system/components/checkbox';
|
|
11
|
+
import { ActionGroupComponent } from '@tekus/design-system/components/action-group';
|
|
12
|
+
import { IconComponent } from '@tekus/design-system/components/icon';
|
|
13
|
+
import { DropdownComponent } from '@tekus/design-system/components/dropdown';
|
|
14
|
+
import { MultiselectComponent } from '@tekus/design-system/components/multiselect';
|
|
15
|
+
import { ChipComponent } from '@tekus/design-system/components/chip';
|
|
16
|
+
import { DrawerComponent } from '@tekus/design-system/components/drawer';
|
|
8
17
|
|
|
9
18
|
class ToolbarComponent {
|
|
10
|
-
/**
|
|
11
|
-
* @method constructor
|
|
12
|
-
* @description
|
|
13
|
-
* Initializes the automatic reload logic using a declarative RxJS approach.
|
|
14
|
-
*/
|
|
15
19
|
constructor() {
|
|
20
|
+
this.breakpointObserver = inject(BreakpointObserver);
|
|
21
|
+
/** Responsive flag using BreakpointObserver */
|
|
22
|
+
this.isMobile = toSignal(this.breakpointObserver.observe('(max-width: 768px)').pipe(map(r => r.matches)), { initialValue: false });
|
|
16
23
|
/**
|
|
17
|
-
* @property {ModelSignal<string>} searchModel
|
|
18
|
-
* @description
|
|
19
24
|
* Two-way bindable signal for the search input value.
|
|
20
|
-
* Supports [(searchModel)]="variable" syntax for two-way binding.
|
|
21
|
-
* @default ''
|
|
22
25
|
*/
|
|
23
26
|
this.searchModel = model('', ...(ngDevMode ? [{ debugName: "searchModel" }] : /* istanbul ignore next */ []));
|
|
24
27
|
/**
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
27
|
-
* Two-way bindable signal for the filter select value.
|
|
28
|
-
* Supports [(filterModel)]="variable" syntax for two-way binding.
|
|
29
|
-
* @default null
|
|
28
|
+
* Label/placeholder text displayed inside the search input.
|
|
29
|
+
* @default 'Buscar'
|
|
30
30
|
*/
|
|
31
|
-
this.
|
|
31
|
+
this.searchFloatLabel = input('Buscar', ...(ngDevMode ? [{ debugName: "searchFloatLabel" }] : /* istanbul ignore next */ []));
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
* @
|
|
35
|
-
* Controls the visibility of the search input. Toggles when the search button is clicked.
|
|
36
|
-
* @default false
|
|
33
|
+
* Controls the visibility of the search input field.
|
|
34
|
+
* @default true
|
|
37
35
|
*/
|
|
38
|
-
this.
|
|
36
|
+
this.searchVisible = input(true, ...(ngDevMode ? [{ debugName: "searchVisible" }] : /* istanbul ignore next */ []));
|
|
39
37
|
/**
|
|
40
|
-
*
|
|
41
|
-
* @
|
|
42
|
-
|
|
38
|
+
* Two-way bindable signal for the layout view toggle ('table' or 'cards').
|
|
39
|
+
* @default 'table'
|
|
40
|
+
*/
|
|
41
|
+
this.view = model('table', ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
42
|
+
/**
|
|
43
|
+
* Controls the visibility of the layout view toggle button.
|
|
43
44
|
* @default false
|
|
44
45
|
*/
|
|
45
|
-
this.
|
|
46
|
+
this.viewToggleVisible = input(false, ...(ngDevMode ? [{ debugName: "viewToggleVisible" }] : /* istanbul ignore next */ []));
|
|
46
47
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @
|
|
49
|
-
* Array of options available in the filter select dropdown.
|
|
50
|
-
* Each option is an object with `label` (displayed text) and `value` (internal identifier).
|
|
51
|
-
*
|
|
52
|
-
* @default
|
|
53
|
-
* [
|
|
54
|
-
* { label: 'Option 1', value: 'option1' },
|
|
55
|
-
* { label: 'Option 2', value: 'option2' },
|
|
56
|
-
* { label: 'Option 3', value: 'option3' }
|
|
57
|
-
* ]
|
|
48
|
+
* Dynamic list of filters and their available selection options.
|
|
49
|
+
* @default []
|
|
58
50
|
*/
|
|
51
|
+
this.filters = input([], ...(ngDevMode ? [{ debugName: "filters" }] : /* istanbul ignore next */ []));
|
|
52
|
+
/** Backwards compatibility: Writable model signal for the selected option in a single filter select (deprecated) */
|
|
53
|
+
this.filterModel = model(null, ...(ngDevMode ? [{ debugName: "filterModel" }] : /* istanbul ignore next */ []));
|
|
54
|
+
/** Backwards compatibility: Input for dropdown options (deprecated) */
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
56
|
this.filterOptions = input([
|
|
60
57
|
{ label: 'Option 1', value: 'option1' },
|
|
61
58
|
{ label: 'Option 2', value: 'option2' },
|
|
62
59
|
{ label: 'Option 3', value: 'option3' },
|
|
63
60
|
], ...(ngDevMode ? [{ debugName: "filterOptions" }] : /* istanbul ignore next */ []));
|
|
61
|
+
/** Backwards compatibility: Input for the option label key (deprecated) */
|
|
62
|
+
this.filterOptionLabel = input('label', ...(ngDevMode ? [{ debugName: "filterOptionLabel" }] : /* istanbul ignore next */ []));
|
|
63
|
+
/** Backwards compatibility: Input for the label of the single select dropdown (deprecated) */
|
|
64
|
+
this.filterFloatLabel = input('Filtrar', ...(ngDevMode ? [{ debugName: "filterFloatLabel" }] : /* istanbul ignore next */ []));
|
|
65
|
+
/** Backwards compatibility: Controls whether filter button is shown (deprecated) */
|
|
66
|
+
this.filterVisible = input(true, ...(ngDevMode ? [{ debugName: "filterVisible" }] : /* istanbul ignore next */ []));
|
|
64
67
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* This corresponds to the key in each option object that contains the display text.
|
|
69
|
-
*
|
|
70
|
-
* @default 'label'
|
|
68
|
+
* Two-way bindable signal for currently selected filter values.
|
|
69
|
+
* Format: { [filterKey]: MultiSelectOption[] }
|
|
70
|
+
* @default {}
|
|
71
71
|
*/
|
|
72
|
-
this.
|
|
72
|
+
this.filterValues = model({}, ...(ngDevMode ? [{ debugName: "filterValues" }] : /* istanbul ignore next */ []));
|
|
73
73
|
/**
|
|
74
|
-
*
|
|
75
|
-
* @
|
|
76
|
-
* Label text displayed above the filter select input using the FloatLabel wrapper.
|
|
77
|
-
* This is the placeholder/label that floats when the select is focused or has a value.
|
|
78
|
-
*
|
|
79
|
-
* @default 'Filtrar'
|
|
74
|
+
* Label/text for the clear button.
|
|
75
|
+
* @default 'Limpiar'
|
|
80
76
|
*/
|
|
81
|
-
this.
|
|
77
|
+
this.clearLabel = input('Limpiar', ...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
|
|
82
78
|
/**
|
|
83
|
-
*
|
|
84
|
-
* @
|
|
85
|
-
* Label text displayed above the search input using the FloatLabel wrapper.
|
|
86
|
-
* This is the placeholder/label that floats when the search input is focused or has a value.
|
|
87
|
-
*
|
|
88
|
-
* @default 'Buscar'
|
|
79
|
+
* Label/text for the delete action button.
|
|
80
|
+
* @default 'Eliminar'
|
|
89
81
|
*/
|
|
90
|
-
this.
|
|
82
|
+
this.deleteLabel = input('Eliminar', ...(ngDevMode ? [{ debugName: "deleteLabel" }] : /* istanbul ignore next */ []));
|
|
91
83
|
/**
|
|
92
|
-
*
|
|
93
|
-
* @
|
|
94
|
-
* Controls the visibility of the search button.
|
|
95
|
-
* @default true
|
|
84
|
+
* Label/text for the filters header.
|
|
85
|
+
* @default 'Filtros'
|
|
96
86
|
*/
|
|
97
|
-
this.
|
|
87
|
+
this.filterLabel = input('Filtros', ...(ngDevMode ? [{ debugName: "filterLabel" }] : /* istanbul ignore next */ []));
|
|
88
|
+
/** Label for selected item singular form (e.g. 'seleccionado') */
|
|
89
|
+
this.selectedLabel = input('seleccionado', ...(ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []));
|
|
90
|
+
/** Label for selected item plural form (e.g. 'seleccionados') */
|
|
91
|
+
this.selectedPluralLabel = input('seleccionados', ...(ngDevMode ? [{ debugName: "selectedPluralLabel" }] : /* istanbul ignore next */ []));
|
|
92
|
+
/** Label/text for the apply button in overlays (e.g. 'Aplicar') */
|
|
93
|
+
this.applyLabel = input('Aplicar', ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
|
|
94
|
+
/** Tooltip text for the reload action button (e.g. 'Actualizar') */
|
|
95
|
+
this.reloadTooltip = input('Actualizar', ...(ngDevMode ? [{ debugName: "reloadTooltip" }] : /* istanbul ignore next */ []));
|
|
96
|
+
/** Tooltip text for the sort action button (e.g. 'Ordenar') */
|
|
97
|
+
this.sortTooltip = input('Ordenar', ...(ngDevMode ? [{ debugName: "sortTooltip" }] : /* istanbul ignore next */ []));
|
|
98
|
+
/** Tooltip text for view cards layout button (e.g. 'Vista tarjeta') */
|
|
99
|
+
this.viewCardsTooltip = input('Vista tarjeta', ...(ngDevMode ? [{ debugName: "viewCardsTooltip" }] : /* istanbul ignore next */ []));
|
|
100
|
+
/** Tooltip text for view table layout button (e.g. 'Vista tabla') */
|
|
101
|
+
this.viewTableTooltip = input('Vista tabla', ...(ngDevMode ? [{ debugName: "viewTableTooltip" }] : /* istanbul ignore next */ []));
|
|
98
102
|
/**
|
|
99
|
-
*
|
|
100
|
-
* @
|
|
101
|
-
* Controls the visibility of the filter button.
|
|
102
|
-
* @default true
|
|
103
|
+
* Available list of sorting options.
|
|
104
|
+
* @default []
|
|
103
105
|
*/
|
|
104
|
-
this.
|
|
106
|
+
this.sortOptions = input([], ...(ngDevMode ? [{ debugName: "sortOptions" }] : /* istanbul ignore next */ []));
|
|
107
|
+
/**
|
|
108
|
+
* Label/text for the sorting header.
|
|
109
|
+
* @default 'Ordenar por'
|
|
110
|
+
*/
|
|
111
|
+
this.sortLabel = input('Ordenar por', ...(ngDevMode ? [{ debugName: "sortLabel" }] : /* istanbul ignore next */ []));
|
|
112
|
+
/**
|
|
113
|
+
* Two-way bindable signal for the active sort option value.
|
|
114
|
+
* @default null
|
|
115
|
+
*/
|
|
116
|
+
this.sortValue = model(null, ...(ngDevMode ? [{ debugName: "sortValue" }] : /* istanbul ignore next */ []));
|
|
105
117
|
/**
|
|
106
|
-
* @property {InputSignal<boolean>} reloadVisible
|
|
107
|
-
* @description
|
|
108
118
|
* Controls the visibility of the reload button.
|
|
109
119
|
* @default false
|
|
110
120
|
*/
|
|
111
121
|
this.reloadVisible = input(false, ...(ngDevMode ? [{ debugName: "reloadVisible" }] : /* istanbul ignore next */ []));
|
|
112
122
|
/**
|
|
113
|
-
* @property {InputSignal<number | null>} reloadInterval
|
|
114
|
-
* @description
|
|
115
123
|
* Sets the interval for automatic reload in milliseconds.
|
|
116
124
|
* If null, automatic reload is disabled.
|
|
117
125
|
* @default null
|
|
118
126
|
*/
|
|
119
127
|
this.reloadInterval = input(null, ...(ngDevMode ? [{ debugName: "reloadInterval" }] : /* istanbul ignore next */ []));
|
|
120
128
|
/**
|
|
121
|
-
* @property {InputSignal<boolean>} loading
|
|
122
|
-
* @description
|
|
123
129
|
* Controls the loading state of the reload button, triggering a rotation animation.
|
|
124
130
|
* @default false
|
|
125
131
|
*/
|
|
126
132
|
this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
127
133
|
/**
|
|
128
|
-
*
|
|
129
|
-
* @
|
|
134
|
+
* Secondary or mass actions collapsed into the tk-action-group dropdown.
|
|
135
|
+
* @default []
|
|
136
|
+
*/
|
|
137
|
+
this.globalActions = input([], ...(ngDevMode ? [{ debugName: "globalActions" }] : /* istanbul ignore next */ []));
|
|
138
|
+
/**
|
|
139
|
+
* Number of items selected in the list.
|
|
140
|
+
* @default 0
|
|
141
|
+
*/
|
|
142
|
+
this.selectionCount = input(0, ...(ngDevMode ? [{ debugName: "selectionCount" }] : /* istanbul ignore next */ []));
|
|
143
|
+
/**
|
|
144
|
+
* Two-way bindable signal for checking/unchecking the select-all checkbox.
|
|
145
|
+
* @default false
|
|
146
|
+
*/
|
|
147
|
+
this.allSelected = model(false, ...(ngDevMode ? [{ debugName: "allSelected" }] : /* istanbul ignore next */ []));
|
|
148
|
+
/**
|
|
149
|
+
* Two-way bindable signal for the indeterminate state of the select-all checkbox.
|
|
150
|
+
* @default false
|
|
151
|
+
*/
|
|
152
|
+
this.indeterminate = model(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
153
|
+
/**
|
|
154
|
+
* Actions available when one or more items are selected.
|
|
155
|
+
* @default []
|
|
156
|
+
*/
|
|
157
|
+
this.selectionActions = input([], ...(ngDevMode ? [{ debugName: "selectionActions" }] : /* istanbul ignore next */ []));
|
|
158
|
+
/**
|
|
159
|
+
* Maximum number of selection action buttons visible directly before grouping the rest.
|
|
160
|
+
* @default 1
|
|
161
|
+
*/
|
|
162
|
+
this.maxVisibleSelectionActions = input(1, ...(ngDevMode ? [{ debugName: "maxVisibleSelectionActions" }] : /* istanbul ignore next */ []));
|
|
163
|
+
/**
|
|
130
164
|
* Emits an event when the reload button is clicked or the automatic interval is reached.
|
|
131
165
|
*/
|
|
132
166
|
this.reload = output();
|
|
167
|
+
/**
|
|
168
|
+
* Emits when filters are applied.
|
|
169
|
+
*/
|
|
170
|
+
this.appliedFilters = output();
|
|
171
|
+
/**
|
|
172
|
+
* Emits when sorting changes.
|
|
173
|
+
*/
|
|
174
|
+
this.appliedSort = output();
|
|
175
|
+
/** Temporary filter values held before the user clicks "Aplicar" */
|
|
176
|
+
this.tempFilterValues = signal({}, ...(ngDevMode ? [{ debugName: "tempFilterValues" }] : /* istanbul ignore next */ []));
|
|
177
|
+
/** Temporary sort value held before the user clicks "Aplicar" in mobile drawer */
|
|
178
|
+
this.tempSortValue = signal(null, ...(ngDevMode ? [{ debugName: "tempSortValue" }] : /* istanbul ignore next */ []));
|
|
179
|
+
/** Controls visibility of mobile drawers */
|
|
180
|
+
this.showFilterDrawer = signal(false, ...(ngDevMode ? [{ debugName: "showFilterDrawer" }] : /* istanbul ignore next */ []));
|
|
181
|
+
this.showSortDrawer = signal(false, ...(ngDevMode ? [{ debugName: "showSortDrawer" }] : /* istanbul ignore next */ []));
|
|
182
|
+
this.filterPopover = viewChild('filterPopover', ...(ngDevMode ? [{ debugName: "filterPopover" }] : /* istanbul ignore next */ []));
|
|
183
|
+
this.sortPopover = viewChild('sortPopover', ...(ngDevMode ? [{ debugName: "sortPopover" }] : /* istanbul ignore next */ []));
|
|
184
|
+
/** Computes whether any filters are currently active */
|
|
185
|
+
this.hasActiveFilters = computed(() => {
|
|
186
|
+
const values = this.filterValues();
|
|
187
|
+
return Object.values(values).some(arr => arr && arr.length > 0);
|
|
188
|
+
}, ...(ngDevMode ? [{ debugName: "hasActiveFilters" }] : /* istanbul ignore next */ []));
|
|
189
|
+
/** Computes whether sorting is active */
|
|
190
|
+
this.hasActiveSort = computed(() => {
|
|
191
|
+
return this.sortValue() !== null && this.sortValue() !== '';
|
|
192
|
+
}, ...(ngDevMode ? [{ debugName: "hasActiveSort" }] : /* istanbul ignore next */ []));
|
|
193
|
+
/** Reload button visibility: only visible if reload is allowed AND filters or sorting is active */
|
|
194
|
+
this.shouldShowReload = computed(() => {
|
|
195
|
+
return this.reloadVisible();
|
|
196
|
+
}, ...(ngDevMode ? [{ debugName: "shouldShowReload" }] : /* istanbul ignore next */ []));
|
|
197
|
+
/** Computes the final filters configuration, adapting old filterOptions format to the new filters schema */
|
|
198
|
+
this.derivedFilters = computed(() => {
|
|
199
|
+
const customFilters = this.filters();
|
|
200
|
+
if (customFilters && customFilters.length > 0) {
|
|
201
|
+
return customFilters;
|
|
202
|
+
}
|
|
203
|
+
const oldOptions = this.filterOptions();
|
|
204
|
+
if (oldOptions && oldOptions.length > 0) {
|
|
205
|
+
return [
|
|
206
|
+
{
|
|
207
|
+
key: 'default_filter',
|
|
208
|
+
label: this.filterFloatLabel() || 'Filtrar',
|
|
209
|
+
options: oldOptions.map(opt => ({
|
|
210
|
+
name: opt[this.filterOptionLabel()] || opt['label'] || opt['value'],
|
|
211
|
+
code: opt['value']
|
|
212
|
+
}))
|
|
213
|
+
}
|
|
214
|
+
];
|
|
215
|
+
}
|
|
216
|
+
return [];
|
|
217
|
+
}, ...(ngDevMode ? [{ debugName: "derivedFilters" }] : /* istanbul ignore next */ []));
|
|
218
|
+
/** Active chips representing individual filter selections */
|
|
219
|
+
this.activeChips = computed(() => {
|
|
220
|
+
const values = this.filterValues();
|
|
221
|
+
const configs = this.derivedFilters();
|
|
222
|
+
const chips = [];
|
|
223
|
+
for (const config of configs) {
|
|
224
|
+
const selected = values[config.key] || [];
|
|
225
|
+
for (const item of selected) {
|
|
226
|
+
chips.push({
|
|
227
|
+
filterKey: config.key,
|
|
228
|
+
code: item.code,
|
|
229
|
+
label: item.name,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return chips;
|
|
234
|
+
}, ...(ngDevMode ? [{ debugName: "activeChips" }] : /* istanbul ignore next */ []));
|
|
235
|
+
/** Visibility of the active filters bar (below tools) */
|
|
236
|
+
this.shouldShowActiveFiltersBar = computed(() => {
|
|
237
|
+
return this.hasActiveFilters();
|
|
238
|
+
}, ...(ngDevMode ? [{ debugName: "shouldShowActiveFiltersBar" }] : /* istanbul ignore next */ []));
|
|
239
|
+
/** Visible selection actions as buttons */
|
|
240
|
+
this.visibleSelectionActions = computed(() => {
|
|
241
|
+
return this.selectionActions()
|
|
242
|
+
.slice(0, this.maxVisibleSelectionActions())
|
|
243
|
+
.map(action => {
|
|
244
|
+
if (action.severity === 'danger') {
|
|
245
|
+
return { ...action, label: this.deleteLabel() };
|
|
246
|
+
}
|
|
247
|
+
return action;
|
|
248
|
+
});
|
|
249
|
+
}, ...(ngDevMode ? [{ debugName: "visibleSelectionActions" }] : /* istanbul ignore next */ []));
|
|
250
|
+
/** Overflow selection actions as menu items for dropdown */
|
|
251
|
+
this.overflowSelectionActions = computed(() => {
|
|
252
|
+
const list = this.selectionActions();
|
|
253
|
+
const max = this.maxVisibleSelectionActions();
|
|
254
|
+
if (list.length <= max) {
|
|
255
|
+
return [];
|
|
256
|
+
}
|
|
257
|
+
return list.slice(max).map(action => {
|
|
258
|
+
const label = action.severity === 'danger' ? this.deleteLabel() : action.label;
|
|
259
|
+
return {
|
|
260
|
+
label: label,
|
|
261
|
+
icon: action.icon,
|
|
262
|
+
command: () => action.action(),
|
|
263
|
+
disabled: action.disabled ?? false,
|
|
264
|
+
};
|
|
265
|
+
});
|
|
266
|
+
}, ...(ngDevMode ? [{ debugName: "overflowSelectionActions" }] : /* istanbul ignore next */ []));
|
|
133
267
|
combineLatest([
|
|
134
268
|
toObservable(this.reloadInterval).pipe(distinctUntilChanged()),
|
|
135
269
|
toObservable(this.loading).pipe(distinctUntilChanged()),
|
|
@@ -141,50 +275,172 @@ class ToolbarComponent {
|
|
|
141
275
|
return timer(interval, interval);
|
|
142
276
|
}), takeUntilDestroyed())
|
|
143
277
|
.subscribe(() => this.onReload());
|
|
278
|
+
effect(() => {
|
|
279
|
+
const modelVal = this.filterModel();
|
|
280
|
+
if (modelVal?.['value']) {
|
|
281
|
+
const matchedOpt = this.filterOptions().find(opt => opt['value'] === modelVal['value']);
|
|
282
|
+
if (matchedOpt) {
|
|
283
|
+
const labelKey = this.filterOptionLabel();
|
|
284
|
+
const label = matchedOpt[labelKey] || matchedOpt['label'] || matchedOpt['value'];
|
|
285
|
+
untracked(() => {
|
|
286
|
+
const current = this.filterValues();
|
|
287
|
+
const currentSelections = current['default_filter'] || [];
|
|
288
|
+
if (currentSelections.length !== 1 || currentSelections[0].code !== matchedOpt['value']) {
|
|
289
|
+
this.filterValues.set({
|
|
290
|
+
...current,
|
|
291
|
+
default_filter: [{ name: label, code: matchedOpt['value'] }]
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else if (!modelVal) {
|
|
298
|
+
untracked(() => {
|
|
299
|
+
const current = this.filterValues();
|
|
300
|
+
if (current['default_filter'] && current['default_filter'].length > 0) {
|
|
301
|
+
const updated = { ...current };
|
|
302
|
+
delete updated['default_filter'];
|
|
303
|
+
this.filterValues.set(updated);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
// Sync filterValues (new) -> filterModel (old single-select)
|
|
309
|
+
effect(() => {
|
|
310
|
+
const values = this.filterValues();
|
|
311
|
+
const defaultFilterSelections = values['default_filter'];
|
|
312
|
+
if (defaultFilterSelections && defaultFilterSelections.length > 0) {
|
|
313
|
+
const lastSelected = defaultFilterSelections[defaultFilterSelections.length - 1];
|
|
314
|
+
const matchedOpt = this.filterOptions().find(opt => opt['value'] === lastSelected.code);
|
|
315
|
+
if (matchedOpt) {
|
|
316
|
+
untracked(() => {
|
|
317
|
+
if (this.filterModel()?.['value'] !== matchedOpt['value']) {
|
|
318
|
+
this.filterModel.set(matchedOpt);
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
untracked(() => {
|
|
325
|
+
if (this.filterModel() !== null) {
|
|
326
|
+
this.filterModel.set(null);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
/** Toggles filters overlay and initializes temporary state */
|
|
333
|
+
openFilters(event) {
|
|
334
|
+
const currentValues = this.filterValues();
|
|
335
|
+
// Copy current filter selections into temporary state
|
|
336
|
+
const copy = {};
|
|
337
|
+
for (const key of Object.keys(currentValues)) {
|
|
338
|
+
copy[key] = [...(currentValues[key] || [])];
|
|
339
|
+
}
|
|
340
|
+
this.tempFilterValues.set(copy);
|
|
341
|
+
if (this.isMobile()) {
|
|
342
|
+
this.showFilterDrawer.set(true);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
this.filterPopover()?.toggle(event);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/** Updates temporary filter values for a specific filter key */
|
|
349
|
+
onTempFilterChange(key, value) {
|
|
350
|
+
this.tempFilterValues.update(prev => ({ ...prev, [key]: value }));
|
|
351
|
+
}
|
|
352
|
+
/** Saves temporary filter selections and triggers apply */
|
|
353
|
+
applyFilters() {
|
|
354
|
+
const temp = this.tempFilterValues();
|
|
355
|
+
this.filterValues.set({ ...temp });
|
|
356
|
+
this.appliedFilters.emit({ ...temp });
|
|
357
|
+
if (this.isMobile()) {
|
|
358
|
+
this.showFilterDrawer.set(false);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
this.filterPopover()?.hide();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/** Clears temporary filters inside popover/drawer */
|
|
365
|
+
clearTempFilters() {
|
|
366
|
+
const cleared = {};
|
|
367
|
+
for (const filter of this.derivedFilters()) {
|
|
368
|
+
cleared[filter.key] = [];
|
|
369
|
+
}
|
|
370
|
+
this.tempFilterValues.set(cleared);
|
|
371
|
+
}
|
|
372
|
+
/** Clears all applied filters */
|
|
373
|
+
clearAllFilters() {
|
|
374
|
+
const cleared = {};
|
|
375
|
+
this.filterValues.set(cleared);
|
|
376
|
+
this.appliedFilters.emit(cleared);
|
|
377
|
+
}
|
|
378
|
+
/** Removes a single filter chip */
|
|
379
|
+
removeChip(chip) {
|
|
380
|
+
const currentValues = { ...this.filterValues() };
|
|
381
|
+
const list = currentValues[chip.filterKey] || [];
|
|
382
|
+
currentValues[chip.filterKey] = list.filter(item => item.code !== chip.code);
|
|
383
|
+
this.filterValues.set(currentValues);
|
|
384
|
+
this.appliedFilters.emit(currentValues);
|
|
385
|
+
}
|
|
386
|
+
/** Toggles sorting overlay */
|
|
387
|
+
openSort(event) {
|
|
388
|
+
if (this.isMobile()) {
|
|
389
|
+
this.tempSortValue.set(this.sortValue());
|
|
390
|
+
this.showSortDrawer.set(true);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
this.sortPopover()?.toggle(event);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/** Selects a sort option (toggles if already selected) and hides overlay */
|
|
397
|
+
selectSortOption(value, isMobileDrawer = false) {
|
|
398
|
+
const newValue = this.sortValue() === value ? null : value;
|
|
399
|
+
this.sortValue.set(newValue);
|
|
400
|
+
this.appliedSort.emit(newValue);
|
|
401
|
+
if (isMobileDrawer) {
|
|
402
|
+
this.showSortDrawer.set(false);
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
this.sortPopover()?.hide();
|
|
406
|
+
}
|
|
144
407
|
}
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
* Toggles the visibility of the search input field.
|
|
149
|
-
*/
|
|
150
|
-
toggleSearchInput() {
|
|
151
|
-
this.showSearchInput.update(value => !value);
|
|
152
|
-
this.searchModel.set('');
|
|
408
|
+
/** Toggles temporary sorting selection on mobile drawer */
|
|
409
|
+
toggleSortOptionMobile(value) {
|
|
410
|
+
this.tempSortValue.update(prev => prev === value ? null : value);
|
|
153
411
|
}
|
|
154
|
-
/**
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
this.showFilterSelect.update(value => !value);
|
|
161
|
-
this.filterModel.set(null);
|
|
412
|
+
/** Applies selected sorting on mobile */
|
|
413
|
+
applySortMobile() {
|
|
414
|
+
const val = this.tempSortValue();
|
|
415
|
+
this.sortValue.set(val);
|
|
416
|
+
this.appliedSort.emit(val);
|
|
417
|
+
this.showSortDrawer.set(false);
|
|
162
418
|
}
|
|
163
|
-
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
* Handles filter select changes and updates the filterModel signal.
|
|
167
|
-
*
|
|
168
|
-
* @param value - Selected option value from tk-select
|
|
169
|
-
*/
|
|
170
|
-
onSelectedOption(value) {
|
|
171
|
-
this.filterModel.set(value);
|
|
419
|
+
/** Toggle layout view */
|
|
420
|
+
toggleView() {
|
|
421
|
+
this.view.set(this.view() === 'table' ? 'cards' : 'table');
|
|
172
422
|
}
|
|
173
|
-
/**
|
|
174
|
-
* @method onReload
|
|
175
|
-
* @description
|
|
176
|
-
* Emits the reload event.
|
|
177
|
-
*/
|
|
178
423
|
onReload() {
|
|
179
424
|
this.reload.emit();
|
|
180
425
|
}
|
|
181
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
182
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.3", type: ToolbarComponent, isStandalone: true, selector: "tk-toolbar", inputs: { searchModel: { classPropertyName: "searchModel", publicName: "searchModel", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, filterOptionLabel: { classPropertyName: "filterOptionLabel", publicName: "filterOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, filterFloatLabel: { classPropertyName: "filterFloatLabel", publicName: "filterFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchFloatLabel: { classPropertyName: "searchFloatLabel", publicName: "searchFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchVisible: { classPropertyName: "searchVisible", publicName: "searchVisible", isSignal: true, isRequired: false, transformFunction: null }, filterVisible: { classPropertyName: "filterVisible", publicName: "filterVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadVisible: { classPropertyName: "reloadVisible", publicName: "reloadVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadInterval: { classPropertyName: "reloadInterval", publicName: "reloadInterval", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchModel: "searchModelChange", filterModel: "filterModelChange", reload: "reload" }, ngImport: i0, template: "<div class=\"toolbar\">\n @if (showSearchInput() && searchVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n @if (showFilterSelect() && filterVisible()) {\n <div class=\"toolbar__input-container\">\n <tk-select\n [options]=\"filterOptions()\"\n [optionLabel]=\"filterOptionLabel()\"\n [label]=\"filterFloatLabel()\"\n (modelChange)=\"onSelectedOption($event ?? null)\">\n </tk-select>\n </div>\n }\n <div class=\"toolbar__buttons\">\n @if (searchVisible()) {\n <tk-button\n [icon]=\"'magnifying-glass'\"\n severity=\"secondary\"\n [variant]=\"!showSearchInput() ? 'outlined' : undefined\"\n (clicked)=\"toggleSearchInput()\">\n </tk-button>\n }\n @if (filterVisible()) {\n <tk-button\n [icon]=\"'filter'\"\n severity=\"secondary\"\n [variant]=\"!showFilterSelect() ? 'outlined' : undefined\"\n (clicked)=\"toggleFilterSelect()\">\n </tk-button>\n }\n @if (reloadVisible()) {\n <tk-button\n class=\"toolbar__reload-btn\"\n [class.toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n </div>\n</div>\n", styles: [".toolbar{display:flex;justify-content:end;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);row-gap:var(--tk-spacing-base-150, 1.5rem)}.toolbar__input-container{width:15rem}.toolbar__buttons{display:flex;gap:var(--tk-spacing-base-50, .5rem);margin-top:var(--tk-spacing-base-50, .5rem)}.toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px)!important;position:relative}.toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:-2px;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:2px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}@media(max-width:768px){.toolbar{justify-content:flex-start}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-button-outlined{border:1px solid transparent!important}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "tk-button", inputs: ["label", "disabled", "type", "severity", "variant", "link", "icon", "iconPosition", "tooltipText", "size"], outputs: ["clicked"] }, { kind: "component", type: InputTextComponent, selector: "tk-input-text", inputs: ["value", "control", "label", "type", "id", "icon", "clearable", "errorMessage", "hint", "maxLength"], outputs: ["valueChange"] }, { kind: "component", type: SelectComponent, selector: "tk-select", inputs: ["id", "control", "options", "dataSource", "optionLabel", "label", "showClear", "disabled", "errorMessage", "hint", "filter", "placeholder", "loading", "fetchParams", "sortField", "sortOrder", "model", "emptyMessage", "emptyFilterMessage"], outputs: ["dataSourceChange", "modelChange", "filterChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
426
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
427
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: ToolbarComponent, isStandalone: true, selector: "tk-toolbar", inputs: { searchModel: { classPropertyName: "searchModel", publicName: "searchModel", isSignal: true, isRequired: false, transformFunction: null }, searchFloatLabel: { classPropertyName: "searchFloatLabel", publicName: "searchFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, searchVisible: { classPropertyName: "searchVisible", publicName: "searchVisible", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, viewToggleVisible: { classPropertyName: "viewToggleVisible", publicName: "viewToggleVisible", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, filterModel: { classPropertyName: "filterModel", publicName: "filterModel", isSignal: true, isRequired: false, transformFunction: null }, filterOptions: { classPropertyName: "filterOptions", publicName: "filterOptions", isSignal: true, isRequired: false, transformFunction: null }, filterOptionLabel: { classPropertyName: "filterOptionLabel", publicName: "filterOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, filterFloatLabel: { classPropertyName: "filterFloatLabel", publicName: "filterFloatLabel", isSignal: true, isRequired: false, transformFunction: null }, filterVisible: { classPropertyName: "filterVisible", publicName: "filterVisible", isSignal: true, isRequired: false, transformFunction: null }, filterValues: { classPropertyName: "filterValues", publicName: "filterValues", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, deleteLabel: { classPropertyName: "deleteLabel", publicName: "deleteLabel", isSignal: true, isRequired: false, transformFunction: null }, filterLabel: { classPropertyName: "filterLabel", publicName: "filterLabel", isSignal: true, isRequired: false, transformFunction: null }, selectedLabel: { classPropertyName: "selectedLabel", publicName: "selectedLabel", isSignal: true, isRequired: false, transformFunction: null }, selectedPluralLabel: { classPropertyName: "selectedPluralLabel", publicName: "selectedPluralLabel", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, reloadTooltip: { classPropertyName: "reloadTooltip", publicName: "reloadTooltip", isSignal: true, isRequired: false, transformFunction: null }, sortTooltip: { classPropertyName: "sortTooltip", publicName: "sortTooltip", isSignal: true, isRequired: false, transformFunction: null }, viewCardsTooltip: { classPropertyName: "viewCardsTooltip", publicName: "viewCardsTooltip", isSignal: true, isRequired: false, transformFunction: null }, viewTableTooltip: { classPropertyName: "viewTableTooltip", publicName: "viewTableTooltip", isSignal: true, isRequired: false, transformFunction: null }, sortOptions: { classPropertyName: "sortOptions", publicName: "sortOptions", isSignal: true, isRequired: false, transformFunction: null }, sortLabel: { classPropertyName: "sortLabel", publicName: "sortLabel", isSignal: true, isRequired: false, transformFunction: null }, sortValue: { classPropertyName: "sortValue", publicName: "sortValue", isSignal: true, isRequired: false, transformFunction: null }, reloadVisible: { classPropertyName: "reloadVisible", publicName: "reloadVisible", isSignal: true, isRequired: false, transformFunction: null }, reloadInterval: { classPropertyName: "reloadInterval", publicName: "reloadInterval", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, globalActions: { classPropertyName: "globalActions", publicName: "globalActions", isSignal: true, isRequired: false, transformFunction: null }, selectionCount: { classPropertyName: "selectionCount", publicName: "selectionCount", isSignal: true, isRequired: false, transformFunction: null }, allSelected: { classPropertyName: "allSelected", publicName: "allSelected", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, selectionActions: { classPropertyName: "selectionActions", publicName: "selectionActions", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleSelectionActions: { classPropertyName: "maxVisibleSelectionActions", publicName: "maxVisibleSelectionActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchModel: "searchModelChange", view: "viewChange", filterModel: "filterModelChange", filterValues: "filterValuesChange", sortValue: "sortValueChange", allSelected: "allSelectedChange", indeterminate: "indeterminateChange", reload: "reload", appliedFilters: "appliedFilters", appliedSort: "appliedSort" }, viewQueries: [{ propertyName: "filterPopover", first: true, predicate: ["filterPopover"], descendants: true, isSignal: true }, { propertyName: "sortPopover", first: true, predicate: ["sortPopover"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"tk-toolbar-container\">\n <!-- 1. Selection Status Bar (Desktop replacement) -->\n @if (selectionCount() > 0 && !isMobile()) {\n <div class=\"tk-toolbar-selection-bar\" data-testid=\"selection-bar-desktop\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n } @else {\n <!-- 2. Main Tools Bar -->\n <div class=\"tk-toolbar\" data-testid=\"main-toolbar\">\n <!-- Left part: search input (always visible if searchVisible is true) -->\n @if (searchVisible()) {\n <div class=\"tk-toolbar__search\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n\n <!-- Right part: actions -->\n <div class=\"tk-toolbar__actions\">\n @if (viewToggleVisible()) {\n <tk-button\n [icon]=\"view() === 'table' ? 'table' : 'table-list'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"view() === 'table' ? viewCardsTooltip() : viewTableTooltip()\"\n (clicked)=\"toggleView()\">\n </tk-button>\n }\n\n @if (derivedFilters().length > 0 && filterVisible()) {\n <tk-button\n #filterBtn\n [icon]=\"'filter'\"\n [severity]=\"hasActiveFilters() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveFilters() ? undefined : 'text'\"\n [tooltipText]=\"filterLabel()\"\n (click)=\"openFilters($event)\"\n (keydown.enter)=\"openFilters($event)\"\n (keydown.space)=\"openFilters($event)\">\n </tk-button>\n }\n\n @if (sortOptions().length > 0) {\n <tk-button\n #sortBtn\n [icon]=\"'arrow-down-wide-short'\"\n [severity]=\"hasActiveSort() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveSort() ? undefined : 'text'\"\n [tooltipText]=\"sortTooltip()\"\n (click)=\"openSort($event)\"\n (keydown.enter)=\"openSort($event)\"\n (keydown.space)=\"openSort($event)\">\n </tk-button>\n }\n\n @if (shouldShowReload()) {\n <tk-button\n class=\"tk-toolbar__reload-btn\"\n [class.tk-toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.tk-toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"reloadTooltip()\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n\n @if (globalActions().length > 0) {\n <tk-action-group\n [actions]=\"globalActions()\"\n [maxVisible]=\"0\">\n </tk-action-group>\n }\n </div>\n </div>\n }\n\n @if (shouldShowActiveFiltersBar()) {\n <div class=\"tk-toolbar-chips-bar\" data-testid=\"chips-bar\">\n <div class=\"tk-toolbar-chips-bar__scroll\">\n @for (chip of activeChips(); track chip.filterKey + '-' + chip.code) {\n <tk-chip\n [label]=\"chip.label\"\n [removable]=\"true\"\n (removed)=\"removeChip(chip)\">\n </tk-chip>\n }\n </div>\n <tk-button\n [link]=\"true\"\n [label]=\"clearLabel()\"\n class=\"tk-toolbar-chips-bar__clear-btn\"\n (clicked)=\"clearAllFilters()\">\n </tk-button>\n </div>\n }\n\n <!-- 4. Selection Status Bar (Mobile floating panel) -->\n @if (selectionCount() > 0 && isMobile()) {\n <div class=\"tk-toolbar-selection-bar tk-toolbar-selection-bar--mobile\" data-testid=\"selection-bar-mobile\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- 5. Desktop Popovers -->\n@if (derivedFilters().length > 0 && filterVisible() && !isMobile()) {\n <p-popover #filterPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay\" data-testid=\"filter-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ filterLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"filterPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </div>\n </p-popover>\n}\n\n@if (sortOptions().length > 0 && !isMobile()) {\n <p-popover #sortPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay tk-toolbar-overlay--sort\" data-testid=\"sort-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ sortLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"sortPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"sortValue() === option.value\"\n (click)=\"selectSortOption(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n </div>\n </p-popover>\n}\n\n<!-- 6. Mobile Drawers -->\n@if (derivedFilters().length > 0 && filterVisible() && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showFilterDrawer\"\n [title]=\"filterLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-mob-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n\n@if (sortOptions().length > 0 && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showSortDrawer\"\n [title]=\"sortLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"tempSortValue() === option.value\"\n (click)=\"toggleSortOptionMobile(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applySortMobile()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n", styles: [".tk-toolbar-container{display:flex;flex-direction:column;gap:var(--tk-spacing-base-50, .5rem);width:100%}.tk-toolbar{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:var(--tk-spacing-base-100, 1rem);width:100%}.tk-toolbar__search{width:15rem;max-width:100%}@media(max-width:768px){.tk-toolbar__search{width:100%}}.tk-toolbar__actions{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}.tk-toolbar__actions>tk-button{width:2.5rem;height:2.5rem}.tk-toolbar__actions>tk-button ::ng-deep .p-button{width:100%;height:100%;padding:0;display:flex;align-items:center;justify-content:center}.tk-toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px);position:relative}.tk-toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:0;z-index:1;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:3px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.tk-toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}.tk-toolbar-selection-bar{display:flex;justify-content:space-between;align-items:center;width:100%;background-color:var(--tk-color-base-surface-50, #f8fafc);border:1px solid var(--tk-color-base-surface-200, #e2e8f0);border-radius:var(--tk-borderRadius-s, 8px);padding:var(--tk-spacing-base-75, .75rem) var(--tk-spacing-base-100, 1rem);box-sizing:border-box}.tk-toolbar-selection-bar__left{display:flex;align-items:center;gap:var(--tk-spacing-base-75, .75rem)}.tk-toolbar-selection-bar__count{font-size:1rem;font-weight:var(--tk-font-weight-600, 600);color:var(--tk-color-base-surface-900, #0f172a)}.tk-toolbar-selection-bar__right{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}.tk-toolbar-selection-bar--mobile{position:fixed;bottom:0;left:0;width:100%;max-width:none;transform:none;z-index:1000;background-color:var(--tk-color-base-surface-0, #ffffff);box-shadow:0 -4px 6px -1px #0000000d,0 -2px 4px -1px #00000008;border-radius:0;border:none;border-top:1px solid var(--tk-color-base-surface-200, #e2e8f0);padding:var(--tk-spacing-base-75, .75rem) var(--tk-spacing-base-100, 1rem)}.tk-toolbar-chips-bar{width:100%;border-top:none;padding-top:var(--tk-spacing-base-50, .5rem);display:flex;justify-content:space-between;align-items:center;gap:var(--tk-spacing-base-100, 1rem)}.tk-toolbar-chips-bar__scroll{display:flex;align-items:center;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);flex-grow:1}.tk-toolbar-chips-bar__clear-btn{flex-shrink:0}.tk-toolbar-overlay{display:flex;flex-direction:column;width:20rem;max-width:100%;padding:var(--tk-spacing-base-100, 1rem);box-sizing:border-box}.tk-toolbar-overlay--sort{width:15rem;padding:var(--tk-spacing-base-50, .5rem)!important}.tk-toolbar-overlay--sort .tk-toolbar-overlay__header{padding:var(--tk-spacing-base-50, .5rem) var(--tk-spacing-base-50, .5rem) var(--tk-spacing-base-25, .25rem) var(--tk-spacing-base-50, .5rem)!important}.tk-toolbar-overlay--sort .tk-toolbar-overlay__body{padding:0!important;margin-bottom:0!important}.tk-toolbar-overlay__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:0;padding:0 0 var(--tk-spacing-base-50, .5rem) 0}.tk-toolbar-overlay__title{font-size:1rem;font-weight:var(--tk-font-weight-600, 600);color:var(--tk-color-base-surface-900, #0f172a)}.tk-toolbar-overlay__close{background:none;border:none;padding:var(--tk-spacing-base-25, .25rem);color:var(--tk-color-base-surface-500, #64748b);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--tk-borderRadius-s, 8px);transition:background-color .2s}.tk-toolbar-overlay__close:hover{background-color:var(--tk-color-base-surface-100, #f1f5f9);color:var(--tk-color-base-surface-900, #0f172a)}.tk-toolbar-overlay__body{display:flex;flex-direction:column;gap:var(--tk-spacing-base-100, 1rem);padding-top:var(--tk-spacing-base-125, 1.25rem);margin-bottom:var(--tk-spacing-base-150, 1.5rem);max-height:24rem;overflow-y:auto}.tk-toolbar-overlay__field{display:flex;flex-direction:column;gap:var(--tk-spacing-base-25, .25rem)}.tk-toolbar-overlay__footer{display:flex;justify-content:flex-end;gap:var(--tk-spacing-base-50, .5rem);padding-top:var(--tk-spacing-base-100, 1rem)}.tk-toolbar-sort-options{display:flex;flex-direction:column;width:100%}.tk-toolbar-sort-option{display:flex;justify-content:space-between;align-items:center;padding:var(--tk-spacing-base-50, .5rem) var(--tk-spacing-base-50, .5rem);cursor:pointer;border-radius:var(--tk-borderRadius-s, 8px);font-size:.875rem;color:var(--tk-color-base-surface-700, #334155);transition:background-color .2s,color .2s;background:none;border:none;width:100%;font-family:inherit;text-align:left}.tk-toolbar-sort-option:hover{background-color:var(--tk-color-primary-muted, #e9e6f4);color:var(--tk-color-base-primary-500, #16006f)}.tk-toolbar-sort-option--active{font-weight:var(--tk-font-weight-600, 600);color:var(--tk-color-base-primary-500, #16006f);background-color:var(--tk-color-primary-muted, #e9e6f4)}@media(max-width:768px){.tk-toolbar{flex-direction:column;align-items:stretch;gap:var(--tk-spacing-base-50, .5rem)}.tk-toolbar__search{width:100%}.tk-toolbar__actions{width:100%;justify-content:flex-end;margin-left:0}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-popover{border-radius:var(--tk-borderRadius-m, 12px);box-shadow:0 10px 15px -3px #0000001a;border:1px solid var(--tk-color-base-surface-200, #e2e8f0);overflow:hidden}:host ::ng-deep .tk-toolbar-popover .p-popover-content{padding:0!important}:host ::ng-deep tk-drawer .tk-toolbar-overlay__body{padding-top:var(--tk-spacing-base-75, .75rem)!important;margin-bottom:0!important}:host ::ng-deep tk-drawer .tk-toolbar-overlay__footer{padding-top:var(--tk-spacing-base-75, .75rem)!important}::ng-deep .tk-toolbar-multiselect-panel .p-multiselect-option span{color:var(--tk-color-primary-default, #16006f);display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .tk-toolbar-multiselect-panel .p-multiselect-option-selected{background-color:var(--tk-color-primary-muted, #b7b0d2)}::ng-deep .tk-toolbar-multiselect-panel .p-multiselect-filter{border:none;border-radius:0;box-shadow:none;border-bottom:1px solid var(--tk-surface-300, #d2d2d2)}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "tk-button", inputs: ["label", "disabled", "type", "severity", "variant", "link", "icon", "iconPosition", "tooltipText", "size"], outputs: ["clicked"] }, { kind: "component", type: InputTextComponent, selector: "tk-input-text", inputs: ["value", "control", "label", "type", "id", "icon", "clearable", "errorMessage", "hint", "maxLength"], outputs: ["valueChange"] }, { kind: "component", type: CheckboxComponent, selector: "tk-checkbox", inputs: ["model", "value", "label", "name", "inputId", "binary", "control", "errorMessage", "indeterminate", "disabled"], outputs: ["modelChange", "indeterminateChange", "disabledChange"] }, { kind: "component", type: ActionGroupComponent, selector: "tk-action-group", inputs: ["actions", "maxVisible", "disabled"] }, { kind: "component", type: IconComponent, selector: "tk-icon", inputs: ["icon", "styleIcon", "color", "size", "disabled"] }, { kind: "component", type: DropdownComponent, selector: "tk-dropdown", inputs: ["model", "icon", "label", "iconPosition", "size", "disabled", "tooltip", "tooltipPosition"] }, { kind: "component", type: MultiselectComponent, selector: "tk-multiselect", inputs: ["model", "dataSource", "options", "labelText", "display", "maxSelectedLabels", "selectedItemsLabel", "emptyFilterMessage", "filter", "filterPlaceHolder", "appendTo", "panelStyleClass", "id", "styleClass", "errorMessage", "hint", "loading", "emptyMessage", "fetchParams", "sortField", "sortOrder", "disabled"], outputs: ["modelChange", "dataSourceChange", "selectionChange", "filterChange"] }, { kind: "component", type: ChipComponent, selector: "tk-chip", inputs: ["label", "icon", "removable", "removeIcon"], outputs: ["removed"] }, { kind: "component", type: DrawerComponent, selector: "tk-drawer", inputs: ["dialogRef", "title", "content", "headerAction", "tag", "subtle", "hasTabs", "size", "direction", "closable", "dismissible", "data", "interceptor", "isOpened"], outputs: ["isOpenedChange", "closed"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i1.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
183
428
|
}
|
|
184
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
429
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: ToolbarComponent, decorators: [{
|
|
185
430
|
type: Component,
|
|
186
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tk-toolbar', imports: [
|
|
187
|
-
|
|
431
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tk-toolbar', imports: [
|
|
432
|
+
ButtonComponent,
|
|
433
|
+
InputTextComponent,
|
|
434
|
+
CheckboxComponent,
|
|
435
|
+
ActionGroupComponent,
|
|
436
|
+
IconComponent,
|
|
437
|
+
DropdownComponent,
|
|
438
|
+
MultiselectComponent,
|
|
439
|
+
ChipComponent,
|
|
440
|
+
DrawerComponent,
|
|
441
|
+
PopoverModule,
|
|
442
|
+
], template: "<div class=\"tk-toolbar-container\">\n <!-- 1. Selection Status Bar (Desktop replacement) -->\n @if (selectionCount() > 0 && !isMobile()) {\n <div class=\"tk-toolbar-selection-bar\" data-testid=\"selection-bar-desktop\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n } @else {\n <!-- 2. Main Tools Bar -->\n <div class=\"tk-toolbar\" data-testid=\"main-toolbar\">\n <!-- Left part: search input (always visible if searchVisible is true) -->\n @if (searchVisible()) {\n <div class=\"tk-toolbar__search\">\n <tk-input-text\n [label]=\"searchFloatLabel()\"\n icon=\"magnifying-glass\"\n [clearable]=\"true\"\n [value]=\"searchModel()\"\n (valueChange)=\"searchModel.set($event)\">\n </tk-input-text>\n </div>\n }\n\n <!-- Right part: actions -->\n <div class=\"tk-toolbar__actions\">\n @if (viewToggleVisible()) {\n <tk-button\n [icon]=\"view() === 'table' ? 'table' : 'table-list'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"view() === 'table' ? viewCardsTooltip() : viewTableTooltip()\"\n (clicked)=\"toggleView()\">\n </tk-button>\n }\n\n @if (derivedFilters().length > 0 && filterVisible()) {\n <tk-button\n #filterBtn\n [icon]=\"'filter'\"\n [severity]=\"hasActiveFilters() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveFilters() ? undefined : 'text'\"\n [tooltipText]=\"filterLabel()\"\n (click)=\"openFilters($event)\"\n (keydown.enter)=\"openFilters($event)\"\n (keydown.space)=\"openFilters($event)\">\n </tk-button>\n }\n\n @if (sortOptions().length > 0) {\n <tk-button\n #sortBtn\n [icon]=\"'arrow-down-wide-short'\"\n [severity]=\"hasActiveSort() ? 'primary' : 'secondary'\"\n [variant]=\"hasActiveSort() ? undefined : 'text'\"\n [tooltipText]=\"sortTooltip()\"\n (click)=\"openSort($event)\"\n (keydown.enter)=\"openSort($event)\"\n (keydown.space)=\"openSort($event)\">\n </tk-button>\n }\n\n @if (shouldShowReload()) {\n <tk-button\n class=\"tk-toolbar__reload-btn\"\n [class.tk-toolbar__reload-btn--animating]=\"\n reloadInterval() && reloadInterval()! > 0 && !loading()\n \"\n [class.tk-toolbar__reload-btn--spinning]=\"loading()\"\n [style.--reload-interval]=\"(reloadInterval() ?? 0) + 'ms'\"\n [icon]=\"'arrows-rotate'\"\n severity=\"secondary\"\n variant=\"text\"\n [tooltipText]=\"reloadTooltip()\"\n (clicked)=\"onReload()\">\n </tk-button>\n }\n\n @if (globalActions().length > 0) {\n <tk-action-group\n [actions]=\"globalActions()\"\n [maxVisible]=\"0\">\n </tk-action-group>\n }\n </div>\n </div>\n }\n\n @if (shouldShowActiveFiltersBar()) {\n <div class=\"tk-toolbar-chips-bar\" data-testid=\"chips-bar\">\n <div class=\"tk-toolbar-chips-bar__scroll\">\n @for (chip of activeChips(); track chip.filterKey + '-' + chip.code) {\n <tk-chip\n [label]=\"chip.label\"\n [removable]=\"true\"\n (removed)=\"removeChip(chip)\">\n </tk-chip>\n }\n </div>\n <tk-button\n [link]=\"true\"\n [label]=\"clearLabel()\"\n class=\"tk-toolbar-chips-bar__clear-btn\"\n (clicked)=\"clearAllFilters()\">\n </tk-button>\n </div>\n }\n\n <!-- 4. Selection Status Bar (Mobile floating panel) -->\n @if (selectionCount() > 0 && isMobile()) {\n <div class=\"tk-toolbar-selection-bar tk-toolbar-selection-bar--mobile\" data-testid=\"selection-bar-mobile\">\n <div class=\"tk-toolbar-selection-bar__left\">\n <tk-checkbox\n [binary]=\"true\"\n [(model)]=\"allSelected\"\n [indeterminate]=\"indeterminate()\">\n </tk-checkbox>\n <span class=\"tk-toolbar-selection-bar__count\">\n {{ selectionCount() }} {{ selectionCount() === 1 ? selectedLabel() : selectedPluralLabel() }}\n </span>\n </div>\n <div class=\"tk-toolbar-selection-bar__right\">\n @for (action of visibleSelectionActions(); track action.label) {\n <tk-button\n [label]=\"action.label\"\n [icon]=\"action.icon\"\n [severity]=\"action.severity ?? 'secondary'\"\n [variant]=\"action.variant !== undefined ? action.variant : (action.severity === 'danger' ? undefined : 'text')\"\n [disabled]=\"action.disabled ?? false\"\n (clicked)=\"action.action()\">\n </tk-button>\n }\n @if (overflowSelectionActions().length > 0) {\n <tk-dropdown\n icon=\"ellipsis-vertical\"\n [model]=\"overflowSelectionActions()\">\n </tk-dropdown>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- 5. Desktop Popovers -->\n@if (derivedFilters().length > 0 && filterVisible() && !isMobile()) {\n <p-popover #filterPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay\" data-testid=\"filter-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ filterLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"filterPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </div>\n </p-popover>\n}\n\n@if (sortOptions().length > 0 && !isMobile()) {\n <p-popover #sortPopover styleClass=\"tk-toolbar-popover\">\n <div class=\"tk-toolbar-overlay tk-toolbar-overlay--sort\" data-testid=\"sort-popover\">\n <div class=\"tk-toolbar-overlay__header\">\n <span class=\"tk-toolbar-overlay__title\">{{ sortLabel() }}</span>\n <button type=\"button\" class=\"tk-toolbar-overlay__close\" (click)=\"sortPopover.hide()\">\n <tk-icon icon=\"xmark\" size=\"lg\"></tk-icon>\n </button>\n </div>\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"sortValue() === option.value\"\n (click)=\"selectSortOption(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n </div>\n </p-popover>\n}\n\n<!-- 6. Mobile Drawers -->\n@if (derivedFilters().length > 0 && filterVisible() && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showFilterDrawer\"\n [title]=\"filterLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n @for (filter of derivedFilters(); track filter.key) {\n <div class=\"tk-toolbar-overlay__field\">\n <tk-multiselect\n [id]=\"'filter-mob-' + filter.key\"\n [options]=\"filter.options\"\n [labelText]=\"filter.label\"\n [model]=\"tempFilterValues()[filter.key] || []\"\n (modelChange)=\"onTempFilterChange(filter.key, $event || [])\"\n appendTo=\"body\"\n panelStyleClass=\"tk-toolbar-multiselect-panel\">\n </tk-multiselect>\n </div>\n }\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"clearLabel()\"\n severity=\"secondary\"\n variant=\"outlined\"\n (clicked)=\"clearTempFilters()\">\n </tk-button>\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applyFilters()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n\n@if (sortOptions().length > 0 && isMobile()) {\n <tk-drawer\n [(isOpened)]=\"showSortDrawer\"\n [title]=\"sortLabel()\"\n direction=\"bottom\"\n [dismissible]=\"true\">\n <div class=\"tk-toolbar-overlay__body\">\n <div class=\"tk-toolbar-sort-options\">\n @for (option of sortOptions(); track option.value) {\n <button \n type=\"button\"\n class=\"tk-toolbar-sort-option\" \n [class.tk-toolbar-sort-option--active]=\"tempSortValue() === option.value\"\n (click)=\"toggleSortOptionMobile(option.value)\">\n <span>{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n <div class=\"tk-toolbar-overlay__footer\">\n <tk-button\n [label]=\"applyLabel()\"\n severity=\"primary\"\n (clicked)=\"applySortMobile()\">\n </tk-button>\n </div>\n </tk-drawer>\n}\n", styles: [".tk-toolbar-container{display:flex;flex-direction:column;gap:var(--tk-spacing-base-50, .5rem);width:100%}.tk-toolbar{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:var(--tk-spacing-base-100, 1rem);width:100%}.tk-toolbar__search{width:15rem;max-width:100%}@media(max-width:768px){.tk-toolbar__search{width:100%}}.tk-toolbar__actions{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}.tk-toolbar__actions>tk-button{width:2.5rem;height:2.5rem}.tk-toolbar__actions>tk-button ::ng-deep .p-button{width:100%;height:100%;padding:0;display:flex;align-items:center;justify-content:center}.tk-toolbar__reload-btn{border-radius:var(--tk-borderRadius-s, 8px);position:relative}.tk-toolbar__reload-btn--animating:before{content:\"\";position:absolute;inset:0;z-index:1;background:conic-gradient(var(--tk-color-base-sky-300, #92bada) var(--progress, 0%),transparent var(--progress, 0%));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;padding:3px;border-radius:inherit;animation:draw-border var(--reload-interval, 5s) infinite linear;pointer-events:none}.tk-toolbar__reload-btn--spinning ::ng-deep tk-icon{display:inline-block;animation:spin 1s infinite linear}.tk-toolbar-selection-bar{display:flex;justify-content:space-between;align-items:center;width:100%;background-color:var(--tk-color-base-surface-50, #f8fafc);border:1px solid var(--tk-color-base-surface-200, #e2e8f0);border-radius:var(--tk-borderRadius-s, 8px);padding:var(--tk-spacing-base-75, .75rem) var(--tk-spacing-base-100, 1rem);box-sizing:border-box}.tk-toolbar-selection-bar__left{display:flex;align-items:center;gap:var(--tk-spacing-base-75, .75rem)}.tk-toolbar-selection-bar__count{font-size:1rem;font-weight:var(--tk-font-weight-600, 600);color:var(--tk-color-base-surface-900, #0f172a)}.tk-toolbar-selection-bar__right{display:flex;align-items:center;gap:var(--tk-spacing-base-50, .5rem)}.tk-toolbar-selection-bar--mobile{position:fixed;bottom:0;left:0;width:100%;max-width:none;transform:none;z-index:1000;background-color:var(--tk-color-base-surface-0, #ffffff);box-shadow:0 -4px 6px -1px #0000000d,0 -2px 4px -1px #00000008;border-radius:0;border:none;border-top:1px solid var(--tk-color-base-surface-200, #e2e8f0);padding:var(--tk-spacing-base-75, .75rem) var(--tk-spacing-base-100, 1rem)}.tk-toolbar-chips-bar{width:100%;border-top:none;padding-top:var(--tk-spacing-base-50, .5rem);display:flex;justify-content:space-between;align-items:center;gap:var(--tk-spacing-base-100, 1rem)}.tk-toolbar-chips-bar__scroll{display:flex;align-items:center;flex-wrap:wrap;gap:var(--tk-spacing-base-50, .5rem);flex-grow:1}.tk-toolbar-chips-bar__clear-btn{flex-shrink:0}.tk-toolbar-overlay{display:flex;flex-direction:column;width:20rem;max-width:100%;padding:var(--tk-spacing-base-100, 1rem);box-sizing:border-box}.tk-toolbar-overlay--sort{width:15rem;padding:var(--tk-spacing-base-50, .5rem)!important}.tk-toolbar-overlay--sort .tk-toolbar-overlay__header{padding:var(--tk-spacing-base-50, .5rem) var(--tk-spacing-base-50, .5rem) var(--tk-spacing-base-25, .25rem) var(--tk-spacing-base-50, .5rem)!important}.tk-toolbar-overlay--sort .tk-toolbar-overlay__body{padding:0!important;margin-bottom:0!important}.tk-toolbar-overlay__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:0;padding:0 0 var(--tk-spacing-base-50, .5rem) 0}.tk-toolbar-overlay__title{font-size:1rem;font-weight:var(--tk-font-weight-600, 600);color:var(--tk-color-base-surface-900, #0f172a)}.tk-toolbar-overlay__close{background:none;border:none;padding:var(--tk-spacing-base-25, .25rem);color:var(--tk-color-base-surface-500, #64748b);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--tk-borderRadius-s, 8px);transition:background-color .2s}.tk-toolbar-overlay__close:hover{background-color:var(--tk-color-base-surface-100, #f1f5f9);color:var(--tk-color-base-surface-900, #0f172a)}.tk-toolbar-overlay__body{display:flex;flex-direction:column;gap:var(--tk-spacing-base-100, 1rem);padding-top:var(--tk-spacing-base-125, 1.25rem);margin-bottom:var(--tk-spacing-base-150, 1.5rem);max-height:24rem;overflow-y:auto}.tk-toolbar-overlay__field{display:flex;flex-direction:column;gap:var(--tk-spacing-base-25, .25rem)}.tk-toolbar-overlay__footer{display:flex;justify-content:flex-end;gap:var(--tk-spacing-base-50, .5rem);padding-top:var(--tk-spacing-base-100, 1rem)}.tk-toolbar-sort-options{display:flex;flex-direction:column;width:100%}.tk-toolbar-sort-option{display:flex;justify-content:space-between;align-items:center;padding:var(--tk-spacing-base-50, .5rem) var(--tk-spacing-base-50, .5rem);cursor:pointer;border-radius:var(--tk-borderRadius-s, 8px);font-size:.875rem;color:var(--tk-color-base-surface-700, #334155);transition:background-color .2s,color .2s;background:none;border:none;width:100%;font-family:inherit;text-align:left}.tk-toolbar-sort-option:hover{background-color:var(--tk-color-primary-muted, #e9e6f4);color:var(--tk-color-base-primary-500, #16006f)}.tk-toolbar-sort-option--active{font-weight:var(--tk-font-weight-600, 600);color:var(--tk-color-base-primary-500, #16006f);background-color:var(--tk-color-primary-muted, #e9e6f4)}@media(max-width:768px){.tk-toolbar{flex-direction:column;align-items:stretch;gap:var(--tk-spacing-base-50, .5rem)}.tk-toolbar__search{width:100%}.tk-toolbar__actions{width:100%;justify-content:flex-end;margin-left:0}}@property --progress{syntax: \"<percentage>\"; inherits: false; initial-value: 0%;}@keyframes draw-border{0%{--progress: 0%}to{--progress: 100%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host ::ng-deep .tk-input-bottom{display:none}:host ::ng-deep .p-popover{border-radius:var(--tk-borderRadius-m, 12px);box-shadow:0 10px 15px -3px #0000001a;border:1px solid var(--tk-color-base-surface-200, #e2e8f0);overflow:hidden}:host ::ng-deep .tk-toolbar-popover .p-popover-content{padding:0!important}:host ::ng-deep tk-drawer .tk-toolbar-overlay__body{padding-top:var(--tk-spacing-base-75, .75rem)!important;margin-bottom:0!important}:host ::ng-deep tk-drawer .tk-toolbar-overlay__footer{padding-top:var(--tk-spacing-base-75, .75rem)!important}::ng-deep .tk-toolbar-multiselect-panel .p-multiselect-option span{color:var(--tk-color-primary-default, #16006f);display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .tk-toolbar-multiselect-panel .p-multiselect-option-selected{background-color:var(--tk-color-primary-muted, #b7b0d2)}::ng-deep .tk-toolbar-multiselect-panel .p-multiselect-filter{border:none;border-radius:0;box-shadow:none;border-bottom:1px solid var(--tk-surface-300, #d2d2d2)}\n"] }]
|
|
443
|
+
}], ctorParameters: () => [], propDecorators: { searchModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchModel", required: false }] }, { type: i0.Output, args: ["searchModelChange"] }], searchFloatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFloatLabel", required: false }] }], searchVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchVisible", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }, { type: i0.Output, args: ["viewChange"] }], viewToggleVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewToggleVisible", required: false }] }], filters: [{ type: i0.Input, args: [{ isSignal: true, alias: "filters", required: false }] }], filterModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterModel", required: false }] }, { type: i0.Output, args: ["filterModelChange"] }], filterOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptions", required: false }] }], filterOptionLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterOptionLabel", required: false }] }], filterFloatLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterFloatLabel", required: false }] }], filterVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterVisible", required: false }] }], filterValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterValues", required: false }] }, { type: i0.Output, args: ["filterValuesChange"] }], clearLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearLabel", required: false }] }], deleteLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "deleteLabel", required: false }] }], filterLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterLabel", required: false }] }], selectedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedLabel", required: false }] }], selectedPluralLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPluralLabel", required: false }] }], applyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "applyLabel", required: false }] }], reloadTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "reloadTooltip", required: false }] }], sortTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortTooltip", required: false }] }], viewCardsTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewCardsTooltip", required: false }] }], viewTableTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewTableTooltip", required: false }] }], sortOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortOptions", required: false }] }], sortLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortLabel", required: false }] }], sortValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortValue", required: false }] }, { type: i0.Output, args: ["sortValueChange"] }], reloadVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "reloadVisible", required: false }] }], reloadInterval: [{ type: i0.Input, args: [{ isSignal: true, alias: "reloadInterval", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], globalActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "globalActions", required: false }] }], selectionCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionCount", required: false }] }], allSelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "allSelected", required: false }] }, { type: i0.Output, args: ["allSelectedChange"] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }, { type: i0.Output, args: ["indeterminateChange"] }], selectionActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionActions", required: false }] }], maxVisibleSelectionActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleSelectionActions", required: false }] }], reload: [{ type: i0.Output, args: ["reload"] }], appliedFilters: [{ type: i0.Output, args: ["appliedFilters"] }], appliedSort: [{ type: i0.Output, args: ["appliedSort"] }], filterPopover: [{ type: i0.ViewChild, args: ['filterPopover', { isSignal: true }] }], sortPopover: [{ type: i0.ViewChild, args: ['sortPopover', { isSignal: true }] }] } });
|
|
188
444
|
|
|
189
445
|
/**
|
|
190
446
|
* Generated bundle index. Do not edit.
|