@fylib/adapter-angular 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/base/base-component.d.ts +18 -0
  2. package/dist/base/base-component.js +36 -0
  3. package/dist/base/interaction.utils.d.ts +7 -0
  4. package/dist/base/interaction.utils.js +34 -0
  5. package/dist/base/interaction.utils.test.d.ts +1 -0
  6. package/dist/base/interaction.utils.test.js +25 -0
  7. package/dist/components/accordion.component.d.ts +32 -0
  8. package/dist/components/accordion.component.js +337 -0
  9. package/dist/components/badge.component.d.ts +10 -0
  10. package/dist/components/badge.component.js +112 -0
  11. package/dist/components/button.component.d.ts +33 -0
  12. package/dist/components/button.component.js +272 -0
  13. package/dist/components/card.component.d.ts +29 -0
  14. package/dist/components/card.component.js +236 -0
  15. package/dist/components/chart.component.d.ts +39 -0
  16. package/dist/components/chart.component.js +307 -0
  17. package/dist/components/icon.component.d.ts +18 -0
  18. package/dist/components/icon.component.js +144 -0
  19. package/dist/components/input.component.d.ts +50 -0
  20. package/dist/components/input.component.js +383 -0
  21. package/dist/components/modal.component.d.ts +46 -0
  22. package/dist/components/modal.component.js +404 -0
  23. package/dist/components/nav-link.component.d.ts +11 -0
  24. package/dist/components/nav-link.component.js +121 -0
  25. package/dist/components/notification-menu.component.d.ts +68 -0
  26. package/dist/components/notification-menu.component.js +695 -0
  27. package/dist/components/select.component.d.ts +52 -0
  28. package/dist/components/select.component.js +395 -0
  29. package/dist/components/table.component.d.ts +55 -0
  30. package/dist/components/table.component.js +643 -0
  31. package/dist/components/text.component.d.ts +8 -0
  32. package/dist/components/text.component.js +58 -0
  33. package/dist/components/toast.component.d.ts +27 -0
  34. package/dist/components/toast.component.js +260 -0
  35. package/dist/directives/animation.directive.d.ts +5 -0
  36. package/dist/directives/animation.directive.js +34 -0
  37. package/dist/directives/theme-vars.directive.d.ts +7 -0
  38. package/dist/directives/theme-vars.directive.js +70 -0
  39. package/dist/directives/wallpaper.directive.d.ts +28 -0
  40. package/dist/directives/wallpaper.directive.js +195 -0
  41. package/dist/effects/confetti.plugin.d.ts +1 -0
  42. package/dist/effects/confetti.plugin.js +151 -0
  43. package/dist/effects/extra-effects.plugin.d.ts +3 -0
  44. package/dist/effects/extra-effects.plugin.js +288 -0
  45. package/dist/effects/hearts.plugin.d.ts +1 -0
  46. package/dist/effects/hearts.plugin.js +172 -0
  47. package/dist/effects/register-all.d.ts +1 -0
  48. package/dist/effects/register-all.js +16 -0
  49. package/dist/effects/ui-effects.plugin.d.ts +1 -0
  50. package/dist/effects/ui-effects.plugin.js +134 -0
  51. package/dist/icons/providers/fontawesome.provider.d.ts +3 -0
  52. package/dist/icons/providers/fontawesome.provider.js +25 -0
  53. package/dist/icons/providers/mdi.provider.d.ts +3 -0
  54. package/dist/icons/providers/mdi.provider.js +13 -0
  55. package/dist/icons/providers/phosphor.provider.d.ts +3 -0
  56. package/dist/icons/providers/phosphor.provider.js +17 -0
  57. package/dist/icons/registry.d.ts +22 -0
  58. package/dist/icons/registry.js +12 -0
  59. package/dist/index.d.ts +29 -0
  60. package/dist/index.js +29 -0
  61. package/dist/layouts/layout.component.d.ts +24 -0
  62. package/dist/layouts/layout.component.js +255 -0
  63. package/dist/layouts/slot.component.d.ts +61 -0
  64. package/dist/layouts/slot.component.js +937 -0
  65. package/dist/providers.d.ts +12 -0
  66. package/dist/providers.js +18 -0
  67. package/dist/services/fylib.service.d.ts +31 -0
  68. package/dist/services/fylib.service.js +214 -0
  69. package/dist/services/notification.service.d.ts +27 -0
  70. package/dist/services/notification.service.js +118 -0
  71. package/dist/services/sse.service.d.ts +16 -0
  72. package/dist/services/sse.service.js +109 -0
  73. package/dist/services/webclient.service.d.ts +38 -0
  74. package/dist/services/webclient.service.js +144 -0
  75. package/package.json +43 -0
@@ -0,0 +1,52 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { SelectProps } from '@fylib/catalog';
3
+ import { BaseFyComponent, FyComponentBaseInputs } from '../base/base-component';
4
+ export declare class FySelectComponent extends BaseFyComponent<'fy-select'> implements SelectProps, FyComponentBaseInputs {
5
+ options: {
6
+ label: string;
7
+ value: string;
8
+ disabled?: boolean;
9
+ }[];
10
+ value?: string | string[];
11
+ placeholder?: string;
12
+ disabled: boolean;
13
+ readonly: boolean;
14
+ size: 'sm' | 'md' | 'lg';
15
+ status: 'default' | 'success' | 'error';
16
+ iconRightName?: string;
17
+ searchable?: boolean;
18
+ showCheckbox?: boolean;
19
+ closeOnSelect?: boolean;
20
+ onChange?: (value: string | string[]) => void;
21
+ onFocus?: () => void;
22
+ onBlur?: () => void;
23
+ activeAnimations: boolean | null;
24
+ activeEffects: boolean | null;
25
+ customStyles: Record<string, string> | null;
26
+ fyChange: EventEmitter<string | string[]>;
27
+ fyFocus: EventEmitter<void>;
28
+ fyBlur: EventEmitter<void>;
29
+ get animationsDisabled(): boolean;
30
+ get hostStyles(): string;
31
+ open: boolean;
32
+ searchTerm: string;
33
+ dropdownAnimClass: string;
34
+ constructor();
35
+ private hostEl;
36
+ get filteredOptions(): {
37
+ label: string;
38
+ value: string;
39
+ disabled?: boolean;
40
+ }[];
41
+ get displayValue(): string;
42
+ get animationClassSuffix(): string;
43
+ toggleOpen(): void;
44
+ onFocusHandler(): void;
45
+ onBlurHandler(): void;
46
+ onCheckboxChange(event: Event, val: string): void;
47
+ onDocumentClick(event: MouseEvent): void;
48
+ onKeydown(event: KeyboardEvent): void;
49
+ selectOption(val: string): void;
50
+ isSelected(val: string): boolean;
51
+ onSearch(event: Event): void;
52
+ }
@@ -0,0 +1,395 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Component, Input, Output, EventEmitter, ViewEncapsulation, HostBinding, HostListener, inject } from '@angular/core';
11
+ import { CommonModule } from '@angular/common';
12
+ import { SelectDefinition } from '@fylib/catalog';
13
+ import { FyIconComponent } from './icon.component';
14
+ import { BaseFyComponent } from '../base/base-component';
15
+ import { ElementRef } from '@angular/core';
16
+ let FySelectComponent = class FySelectComponent extends BaseFyComponent {
17
+ get animationsDisabled() {
18
+ return !this.isAnimationsActive(this.activeAnimations);
19
+ }
20
+ get hostStyles() {
21
+ return this.getHostStyles(this.customStyles);
22
+ }
23
+ constructor() {
24
+ super(inject(require('../services/fylib.service').FyLibService), 'fy-select');
25
+ this.options = [];
26
+ this.disabled = SelectDefinition.defaultProps.disabled;
27
+ this.readonly = SelectDefinition.defaultProps.readonly;
28
+ this.size = SelectDefinition.defaultProps.size;
29
+ this.status = SelectDefinition.defaultProps.status;
30
+ this.activeAnimations = null;
31
+ this.activeEffects = null;
32
+ this.customStyles = null;
33
+ this.fyChange = new EventEmitter();
34
+ this.fyFocus = new EventEmitter();
35
+ this.fyBlur = new EventEmitter();
36
+ this.open = false;
37
+ this.searchTerm = '';
38
+ this.dropdownAnimClass = '';
39
+ this.hostEl = inject(ElementRef);
40
+ }
41
+ get filteredOptions() {
42
+ if (!this.searchTerm)
43
+ return this.options;
44
+ return this.options.filter(o => o.label.toLowerCase().includes(this.searchTerm.toLowerCase()));
45
+ }
46
+ get displayValue() {
47
+ if (!this.value)
48
+ return '';
49
+ if (Array.isArray(this.value)) {
50
+ return this.options
51
+ .filter(o => this.value?.includes(o.value))
52
+ .map(o => o.label)
53
+ .join(', ');
54
+ }
55
+ return this.options.find(o => o.value === this.value)?.label || '';
56
+ }
57
+ get animationClassSuffix() {
58
+ const focus = this.resolveAnim('focus', undefined, SelectDefinition.features?.animations?.focus);
59
+ const key = this.status === 'success' ? 'success' : (this.status === 'error' ? 'error' : undefined);
60
+ const state = key
61
+ ? this.resolveAnim(key, undefined, SelectDefinition.features?.animations?.[key])
62
+ : undefined;
63
+ return this.composeAnimClasses(focus, state);
64
+ }
65
+ toggleOpen() {
66
+ if (this.disabled || this.readonly)
67
+ return;
68
+ this.open = !this.open;
69
+ if (this.isAnimationsActive(this.activeAnimations)) {
70
+ const anim = this.open ? 'header-menu-dropdown-in' : 'header-menu-dropdown-out';
71
+ this.fylib.playAnimation(anim);
72
+ this.dropdownAnimClass = `fy-anim-${anim}`;
73
+ const timeout = this.open ? 250 : 250;
74
+ setTimeout(() => { this.dropdownAnimClass = ''; }, timeout);
75
+ }
76
+ if (this.open) {
77
+ this.onFocusHandler();
78
+ }
79
+ else {
80
+ this.onBlurHandler();
81
+ }
82
+ }
83
+ onFocusHandler() {
84
+ if (this.isAnimationsActive(this.activeAnimations)) {
85
+ const name = this.resolveAnim('focus', undefined, SelectDefinition.features?.animations?.focus);
86
+ if (name)
87
+ this.fylib.playAnimation(name);
88
+ this.triggerByEvent('fy-select.focus', undefined, this.activeEffects);
89
+ }
90
+ if (this.onFocus)
91
+ this.onFocus();
92
+ this.fyFocus.emit();
93
+ }
94
+ onBlurHandler() {
95
+ if (this.onBlur)
96
+ this.onBlur();
97
+ this.fyBlur.emit();
98
+ }
99
+ onCheckboxChange(event, val) {
100
+ event.stopPropagation();
101
+ this.selectOption(val);
102
+ }
103
+ onDocumentClick(event) {
104
+ if (!this.open)
105
+ return;
106
+ const target = event.target;
107
+ if (!this.hostEl.nativeElement.contains(target)) {
108
+ this.open = false;
109
+ if (this.isAnimationsActive(this.activeAnimations)) {
110
+ this.fylib.playAnimation('header-menu-dropdown-out');
111
+ this.dropdownAnimClass = 'fy-anim-header-menu-dropdown-out';
112
+ setTimeout(() => { this.dropdownAnimClass = ''; }, 250);
113
+ }
114
+ this.onBlurHandler();
115
+ }
116
+ }
117
+ onKeydown(event) {
118
+ if (!this.open)
119
+ return;
120
+ if (event.key === 'Escape') {
121
+ this.open = false;
122
+ if (this.isAnimationsActive(this.activeAnimations)) {
123
+ this.fylib.playAnimation('header-menu-dropdown-out');
124
+ this.dropdownAnimClass = 'fy-anim-header-menu-dropdown-out';
125
+ setTimeout(() => { this.dropdownAnimClass = ''; }, 250);
126
+ }
127
+ this.onBlurHandler();
128
+ }
129
+ }
130
+ selectOption(val) {
131
+ if (this.showCheckbox) {
132
+ const arr = Array.isArray(this.value) ? [...this.value] : [];
133
+ const index = arr.indexOf(val);
134
+ if (index >= 0)
135
+ arr.splice(index, 1);
136
+ else
137
+ arr.push(val);
138
+ this.value = arr;
139
+ }
140
+ else {
141
+ this.value = val;
142
+ if (this.closeOnSelect !== false) {
143
+ this.open = false;
144
+ }
145
+ }
146
+ if (this.onChange)
147
+ this.onChange(this.value);
148
+ this.fyChange.emit(this.value);
149
+ }
150
+ isSelected(val) {
151
+ if (Array.isArray(this.value))
152
+ return this.value.includes(val);
153
+ return this.value === val;
154
+ }
155
+ onSearch(event) {
156
+ const input = event.target;
157
+ this.searchTerm = input.value;
158
+ }
159
+ };
160
+ __decorate([
161
+ Input(),
162
+ __metadata("design:type", Array)
163
+ ], FySelectComponent.prototype, "options", void 0);
164
+ __decorate([
165
+ Input(),
166
+ __metadata("design:type", Object)
167
+ ], FySelectComponent.prototype, "value", void 0);
168
+ __decorate([
169
+ Input(),
170
+ __metadata("design:type", String)
171
+ ], FySelectComponent.prototype, "placeholder", void 0);
172
+ __decorate([
173
+ Input(),
174
+ __metadata("design:type", Boolean)
175
+ ], FySelectComponent.prototype, "disabled", void 0);
176
+ __decorate([
177
+ Input(),
178
+ __metadata("design:type", Boolean)
179
+ ], FySelectComponent.prototype, "readonly", void 0);
180
+ __decorate([
181
+ Input(),
182
+ __metadata("design:type", String)
183
+ ], FySelectComponent.prototype, "size", void 0);
184
+ __decorate([
185
+ Input(),
186
+ __metadata("design:type", String)
187
+ ], FySelectComponent.prototype, "status", void 0);
188
+ __decorate([
189
+ Input(),
190
+ __metadata("design:type", String)
191
+ ], FySelectComponent.prototype, "iconRightName", void 0);
192
+ __decorate([
193
+ Input(),
194
+ __metadata("design:type", Boolean)
195
+ ], FySelectComponent.prototype, "searchable", void 0);
196
+ __decorate([
197
+ Input(),
198
+ __metadata("design:type", Boolean)
199
+ ], FySelectComponent.prototype, "showCheckbox", void 0);
200
+ __decorate([
201
+ Input(),
202
+ __metadata("design:type", Boolean)
203
+ ], FySelectComponent.prototype, "closeOnSelect", void 0);
204
+ __decorate([
205
+ Input(),
206
+ __metadata("design:type", Function)
207
+ ], FySelectComponent.prototype, "onChange", void 0);
208
+ __decorate([
209
+ Input(),
210
+ __metadata("design:type", Function)
211
+ ], FySelectComponent.prototype, "onFocus", void 0);
212
+ __decorate([
213
+ Input(),
214
+ __metadata("design:type", Function)
215
+ ], FySelectComponent.prototype, "onBlur", void 0);
216
+ __decorate([
217
+ Input(),
218
+ __metadata("design:type", Object)
219
+ ], FySelectComponent.prototype, "activeAnimations", void 0);
220
+ __decorate([
221
+ Input(),
222
+ __metadata("design:type", Object)
223
+ ], FySelectComponent.prototype, "activeEffects", void 0);
224
+ __decorate([
225
+ Input(),
226
+ __metadata("design:type", Object)
227
+ ], FySelectComponent.prototype, "customStyles", void 0);
228
+ __decorate([
229
+ Output(),
230
+ __metadata("design:type", Object)
231
+ ], FySelectComponent.prototype, "fyChange", void 0);
232
+ __decorate([
233
+ Output(),
234
+ __metadata("design:type", Object)
235
+ ], FySelectComponent.prototype, "fyFocus", void 0);
236
+ __decorate([
237
+ Output(),
238
+ __metadata("design:type", Object)
239
+ ], FySelectComponent.prototype, "fyBlur", void 0);
240
+ __decorate([
241
+ HostBinding('class.fy-animations-disabled'),
242
+ __metadata("design:type", Boolean),
243
+ __metadata("design:paramtypes", [])
244
+ ], FySelectComponent.prototype, "animationsDisabled", null);
245
+ __decorate([
246
+ HostBinding('style'),
247
+ __metadata("design:type", String),
248
+ __metadata("design:paramtypes", [])
249
+ ], FySelectComponent.prototype, "hostStyles", null);
250
+ __decorate([
251
+ HostListener('document:click', ['$event']),
252
+ __metadata("design:type", Function),
253
+ __metadata("design:paramtypes", [MouseEvent]),
254
+ __metadata("design:returntype", void 0)
255
+ ], FySelectComponent.prototype, "onDocumentClick", null);
256
+ __decorate([
257
+ HostListener('keydown', ['$event']),
258
+ __metadata("design:type", Function),
259
+ __metadata("design:paramtypes", [KeyboardEvent]),
260
+ __metadata("design:returntype", void 0)
261
+ ], FySelectComponent.prototype, "onKeydown", null);
262
+ FySelectComponent = __decorate([
263
+ Component({
264
+ selector: 'fy-select',
265
+ standalone: true,
266
+ imports: [CommonModule, FyIconComponent],
267
+ template: `
268
+ <div
269
+ class="fy-select"
270
+ [class.fy-select--open]="open"
271
+ [class.fy-select--sm]="size === 'sm'"
272
+ [class.fy-select--lg]="size === 'lg'"
273
+ [class.fy-select--status-success]="status === 'success'"
274
+ [class.fy-select--status-error]="status === 'error'"
275
+ [class]="animationClassSuffix"
276
+ >
277
+ <div
278
+ class="fy-select__control"
279
+ tabindex="0"
280
+ (click)="toggleOpen()"
281
+ (focus)="onFocusHandler()"
282
+ (blur)="onBlurHandler()"
283
+ >
284
+ <span class="fy-select__value">
285
+ {{ displayValue || placeholder }}
286
+ </span>
287
+
288
+ @if (iconRightName) {
289
+ <fy-icon class="fy-select__icon" [name]="iconRightName"></fy-icon>
290
+ }
291
+ </div>
292
+
293
+ @if (open) {
294
+ <div class="fy-select__dropdown" [class]="dropdownAnimClass">
295
+ @if (searchable) {
296
+ <input
297
+ class="fy-select__search"
298
+ type="text"
299
+ placeholder="Buscar..."
300
+ (input)="onSearch($event)"
301
+ />
302
+ }
303
+
304
+ @for (opt of filteredOptions; track opt.value) {
305
+ <div
306
+ class="fy-select__option"
307
+ [class.fy-select__option--selected]="isSelected(opt.value)"
308
+ (click)="selectOption(opt.value)"
309
+ >
310
+ @if (showCheckbox) {
311
+ <input
312
+ type="checkbox"
313
+ [checked]="isSelected(opt.value)"
314
+ (click)="$event.stopPropagation()"
315
+ (change)="onCheckboxChange($event, opt.value)"
316
+ />
317
+ }
318
+ {{ opt.label }}
319
+ </div>
320
+ }
321
+ </div>
322
+ }
323
+ </div>
324
+ `,
325
+ styles: [`
326
+ .fy-select {
327
+ position: relative;
328
+ width: 100%;
329
+ font: inherit;
330
+ display: inline-flex;
331
+ align-items: center;
332
+ border: var(--fy-effects-select-borderWidth, 1px) solid var(--fy-effects-select-borderColor, rgba(0,0,0,.15));
333
+ background: var(--fy-effects-select-background, #fff);
334
+ border-radius: var(--fy-effects-select-borderRadius, var(--fy-borderRadius-md));
335
+ box-shadow: var(--fy-effects-select-shadow, none);
336
+ min-height: 36px;
337
+ padding: 0 10px;
338
+ gap: 6px;
339
+ transition: box-shadow .2s ease, border-color .2s ease, background-color .2s ease;
340
+ }
341
+
342
+ .fy-select__control {
343
+ display: flex;
344
+ align-items: center;
345
+ justify-content: space-between;
346
+ width: 100%;
347
+ cursor: pointer;
348
+ }
349
+
350
+ .fy-select__dropdown {
351
+ position: absolute;
352
+ left: 0;
353
+ right: 0;
354
+ top: calc(100% + 4px);
355
+ background: var(--fy-effects-select-background, #fff);
356
+ border: 1px solid var(--fy-effects-select-borderColor, rgba(0,0,0,.1));
357
+ border-radius: var(--fy-borderRadius-md);
358
+ box-shadow: var(--fy-effects-select-shadow, none);
359
+ max-height: 240px;
360
+ overflow-y: auto;
361
+ z-index: 1000;
362
+ }
363
+
364
+ .fy-select__option {
365
+ padding: 6px 10px;
366
+ cursor: pointer;
367
+ display: flex;
368
+ align-items: center;
369
+ gap: 6px;
370
+ }
371
+
372
+ .fy-select__option--selected {
373
+ background: rgba(var(--fy-colors-primary-rgb, 59,130,246), 0.08);
374
+ }
375
+
376
+ .fy-select__search {
377
+ width: 100%;
378
+ padding: 6px;
379
+ border: none;
380
+ outline: none;
381
+ border-bottom: 1px solid rgba(0,0,0,.1);
382
+ background-color: transparent;
383
+ }
384
+ .fy-select__icon {
385
+ transition: transform .2s ease;
386
+ }
387
+ .fy-select.fy-select--open .fy-select__icon {
388
+ transform: rotate(180deg);
389
+ }
390
+ `],
391
+ encapsulation: ViewEncapsulation.None
392
+ }),
393
+ __metadata("design:paramtypes", [])
394
+ ], FySelectComponent);
395
+ export { FySelectComponent };
@@ -0,0 +1,55 @@
1
+ import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
2
+ import { TableProps, TableColumn, TableAction } from '@fylib/catalog';
3
+ import { BaseFyComponent } from '../base/base-component';
4
+ export declare class FyTableComponent extends BaseFyComponent<'fy-table'> implements TableProps, OnInit {
5
+ data: any[];
6
+ columns: TableColumn[];
7
+ title?: string;
8
+ subtitle?: string;
9
+ footer?: string;
10
+ loading: boolean;
11
+ showHeader: boolean;
12
+ showFooter: boolean;
13
+ showPagination: boolean;
14
+ showSearch: boolean;
15
+ currentPage: number;
16
+ pageSize: number;
17
+ totalItems: number;
18
+ searchTargets: string[];
19
+ actions?: TableAction[];
20
+ rowClickable: boolean;
21
+ variant: TableProps['variant'];
22
+ stickyHeader: boolean;
23
+ scrollable: boolean;
24
+ maxHeight?: string;
25
+ activeAnimations: boolean | null;
26
+ activeEffects: boolean | null;
27
+ customStyles: Record<string, string> | null;
28
+ fySearch: EventEmitter<string>;
29
+ fySort: EventEmitter<TableColumn & {
30
+ direction: "asc" | "desc" | null;
31
+ }>;
32
+ fyPageChange: EventEmitter<number>;
33
+ fyRowClick: EventEmitter<any>;
34
+ cellTemplate?: TemplateRef<any>;
35
+ private sortKey;
36
+ private sortDirection;
37
+ private searchTerm;
38
+ constructor();
39
+ get paginatedData(): any[];
40
+ get filteredTotal(): number;
41
+ ngOnInit(): void;
42
+ get visibleColumns(): TableColumn[];
43
+ get totalColumns(): number;
44
+ get totalPages(): number;
45
+ get startItem(): number;
46
+ get endItem(): number;
47
+ get displayTotal(): number;
48
+ get animationClassSuffix(): string;
49
+ onSearch(value: string): void;
50
+ onSort(col: TableColumn): void;
51
+ getSortIcon(col: TableColumn): string;
52
+ onPageChange(page: number): void;
53
+ onRowClick(row: any): void;
54
+ onActionClick(event: MouseEvent, action: TableAction, row: any): void;
55
+ }