@masterteam/components 0.0.18 → 0.0.20

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/assets/common.css CHANGED
@@ -1,57 +1 @@
1
- @import "tailwindcss";
2
- @plugin "tailwindcss-primeui";
3
-
4
- @source inline("{dark:,}bg-primary-{50,{100..900..100},950}");
5
- @source inline("bg-teal-{50,{100..900..100},550}");
6
- @source inline("bg-violet-{50,{100..900..100},550}");
7
- @source inline("bg-red-{50,{100..900..100},550}");
8
-
9
- @source inline("border-primary-{50,{100..500..100},550}");
10
- @source inline("border-teal-{50,{100..500..100},550}");
11
- @source inline("border-violet-{50,{100..500..100},550}");
12
- @source inline("border-red-{50,{100..500..100},550}");
13
-
14
- @source inline("ring-primary-{50,{100..500..100},550}");
15
- @source inline("ring-teal-{50,{100..500..100},550}");
16
- @source inline("ring-violet-{50,{100..500..100},550}");
17
- @source inline("ring-red-{50,{100..500..100},550}");
18
-
19
- @source inline("text-primary-{50,{100..500..100},550}");
20
- @source inline("text-teal-{50,{100..500..100},550}");
21
- @source inline("text-violet-{50,{100..500..100},550}");
22
- @source inline("text-red-{50,{100..500..100},550}");
23
-
24
- @custom-variant dark (&:where(.dark, .dark *));
25
-
26
- :root {
27
- --app-background: var(--p-surface-100);
28
- }
29
-
30
- :root[class="dark"] {
31
- --app-background: var(--p-surface-950);
32
- }
33
-
34
- body {
35
- background-color: var(--app-background);
36
- }
37
-
38
- @utility bg-content {
39
- background-color: var(--p-content-background);
40
- }
41
-
42
- @layer components {
43
- label.required {
44
- &:after {
45
- content: "*";
46
- color: var(--p-red-500);
47
- padding-inline-start: 2px;
48
- }
49
- }
50
- .dark {
51
- label.required {
52
- &:after {
53
- color: var(--p-red-600);
54
- }
55
- }
56
- }
57
- }
1
+ :root{--app-background:var(--p-surface-100)}:root[class=dark]{--app-background:var(--p-surface-950)}body{background-color:var(--app-background)}@utility bg-content{background-color: var(--p-content-background);}@layer components{label.required:after{content:"*";color:var(--p-red-500);padding-inline-start:2px}.dark label.required:after{color:var(--p-red-600)}}
@@ -1,57 +1,19 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, booleanAttribute, computed, model, output, contentChild, TemplateRef, effect, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { input, booleanAttribute, computed, model, output, contentChild, TemplateRef, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { Avatar } from '@masterteam/components/avatar';
4
4
  import { NgTemplateOutlet } from '@angular/common';
5
5
 
6
6
  class RadioCards {
7
7
  circle = input(false, ...(ngDevMode ? [{ debugName: "circle", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
8
- color = input('primary', ...(ngDevMode ? [{ debugName: "color", transform: (value) => {
9
- if (value) {
10
- return value;
11
- }
12
- return 'primary';
13
- } }] : [{
14
- transform: (value) => {
15
- if (value) {
16
- return value;
17
- }
18
- return 'primary';
19
- },
20
- }]));
21
- size = input('medium', ...(ngDevMode ? [{ debugName: "size", transform: (value) => {
22
- if (value) {
23
- switch (value) {
24
- case 'small':
25
- return 'xs';
26
- case 'medium':
27
- return 'base';
28
- case 'large':
29
- return '2xl';
30
- }
31
- }
32
- return 'base';
33
- } }] : [{
34
- transform: (value) => {
35
- if (value) {
36
- switch (value) {
37
- case 'small':
38
- return 'xs';
39
- case 'medium':
40
- return 'base';
41
- case 'large':
42
- return '2xl';
43
- }
44
- }
45
- return 'base';
46
- },
47
- }]));
8
+ color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : []));
9
+ size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : []));
48
10
  avatarSize = computed(() => {
49
11
  switch (this.size()) {
50
- case 'xs':
12
+ case 'small':
51
13
  return 'normal';
52
- case 'base':
14
+ case 'medium':
53
15
  return 'large';
54
- case '2xl':
16
+ case 'large':
55
17
  return 'xlarge';
56
18
  default:
57
19
  return 'normal';
@@ -62,51 +24,38 @@ class RadioCards {
62
24
  selectionChange = output();
63
25
  itemTemplate = input(null, ...(ngDevMode ? [{ debugName: "itemTemplate" }] : []));
64
26
  itemTemplateContent = contentChild('option', ...(ngDevMode ? [{ debugName: "itemTemplateContent", read: TemplateRef }] : [{ read: TemplateRef }]));
65
- /**
66
- * A computed signal that generates the dynamic Tailwind CSS classes
67
- * for the active state based on the color input.
68
- */
27
+ textSizeClass = computed(() => {
28
+ switch (this.size()) {
29
+ case 'small':
30
+ return 'text-xs';
31
+ case 'large':
32
+ return 'text-2xl';
33
+ default:
34
+ return 'text-base';
35
+ }
36
+ }, ...(ngDevMode ? [{ debugName: "textSizeClass" }] : []));
37
+ classes = computed(() => { }, ...(ngDevMode ? [{ debugName: "classes" }] : []));
69
38
  activeColorClasses = computed(() => {
70
- const color = this.color();
71
- return {
72
- [`bg-${color}-50`]: true,
73
- [`dark:bg-${color}-800`]: true,
74
- [`border-${color}-400`]: true,
75
- [`ring-${color}-200`]: true,
76
- };
39
+ return [
40
+ 'bg-primary-50',
41
+ 'dark:bg-primary-800',
42
+ 'border-primary-400',
43
+ 'ring-primary-200',
44
+ ];
77
45
  }, ...(ngDevMode ? [{ debugName: "activeColorClasses" }] : []));
78
- constructor() {
79
- effect(() => {
80
- const active = this.activeId();
81
- console.log('Active ID changed to:', active);
82
- this.options.update((options) => {
83
- return options.map((option) => {
84
- option.active = option.id === active;
85
- return option;
86
- });
87
- });
88
- });
89
- }
90
46
  selectItem(item) {
91
47
  if (this.activeId() !== item.id) {
92
48
  this.activeId.set(item.id);
93
49
  this.selectionChange.emit(item);
94
50
  }
95
- const options = this.options();
96
- options.map((option) => {
97
- const active = option.id === this.activeId();
98
- option.active = active;
99
- return option;
100
- });
101
- this.options.set(options);
102
51
  }
103
52
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: RadioCards, deps: [], target: i0.ɵɵFactoryTarget.Component });
104
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: RadioCards, isStandalone: true, selector: "mt-radio-cards", inputs: { circle: { classPropertyName: "circle", publicName: "circle", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, activeId: { classPropertyName: "activeId", publicName: "activeId", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { options: "optionsChange", activeId: "activeIdChange", selectionChange: "selectionChange" }, queries: [{ propertyName: "itemTemplateContent", first: true, predicate: ["option"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of options(); track item.id) {\n <div\n (click)=\"selectItem(item)\"\n class=\"flex items-center space-x-4 p-4 rounded-lg cursor-pointer border-2 border-dashed transition-all ease-in-out duration-300\"\n [class]=\"\n item.active\n ? activeColorClasses()\n : 'border-gray-300 hover:border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-600 dark:hover:text-gray-100 '\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate() || itemTemplateContent() || defaultTemplate;\n context: {\n $implicit: item,\n active: item.active,\n color: color(),\n size: size(),\n }\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n</div>\n\n<ng-template\n #defaultTemplate\n let-template\n let-active=\"active\"\n let-color=\"color\"\n let-size=\"size\"\n>\n @if (template.icon) {\n <mt-avatar\n [shape]=\"circle() ? 'circle' : 'square'\"\n [size]=\"avatarSize()\"\n [icon]=\"template.icon\"\n ></mt-avatar>\n }\n @if (template.name) {\n <span\n class=\"font-semibold\"\n [class]=\"\n 'text-' +\n size +\n ' ' +\n (active\n ? 'text-' + color + '-500'\n : 'dark:text-gray-100 text-gray-600 ')\n \"\n >\n {{ template.name }}\n </span>\n }\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
53
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: RadioCards, isStandalone: true, selector: "mt-radio-cards", inputs: { circle: { classPropertyName: "circle", publicName: "circle", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, activeId: { classPropertyName: "activeId", publicName: "activeId", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { options: "optionsChange", activeId: "activeIdChange", selectionChange: "selectionChange" }, queries: [{ propertyName: "itemTemplateContent", first: true, predicate: ["option"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of options(); track item.id) {\n @let active = item.id === activeId();\n <div\n (click)=\"selectItem(item)\"\n class=\"flex items-center space-x-4 p-4 rounded-lg cursor-pointer border-2 border-dashed transition-all ease-in-out duration-300\"\n [class]=\"\n active\n ? 'bg-primary-50 dark:bg-primary-800 border-primary-400 ring-primary-200'\n : 'border-gray-300 hover:border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-600 dark:hover:text-gray-100'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate() || itemTemplateContent() || defaultTemplate;\n context: {\n $implicit: item,\n active: active,\n size: size(),\n }\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n</div>\n\n<ng-template #defaultTemplate let-template let-active=\"active\" let-size=\"size\">\n @if (template.icon) {\n <mt-avatar\n [shape]=\"circle() ? 'circle' : 'square'\"\n [size]=\"avatarSize()\"\n [icon]=\"template.icon\"\n ></mt-avatar>\n }\n @if (template.name) {\n <span\n [class]=\"[\n 'font-semibold',\n textSizeClass(),\n 'dark:text-gray-100',\n 'text-gray-600',\n ]\"\n >\n {{ template.name }}\n </span>\n }\n</ng-template>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
105
54
  }
106
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: RadioCards, decorators: [{
107
56
  type: Component,
108
- args: [{ selector: 'mt-radio-cards', standalone: true, imports: [NgTemplateOutlet, Avatar], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of options(); track item.id) {\n <div\n (click)=\"selectItem(item)\"\n class=\"flex items-center space-x-4 p-4 rounded-lg cursor-pointer border-2 border-dashed transition-all ease-in-out duration-300\"\n [class]=\"\n item.active\n ? activeColorClasses()\n : 'border-gray-300 hover:border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-600 dark:hover:text-gray-100 '\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate() || itemTemplateContent() || defaultTemplate;\n context: {\n $implicit: item,\n active: item.active,\n color: color(),\n size: size(),\n }\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n</div>\n\n<ng-template\n #defaultTemplate\n let-template\n let-active=\"active\"\n let-color=\"color\"\n let-size=\"size\"\n>\n @if (template.icon) {\n <mt-avatar\n [shape]=\"circle() ? 'circle' : 'square'\"\n [size]=\"avatarSize()\"\n [icon]=\"template.icon\"\n ></mt-avatar>\n }\n @if (template.name) {\n <span\n class=\"font-semibold\"\n [class]=\"\n 'text-' +\n size +\n ' ' +\n (active\n ? 'text-' + color + '-500'\n : 'dark:text-gray-100 text-gray-600 ')\n \"\n >\n {{ template.name }}\n </span>\n }\n</ng-template>\n", styles: [":host{display:block}\n"] }]
109
- }], ctorParameters: () => [] });
57
+ args: [{ selector: 'mt-radio-cards', standalone: true, imports: [NgTemplateOutlet, Avatar], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of options(); track item.id) {\n @let active = item.id === activeId();\n <div\n (click)=\"selectItem(item)\"\n class=\"flex items-center space-x-4 p-4 rounded-lg cursor-pointer border-2 border-dashed transition-all ease-in-out duration-300\"\n [class]=\"\n active\n ? 'bg-primary-50 dark:bg-primary-800 border-primary-400 ring-primary-200'\n : 'border-gray-300 hover:border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-600 dark:hover:text-gray-100'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate() || itemTemplateContent() || defaultTemplate;\n context: {\n $implicit: item,\n active: active,\n size: size(),\n }\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n</div>\n\n<ng-template #defaultTemplate let-template let-active=\"active\" let-size=\"size\">\n @if (template.icon) {\n <mt-avatar\n [shape]=\"circle() ? 'circle' : 'square'\"\n [size]=\"avatarSize()\"\n [icon]=\"template.icon\"\n ></mt-avatar>\n }\n @if (template.name) {\n <span\n [class]=\"[\n 'font-semibold',\n textSizeClass(),\n 'dark:text-gray-100',\n 'text-gray-600',\n ]\"\n >\n {{ template.name }}\n </span>\n }\n</ng-template>\n", styles: [":host{display:block}\n"] }]
58
+ }] });
110
59
 
111
60
  /**
112
61
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-radio-cards.mjs","sources":["../../../../packages/masterteam/components/radio-cards/radio-cards.ts","../../../../packages/masterteam/components/radio-cards/radio-cards.html","../../../../packages/masterteam/components/radio-cards/masterteam-components-radio-cards.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n input,\n output,\n TemplateRef,\n computed,\n model,\n effect,\n booleanAttribute,\n} from '@angular/core';\nimport { MTIcon } from '@masterteam/icons';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport interface RadioItem {\n id: string | number;\n name?: string;\n active?: boolean;\n icon?: MTIcon;\n [key: string]: any;\n}\n\n@Component({\n selector: 'mt-radio-cards',\n standalone: true,\n imports: [NgTemplateOutlet, Avatar],\n templateUrl: './radio-cards.html',\n styleUrl: './radio-cards.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioCards {\n circle = input<boolean, unknown>(false, { transform: booleanAttribute });\n color = input('primary', {\n transform: (value: string) => {\n if (value) {\n return value;\n }\n return 'primary';\n },\n });\n size = input('medium', {\n transform: (value: 'small' | 'medium' | 'large') => {\n if (value) {\n switch (value) {\n case 'small':\n return 'xs';\n case 'medium':\n return 'base';\n case 'large':\n return '2xl';\n }\n }\n return 'base';\n },\n });\n avatarSize = computed(() => {\n switch (this.size()) {\n case 'xs':\n return 'normal';\n case 'base':\n return 'large';\n case '2xl':\n return 'xlarge';\n default:\n return 'normal';\n }\n });\n options = model.required<RadioItem[]>();\n activeId = model<string | number>();\n selectionChange = output<RadioItem>();\n\n itemTemplate = input<TemplateRef<any> | null>(null);\n itemTemplateContent = contentChild('option', { read: TemplateRef });\n\n /**\n * A computed signal that generates the dynamic Tailwind CSS classes\n * for the active state based on the color input.\n */\n protected activeColorClasses = computed(() => {\n const color = this.color();\n return {\n [`bg-${color}-50`]: true,\n [`dark:bg-${color}-800`]: true,\n [`border-${color}-400`]: true,\n [`ring-${color}-200`]: true,\n };\n });\n\n constructor() {\n effect(() => {\n const active = this.activeId();\n console.log('Active ID changed to:', active);\n this.options.update((options) => {\n return options.map((option) => {\n option.active = option.id === active;\n return option;\n });\n });\n });\n }\n\n public selectItem(item: RadioItem): void {\n if (this.activeId() !== item.id) {\n this.activeId.set(item.id);\n this.selectionChange.emit(item);\n }\n const options = this.options();\n options.map((option) => {\n const active = option.id === this.activeId();\n option.active = active;\n return option;\n });\n this.options.set(options);\n }\n}\n","<div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of options(); track item.id) {\n <div\n (click)=\"selectItem(item)\"\n class=\"flex items-center space-x-4 p-4 rounded-lg cursor-pointer border-2 border-dashed transition-all ease-in-out duration-300\"\n [class]=\"\n item.active\n ? activeColorClasses()\n : 'border-gray-300 hover:border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-600 dark:hover:text-gray-100 '\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate() || itemTemplateContent() || defaultTemplate;\n context: {\n $implicit: item,\n active: item.active,\n color: color(),\n size: size(),\n }\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n</div>\n\n<ng-template\n #defaultTemplate\n let-template\n let-active=\"active\"\n let-color=\"color\"\n let-size=\"size\"\n>\n @if (template.icon) {\n <mt-avatar\n [shape]=\"circle() ? 'circle' : 'square'\"\n [size]=\"avatarSize()\"\n [icon]=\"template.icon\"\n ></mt-avatar>\n }\n @if (template.name) {\n <span\n class=\"font-semibold\"\n [class]=\"\n 'text-' +\n size +\n ' ' +\n (active\n ? 'text-' + color + '-500'\n : 'dark:text-gray-100 text-gray-600 ')\n \"\n >\n {{ template.name }}\n </span>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-radio-cards.mjs","sources":["../../../../packages/masterteam/components/radio-cards/radio-cards.ts","../../../../packages/masterteam/components/radio-cards/radio-cards.html","../../../../packages/masterteam/components/radio-cards/masterteam-components-radio-cards.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n input,\n output,\n TemplateRef,\n computed,\n model,\n booleanAttribute,\n} from '@angular/core';\nimport { MTIcon } from '@masterteam/icons';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport interface RadioItem {\n id: string | number;\n name?: string;\n icon?: MTIcon;\n [key: string]: any;\n}\n\n@Component({\n selector: 'mt-radio-cards',\n standalone: true,\n imports: [NgTemplateOutlet, Avatar],\n templateUrl: './radio-cards.html',\n styleUrl: './radio-cards.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioCards {\n circle = input<boolean, unknown>(false, { transform: booleanAttribute });\n color = input<string>('primary');\n size = input<'small' | 'medium' | 'large'>('medium');\n avatarSize = computed(() => {\n switch (this.size()) {\n case 'small':\n return 'normal';\n case 'medium':\n return 'large';\n case 'large':\n return 'xlarge';\n default:\n return 'normal';\n }\n });\n options = model.required<RadioItem[]>();\n activeId = model<string | number>();\n selectionChange = output<RadioItem>();\n\n itemTemplate = input<TemplateRef<any> | null>(null);\n itemTemplateContent = contentChild('option', { read: TemplateRef });\n\n textSizeClass = computed(() => {\n switch (this.size()) {\n case 'small':\n return 'text-xs';\n\n case 'large':\n return 'text-2xl';\n\n default:\n return 'text-base';\n }\n });\n classes = computed(() => {});\n\n protected activeColorClasses = computed(() => {\n return [\n 'bg-primary-50',\n 'dark:bg-primary-800',\n 'border-primary-400',\n 'ring-primary-200',\n ];\n });\n\n public selectItem(item: RadioItem): void {\n if (this.activeId() !== item.id) {\n this.activeId.set(item.id);\n this.selectionChange.emit(item);\n }\n }\n}\n","<div>\n <div class=\"flex flex-wrap gap-3\">\n @for (item of options(); track item.id) {\n @let active = item.id === activeId();\n <div\n (click)=\"selectItem(item)\"\n class=\"flex items-center space-x-4 p-4 rounded-lg cursor-pointer border-2 border-dashed transition-all ease-in-out duration-300\"\n [class]=\"\n active\n ? 'bg-primary-50 dark:bg-primary-800 border-primary-400 ring-primary-200'\n : 'border-gray-300 hover:border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-800 hover:text-gray-600 dark:hover:text-gray-100'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate() || itemTemplateContent() || defaultTemplate;\n context: {\n $implicit: item,\n active: active,\n size: size(),\n }\n \"\n >\n </ng-container>\n </div>\n }\n </div>\n</div>\n\n<ng-template #defaultTemplate let-template let-active=\"active\" let-size=\"size\">\n @if (template.icon) {\n <mt-avatar\n [shape]=\"circle() ? 'circle' : 'square'\"\n [size]=\"avatarSize()\"\n [icon]=\"template.icon\"\n ></mt-avatar>\n }\n @if (template.name) {\n <span\n [class]=\"[\n 'font-semibold',\n textSizeClass(),\n 'dark:text-gray-100',\n 'text-gray-600',\n ]\"\n >\n {{ template.name }}\n </span>\n }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ import * as i0 from '@angular/core';
2
+ import { output, input, model, signal, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { NgTemplateOutlet, DatePipe } from '@angular/common';
4
+ import { ToggleField } from '@masterteam/components/toggle-field';
5
+ import * as i1 from '@angular/forms';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { Button } from '@masterteam/components/button';
8
+ import { TextField } from '@masterteam/components/text-field';
9
+ import { SelectField } from '@masterteam/components/select-field';
10
+ import { Paginator } from '@masterteam/components/paginator';
11
+ import { CheckboxField } from '@masterteam/components/checkbox-field';
12
+
13
+ class Table {
14
+ selectionChange = output();
15
+ data = input.required(...(ngDevMode ? [{ debugName: "data" }] : []));
16
+ columns = input.required(...(ngDevMode ? [{ debugName: "columns" }] : []));
17
+ actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : []));
18
+ selectableRows = input(false, ...(ngDevMode ? [{ debugName: "selectableRows" }] : []));
19
+ generalSearch = input(false, ...(ngDevMode ? [{ debugName: "generalSearch" }] : []));
20
+ showFilters = input(false, ...(ngDevMode ? [{ debugName: "showFilters" }] : []));
21
+ paginatorPosition = input('end', ...(ngDevMode ? [{ debugName: "paginatorPosition" }] : []));
22
+ pageSize = model(5, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
23
+ currentPage = model(0, ...(ngDevMode ? [{ debugName: "currentPage" }] : []));
24
+ first = model(0, ...(ngDevMode ? [{ debugName: "first" }] : []));
25
+ filterTerm = model('', ...(ngDevMode ? [{ debugName: "filterTerm" }] : []));
26
+ selectedRows = signal(new Set(), ...(ngDevMode ? [{ debugName: "selectedRows" }] : []));
27
+ isFilterPanelOpen = signal(false, ...(ngDevMode ? [{ debugName: "isFilterPanelOpen" }] : []));
28
+ pendingFilters = signal({}, ...(ngDevMode ? [{ debugName: "pendingFilters" }] : []));
29
+ appliedFilters = signal({}, ...(ngDevMode ? [{ debugName: "appliedFilters" }] : []));
30
+ filterableColumns = computed(() => this.columns().filter((col) => !!col.filterConfig), ...(ngDevMode ? [{ debugName: "filterableColumns" }] : []));
31
+ activeFilterCount = computed(() => {
32
+ return Object.values(this.appliedFilters()).filter((value) => value !== null && value !== undefined && value !== '').length;
33
+ }, ...(ngDevMode ? [{ debugName: "activeFilterCount" }] : []));
34
+ filteredData = computed(() => {
35
+ const data = this.data();
36
+ const searchTerm = this.filterTerm().toLowerCase();
37
+ const filters = this.appliedFilters();
38
+ const filterKeys = Object.keys(filters);
39
+ if (searchTerm != '') {
40
+ return data.filter((item) => {
41
+ return Object.values(item).some((value) => {
42
+ if (typeof value === 'string') {
43
+ return value.toLowerCase().includes(searchTerm);
44
+ }
45
+ return false;
46
+ });
47
+ });
48
+ }
49
+ if (filterKeys.length === 0) {
50
+ return data;
51
+ }
52
+ return data.filter((item) => {
53
+ return filterKeys.every((key) => {
54
+ const filterValue = filters[key];
55
+ const itemValue = this.getProperty(item, key);
56
+ if (filterValue === null ||
57
+ filterValue === undefined ||
58
+ filterValue === '') {
59
+ return true;
60
+ }
61
+ if (typeof itemValue === 'string') {
62
+ return itemValue
63
+ .toLowerCase()
64
+ .includes(String(filterValue).toLowerCase());
65
+ }
66
+ return itemValue === filterValue;
67
+ });
68
+ });
69
+ }, ...(ngDevMode ? [{ debugName: "filteredData" }] : []));
70
+ totalRecords = computed(() => this.filteredData().length, ...(ngDevMode ? [{ debugName: "totalRecords" }] : []));
71
+ paginatedData = computed(() => {
72
+ const data = this.filteredData();
73
+ const first = this.first();
74
+ const pageSize = this.pageSize();
75
+ return data.slice(first, first + pageSize);
76
+ }, ...(ngDevMode ? [{ debugName: "paginatedData" }] : []));
77
+ allSelectedOnPage = computed(() => {
78
+ const pageData = this.paginatedData();
79
+ if (pageData.length === 0)
80
+ return false;
81
+ return pageData.every((row) => this.selectedRows().has(row));
82
+ }, ...(ngDevMode ? [{ debugName: "allSelectedOnPage" }] : []));
83
+ toggleFilterPanel() {
84
+ const isOpen = this.isFilterPanelOpen();
85
+ if (!isOpen) {
86
+ this.pendingFilters.set({ ...this.appliedFilters() });
87
+ }
88
+ this.isFilterPanelOpen.set(!isOpen);
89
+ }
90
+ updatePendingFilter(key, value) {
91
+ if (value === 'true')
92
+ value = true;
93
+ if (value === 'false')
94
+ value = false;
95
+ this.pendingFilters.update((current) => ({ ...current, [key]: value }));
96
+ }
97
+ applyFilters() {
98
+ this.appliedFilters.set({ ...this.pendingFilters() });
99
+ this.first.set(0);
100
+ this.currentPage.set(0);
101
+ this.isFilterPanelOpen.set(false);
102
+ }
103
+ resetFilters() {
104
+ this.pendingFilters.set({});
105
+ this.appliedFilters.set({});
106
+ this.first.set(0);
107
+ this.currentPage.set(0);
108
+ this.isFilterPanelOpen.set(false);
109
+ }
110
+ toggleRow(row) {
111
+ const newSet = new Set(this.selectedRows());
112
+ if (newSet.has(row))
113
+ newSet.delete(row);
114
+ else
115
+ newSet.add(row);
116
+ this.selectedRows.set(newSet);
117
+ this.selectionChange.emit(Array.from(this.selectedRows()));
118
+ }
119
+ toggleAllRowsOnPage() {
120
+ const currentSelection = new Set(this.selectedRows());
121
+ const pageData = this.paginatedData();
122
+ const allSelected = this.allSelectedOnPage();
123
+ if (allSelected) {
124
+ pageData.forEach((row) => currentSelection.delete(row));
125
+ }
126
+ else {
127
+ pageData.forEach((row) => currentSelection.add(row));
128
+ }
129
+ this.selectedRows.set(currentSelection);
130
+ this.selectionChange.emit(Array.from(this.selectedRows()));
131
+ }
132
+ getProperty(obj, key) {
133
+ return key.split('.').reduce((o, i) => (o ? o[i] : undefined), obj);
134
+ }
135
+ onSearchChange(searchTerm) {
136
+ const value = searchTerm.target.value;
137
+ this.filterTerm.set(value);
138
+ this.currentPage.set(1);
139
+ }
140
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: Table, deps: [], target: i0.ɵɵFactoryTarget.Component });
141
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: Table, isStandalone: true, selector: "mt-table", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, selectableRows: { classPropertyName: "selectableRows", publicName: "selectableRows", isSignal: true, isRequired: false, transformFunction: null }, generalSearch: { classPropertyName: "generalSearch", publicName: "generalSearch", isSignal: true, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: true, isRequired: false, transformFunction: null }, paginatorPosition: { classPropertyName: "paginatorPosition", publicName: "paginatorPosition", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, filterTerm: { classPropertyName: "filterTerm", publicName: "filterTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", pageSize: "pageSizeChange", currentPage: "currentPageChange", first: "firstChange", filterTerm: "filterTermChange" }, providers: [], ngImport: i0, template: "<div class=\"space-y-4\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n @if (showFilters()) {\n <mt-button\n variant=\"outline\"\n (click)=\"toggleFilterPanel()\"\n label=\"Filter\"\n [badge]=\"activeFilterCount()\"\n icon=\"general.filter-funnel-01\"\n >\n </mt-button>\n @if (isFilterPanelOpen()) {\n <div\n class=\"absolute top-full right-0 z-10 mt-2 w-72 origin-top-right rounded-md bg-content shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none\"\n role=\"menu\"\n >\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold\">Filter Options</h3>\n </div>\n <div\n class=\"border-t border-surface-300 dark:border-surface-500 p-4 space-y-4\"\n >\n @for (col of filterableColumns(); track col.key) {\n <div class=\"space-y-1\">\n <label class=\"block text-sm font-medium\">\n {{ col.filterConfig?.label }}\n </label>\n @switch (col.filterConfig?.type) {\n @case (\"text\") {\n <mt-text-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"updatePendingFilter(col.key, $event)\"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"updatePendingFilter(col.key, $event)\"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"'Select ' + col.filterConfig?.label\"\n showClear\n ></mt-select-field>\n }\n }\n </div>\n }\n </div>\n <div\n class=\"flex items-center justify-end space-x-2 border-t border-surface-300 dark:border-surface-500 bg-surface-50 dark:bg-surface-950 p-4 rounded-b-md\"\n >\n <mt-button\n variant=\"outlined\"\n (click)=\"resetFilters()\"\n label=\"Reset\"\n />\n <mt-button (click)=\"applyFilters()\" label=\"Apply\" />\n </div>\n </div>\n }\n }\n </div>\n\n <div\n class=\"overflow-x-auto bg-content rounded-lg border border-surface-300 dark:border-surface-500\"\n >\n <table class=\"min-w-full text-sm align-middle table-fixed\">\n <thead\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\n >\n <tr>\n @if (selectableRows()) {\n <th class=\"p-4 w-12 text-start\">\n <mt-checkbox-field\n [ngModel]=\"allSelectedOnPage()\"\n (ngModelChange)=\"toggleAllRowsOnPage()\"\n ></mt-checkbox-field>\n </th>\n }\n\n @for (col of columns(); track col.key) {\n <th\n class=\"p-4 text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (actions().length > 0) {\n <th\n class=\"p-4 text-end font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-gray-200\">\n @for (row of paginatedData(); track row.id) {\n <tr\n class=\"hover:bg-gray-50 dark:hover:bg-surface-950 border-surface-300 dark:border-surface-500\"\n >\n @if (selectableRows()) {\n <td class=\"p-4 w-12\">\n <mt-checkbox-field\n [ngModel]=\"selectedRows().has(row)\"\n (ngModelChange)=\"toggleRow(row)\"\n ></mt-checkbox-field>\n </td>\n }\n\n @for (col of columns(); track col.key) {\n <td class=\"p-4 text-gray-700 dark:text-gray-100\">\n @switch (col.type) {\n @case (\"boolean\") {\n <mt-toggle-field\n [(ngModel)]=\"row[col.key]\"\n ></mt-toggle-field>\n }\n @case (\"date\") {\n {{ getProperty(row, col.key) | date: \"mediumDate\" }}\n }\n @case (\"custom\") {\n <ng-container\n *ngTemplateOutlet=\"\n col.customCellTpl;\n context: { $implicit: row }\n \"\n >\n </ng-container>\n }\n @default {\n {{ getProperty(row, col.key) }}\n }\n }\n </td>\n }\n\n @if (actions().length > 0) {\n <td class=\"p-4 text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of actions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.label\"\n ></mt-button>\n }\n </div>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td\n [colSpan]=\"columns().length + (actions().length > 0 ? 2 : 1)\"\n class=\"text-center p-8 text-gray-500 dark:text-gray-200\"\n >\n No data available.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"flex flex-col gap-3\" [class]=\"'items-' + paginatorPosition()\">\n <mt-paginator\n [(rows)]=\"pageSize\"\n [(first)]=\"first\"\n [(page)]=\"currentPage\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required"], outputs: ["onChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "pKeyFilter", "required"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required"], outputs: ["onChange"] }, { kind: "component", type: Paginator, selector: "mt-paginator", inputs: ["rows", "totalRecords", "first", "page", "rowsPerPageOptions", "showFirstLastIcon", "showCurrentPageReport", "fluid", "pageLinkSize", "alwaysShow"], outputs: ["rowsChange", "firstChange", "pageChange", "onPageChange"] }, { kind: "component", type: CheckboxField, selector: "mt-checkbox-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required"], outputs: ["onChange"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
142
+ }
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: Table, decorators: [{
144
+ type: Component,
145
+ args: [{ selector: 'mt-table', standalone: true, imports: [
146
+ NgTemplateOutlet,
147
+ DatePipe,
148
+ ToggleField,
149
+ FormsModule,
150
+ Button,
151
+ TextField,
152
+ SelectField,
153
+ Paginator,
154
+ CheckboxField,
155
+ ], providers: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"space-y-4\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n @if (showFilters()) {\n <mt-button\n variant=\"outline\"\n (click)=\"toggleFilterPanel()\"\n label=\"Filter\"\n [badge]=\"activeFilterCount()\"\n icon=\"general.filter-funnel-01\"\n >\n </mt-button>\n @if (isFilterPanelOpen()) {\n <div\n class=\"absolute top-full right-0 z-10 mt-2 w-72 origin-top-right rounded-md bg-content shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none\"\n role=\"menu\"\n >\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold\">Filter Options</h3>\n </div>\n <div\n class=\"border-t border-surface-300 dark:border-surface-500 p-4 space-y-4\"\n >\n @for (col of filterableColumns(); track col.key) {\n <div class=\"space-y-1\">\n <label class=\"block text-sm font-medium\">\n {{ col.filterConfig?.label }}\n </label>\n @switch (col.filterConfig?.type) {\n @case (\"text\") {\n <mt-text-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"updatePendingFilter(col.key, $event)\"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"updatePendingFilter(col.key, $event)\"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"'Select ' + col.filterConfig?.label\"\n showClear\n ></mt-select-field>\n }\n }\n </div>\n }\n </div>\n <div\n class=\"flex items-center justify-end space-x-2 border-t border-surface-300 dark:border-surface-500 bg-surface-50 dark:bg-surface-950 p-4 rounded-b-md\"\n >\n <mt-button\n variant=\"outlined\"\n (click)=\"resetFilters()\"\n label=\"Reset\"\n />\n <mt-button (click)=\"applyFilters()\" label=\"Apply\" />\n </div>\n </div>\n }\n }\n </div>\n\n <div\n class=\"overflow-x-auto bg-content rounded-lg border border-surface-300 dark:border-surface-500\"\n >\n <table class=\"min-w-full text-sm align-middle table-fixed\">\n <thead\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\n >\n <tr>\n @if (selectableRows()) {\n <th class=\"p-4 w-12 text-start\">\n <mt-checkbox-field\n [ngModel]=\"allSelectedOnPage()\"\n (ngModelChange)=\"toggleAllRowsOnPage()\"\n ></mt-checkbox-field>\n </th>\n }\n\n @for (col of columns(); track col.key) {\n <th\n class=\"p-4 text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (actions().length > 0) {\n <th\n class=\"p-4 text-end font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-gray-200\">\n @for (row of paginatedData(); track row.id) {\n <tr\n class=\"hover:bg-gray-50 dark:hover:bg-surface-950 border-surface-300 dark:border-surface-500\"\n >\n @if (selectableRows()) {\n <td class=\"p-4 w-12\">\n <mt-checkbox-field\n [ngModel]=\"selectedRows().has(row)\"\n (ngModelChange)=\"toggleRow(row)\"\n ></mt-checkbox-field>\n </td>\n }\n\n @for (col of columns(); track col.key) {\n <td class=\"p-4 text-gray-700 dark:text-gray-100\">\n @switch (col.type) {\n @case (\"boolean\") {\n <mt-toggle-field\n [(ngModel)]=\"row[col.key]\"\n ></mt-toggle-field>\n }\n @case (\"date\") {\n {{ getProperty(row, col.key) | date: \"mediumDate\" }}\n }\n @case (\"custom\") {\n <ng-container\n *ngTemplateOutlet=\"\n col.customCellTpl;\n context: { $implicit: row }\n \"\n >\n </ng-container>\n }\n @default {\n {{ getProperty(row, col.key) }}\n }\n }\n </td>\n }\n\n @if (actions().length > 0) {\n <td class=\"p-4 text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of actions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.label\"\n ></mt-button>\n }\n </div>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td\n [colSpan]=\"columns().length + (actions().length > 0 ? 2 : 1)\"\n class=\"text-center p-8 text-gray-500 dark:text-gray-200\"\n >\n No data available.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"flex flex-col gap-3\" [class]=\"'items-' + paginatorPosition()\">\n <mt-paginator\n [(rows)]=\"pageSize\"\n [(first)]=\"first\"\n [(page)]=\"currentPage\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n" }]
156
+ }] });
157
+
158
+ /**
159
+ * Generated bundle index. Do not edit.
160
+ */
161
+
162
+ export { Table };
163
+ //# sourceMappingURL=masterteam-components-table.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-components-table.mjs","sources":["../../../../packages/masterteam/components/table/table.ts","../../../../packages/masterteam/components/table/table.html","../../../../packages/masterteam/components/table/masterteam-components-table.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NgTemplateOutlet, DatePipe } from '@angular/common';\nimport { ColumnDef, TableAction } from './table-types';\nimport { ToggleField } from '@masterteam/components/toggle-field';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from '@masterteam/components/button';\nimport { TextField } from '@masterteam/components/text-field';\nimport { SelectField } from '@masterteam/components/select-field';\nimport { Paginator } from '@masterteam/components/paginator';\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\n\n@Component({\n selector: 'mt-table',\n templateUrl: './table.html',\n styleUrls: ['./table.css'],\n standalone: true,\n imports: [\n NgTemplateOutlet,\n DatePipe,\n ToggleField,\n FormsModule,\n Button,\n TextField,\n SelectField,\n Paginator,\n CheckboxField,\n ],\n providers: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Table {\n selectionChange = output<any[]>();\n\n data = input.required<any[]>();\n columns = input.required<ColumnDef[]>();\n actions = input<TableAction[]>([]);\n selectableRows = input<boolean>(false);\n generalSearch = input<boolean>(false);\n showFilters = input<boolean>(false);\n\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\n pageSize = model<number>(5);\n currentPage = model<number>(0);\n first = model<number>(0);\n filterTerm = model<string>('');\n\n protected selectedRows = signal<Set<any>>(new Set());\n protected isFilterPanelOpen = signal<boolean>(false);\n\n protected pendingFilters = signal<Record<string, any>>({});\n protected appliedFilters = signal<Record<string, any>>({});\n\n protected filterableColumns = computed(() =>\n this.columns().filter((col) => !!col.filterConfig),\n );\n\n protected activeFilterCount = computed(() => {\n return Object.values(this.appliedFilters()).filter(\n (value) => value !== null && value !== undefined && value !== '',\n ).length;\n });\n\n protected filteredData = computed(() => {\n const data = this.data();\n const searchTerm = this.filterTerm().toLowerCase();\n\n const filters = this.appliedFilters();\n const filterKeys = Object.keys(filters);\n\n if (searchTerm != '') {\n return data.filter((item) => {\n return Object.values(item).some((value) => {\n if (typeof value === 'string') {\n return value.toLowerCase().includes(searchTerm);\n }\n return false;\n });\n });\n }\n\n if (filterKeys.length === 0) {\n return data;\n }\n\n return data.filter((item) => {\n return filterKeys.every((key) => {\n const filterValue = filters[key];\n const itemValue = this.getProperty(item, key);\n\n if (\n filterValue === null ||\n filterValue === undefined ||\n filterValue === ''\n ) {\n return true;\n }\n\n if (typeof itemValue === 'string') {\n return itemValue\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n }\n return itemValue === filterValue;\n });\n });\n });\n\n protected totalRecords = computed(() => this.filteredData().length);\n\n protected paginatedData = computed(() => {\n const data = this.filteredData();\n const first = this.first();\n const pageSize = this.pageSize();\n return data.slice(first, first + pageSize);\n });\n\n protected allSelectedOnPage = computed(() => {\n const pageData = this.paginatedData();\n if (pageData.length === 0) return false;\n return pageData.every((row) => this.selectedRows().has(row));\n });\n\n toggleFilterPanel(): void {\n const isOpen = this.isFilterPanelOpen();\n if (!isOpen) {\n this.pendingFilters.set({ ...this.appliedFilters() });\n }\n this.isFilterPanelOpen.set(!isOpen);\n }\n\n updatePendingFilter(key: string, value: any): void {\n if (value === 'true') value = true;\n if (value === 'false') value = false;\n\n this.pendingFilters.update((current) => ({ ...current, [key]: value }));\n }\n\n applyFilters(): void {\n this.appliedFilters.set({ ...this.pendingFilters() });\n this.first.set(0);\n this.currentPage.set(0);\n this.isFilterPanelOpen.set(false);\n }\n\n resetFilters(): void {\n this.pendingFilters.set({});\n this.appliedFilters.set({});\n this.first.set(0);\n this.currentPage.set(0);\n this.isFilterPanelOpen.set(false);\n }\n\n toggleRow(row: any): void {\n const newSet = new Set(this.selectedRows());\n if (newSet.has(row)) newSet.delete(row);\n else newSet.add(row);\n this.selectedRows.set(newSet);\n this.selectionChange.emit(Array.from(this.selectedRows()));\n }\n\n toggleAllRowsOnPage(): void {\n const currentSelection = new Set(this.selectedRows());\n const pageData = this.paginatedData();\n const allSelected = this.allSelectedOnPage();\n if (allSelected) {\n pageData.forEach((row) => currentSelection.delete(row));\n } else {\n pageData.forEach((row) => currentSelection.add(row));\n }\n this.selectedRows.set(currentSelection);\n this.selectionChange.emit(Array.from(this.selectedRows()));\n }\n\n getProperty(obj: any, key: string): any {\n return key.split('.').reduce((o, i) => (o ? o[i] : undefined), obj);\n }\n\n onSearchChange(searchTerm: Event) {\n const value = (searchTerm.target as HTMLInputElement).value;\n this.filterTerm.set(value);\n this.currentPage.set(1);\n }\n}\n","<div class=\"space-y-4\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n @if (showFilters()) {\n <mt-button\n variant=\"outline\"\n (click)=\"toggleFilterPanel()\"\n label=\"Filter\"\n [badge]=\"activeFilterCount()\"\n icon=\"general.filter-funnel-01\"\n >\n </mt-button>\n @if (isFilterPanelOpen()) {\n <div\n class=\"absolute top-full right-0 z-10 mt-2 w-72 origin-top-right rounded-md bg-content shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none\"\n role=\"menu\"\n >\n <div class=\"p-4\">\n <h3 class=\"text-base font-semibold\">Filter Options</h3>\n </div>\n <div\n class=\"border-t border-surface-300 dark:border-surface-500 p-4 space-y-4\"\n >\n @for (col of filterableColumns(); track col.key) {\n <div class=\"space-y-1\">\n <label class=\"block text-sm font-medium\">\n {{ col.filterConfig?.label }}\n </label>\n @switch (col.filterConfig?.type) {\n @case (\"text\") {\n <mt-text-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"updatePendingFilter(col.key, $event)\"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"updatePendingFilter(col.key, $event)\"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"'Select ' + col.filterConfig?.label\"\n showClear\n ></mt-select-field>\n }\n }\n </div>\n }\n </div>\n <div\n class=\"flex items-center justify-end space-x-2 border-t border-surface-300 dark:border-surface-500 bg-surface-50 dark:bg-surface-950 p-4 rounded-b-md\"\n >\n <mt-button\n variant=\"outlined\"\n (click)=\"resetFilters()\"\n label=\"Reset\"\n />\n <mt-button (click)=\"applyFilters()\" label=\"Apply\" />\n </div>\n </div>\n }\n }\n </div>\n\n <div\n class=\"overflow-x-auto bg-content rounded-lg border border-surface-300 dark:border-surface-500\"\n >\n <table class=\"min-w-full text-sm align-middle table-fixed\">\n <thead\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\n >\n <tr>\n @if (selectableRows()) {\n <th class=\"p-4 w-12 text-start\">\n <mt-checkbox-field\n [ngModel]=\"allSelectedOnPage()\"\n (ngModelChange)=\"toggleAllRowsOnPage()\"\n ></mt-checkbox-field>\n </th>\n }\n\n @for (col of columns(); track col.key) {\n <th\n class=\"p-4 text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (actions().length > 0) {\n <th\n class=\"p-4 text-end font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-gray-200\">\n @for (row of paginatedData(); track row.id) {\n <tr\n class=\"hover:bg-gray-50 dark:hover:bg-surface-950 border-surface-300 dark:border-surface-500\"\n >\n @if (selectableRows()) {\n <td class=\"p-4 w-12\">\n <mt-checkbox-field\n [ngModel]=\"selectedRows().has(row)\"\n (ngModelChange)=\"toggleRow(row)\"\n ></mt-checkbox-field>\n </td>\n }\n\n @for (col of columns(); track col.key) {\n <td class=\"p-4 text-gray-700 dark:text-gray-100\">\n @switch (col.type) {\n @case (\"boolean\") {\n <mt-toggle-field\n [(ngModel)]=\"row[col.key]\"\n ></mt-toggle-field>\n }\n @case (\"date\") {\n {{ getProperty(row, col.key) | date: \"mediumDate\" }}\n }\n @case (\"custom\") {\n <ng-container\n *ngTemplateOutlet=\"\n col.customCellTpl;\n context: { $implicit: row }\n \"\n >\n </ng-container>\n }\n @default {\n {{ getProperty(row, col.key) }}\n }\n }\n </td>\n }\n\n @if (actions().length > 0) {\n <td class=\"p-4 text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of actions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.label\"\n ></mt-button>\n }\n </div>\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td\n [colSpan]=\"columns().length + (actions().length > 0 ? 2 : 1)\"\n class=\"text-center p-8 text-gray-500 dark:text-gray-200\"\n >\n No data available.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"flex flex-col gap-3\" [class]=\"'items-' + paginatorPosition()\">\n <mt-paginator\n [(rows)]=\"pageSize\"\n [(first)]=\"first\"\n [(page)]=\"currentPage\"\n [totalRecords]=\"totalRecords()\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/components",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "publishConfig": {
5
5
  "directory": ".",
6
6
  "linkDirectory": false,
@@ -38,10 +38,6 @@
38
38
  "types": "./index.d.ts",
39
39
  "default": "./fesm2022/masterteam-components.mjs"
40
40
  },
41
- "./avatar-text": {
42
- "types": "./avatar-text/index.d.ts",
43
- "default": "./fesm2022/masterteam-components-avatar-text.mjs"
44
- },
45
41
  "./avatar": {
46
42
  "types": "./avatar/index.d.ts",
47
43
  "default": "./fesm2022/masterteam-components-avatar.mjs"
@@ -62,49 +58,57 @@
62
58
  "types": "./card/index.d.ts",
63
59
  "default": "./fesm2022/masterteam-components-card.mjs"
64
60
  },
65
- "./color-picker-field": {
66
- "types": "./color-picker-field/index.d.ts",
67
- "default": "./fesm2022/masterteam-components-color-picker-field.mjs"
61
+ "./checkbox-field": {
62
+ "types": "./checkbox-field/index.d.ts",
63
+ "default": "./fesm2022/masterteam-components-checkbox-field.mjs"
68
64
  },
69
65
  "./chip": {
70
66
  "types": "./chip/index.d.ts",
71
67
  "default": "./fesm2022/masterteam-components-chip.mjs"
72
68
  },
73
- "./checkbox-field": {
74
- "types": "./checkbox-field/index.d.ts",
75
- "default": "./fesm2022/masterteam-components-checkbox-field.mjs"
76
- },
77
- "./date-field": {
78
- "types": "./date-field/index.d.ts",
79
- "default": "./fesm2022/masterteam-components-date-field.mjs"
69
+ "./avatar-text": {
70
+ "types": "./avatar-text/index.d.ts",
71
+ "default": "./fesm2022/masterteam-components-avatar-text.mjs"
80
72
  },
81
73
  "./editor-field": {
82
74
  "types": "./editor-field/index.d.ts",
83
75
  "default": "./fesm2022/masterteam-components-editor-field.mjs"
84
76
  },
77
+ "./date-field": {
78
+ "types": "./date-field/index.d.ts",
79
+ "default": "./fesm2022/masterteam-components-date-field.mjs"
80
+ },
85
81
  "./field-validation": {
86
82
  "types": "./field-validation/index.d.ts",
87
83
  "default": "./fesm2022/masterteam-components-field-validation.mjs"
88
84
  },
89
- "./formula-builder": {
90
- "types": "./formula-builder/index.d.ts",
91
- "default": "./fesm2022/masterteam-components-formula-builder.mjs"
85
+ "./color-picker-field": {
86
+ "types": "./color-picker-field/index.d.ts",
87
+ "default": "./fesm2022/masterteam-components-color-picker-field.mjs"
92
88
  },
93
89
  "./icon-field": {
94
90
  "types": "./icon-field/index.d.ts",
95
91
  "default": "./fesm2022/masterteam-components-icon-field.mjs"
96
92
  },
93
+ "./formula-builder": {
94
+ "types": "./formula-builder/index.d.ts",
95
+ "default": "./fesm2022/masterteam-components-formula-builder.mjs"
96
+ },
97
97
  "./list": {
98
98
  "types": "./list/index.d.ts",
99
99
  "default": "./fesm2022/masterteam-components-list.mjs"
100
100
  },
101
+ "./multi-select-field": {
102
+ "types": "./multi-select-field/index.d.ts",
103
+ "default": "./fesm2022/masterteam-components-multi-select-field.mjs"
104
+ },
101
105
  "./number-field": {
102
106
  "types": "./number-field/index.d.ts",
103
107
  "default": "./fesm2022/masterteam-components-number-field.mjs"
104
108
  },
105
- "./multi-select-field": {
106
- "types": "./multi-select-field/index.d.ts",
107
- "default": "./fesm2022/masterteam-components-multi-select-field.mjs"
109
+ "./radio-button-field": {
110
+ "types": "./radio-button-field/index.d.ts",
111
+ "default": "./fesm2022/masterteam-components-radio-button-field.mjs"
108
112
  },
109
113
  "./paginator": {
110
114
  "types": "./paginator/index.d.ts",
@@ -114,18 +118,10 @@
114
118
  "types": "./radio-cards/index.d.ts",
115
119
  "default": "./fesm2022/masterteam-components-radio-cards.mjs"
116
120
  },
117
- "./radio-button-field": {
118
- "types": "./radio-button-field/index.d.ts",
119
- "default": "./fesm2022/masterteam-components-radio-button-field.mjs"
120
- },
121
121
  "./radio-cards-field": {
122
122
  "types": "./radio-cards-field/index.d.ts",
123
123
  "default": "./fesm2022/masterteam-components-radio-cards-field.mjs"
124
124
  },
125
- "./tabs": {
126
- "types": "./tabs/index.d.ts",
127
- "default": "./fesm2022/masterteam-components-tabs.mjs"
128
- },
129
125
  "./select-field": {
130
126
  "types": "./select-field/index.d.ts",
131
127
  "default": "./fesm2022/masterteam-components-select-field.mjs"
@@ -134,21 +130,29 @@
134
130
  "types": "./slider-field/index.d.ts",
135
131
  "default": "./fesm2022/masterteam-components-slider-field.mjs"
136
132
  },
137
- "./textarea-field": {
138
- "types": "./textarea-field/index.d.ts",
139
- "default": "./fesm2022/masterteam-components-textarea-field.mjs"
133
+ "./table": {
134
+ "types": "./table/index.d.ts",
135
+ "default": "./fesm2022/masterteam-components-table.mjs"
136
+ },
137
+ "./tabs": {
138
+ "types": "./tabs/index.d.ts",
139
+ "default": "./fesm2022/masterteam-components-tabs.mjs"
140
140
  },
141
141
  "./text-field": {
142
142
  "types": "./text-field/index.d.ts",
143
143
  "default": "./fesm2022/masterteam-components-text-field.mjs"
144
144
  },
145
- "./toggle-field": {
146
- "types": "./toggle-field/index.d.ts",
147
- "default": "./fesm2022/masterteam-components-toggle-field.mjs"
145
+ "./textarea-field": {
146
+ "types": "./textarea-field/index.d.ts",
147
+ "default": "./fesm2022/masterteam-components-textarea-field.mjs"
148
148
  },
149
149
  "./toast": {
150
150
  "types": "./toast/index.d.ts",
151
151
  "default": "./fesm2022/masterteam-components-toast.mjs"
152
+ },
153
+ "./toggle-field": {
154
+ "types": "./toggle-field/index.d.ts",
155
+ "default": "./fesm2022/masterteam-components-toggle-field.mjs"
152
156
  }
153
157
  }
154
158
  }
@@ -5,28 +5,22 @@ import { MTIcon } from '@masterteam/icons';
5
5
  interface RadioItem {
6
6
  id: string | number;
7
7
  name?: string;
8
- active?: boolean;
9
8
  icon?: MTIcon;
10
9
  [key: string]: any;
11
10
  }
12
11
  declare class RadioCards {
13
12
  circle: _angular_core.InputSignalWithTransform<boolean, unknown>;
14
- color: _angular_core.InputSignalWithTransform<string, string>;
15
- size: _angular_core.InputSignalWithTransform<"medium" | "xs" | "base" | "2xl", "medium" | "small" | "large">;
13
+ color: _angular_core.InputSignal<string>;
14
+ size: _angular_core.InputSignal<"small" | "medium" | "large">;
16
15
  avatarSize: _angular_core.Signal<"large" | "normal" | "xlarge">;
17
16
  options: _angular_core.ModelSignal<RadioItem[]>;
18
17
  activeId: _angular_core.ModelSignal<string | number | undefined>;
19
18
  selectionChange: _angular_core.OutputEmitterRef<RadioItem>;
20
19
  itemTemplate: _angular_core.InputSignal<TemplateRef<any> | null>;
21
20
  itemTemplateContent: _angular_core.Signal<TemplateRef<any> | undefined>;
22
- /**
23
- * A computed signal that generates the dynamic Tailwind CSS classes
24
- * for the active state based on the color input.
25
- */
26
- protected activeColorClasses: _angular_core.Signal<{
27
- [x: string]: boolean;
28
- }>;
29
- constructor();
21
+ textSizeClass: _angular_core.Signal<"text-xs" | "text-2xl" | "text-base">;
22
+ classes: _angular_core.Signal<void>;
23
+ protected activeColorClasses: _angular_core.Signal<string[]>;
30
24
  selectItem(item: RadioItem): void;
31
25
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioCards, never>;
32
26
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioCards, "mt-radio-cards", never, { "circle": { "alias": "circle"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "activeId": { "alias": "activeId"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; }, { "options": "optionsChange"; "activeId": "activeIdChange"; "selectionChange": "selectionChange"; }, ["itemTemplateContent"], never, true, never>;
@@ -0,0 +1,70 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import { MTIcon } from '@masterteam/icons';
4
+
5
+ /**
6
+ * Defines the options for a select filter.
7
+ */
8
+ interface FilterOption {
9
+ label: string;
10
+ value: any;
11
+ }
12
+ /**
13
+ * Configuration for filtering on a specific column.
14
+ */
15
+ interface FilterConfig {
16
+ type: 'text' | 'select';
17
+ label: string;
18
+ options?: FilterOption[];
19
+ }
20
+ interface ColumnDef {
21
+ key: string;
22
+ label: string;
23
+ type?: 'text' | 'boolean' | 'date' | 'custom';
24
+ customCellTpl?: TemplateRef<any>;
25
+ filterConfig?: FilterConfig;
26
+ }
27
+ interface TableAction {
28
+ icon: MTIcon | undefined;
29
+ color?: 'info' | 'success' | 'warn' | 'danger' | 'secondary' | 'contrast' | 'help' | 'primary';
30
+ variant?: 'text' | 'outlined' | undefined;
31
+ label: string;
32
+ action: (row: any) => void;
33
+ }
34
+
35
+ declare class Table {
36
+ selectionChange: _angular_core.OutputEmitterRef<any[]>;
37
+ data: _angular_core.InputSignal<any[]>;
38
+ columns: _angular_core.InputSignal<ColumnDef[]>;
39
+ actions: _angular_core.InputSignal<TableAction[]>;
40
+ selectableRows: _angular_core.InputSignal<boolean>;
41
+ generalSearch: _angular_core.InputSignal<boolean>;
42
+ showFilters: _angular_core.InputSignal<boolean>;
43
+ paginatorPosition: _angular_core.InputSignal<"end" | "start" | "center">;
44
+ pageSize: _angular_core.ModelSignal<number>;
45
+ currentPage: _angular_core.ModelSignal<number>;
46
+ first: _angular_core.ModelSignal<number>;
47
+ filterTerm: _angular_core.ModelSignal<string>;
48
+ protected selectedRows: _angular_core.WritableSignal<Set<any>>;
49
+ protected isFilterPanelOpen: _angular_core.WritableSignal<boolean>;
50
+ protected pendingFilters: _angular_core.WritableSignal<Record<string, any>>;
51
+ protected appliedFilters: _angular_core.WritableSignal<Record<string, any>>;
52
+ protected filterableColumns: _angular_core.Signal<ColumnDef[]>;
53
+ protected activeFilterCount: _angular_core.Signal<number>;
54
+ protected filteredData: _angular_core.Signal<any[]>;
55
+ protected totalRecords: _angular_core.Signal<number>;
56
+ protected paginatedData: _angular_core.Signal<any[]>;
57
+ protected allSelectedOnPage: _angular_core.Signal<boolean>;
58
+ toggleFilterPanel(): void;
59
+ updatePendingFilter(key: string, value: any): void;
60
+ applyFilters(): void;
61
+ resetFilters(): void;
62
+ toggleRow(row: any): void;
63
+ toggleAllRowsOnPage(): void;
64
+ getProperty(obj: any, key: string): any;
65
+ onSearchChange(searchTerm: Event): void;
66
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<Table, never>;
67
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Table, "mt-table", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "selectableRows": { "alias": "selectableRows"; "required": false; "isSignal": true; }; "generalSearch": { "alias": "generalSearch"; "required": false; "isSignal": true; }; "showFilters": { "alias": "showFilters"; "required": false; "isSignal": true; }; "paginatorPosition": { "alias": "paginatorPosition"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "first": { "alias": "first"; "required": false; "isSignal": true; }; "filterTerm": { "alias": "filterTerm"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "pageSize": "pageSizeChange"; "currentPage": "currentPageChange"; "first": "firstChange"; "filterTerm": "filterTermChange"; }, never, never, true, never>;
68
+ }
69
+
70
+ export { Table };