@masterteam/components 0.0.40 → 0.0.42

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.
@@ -183,7 +183,7 @@ class Table {
183
183
  this.currentPage.set(0);
184
184
  }
185
185
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: Table, deps: [], target: i0.ɵɵFactoryTarget.Component });
186
- 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 }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showGridlines: { classPropertyName: "showGridlines", publicName: "showGridlines", isSignal: true, isRequired: false, transformFunction: null }, stripedRows: { classPropertyName: "stripedRows", publicName: "stripedRows", 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 }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionLabel: { classPropertyName: "tabsOptionLabel", publicName: "tabsOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionValue: { classPropertyName: "tabsOptionValue", publicName: "tabsOptionValue", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", 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", activeTab: "activeTabChange", onTabChange: "onTabChange", pageSize: "pageSizeChange", currentPage: "currentPageChange", first: "firstChange", filterTerm: "filterTermChange" }, queries: [{ propertyName: "captionStartContent", first: true, predicate: ["captionStart"], descendants: true, isSignal: true }, { propertyName: "captionEndContent", first: true, predicate: ["captionEnd"], descendants: true, isSignal: true }, { propertyName: "emptyContent", first: true, predicate: ["empty"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"space-y-4\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n icon=\"general.search-lg\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\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)=\"\n updatePendingFilter(col.key, $event)\n \"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"\n updatePendingFilter(col.key, $event)\n \"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"\n 'Select ' + col.filterConfig?.label\n \"\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 @if (actions()?.length > 0) {\n <div class=\"flex items-center 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 [size]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div class=\"overflow-x-auto bg-content\">\n <p-table\n [value]=\"filteredData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [loading]=\"loading()\"\n (onPage)=\"onTablePage($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"min-w-full text-sm align-middle table-fixed\"\n >\n <ng-template\n #header\n let-columns\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=\"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=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (rowActions().length > 0) {\n <th\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n class=\"divide-y divide-gray-200\"\n >\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=\"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=\"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 (rowActions().length > 0) {\n <td class=\"text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n ></mt-button>\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"20\" class=\"text-center\">\n <div class=\"flex justify-center\">No data found.</div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\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 [alwaysShow]=\"false\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { 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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.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", "styleClass", "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", "required", "icon", "iconPosition"] }, { 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: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
186
+ 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 }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, showGridlines: { classPropertyName: "showGridlines", publicName: "showGridlines", isSignal: true, isRequired: false, transformFunction: null }, stripedRows: { classPropertyName: "stripedRows", publicName: "stripedRows", 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 }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionLabel: { classPropertyName: "tabsOptionLabel", publicName: "tabsOptionLabel", isSignal: true, isRequired: false, transformFunction: null }, tabsOptionValue: { classPropertyName: "tabsOptionValue", publicName: "tabsOptionValue", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", 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", activeTab: "activeTabChange", onTabChange: "onTabChange", pageSize: "pageSizeChange", currentPage: "currentPageChange", first: "firstChange", filterTerm: "filterTermChange" }, queries: [{ propertyName: "captionStartContent", first: true, predicate: ["captionStart"], descendants: true, isSignal: true }, { propertyName: "captionEndContent", first: true, predicate: ["captionEnd"], descendants: true, isSignal: true }, { propertyName: "emptyContent", first: true, predicate: ["empty"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"space-y-4\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n icon=\"general.search-lg\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\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)=\"\n updatePendingFilter(col.key, $event)\n \"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"\n updatePendingFilter(col.key, $event)\n \"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"\n 'Select ' + col.filterConfig?.label\n \"\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 @if (actions()?.length > 0) {\n <div class=\"flex items-center 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 [size]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div class=\"overflow-x-auto bg-content\">\n <p-table\n [value]=\"filteredData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [loading]=\"loading()\"\n (onPage)=\"onTablePage($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"min-w-full text-sm align-middle table-fixed\"\n >\n <ng-template\n #header\n let-columns\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=\"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=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (rowActions().length > 0) {\n <th\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n class=\"divide-y divide-gray-200\"\n >\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=\"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=\"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 (rowActions().length > 0) {\n <td class=\"text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track action.label) {\n @let hidden = action.hidden?.(row);\n @if (!hidden) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n ></mt-button>\n }\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"20\" class=\"text-center\">\n <div class=\"flex justify-center\">No data found.</div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\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 [alwaysShow]=\"false\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { 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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.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", "styleClass", "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", "required", "icon", "iconPosition"] }, { 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: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
187
187
  }
188
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: Table, decorators: [{
189
189
  type: Component,
@@ -199,7 +199,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImpor
199
199
  Paginator,
200
200
  CheckboxField,
201
201
  Tabs,
202
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"space-y-4\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n icon=\"general.search-lg\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\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)=\"\n updatePendingFilter(col.key, $event)\n \"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"\n updatePendingFilter(col.key, $event)\n \"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"\n 'Select ' + col.filterConfig?.label\n \"\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 @if (actions()?.length > 0) {\n <div class=\"flex items-center 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 [size]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div class=\"overflow-x-auto bg-content\">\n <p-table\n [value]=\"filteredData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [loading]=\"loading()\"\n (onPage)=\"onTablePage($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"min-w-full text-sm align-middle table-fixed\"\n >\n <ng-template\n #header\n let-columns\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=\"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=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (rowActions().length > 0) {\n <th\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n class=\"divide-y divide-gray-200\"\n >\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=\"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=\"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 (rowActions().length > 0) {\n <td class=\"text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n ></mt-button>\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"20\" class=\"text-center\">\n <div class=\"flex justify-center\">No data found.</div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\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 [alwaysShow]=\"false\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n" }]
202
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"space-y-4\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n icon=\"general.search-lg\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\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)=\"\n updatePendingFilter(col.key, $event)\n \"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"\n updatePendingFilter(col.key, $event)\n \"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"\n 'Select ' + col.filterConfig?.label\n \"\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 @if (actions()?.length > 0) {\n <div class=\"flex items-center 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 [size]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div class=\"overflow-x-auto bg-content\">\n <p-table\n [value]=\"filteredData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [loading]=\"loading()\"\n (onPage)=\"onTablePage($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"min-w-full text-sm align-middle table-fixed\"\n >\n <ng-template\n #header\n let-columns\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=\"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=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (rowActions().length > 0) {\n <th\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n class=\"divide-y divide-gray-200\"\n >\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=\"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=\"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 (rowActions().length > 0) {\n <td class=\"text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track action.label) {\n @let hidden = action.hidden?.(row);\n @if (!hidden) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n ></mt-button>\n }\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"20\" class=\"text-center\">\n <div class=\"flex justify-center\">No data found.</div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\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 [alwaysShow]=\"false\"\n [rowsPerPageOptions]=\"[5, 10, 20, 50]\"\n ></mt-paginator>\n </div>\n</div>\n" }]
203
203
  }] });
204
204
 
205
205
  /**
@@ -1 +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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n model,\n output,\n signal,\n TemplateRef,\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';\nimport { TableModule, TablePageEvent } from 'primeng/table';\nimport { Tabs } from '@masterteam/components/tabs';\n\n@Component({\n selector: 'mt-table',\n templateUrl: './table.html',\n styleUrls: ['./table.css'],\n standalone: true,\n imports: [\n TableModule,\n NgTemplateOutlet,\n DatePipe,\n ToggleField,\n FormsModule,\n Button,\n TextField,\n SelectField,\n Paginator,\n CheckboxField,\n Tabs,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Table {\n selectionChange = output<any[]>();\n\n data = input.required<any[]>();\n columns = input.required<ColumnDef[]>();\n rowActions = input<TableAction[]>([]);\n size = input<'small' | 'large' | undefined>(undefined);\n showGridlines = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n stripedRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n selectableRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n generalSearch = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n showFilters = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n loading = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n // Tabs inputs and outputs\n tabs = input<any[]>();\n tabsOptionLabel = input<string>();\n tabsOptionValue = input<string>();\n activeTab = model<any>();\n onTabChange = output<any>();\n\n // Table actions inputs and outputs\n actions = input<TableAction[]>([]);\n\n // Content TemplateRefs\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\n emptyContent = contentChild<TemplateRef<any>>('empty');\n\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\n pageSize = model<number>(10);\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 // TODO: remove after updating the toggle and checkbox logic\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 tabChanged(tab: any): void {\n this.filterTerm.set('');\n this.first.set(0);\n this.currentPage.set(0);\n this.onTabChange.emit(tab);\n }\n\n onTablePage(event: TablePageEvent): void {\n console.log('internal page change', event);\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? this.pageSize());\n this.currentPage.set(\n Math.floor((this.first() ?? 0) / (this.pageSize() || 1)),\n );\n }\n\n onSearchChange(searchTerm: Event) {\n const value = (searchTerm.target as HTMLInputElement).value;\n this.filterTerm.set(value);\n this.first.set(0);\n this.currentPage.set(0);\n }\n}\n","<div class=\"space-y-4\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n icon=\"general.search-lg\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\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)=\"\n updatePendingFilter(col.key, $event)\n \"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"\n updatePendingFilter(col.key, $event)\n \"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"\n 'Select ' + col.filterConfig?.label\n \"\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 @if (actions()?.length > 0) {\n <div class=\"flex items-center 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 [size]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div class=\"overflow-x-auto bg-content\">\n <p-table\n [value]=\"filteredData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [loading]=\"loading()\"\n (onPage)=\"onTablePage($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"min-w-full text-sm align-middle table-fixed\"\n >\n <ng-template\n #header\n let-columns\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=\"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=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (rowActions().length > 0) {\n <th\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n class=\"divide-y divide-gray-200\"\n >\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=\"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=\"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 (rowActions().length > 0) {\n <td class=\"text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n ></mt-button>\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"20\" class=\"text-center\">\n <div class=\"flex justify-center\">No data found.</div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\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 [alwaysShow]=\"false\"\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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"}
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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n model,\n output,\n signal,\n TemplateRef,\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';\nimport { TableModule, TablePageEvent } from 'primeng/table';\nimport { Tabs } from '@masterteam/components/tabs';\n\n@Component({\n selector: 'mt-table',\n templateUrl: './table.html',\n styleUrls: ['./table.css'],\n standalone: true,\n imports: [\n TableModule,\n NgTemplateOutlet,\n DatePipe,\n ToggleField,\n FormsModule,\n Button,\n TextField,\n SelectField,\n Paginator,\n CheckboxField,\n Tabs,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Table {\n selectionChange = output<any[]>();\n\n data = input.required<any[]>();\n columns = input.required<ColumnDef[]>();\n rowActions = input<TableAction[]>([]);\n size = input<'small' | 'large' | undefined>(undefined);\n showGridlines = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n stripedRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n selectableRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n generalSearch = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n showFilters = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n loading = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n // Tabs inputs and outputs\n tabs = input<any[]>();\n tabsOptionLabel = input<string>();\n tabsOptionValue = input<string>();\n activeTab = model<any>();\n onTabChange = output<any>();\n\n // Table actions inputs and outputs\n actions = input<TableAction[]>([]);\n\n // Content TemplateRefs\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\n emptyContent = contentChild<TemplateRef<any>>('empty');\n\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\n pageSize = model<number>(10);\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 // TODO: remove after updating the toggle and checkbox logic\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 tabChanged(tab: any): void {\n this.filterTerm.set('');\n this.first.set(0);\n this.currentPage.set(0);\n this.onTabChange.emit(tab);\n }\n\n onTablePage(event: TablePageEvent): void {\n console.log('internal page change', event);\n this.first.set(event.first ?? 0);\n this.pageSize.set(event.rows ?? this.pageSize());\n this.currentPage.set(\n Math.floor((this.first() ?? 0) / (this.pageSize() || 1)),\n );\n }\n\n onSearchChange(searchTerm: Event) {\n const value = (searchTerm.target as HTMLInputElement).value;\n this.filterTerm.set(value);\n this.first.set(0);\n this.currentPage.set(0);\n }\n}\n","<div class=\"space-y-4\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [(ngModel)]=\"filterTerm\"\n (change)=\"onSearchChange($event)\"\n icon=\"general.search-lg\"\n placeholder=\"Search...\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\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)=\"\n updatePendingFilter(col.key, $event)\n \"\n ></mt-text-field>\n }\n @case (\"select\") {\n <mt-select-field\n [(ngModel)]=\"pendingFilters()[col.key]\"\n (ngModelChange)=\"\n updatePendingFilter(col.key, $event)\n \"\n [options]=\"col.filterConfig?.options\"\n [hasPlaceholderPrefix]=\"false\"\n [placeholder]=\"\n 'Select ' + col.filterConfig?.label\n \"\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 @if (actions()?.length > 0) {\n <div class=\"flex items-center 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 [size]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div class=\"overflow-x-auto bg-content\">\n <p-table\n [value]=\"filteredData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [loading]=\"loading()\"\n (onPage)=\"onTablePage($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"min-w-full text-sm align-middle table-fixed\"\n >\n <ng-template\n #header\n let-columns\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=\"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=\"text-start font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n {{ col.label }}\n </th>\n }\n\n @if (rowActions().length > 0) {\n <th\n class=\"text-end! font-semibold text-gray-600 dark:text-gray-50 uppercase tracking-wider\"\n >\n Actions\n </th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n class=\"divide-y divide-gray-200\"\n >\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=\"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=\"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 (rowActions().length > 0) {\n <td class=\"text-right\">\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track action.label) {\n @let hidden = action.hidden?.(row);\n @if (!hidden) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"action.action(row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n ></mt-button>\n }\n }\n </div>\n </td>\n }\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"20\" class=\"text-center\">\n <div class=\"flex justify-center\">No data found.</div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\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 [alwaysShow]=\"false\"\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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"}
@@ -335,11 +335,11 @@ class UploadField {
335
335
  }
336
336
  }
337
337
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: UploadField, deps: [], target: i0.ɵɵFactoryTarget.Component });
338
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: UploadField, isStandalone: true, selector: "mt-upload-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, endPoint: { classPropertyName: "endPoint", publicName: "endPoint", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userImgClass: { classPropertyName: "userImgClass", publicName: "userImgClass", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, isDragging: { classPropertyName: "isDragging", publicName: "isDragging", isSignal: true, isRequired: false, transformFunction: null }, fileSizeLimit: { classPropertyName: "fileSizeLimit", publicName: "fileSizeLimit", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isDragging: "isDraggingChange", onChange: "onChange" }, ngImport: i0, template: "<input\n #uploadInput\n type=\"file\"\n name=\"file[]\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none\"\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\n/>\n\n@if (shape() === \"circle\") {\n <div class=\"flex flex-col items-center gap-2 w-full\">\n <div class=\"flex\">\n <div class=\"flex flex-col items-center\">\n <mt-upload-user-preview\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [size]=\"size()\"\n [userImgClass]=\"userImgClass()\"\n [isDragging]=\"isDragging()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n (onDragOver)=\"onDragOver($event)\"\n (onDragLeave)=\"onDragLeave($event)\"\n (onDrop)=\"onDrop($event)\"\n ></mt-upload-user-preview>\n @if (label()) {\n <label\n [class.required]=\"\n ngControl?.control?.hasValidator(requiredValidator)\n \"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col items-start gap-2 w-full\">\n @if (label()) {\n <label\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n\n <div\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\n [class]=\"this.disabled() ? 'bg-gray-50' : ''\"\n (click)=\"\n !this.loading() && !this.disabled() && !this.readonly()\n ? uploadInput.click()\n : ''\n \"\n [class.border-blue-500]=\"isDragging()\"\n [class.bg-blue-50]=\"isDragging()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n @if (value()) {\n <mt-upload-file-preview\n style=\"width: 100%\"\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n />\n } @else {\n @if (loading()) {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <p class=\"text-lg text-gray-500\">\n {{ \"Uploading...\" + uploadProgress() + \"%\" }}\n </p>\n </div>\n } @else {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <mt-icon icon=\"general.upload-01\" />\n <p class=\"text-lg text-gray-500\">Click or drop a file to upload</p>\n </div>\n }\n }\n </div>\n </div>\n}\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n", dependencies: [{ kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: UploadUserPreview, selector: "mt-upload-user-preview", inputs: ["value", "imgPath", "context", "loading", "uploadProgress", "isDragging", "disabled", "readonly", "size", "userImgClass"], outputs: ["onUploadInputClicked", "ondDownloadFile", "onDeleteFile", "onDragOver", "onDragLeave", "onDrop", "disabledChange"] }, { kind: "component", type: UploadFilePreview, selector: "mt-upload-file-preview", inputs: ["value", "imgPath", "context", "loading", "uploadProgress", "disabled", "readonly", "size"], outputs: ["onUploadInputClicked", "ondDownloadFile", "onDeleteFile", "disabledChange"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }] });
338
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: UploadField, isStandalone: true, selector: "mt-upload-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, endPoint: { classPropertyName: "endPoint", publicName: "endPoint", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userImgClass: { classPropertyName: "userImgClass", publicName: "userImgClass", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, isDragging: { classPropertyName: "isDragging", publicName: "isDragging", isSignal: true, isRequired: false, transformFunction: null }, fileSizeLimit: { classPropertyName: "fileSizeLimit", publicName: "fileSizeLimit", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isDragging: "isDraggingChange", onChange: "onChange" }, ngImport: i0, template: "<input\n #uploadInput\n type=\"file\"\n name=\"file[]\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none\"\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\n/>\n\n@if (shape() === \"circle\") {\n <div class=\"flex flex-col items-center gap-2 w-full\">\n <div class=\"flex\">\n <div class=\"flex flex-col items-center\">\n <mt-upload-user-preview\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [size]=\"size()\"\n [context]=\"context()\"\n [userImgClass]=\"userImgClass()\"\n [isDragging]=\"isDragging()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n (onDragOver)=\"onDragOver($event)\"\n (onDragLeave)=\"onDragLeave($event)\"\n (onDrop)=\"onDrop($event)\"\n ></mt-upload-user-preview>\n @if (label()) {\n <label\n [class.required]=\"\n ngControl?.control?.hasValidator(requiredValidator)\n \"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col items-start gap-2 w-full\">\n @if (label()) {\n <label\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n\n <div\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\n [class]=\"this.disabled() ? 'bg-gray-50' : ''\"\n (click)=\"\n !this.loading() && !this.disabled() && !this.readonly()\n ? uploadInput.click()\n : ''\n \"\n [class.border-blue-500]=\"isDragging()\"\n [class.bg-blue-50]=\"isDragging()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n @if (value()) {\n <mt-upload-file-preview\n style=\"width: 100%\"\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [context]=\"context()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n />\n } @else {\n @if (loading()) {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <p class=\"text-lg text-gray-500\">\n {{ \"Uploading...\" + uploadProgress() + \"%\" }}\n </p>\n </div>\n } @else {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <mt-icon icon=\"general.upload-01\" />\n <p class=\"text-lg text-gray-500\">Click or drop a file to upload</p>\n </div>\n }\n }\n </div>\n </div>\n}\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n", dependencies: [{ kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: UploadUserPreview, selector: "mt-upload-user-preview", inputs: ["value", "imgPath", "context", "loading", "uploadProgress", "isDragging", "disabled", "readonly", "size", "userImgClass"], outputs: ["onUploadInputClicked", "ondDownloadFile", "onDeleteFile", "onDragOver", "onDragLeave", "onDrop", "disabledChange"] }, { kind: "component", type: UploadFilePreview, selector: "mt-upload-file-preview", inputs: ["value", "imgPath", "context", "loading", "uploadProgress", "disabled", "readonly", "size"], outputs: ["onUploadInputClicked", "ondDownloadFile", "onDeleteFile", "disabledChange"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }] });
339
339
  }
340
340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: UploadField, decorators: [{
341
341
  type: Component,
342
- args: [{ selector: 'mt-upload-field', standalone: true, imports: [Icon, UploadUserPreview, UploadFilePreview, FieldValidation], template: "<input\n #uploadInput\n type=\"file\"\n name=\"file[]\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none\"\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\n/>\n\n@if (shape() === \"circle\") {\n <div class=\"flex flex-col items-center gap-2 w-full\">\n <div class=\"flex\">\n <div class=\"flex flex-col items-center\">\n <mt-upload-user-preview\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [size]=\"size()\"\n [userImgClass]=\"userImgClass()\"\n [isDragging]=\"isDragging()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n (onDragOver)=\"onDragOver($event)\"\n (onDragLeave)=\"onDragLeave($event)\"\n (onDrop)=\"onDrop($event)\"\n ></mt-upload-user-preview>\n @if (label()) {\n <label\n [class.required]=\"\n ngControl?.control?.hasValidator(requiredValidator)\n \"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col items-start gap-2 w-full\">\n @if (label()) {\n <label\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n\n <div\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\n [class]=\"this.disabled() ? 'bg-gray-50' : ''\"\n (click)=\"\n !this.loading() && !this.disabled() && !this.readonly()\n ? uploadInput.click()\n : ''\n \"\n [class.border-blue-500]=\"isDragging()\"\n [class.bg-blue-50]=\"isDragging()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n @if (value()) {\n <mt-upload-file-preview\n style=\"width: 100%\"\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n />\n } @else {\n @if (loading()) {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <p class=\"text-lg text-gray-500\">\n {{ \"Uploading...\" + uploadProgress() + \"%\" }}\n </p>\n </div>\n } @else {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <mt-icon icon=\"general.upload-01\" />\n <p class=\"text-lg text-gray-500\">Click or drop a file to upload</p>\n </div>\n }\n }\n </div>\n </div>\n}\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n" }]
342
+ args: [{ selector: 'mt-upload-field', standalone: true, imports: [Icon, UploadUserPreview, UploadFilePreview, FieldValidation], template: "<input\n #uploadInput\n type=\"file\"\n name=\"file[]\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none\"\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\n/>\n\n@if (shape() === \"circle\") {\n <div class=\"flex flex-col items-center gap-2 w-full\">\n <div class=\"flex\">\n <div class=\"flex flex-col items-center\">\n <mt-upload-user-preview\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [size]=\"size()\"\n [context]=\"context()\"\n [userImgClass]=\"userImgClass()\"\n [isDragging]=\"isDragging()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n (onDragOver)=\"onDragOver($event)\"\n (onDragLeave)=\"onDragLeave($event)\"\n (onDrop)=\"onDrop($event)\"\n ></mt-upload-user-preview>\n @if (label()) {\n <label\n [class.required]=\"\n ngControl?.control?.hasValidator(requiredValidator)\n \"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col items-start gap-2 w-full\">\n @if (label()) {\n <label\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n\n <div\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\n [class]=\"this.disabled() ? 'bg-gray-50' : ''\"\n (click)=\"\n !this.loading() && !this.disabled() && !this.readonly()\n ? uploadInput.click()\n : ''\n \"\n [class.border-blue-500]=\"isDragging()\"\n [class.bg-blue-50]=\"isDragging()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n @if (value()) {\n <mt-upload-file-preview\n style=\"width: 100%\"\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [context]=\"context()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n />\n } @else {\n @if (loading()) {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <p class=\"text-lg text-gray-500\">\n {{ \"Uploading...\" + uploadProgress() + \"%\" }}\n </p>\n </div>\n } @else {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <mt-icon icon=\"general.upload-01\" />\n <p class=\"text-lg text-gray-500\">Click or drop a file to upload</p>\n </div>\n }\n }\n </div>\n </div>\n}\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n" }]
343
343
  }], ctorParameters: () => [] });
344
344
 
345
345
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-components-upload-field.mjs","sources":["../../../../packages/masterteam/components/upload-field/secure-image.pipe.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.html","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.ts","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.html","../../../../packages/masterteam/components/upload-field/upload-field.ts","../../../../packages/masterteam/components/upload-field/upload-field.html","../../../../packages/masterteam/components/upload-field/masterteam-components-upload-field.ts"],"sourcesContent":["import {\n filter,\n switchMap,\n map,\n catchError,\n tap,\n distinctUntilChanged,\n finalize,\n} from 'rxjs/operators';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { Subscription, BehaviorSubject, of } from 'rxjs';\nimport {\n Pipe,\n PipeTransform,\n OnDestroy,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';\n@Pipe({\n name: 'secureImage',\n pure: false,\n standalone: true,\n})\nexport class SecureImagePipe implements PipeTransform, OnDestroy {\n httpClient = inject(HttpClient);\n domSanitizer = inject(DomSanitizer);\n cdr = inject(ChangeDetectorRef);\n constructor() {\n this.setUpSubscription();\n }\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n private subscription = new Subscription();\n private latestValue!: string | SafeUrl;\n private transformValue = new BehaviorSubject<string>('');\n private loading = true;\n private context: HttpContext | undefined;\n\n transform(imagePath: string, context: HttpContext | undefined): string {\n this.transformValue.next(imagePath);\n this.context = context;\n\n return this.loading ? '' : (this.latestValue as string);\n }\n\n private setUpSubscription(): void {\n const transformSubscription = this.transformValue\n .asObservable()\n .pipe(\n distinctUntilChanged(),\n filter((v): v is string => !!v && !v.includes('null')),\n switchMap((imagePath: string) => {\n this.latestValue = '';\n this.loading = true;\n return this.httpClient\n .get(imagePath, {\n observe: 'response',\n responseType: 'blob',\n context: this.context,\n })\n .pipe(\n map((response: HttpResponse<any>) =>\n URL.createObjectURL(response.body),\n ),\n map((unsafeBlobUrl: string) =>\n this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl),\n ),\n filter((blobUrl) => blobUrl !== this.latestValue),\n catchError(() => of('')),\n finalize(() => (this.loading = false)),\n );\n }),\n tap((imagePath: string | SafeUrl) => {\n this.latestValue = imagePath;\n this.cdr.markForCheck();\n }),\n )\n .subscribe();\n this.subscription.add(transformSubscription);\n }\n}\n","import {\n Component,\n computed,\n input,\n model,\n OnInit,\n output,\n} from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { SecureImagePipe } from '../secure-image.pipe';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { HttpContext } from '@angular/common/http';\n\n@Component({\n selector: 'mt-upload-file-preview',\n standalone: true,\n imports: [SecureImagePipe, Button, Avatar],\n templateUrl: './upload-file-preview.html',\n styleUrl: './upload-file-preview.scss',\n})\nexport class UploadFilePreview implements OnInit {\n value = input<any | null>(null);\n imgPath = input<any | undefined>();\n readonly context = input<HttpContext | undefined>(undefined);\n loading = input<boolean>(false);\n uploadProgress = input<number>(0);\n onUploadInputClicked = output<any>();\n ondDownloadFile = output<any>();\n onDeleteFile = output<any>();\n readonly disabled = model<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\n isImag = computed(() => {\n return this.value()?.contentType?.startsWith('image/');\n });\n ngOnInit(): void {\n if (this.readonly()) {\n this.disabled.set(true);\n }\n }\n defaultIcon = computed(() => {\n switch (this.value()?.extension) {\n case '.pdf':\n return 'file.file-06';\n case '.docx':\n case '.doc':\n return 'file.file-06';\n case '.xlsx':\n case '.xls':\n return 'file.file-06';\n default:\n return 'image.image-03';\n }\n });\n}\n","<div class=\"flex items-center justify-between gap-2 w-full p-2\">\n <div class=\"flex gap-2 items-center\">\n <mt-avatar\n [size]=\"size()\"\n [shape]=\"'square'\"\n [image]=\"\n isImag() && imgPath() ? (imgPath() | secureImage: context()) : ''\n \"\n [icon]=\"defaultIcon()\"\n styleClass=\"text-2xl!\"\n >\n </mt-avatar>\n\n <div class=\"w-[1/2]\">\n {{ value().name }}\n </div>\n </div>\n <div class=\"flex items-center justify-center\">\n @if (!disabled() && !!value() && !loading()) {\n <mt-button\n variant=\"text\"\n icon=\"general.download-01\"\n tooltip=\"Download\"\n (onClick)=\"ondDownloadFile.emit(value())\"\n (click)=\"$event.stopPropagation()\"\n >\n </mt-button>\n <mt-button\n variant=\"text\"\n icon=\"general.trash-01\"\n tooltip=\"Delete\"\n severity=\"danger\"\n (onClick)=\"onDeleteFile.emit(true)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mt-button>\n }\n </div>\n</div>\n","import { SecureImagePipe } from '../secure-image.pipe';\nimport { Icon } from '@masterteam/icons';\nimport { Component, input, model, OnInit, output, signal } from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { HttpContext } from '@angular/common/http';\n\n@Component({\n selector: 'mt-upload-user-preview',\n standalone: true,\n imports: [Icon, SecureImagePipe, Button, Icon, Avatar],\n templateUrl: './upload-user-preview.html',\n styleUrl: './upload-user-preview.css',\n})\nexport class UploadUserPreview implements OnInit {\n value = input<any | null>(null);\n imgPath = input<any | undefined>();\n readonly context = input<HttpContext | undefined>(undefined);\n loading = input<boolean>(false);\n uploadProgress = input<number>(0);\n isDragging = input<boolean>(false);\n defaultIcon = signal<string>('image.image-03');\n onUploadInputClicked = output<any>();\n ondDownloadFile = output<any>();\n onDeleteFile = output<any>();\n onDragOver = output<any>();\n onDragLeave = output<any>();\n onDrop = output<any>();\n readonly disabled = model<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\n readonly userImgClass = input<string>('');\n OnUploadInputClicked(): void {\n if (!this.imgPath() && !this.loading() && !this.disabled()) {\n this.onUploadInputClicked.emit(true);\n }\n }\n ngOnInit(): void {\n if (this.readonly()) {\n this.disabled.set(true);\n }\n }\n OnDragOver(event: DragEvent): void {\n this.onDragOver.emit(event);\n }\n OnDragLeave(event: DragEvent): void {\n this.onDragLeave.emit(event);\n }\n\n OnDrop(event: DragEvent): void {\n this.onDrop.emit(event);\n }\n}\n","<div\n class=\"rounded-full p-1 w-fit\"\n [style.background]=\"\n 'conic-gradient(var(--p-primary-300) ' +\n uploadProgress() +\n '%, transparent ' +\n uploadProgress() +\n '%)'\n \"\n>\n <div\n class=\"relative rounded-full w-fit border-2 border-dashed border-gray-300 bg-white\"\n [class.opacity-50]=\"isDragging()\"\n >\n <mt-avatar\n [size]=\"size()\"\n [image]=\"imgPath() ? (imgPath() | secureImage: context()) : ''\"\n [icon]=\"defaultIcon()\"\n [styleClass]=\"userImgClass()\"\n >\n </mt-avatar>\n\n @if (!loading()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50 opacity-0 hover:opacity-100 transition-opacity\"\n [class]=\"!imgPath() && !disabled() ? 'cursor-pointer' : ''\"\n (click)=\"OnUploadInputClicked()\"\n (dragover)=\"OnDragOver($event)\"\n (dragleave)=\"OnDragLeave($event)\"\n (drop)=\"OnDrop($event)\"\n >\n @if (!disabled() && !!imgPath()) {\n <mt-button\n variant=\"text\"\n icon=\"general.download-01\"\n tooltip=\"Download\"\n (onClick)=\"ondDownloadFile.emit(value())\"\n >\n </mt-button>\n <mt-button\n variant=\"text\"\n icon=\"general.trash-01\"\n tooltip=\"Delete\"\n severity=\"danger\"\n (onClick)=\"onDeleteFile.emit(true)\"\n >\n </mt-button>\n }\n @if (!imgPath() && !disabled()) {\n <mt-icon\n icon=\"general.upload-01\"\n class=\"text-primary-400 text-xl\"\n ></mt-icon>\n }\n </div>\n } @else if (loading()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50\"\n >\n @if (uploadProgress() === 100) {\n <mt-icon\n icon=\"general.check\"\n class=\"text-primary-400 text-2xl\"\n ></mt-icon>\n } @else {\n <small class=\"text-primary-300 font-bold text-lg\">{{\n uploadProgress() + \"%\"\n }}</small>\n }\n </div>\n }\n </div>\n</div>\n","import { UploadFilePreview } from './upload-file-preview/upload-file-preview';\nimport { UploadUserPreview } from './upload-user-preview/upload-user-preview';\nimport {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { Icon } from '@masterteam/icons';\nimport { catchError, finalize, take, throwError } from 'rxjs';\nimport { FieldValidation } from '@masterteam/components/field-validation';\n\n@Component({\n selector: 'mt-upload-field',\n standalone: true,\n imports: [Icon, UploadUserPreview, UploadFilePreview, FieldValidation],\n templateUrl: './upload-field.html',\n})\nexport class UploadField implements ControlValueAccessor {\n readonly label = input<string>();\n readonly endPoint = input<string>('uploader');\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\n readonly userImgClass = input<string | undefined>(\n 'w-25! h-25! text-4xl! text-gray-400!',\n );\n readonly shape = input<'circle' | 'field'>('field');\n readonly accept = input<string | undefined>('.pdf,.doc,.docx,.xlsx,image/*');\n readonly isDragging = model<boolean>(false);\n readonly fileSizeLimit = input<number | undefined>();\n readonly = input<boolean>(false);\n readonly context = input<HttpContext | undefined>(undefined);\n\n onChange = output<any>();\n requiredValidator = Validators.required;\n value = signal<any | null>(null);\n disabled = signal<boolean>(false);\n uploadProgress = signal<number>(0);\n httpClient = inject(HttpClient);\n loading = signal<boolean>(false);\n onTouched: () => void = () => {};\n onModelChange: (value: any[]) => void = () => {};\n public ngControl = inject(NgControl, { self: true });\n imgPath = computed(() => {\n if (this.value()?.fileName) {\n return this.value()?.fileName\n ? this.endPoint() + '/' + this.value().fileName\n : '';\n } else {\n return undefined;\n }\n });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(value: any[]) {\n this.value.set(value);\n }\n\n registerOnChange(fn: any) {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean) {\n this.disabled.set(disabled);\n }\n\n onAdd(item: any) {\n console.log('onAdd', item);\n if (!this.disabled()) {\n this.value.set(item);\n this.onModelChange(this.value() ?? null);\n this.onChange.emit(this.value());\n }\n }\n\n onDelete() {\n if (!this.disabled()) {\n console.log('onDelete');\n this.value.set(null);\n this.onModelChange(this.value() ?? null);\n this.onChange.emit(this.value());\n }\n }\n\n onFileSelect(event: any) {\n console.log('event', event);\n if (event.target.files.length) {\n this.value.set(null);\n const files: FileList = event.target.files;\n this.prepareImage(files);\n }\n }\n\n prepareImage(files: FileList) {\n this.ngControl.control?.setErrors({ uploading: true });\n\n if (files.length) {\n if (this.shape() === 'circle' && !files[0]?.type.startsWith('image/')) {\n this.ngControl.control?.setErrors({ invalidFileType: true });\n return;\n }\n this.uploadFile(files[0]);\n }\n }\n\n uploadFile(file: File) {\n this.loading.set(true);\n this.uploadProgress.set(10);\n\n const formData = new FormData();\n formData.append('file', file);\n\n this.httpClient\n .post<any>(this.endPoint(), formData, {\n // 1. Crucial options to report upload progress\n reportProgress: true,\n observe: 'events',\n context: this.context(),\n })\n .pipe(\n finalize(() => {\n setTimeout(() => {\n this.uploadProgress.set(0);\n this.loading.set(false);\n }, 700);\n }),\n catchError(() => {\n this.uploadProgress.set(0); // Reset on error\n return throwError(() => new Error('Upload failed'));\n }),\n )\n .subscribe((event: any) => {\n console.log('event', event);\n\n if (!event?.body) {\n if (event.total) {\n const percentDone = Math.round((100 * event.loaded) / event.total);\n this.uploadProgress.set(percentDone);\n console.log(`Upload Progress: ${percentDone}%`);\n }\n } else {\n this.uploadProgress.set(100);\n this.handleUploadDone({ ...event.body?.data, size: file.size });\n console.log('Upload Complete', event.body);\n }\n });\n }\n\n handleUploadDone(file: any) {\n if (file) {\n this.onAdd(file);\n if (this.fileSizeLimit() && file.size > this.fileSizeLimit()!) {\n this.ngControl.control?.setErrors({ fileSizeLimited: true });\n } else {\n this.ngControl.control?.setErrors(null);\n }\n console.log('this.ngControl.control', this.ngControl.control);\n }\n\n console.log('handleUploadDone', this.value());\n }\n\n downloadFile(value: any) {\n const downloadFileName = value?.name;\n const mimeType = value?.contentType;\n const storedFileName = value?.fileName;\n\n if (!storedFileName || !mimeType || !downloadFileName) {\n console.error('File metadata is incomplete. Cannot download.');\n return;\n }\n\n this.httpClient\n .get(this.imgPath()!, {\n responseType: 'blob',\n context: this.context(),\n })\n .pipe(take(1))\n .subscribe((res: Blob) => {\n const blob = new Blob([res], { type: mimeType });\n\n const data = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = data;\n\n link.download = downloadFileName;\n\n link.click();\n\n window.URL.revokeObjectURL(data);\n });\n }\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.isDragging.set(true);\n }\n }\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n\n if (this.disabled()) {\n return;\n }\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n const fileEvent = {\n target: {\n files: files,\n },\n } as unknown as Event;\n this.onFileSelect(fileEvent);\n }\n }\n}\n","<input\n #uploadInput\n type=\"file\"\n name=\"file[]\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none\"\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\n/>\n\n@if (shape() === \"circle\") {\n <div class=\"flex flex-col items-center gap-2 w-full\">\n <div class=\"flex\">\n <div class=\"flex flex-col items-center\">\n <mt-upload-user-preview\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [size]=\"size()\"\n [userImgClass]=\"userImgClass()\"\n [isDragging]=\"isDragging()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n (onDragOver)=\"onDragOver($event)\"\n (onDragLeave)=\"onDragLeave($event)\"\n (onDrop)=\"onDrop($event)\"\n ></mt-upload-user-preview>\n @if (label()) {\n <label\n [class.required]=\"\n ngControl?.control?.hasValidator(requiredValidator)\n \"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col items-start gap-2 w-full\">\n @if (label()) {\n <label\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n\n <div\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\n [class]=\"this.disabled() ? 'bg-gray-50' : ''\"\n (click)=\"\n !this.loading() && !this.disabled() && !this.readonly()\n ? uploadInput.click()\n : ''\n \"\n [class.border-blue-500]=\"isDragging()\"\n [class.bg-blue-50]=\"isDragging()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n @if (value()) {\n <mt-upload-file-preview\n style=\"width: 100%\"\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n />\n } @else {\n @if (loading()) {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <p class=\"text-lg text-gray-500\">\n {{ \"Uploading...\" + uploadProgress() + \"%\" }}\n </p>\n </div>\n } @else {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <mt-icon icon=\"general.upload-01\" />\n <p class=\"text-lg text-gray-500\">Click or drop a file to upload</p>\n </div>\n }\n }\n </div>\n </div>\n}\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["finalize","catchError"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-upload-field.mjs","sources":["../../../../packages/masterteam/components/upload-field/secure-image.pipe.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.html","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.ts","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.html","../../../../packages/masterteam/components/upload-field/upload-field.ts","../../../../packages/masterteam/components/upload-field/upload-field.html","../../../../packages/masterteam/components/upload-field/masterteam-components-upload-field.ts"],"sourcesContent":["import {\n filter,\n switchMap,\n map,\n catchError,\n tap,\n distinctUntilChanged,\n finalize,\n} from 'rxjs/operators';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { Subscription, BehaviorSubject, of } from 'rxjs';\nimport {\n Pipe,\n PipeTransform,\n OnDestroy,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';\n@Pipe({\n name: 'secureImage',\n pure: false,\n standalone: true,\n})\nexport class SecureImagePipe implements PipeTransform, OnDestroy {\n httpClient = inject(HttpClient);\n domSanitizer = inject(DomSanitizer);\n cdr = inject(ChangeDetectorRef);\n constructor() {\n this.setUpSubscription();\n }\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n private subscription = new Subscription();\n private latestValue!: string | SafeUrl;\n private transformValue = new BehaviorSubject<string>('');\n private loading = true;\n private context: HttpContext | undefined;\n\n transform(imagePath: string, context: HttpContext | undefined): string {\n this.transformValue.next(imagePath);\n this.context = context;\n\n return this.loading ? '' : (this.latestValue as string);\n }\n\n private setUpSubscription(): void {\n const transformSubscription = this.transformValue\n .asObservable()\n .pipe(\n distinctUntilChanged(),\n filter((v): v is string => !!v && !v.includes('null')),\n switchMap((imagePath: string) => {\n this.latestValue = '';\n this.loading = true;\n return this.httpClient\n .get(imagePath, {\n observe: 'response',\n responseType: 'blob',\n context: this.context,\n })\n .pipe(\n map((response: HttpResponse<any>) =>\n URL.createObjectURL(response.body),\n ),\n map((unsafeBlobUrl: string) =>\n this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl),\n ),\n filter((blobUrl) => blobUrl !== this.latestValue),\n catchError(() => of('')),\n finalize(() => (this.loading = false)),\n );\n }),\n tap((imagePath: string | SafeUrl) => {\n this.latestValue = imagePath;\n this.cdr.markForCheck();\n }),\n )\n .subscribe();\n this.subscription.add(transformSubscription);\n }\n}\n","import {\n Component,\n computed,\n input,\n model,\n OnInit,\n output,\n} from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { SecureImagePipe } from '../secure-image.pipe';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { HttpContext } from '@angular/common/http';\n\n@Component({\n selector: 'mt-upload-file-preview',\n standalone: true,\n imports: [SecureImagePipe, Button, Avatar],\n templateUrl: './upload-file-preview.html',\n styleUrl: './upload-file-preview.scss',\n})\nexport class UploadFilePreview implements OnInit {\n value = input<any | null>(null);\n imgPath = input<any | undefined>();\n readonly context = input<HttpContext | undefined>(undefined);\n loading = input<boolean>(false);\n uploadProgress = input<number>(0);\n onUploadInputClicked = output<any>();\n ondDownloadFile = output<any>();\n onDeleteFile = output<any>();\n readonly disabled = model<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\n isImag = computed(() => {\n return this.value()?.contentType?.startsWith('image/');\n });\n ngOnInit(): void {\n if (this.readonly()) {\n this.disabled.set(true);\n }\n }\n defaultIcon = computed(() => {\n switch (this.value()?.extension) {\n case '.pdf':\n return 'file.file-06';\n case '.docx':\n case '.doc':\n return 'file.file-06';\n case '.xlsx':\n case '.xls':\n return 'file.file-06';\n default:\n return 'image.image-03';\n }\n });\n}\n","<div class=\"flex items-center justify-between gap-2 w-full p-2\">\n <div class=\"flex gap-2 items-center\">\n <mt-avatar\n [size]=\"size()\"\n [shape]=\"'square'\"\n [image]=\"\n isImag() && imgPath() ? (imgPath() | secureImage: context()) : ''\n \"\n [icon]=\"defaultIcon()\"\n styleClass=\"text-2xl!\"\n >\n </mt-avatar>\n\n <div class=\"w-[1/2]\">\n {{ value().name }}\n </div>\n </div>\n <div class=\"flex items-center justify-center\">\n @if (!disabled() && !!value() && !loading()) {\n <mt-button\n variant=\"text\"\n icon=\"general.download-01\"\n tooltip=\"Download\"\n (onClick)=\"ondDownloadFile.emit(value())\"\n (click)=\"$event.stopPropagation()\"\n >\n </mt-button>\n <mt-button\n variant=\"text\"\n icon=\"general.trash-01\"\n tooltip=\"Delete\"\n severity=\"danger\"\n (onClick)=\"onDeleteFile.emit(true)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mt-button>\n }\n </div>\n</div>\n","import { SecureImagePipe } from '../secure-image.pipe';\nimport { Icon } from '@masterteam/icons';\nimport { Component, input, model, OnInit, output, signal } from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { HttpContext } from '@angular/common/http';\n\n@Component({\n selector: 'mt-upload-user-preview',\n standalone: true,\n imports: [Icon, SecureImagePipe, Button, Icon, Avatar],\n templateUrl: './upload-user-preview.html',\n styleUrl: './upload-user-preview.css',\n})\nexport class UploadUserPreview implements OnInit {\n value = input<any | null>(null);\n imgPath = input<any | undefined>();\n readonly context = input<HttpContext | undefined>(undefined);\n loading = input<boolean>(false);\n uploadProgress = input<number>(0);\n isDragging = input<boolean>(false);\n defaultIcon = signal<string>('image.image-03');\n onUploadInputClicked = output<any>();\n ondDownloadFile = output<any>();\n onDeleteFile = output<any>();\n onDragOver = output<any>();\n onDragLeave = output<any>();\n onDrop = output<any>();\n readonly disabled = model<boolean>(false);\n readonly readonly = input<boolean>(false);\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\n readonly userImgClass = input<string>('');\n OnUploadInputClicked(): void {\n if (!this.imgPath() && !this.loading() && !this.disabled()) {\n this.onUploadInputClicked.emit(true);\n }\n }\n ngOnInit(): void {\n if (this.readonly()) {\n this.disabled.set(true);\n }\n }\n OnDragOver(event: DragEvent): void {\n this.onDragOver.emit(event);\n }\n OnDragLeave(event: DragEvent): void {\n this.onDragLeave.emit(event);\n }\n\n OnDrop(event: DragEvent): void {\n this.onDrop.emit(event);\n }\n}\n","<div\n class=\"rounded-full p-1 w-fit\"\n [style.background]=\"\n 'conic-gradient(var(--p-primary-300) ' +\n uploadProgress() +\n '%, transparent ' +\n uploadProgress() +\n '%)'\n \"\n>\n <div\n class=\"relative rounded-full w-fit border-2 border-dashed border-gray-300 bg-white\"\n [class.opacity-50]=\"isDragging()\"\n >\n <mt-avatar\n [size]=\"size()\"\n [image]=\"imgPath() ? (imgPath() | secureImage: context()) : ''\"\n [icon]=\"defaultIcon()\"\n [styleClass]=\"userImgClass()\"\n >\n </mt-avatar>\n\n @if (!loading()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50 opacity-0 hover:opacity-100 transition-opacity\"\n [class]=\"!imgPath() && !disabled() ? 'cursor-pointer' : ''\"\n (click)=\"OnUploadInputClicked()\"\n (dragover)=\"OnDragOver($event)\"\n (dragleave)=\"OnDragLeave($event)\"\n (drop)=\"OnDrop($event)\"\n >\n @if (!disabled() && !!imgPath()) {\n <mt-button\n variant=\"text\"\n icon=\"general.download-01\"\n tooltip=\"Download\"\n (onClick)=\"ondDownloadFile.emit(value())\"\n >\n </mt-button>\n <mt-button\n variant=\"text\"\n icon=\"general.trash-01\"\n tooltip=\"Delete\"\n severity=\"danger\"\n (onClick)=\"onDeleteFile.emit(true)\"\n >\n </mt-button>\n }\n @if (!imgPath() && !disabled()) {\n <mt-icon\n icon=\"general.upload-01\"\n class=\"text-primary-400 text-xl\"\n ></mt-icon>\n }\n </div>\n } @else if (loading()) {\n <div\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50\"\n >\n @if (uploadProgress() === 100) {\n <mt-icon\n icon=\"general.check\"\n class=\"text-primary-400 text-2xl\"\n ></mt-icon>\n } @else {\n <small class=\"text-primary-300 font-bold text-lg\">{{\n uploadProgress() + \"%\"\n }}</small>\n }\n </div>\n }\n </div>\n</div>\n","import { UploadFilePreview } from './upload-file-preview/upload-file-preview';\nimport { UploadUserPreview } from './upload-user-preview/upload-user-preview';\nimport {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { Icon } from '@masterteam/icons';\nimport { catchError, finalize, take, throwError } from 'rxjs';\nimport { FieldValidation } from '@masterteam/components/field-validation';\n\n@Component({\n selector: 'mt-upload-field',\n standalone: true,\n imports: [Icon, UploadUserPreview, UploadFilePreview, FieldValidation],\n templateUrl: './upload-field.html',\n})\nexport class UploadField implements ControlValueAccessor {\n readonly label = input<string>();\n readonly endPoint = input<string>('uploader');\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\n readonly userImgClass = input<string | undefined>(\n 'w-25! h-25! text-4xl! text-gray-400!',\n );\n readonly shape = input<'circle' | 'field'>('field');\n readonly accept = input<string | undefined>('.pdf,.doc,.docx,.xlsx,image/*');\n readonly isDragging = model<boolean>(false);\n readonly fileSizeLimit = input<number | undefined>();\n readonly = input<boolean>(false);\n readonly context = input<HttpContext | undefined>(undefined);\n\n onChange = output<any>();\n requiredValidator = Validators.required;\n value = signal<any | null>(null);\n disabled = signal<boolean>(false);\n uploadProgress = signal<number>(0);\n httpClient = inject(HttpClient);\n loading = signal<boolean>(false);\n onTouched: () => void = () => {};\n onModelChange: (value: any[]) => void = () => {};\n public ngControl = inject(NgControl, { self: true });\n imgPath = computed(() => {\n if (this.value()?.fileName) {\n return this.value()?.fileName\n ? this.endPoint() + '/' + this.value().fileName\n : '';\n } else {\n return undefined;\n }\n });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n writeValue(value: any[]) {\n this.value.set(value);\n }\n\n registerOnChange(fn: any) {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean) {\n this.disabled.set(disabled);\n }\n\n onAdd(item: any) {\n console.log('onAdd', item);\n if (!this.disabled()) {\n this.value.set(item);\n this.onModelChange(this.value() ?? null);\n this.onChange.emit(this.value());\n }\n }\n\n onDelete() {\n if (!this.disabled()) {\n console.log('onDelete');\n this.value.set(null);\n this.onModelChange(this.value() ?? null);\n this.onChange.emit(this.value());\n }\n }\n\n onFileSelect(event: any) {\n console.log('event', event);\n if (event.target.files.length) {\n this.value.set(null);\n const files: FileList = event.target.files;\n this.prepareImage(files);\n }\n }\n\n prepareImage(files: FileList) {\n this.ngControl.control?.setErrors({ uploading: true });\n\n if (files.length) {\n if (this.shape() === 'circle' && !files[0]?.type.startsWith('image/')) {\n this.ngControl.control?.setErrors({ invalidFileType: true });\n return;\n }\n this.uploadFile(files[0]);\n }\n }\n\n uploadFile(file: File) {\n this.loading.set(true);\n this.uploadProgress.set(10);\n\n const formData = new FormData();\n formData.append('file', file);\n\n this.httpClient\n .post<any>(this.endPoint(), formData, {\n // 1. Crucial options to report upload progress\n reportProgress: true,\n observe: 'events',\n context: this.context(),\n })\n .pipe(\n finalize(() => {\n setTimeout(() => {\n this.uploadProgress.set(0);\n this.loading.set(false);\n }, 700);\n }),\n catchError(() => {\n this.uploadProgress.set(0); // Reset on error\n return throwError(() => new Error('Upload failed'));\n }),\n )\n .subscribe((event: any) => {\n console.log('event', event);\n\n if (!event?.body) {\n if (event.total) {\n const percentDone = Math.round((100 * event.loaded) / event.total);\n this.uploadProgress.set(percentDone);\n console.log(`Upload Progress: ${percentDone}%`);\n }\n } else {\n this.uploadProgress.set(100);\n this.handleUploadDone({ ...event.body?.data, size: file.size });\n console.log('Upload Complete', event.body);\n }\n });\n }\n\n handleUploadDone(file: any) {\n if (file) {\n this.onAdd(file);\n if (this.fileSizeLimit() && file.size > this.fileSizeLimit()!) {\n this.ngControl.control?.setErrors({ fileSizeLimited: true });\n } else {\n this.ngControl.control?.setErrors(null);\n }\n console.log('this.ngControl.control', this.ngControl.control);\n }\n\n console.log('handleUploadDone', this.value());\n }\n\n downloadFile(value: any) {\n const downloadFileName = value?.name;\n const mimeType = value?.contentType;\n const storedFileName = value?.fileName;\n\n if (!storedFileName || !mimeType || !downloadFileName) {\n console.error('File metadata is incomplete. Cannot download.');\n return;\n }\n\n this.httpClient\n .get(this.imgPath()!, {\n responseType: 'blob',\n context: this.context(),\n })\n .pipe(take(1))\n .subscribe((res: Blob) => {\n const blob = new Blob([res], { type: mimeType });\n\n const data = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = data;\n\n link.download = downloadFileName;\n\n link.click();\n\n window.URL.revokeObjectURL(data);\n });\n }\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.isDragging.set(true);\n }\n }\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragging.set(false);\n\n if (this.disabled()) {\n return;\n }\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n const fileEvent = {\n target: {\n files: files,\n },\n } as unknown as Event;\n this.onFileSelect(fileEvent);\n }\n }\n}\n","<input\n #uploadInput\n type=\"file\"\n name=\"file[]\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none\"\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\n/>\n\n@if (shape() === \"circle\") {\n <div class=\"flex flex-col items-center gap-2 w-full\">\n <div class=\"flex\">\n <div class=\"flex flex-col items-center\">\n <mt-upload-user-preview\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [size]=\"size()\"\n [context]=\"context()\"\n [userImgClass]=\"userImgClass()\"\n [isDragging]=\"isDragging()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n (onDragOver)=\"onDragOver($event)\"\n (onDragLeave)=\"onDragLeave($event)\"\n (onDrop)=\"onDrop($event)\"\n ></mt-upload-user-preview>\n @if (label()) {\n <label\n [class.required]=\"\n ngControl?.control?.hasValidator(requiredValidator)\n \"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"flex flex-col items-start gap-2 w-full\">\n @if (label()) {\n <label\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\n [for]=\"ngControl?.name || label()\"\n >{{ label() }}</label\n >\n }\n\n <div\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\n [class]=\"this.disabled() ? 'bg-gray-50' : ''\"\n (click)=\"\n !this.loading() && !this.disabled() && !this.readonly()\n ? uploadInput.click()\n : ''\n \"\n [class.border-blue-500]=\"isDragging()\"\n [class.bg-blue-50]=\"isDragging()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n @if (value()) {\n <mt-upload-file-preview\n style=\"width: 100%\"\n [value]=\"value()\"\n [imgPath]=\"imgPath()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [loading]=\"loading()\"\n [context]=\"context()\"\n [uploadProgress]=\"uploadProgress()\"\n (onUploadInputClicked)=\"uploadInput.click()\"\n (ondDownloadFile)=\"downloadFile($event)\"\n (onDeleteFile)=\"onDelete()\"\n />\n } @else {\n @if (loading()) {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <p class=\"text-lg text-gray-500\">\n {{ \"Uploading...\" + uploadProgress() + \"%\" }}\n </p>\n </div>\n } @else {\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\n <mt-icon icon=\"general.upload-01\" />\n <p class=\"text-lg text-gray-500\">Click or drop a file to upload</p>\n </div>\n }\n }\n </div>\n </div>\n}\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["finalize","catchError"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/components",
3
- "version": "0.0.40",
3
+ "version": "0.0.42",
4
4
  "publishConfig": {
5
5
  "directory": ".",
6
6
  "linkDirectory": false,
@@ -39,41 +39,37 @@
39
39
  "types": "./index.d.ts",
40
40
  "default": "./fesm2022/masterteam-components.mjs"
41
41
  },
42
+ "./avatar": {
43
+ "types": "./avatar/index.d.ts",
44
+ "default": "./fesm2022/masterteam-components-avatar.mjs"
45
+ },
42
46
  "./breadcrumb": {
43
47
  "types": "./breadcrumb/index.d.ts",
44
48
  "default": "./fesm2022/masterteam-components-breadcrumb.mjs"
45
49
  },
46
- "./avatar": {
47
- "types": "./avatar/index.d.ts",
48
- "default": "./fesm2022/masterteam-components-avatar.mjs"
50
+ "./card": {
51
+ "types": "./card/index.d.ts",
52
+ "default": "./fesm2022/masterteam-components-card.mjs"
49
53
  },
50
54
  "./button-group": {
51
55
  "types": "./button-group/index.d.ts",
52
56
  "default": "./fesm2022/masterteam-components-button-group.mjs"
53
57
  },
54
- "./card": {
55
- "types": "./card/index.d.ts",
56
- "default": "./fesm2022/masterteam-components-card.mjs"
58
+ "./avatar-text": {
59
+ "types": "./avatar-text/index.d.ts",
60
+ "default": "./fesm2022/masterteam-components-avatar-text.mjs"
57
61
  },
58
62
  "./button": {
59
63
  "types": "./button/index.d.ts",
60
64
  "default": "./fesm2022/masterteam-components-button.mjs"
61
65
  },
62
- "./chip": {
63
- "types": "./chip/index.d.ts",
64
- "default": "./fesm2022/masterteam-components-chip.mjs"
65
- },
66
66
  "./checkbox-field": {
67
67
  "types": "./checkbox-field/index.d.ts",
68
68
  "default": "./fesm2022/masterteam-components-checkbox-field.mjs"
69
69
  },
70
- "./avatar-text": {
71
- "types": "./avatar-text/index.d.ts",
72
- "default": "./fesm2022/masterteam-components-avatar-text.mjs"
73
- },
74
- "./color-picker-field": {
75
- "types": "./color-picker-field/index.d.ts",
76
- "default": "./fesm2022/masterteam-components-color-picker-field.mjs"
70
+ "./chip": {
71
+ "types": "./chip/index.d.ts",
72
+ "default": "./fesm2022/masterteam-components-chip.mjs"
77
73
  },
78
74
  "./date-field": {
79
75
  "types": "./date-field/index.d.ts",
@@ -83,6 +79,14 @@
83
79
  "types": "./dialog/index.d.ts",
84
80
  "default": "./fesm2022/masterteam-components-dialog.mjs"
85
81
  },
82
+ "./drawer": {
83
+ "types": "./drawer/index.d.ts",
84
+ "default": "./fesm2022/masterteam-components-drawer.mjs"
85
+ },
86
+ "./color-picker-field": {
87
+ "types": "./color-picker-field/index.d.ts",
88
+ "default": "./fesm2022/masterteam-components-color-picker-field.mjs"
89
+ },
86
90
  "./dynamic-drawer": {
87
91
  "types": "./dynamic-drawer/index.d.ts",
88
92
  "default": "./fesm2022/masterteam-components-dynamic-drawer.mjs"
@@ -91,10 +95,6 @@
91
95
  "types": "./editor-field/index.d.ts",
92
96
  "default": "./fesm2022/masterteam-components-editor-field.mjs"
93
97
  },
94
- "./drawer": {
95
- "types": "./drawer/index.d.ts",
96
- "default": "./fesm2022/masterteam-components-drawer.mjs"
97
- },
98
98
  "./field-validation": {
99
99
  "types": "./field-validation/index.d.ts",
100
100
  "default": "./fesm2022/masterteam-components-field-validation.mjs"
@@ -103,6 +103,10 @@
103
103
  "types": "./icon-field/index.d.ts",
104
104
  "default": "./fesm2022/masterteam-components-icon-field.mjs"
105
105
  },
106
+ "./menu": {
107
+ "types": "./menu/index.d.ts",
108
+ "default": "./fesm2022/masterteam-components-menu.mjs"
109
+ },
106
110
  "./list": {
107
111
  "types": "./list/index.d.ts",
108
112
  "default": "./fesm2022/masterteam-components-list.mjs"
@@ -111,10 +115,6 @@
111
115
  "types": "./formula-builder/index.d.ts",
112
116
  "default": "./fesm2022/masterteam-components-formula-builder.mjs"
113
117
  },
114
- "./menu": {
115
- "types": "./menu/index.d.ts",
116
- "default": "./fesm2022/masterteam-components-menu.mjs"
117
- },
118
118
  "./modal": {
119
119
  "types": "./modal/index.d.ts",
120
120
  "default": "./fesm2022/masterteam-components-modal.mjs"
@@ -127,10 +127,6 @@
127
127
  "types": "./multi-select-field/index.d.ts",
128
128
  "default": "./fesm2022/masterteam-components-multi-select-field.mjs"
129
129
  },
130
- "./number-field": {
131
- "types": "./number-field/index.d.ts",
132
- "default": "./fesm2022/masterteam-components-number-field.mjs"
133
- },
134
130
  "./paginator": {
135
131
  "types": "./paginator/index.d.ts",
136
132
  "default": "./fesm2022/masterteam-components-paginator.mjs"
@@ -139,9 +135,9 @@
139
135
  "types": "./pick-list-field/index.d.ts",
140
136
  "default": "./fesm2022/masterteam-components-pick-list-field.mjs"
141
137
  },
142
- "./radio-cards-field": {
143
- "types": "./radio-cards-field/index.d.ts",
144
- "default": "./fesm2022/masterteam-components-radio-cards-field.mjs"
138
+ "./number-field": {
139
+ "types": "./number-field/index.d.ts",
140
+ "default": "./fesm2022/masterteam-components-number-field.mjs"
145
141
  },
146
142
  "./radio-button-field": {
147
143
  "types": "./radio-button-field/index.d.ts",
@@ -151,6 +147,14 @@
151
147
  "types": "./radio-cards/index.d.ts",
152
148
  "default": "./fesm2022/masterteam-components-radio-cards.mjs"
153
149
  },
150
+ "./radio-cards-field": {
151
+ "types": "./radio-cards-field/index.d.ts",
152
+ "default": "./fesm2022/masterteam-components-radio-cards-field.mjs"
153
+ },
154
+ "./tabs": {
155
+ "types": "./tabs/index.d.ts",
156
+ "default": "./fesm2022/masterteam-components-tabs.mjs"
157
+ },
154
158
  "./select-field": {
155
159
  "types": "./select-field/index.d.ts",
156
160
  "default": "./fesm2022/masterteam-components-select-field.mjs"
@@ -159,41 +163,37 @@
159
163
  "types": "./slider-field/index.d.ts",
160
164
  "default": "./fesm2022/masterteam-components-slider-field.mjs"
161
165
  },
162
- "./tabs": {
163
- "types": "./tabs/index.d.ts",
164
- "default": "./fesm2022/masterteam-components-tabs.mjs"
166
+ "./text-field": {
167
+ "types": "./text-field/index.d.ts",
168
+ "default": "./fesm2022/masterteam-components-text-field.mjs"
165
169
  },
166
170
  "./table": {
167
171
  "types": "./table/index.d.ts",
168
172
  "default": "./fesm2022/masterteam-components-table.mjs"
169
173
  },
174
+ "./tooltip": {
175
+ "types": "./tooltip/index.d.ts",
176
+ "default": "./fesm2022/masterteam-components-tooltip.mjs"
177
+ },
170
178
  "./textarea-field": {
171
179
  "types": "./textarea-field/index.d.ts",
172
180
  "default": "./fesm2022/masterteam-components-textarea-field.mjs"
173
181
  },
174
- "./toggle-field": {
175
- "types": "./toggle-field/index.d.ts",
176
- "default": "./fesm2022/masterteam-components-toggle-field.mjs"
177
- },
178
182
  "./toast": {
179
183
  "types": "./toast/index.d.ts",
180
184
  "default": "./fesm2022/masterteam-components-toast.mjs"
181
185
  },
182
- "./text-field": {
183
- "types": "./text-field/index.d.ts",
184
- "default": "./fesm2022/masterteam-components-text-field.mjs"
186
+ "./toggle-field": {
187
+ "types": "./toggle-field/index.d.ts",
188
+ "default": "./fesm2022/masterteam-components-toggle-field.mjs"
185
189
  },
186
- "./tooltip": {
187
- "types": "./tooltip/index.d.ts",
188
- "default": "./fesm2022/masterteam-components-tooltip.mjs"
190
+ "./upload-field": {
191
+ "types": "./upload-field/index.d.ts",
192
+ "default": "./fesm2022/masterteam-components-upload-field.mjs"
189
193
  },
190
194
  "./user-search-field": {
191
195
  "types": "./user-search-field/index.d.ts",
192
196
  "default": "./fesm2022/masterteam-components-user-search-field.mjs"
193
- },
194
- "./upload-field": {
195
- "types": "./upload-field/index.d.ts",
196
- "default": "./fesm2022/masterteam-components-upload-field.mjs"
197
197
  }
198
198
  },
199
199
  "module": "fesm2022/masterteam-components.mjs",
package/table/index.d.ts CHANGED
@@ -31,6 +31,7 @@ interface TableAction {
31
31
  variant?: 'text' | 'outlined' | undefined;
32
32
  label?: string;
33
33
  tooltip?: string;
34
+ hidden?: (row: any) => boolean;
34
35
  action: (row: any) => void;
35
36
  }
36
37