UNPKG

ng-prime-tools

Version:

An advanced PrimeNG table for Angular

96 lines 16.9 kB
import { Component, Input, HostListener } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../pt-card/pt-card.component"; export class PTMenuFancyComponent { constructor() { this.config = { icon: { code: 'pi pi-ellipsis-v', color: '#000', fontSize: '15px' }, menuDirection: 'right', }; this.cardMenuConfig = { noBorder: true, margin: '0', padding: '5px', }; this.isOpen = false; } static { this.DEFAULT_TEXT_COLOR = '#000'; } static { this.DEFAULT_TEXT_FONT_SIZE = '15px'; } static { this.DEFAULT_ICON_COLOR = '#000'; } static { this.DEFAULT_ICON_FONT_SIZE = '15px'; } static { this.DEFAULT_ICON_CODE = 'pi pi-ellipsis-v'; } static { this.openMenuInstance = null; } toggleMenu() { if (PTMenuFancyComponent.openMenuInstance && PTMenuFancyComponent.openMenuInstance !== this) { PTMenuFancyComponent.openMenuInstance.closeMenu(); } this.isOpen = !this.isOpen; if (this.isOpen) { PTMenuFancyComponent.openMenuInstance = this; } else { PTMenuFancyComponent.openMenuInstance = null; } } closeMenu() { this.isOpen = false; if (PTMenuFancyComponent.openMenuInstance === this) { PTMenuFancyComponent.openMenuInstance = null; } } getMenuItemIconClass(item) { // Assuming that icons starting with "fa" are FontAwesome icons return typeof item.icon === 'string' ? item.icon : item.icon?.code || ''; } getMenuItemIconStyles(item) { if (typeof item.icon !== 'string') { return { color: item.icon?.color || PTMenuFancyComponent.DEFAULT_ICON_COLOR, fontSize: item.icon?.fontSize || PTMenuFancyComponent.DEFAULT_ICON_FONT_SIZE, }; } return { color: PTMenuFancyComponent.DEFAULT_ICON_COLOR, fontSize: PTMenuFancyComponent.DEFAULT_ICON_FONT_SIZE, }; } getIconClass() { return this.config.icon?.code || PTMenuFancyComponent.DEFAULT_ICON_CODE; } getIconStyles() { return { color: this.config.color || this.config.icon?.color || PTMenuFancyComponent.DEFAULT_ICON_COLOR, fontSize: this.config.fontSize || this.config.icon?.fontSize || PTMenuFancyComponent.DEFAULT_ICON_FONT_SIZE, }; } getTextStyles(item) { return { color: item.color || PTMenuFancyComponent.DEFAULT_TEXT_COLOR, fontSize: item.fontSize || PTMenuFancyComponent.DEFAULT_TEXT_FONT_SIZE, }; } onDocumentClick(event) { const clickedInside = event.target.closest('.pt-menu-fancy'); if (!clickedInside) { this.closeMenu(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTMenuFancyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTMenuFancyComponent, selector: "pt-menu-fancy", inputs: { config: "config" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div\n [ngClass]=\"{\n open: isOpen,\n 'menu-left': config.menuDirection === 'left',\n 'menu-right': config.menuDirection === 'right'\n }\"\n class=\"pt-menu-fancy\"\n>\n <i\n class=\"menu-icon\"\n (click)=\"toggleMenu()\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n ></i>\n <div class=\"menu-dropdown\" *ngIf=\"isOpen\">\n <pt-card [config]=\"cardMenuConfig\">\n <div\n class=\"menu-item\"\n *ngFor=\"let item of config.menuItems\"\n (click)=\"item.action()\"\n >\n <i\n [ngClass]=\"getMenuItemIconClass(item)\"\n [ngStyle]=\"getMenuItemIconStyles(item)\"\n ></i>\n <span [ngStyle]=\"getTextStyles(item)\">{{ item.text }}</span>\n </div>\n </pt-card>\n </div>\n</div>\n", styles: [".pt-menu-fancy{position:relative;display:inline-block}.pt-menu-fancy .menu-icon{font-style:normal;font-weight:400;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;padding:8px;transition:background-color .2s,box-shadow .2s}.pt-menu-fancy .menu-icon:hover{background-color:#5959591a;box-shadow:0 0 0 1px #5959591a}.pt-menu-fancy .menu-dropdown{position:absolute;top:100%;background-color:#fff;box-shadow:0 8px 16px #0003;min-width:160px;z-index:3;border-radius:5px;overflow:hidden;opacity:0;transform:translateY(-20px);transition:transform .3s ease-out,opacity .3s ease-out}.pt-menu-fancy.open .menu-dropdown{display:block;opacity:1;transform:translateY(0)}.pt-menu-fancy.menu-left .menu-dropdown{right:0;left:auto}.pt-menu-fancy.menu-right .menu-dropdown{left:0;right:auto}.pt-menu-fancy .menu-item{padding:8px 16px;cursor:pointer;display:flex;align-items:center}.pt-menu-fancy .menu-item i{margin-right:10px}.pt-menu-fancy .menu-item:hover{background-color:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.PTCardComponent, selector: "pt-card", inputs: ["config"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTMenuFancyComponent, decorators: [{ type: Component, args: [{ selector: 'pt-menu-fancy', template: "<div\n [ngClass]=\"{\n open: isOpen,\n 'menu-left': config.menuDirection === 'left',\n 'menu-right': config.menuDirection === 'right'\n }\"\n class=\"pt-menu-fancy\"\n>\n <i\n class=\"menu-icon\"\n (click)=\"toggleMenu()\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n ></i>\n <div class=\"menu-dropdown\" *ngIf=\"isOpen\">\n <pt-card [config]=\"cardMenuConfig\">\n <div\n class=\"menu-item\"\n *ngFor=\"let item of config.menuItems\"\n (click)=\"item.action()\"\n >\n <i\n [ngClass]=\"getMenuItemIconClass(item)\"\n [ngStyle]=\"getMenuItemIconStyles(item)\"\n ></i>\n <span [ngStyle]=\"getTextStyles(item)\">{{ item.text }}</span>\n </div>\n </pt-card>\n </div>\n</div>\n", styles: [".pt-menu-fancy{position:relative;display:inline-block}.pt-menu-fancy .menu-icon{font-style:normal;font-weight:400;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;padding:8px;transition:background-color .2s,box-shadow .2s}.pt-menu-fancy .menu-icon:hover{background-color:#5959591a;box-shadow:0 0 0 1px #5959591a}.pt-menu-fancy .menu-dropdown{position:absolute;top:100%;background-color:#fff;box-shadow:0 8px 16px #0003;min-width:160px;z-index:3;border-radius:5px;overflow:hidden;opacity:0;transform:translateY(-20px);transition:transform .3s ease-out,opacity .3s ease-out}.pt-menu-fancy.open .menu-dropdown{display:block;opacity:1;transform:translateY(0)}.pt-menu-fancy.menu-left .menu-dropdown{right:0;left:auto}.pt-menu-fancy.menu-right .menu-dropdown{left:0;right:auto}.pt-menu-fancy .menu-item{padding:8px 16px;cursor:pointer;display:flex;align-items:center}.pt-menu-fancy .menu-item i{margin-right:10px}.pt-menu-fancy .menu-item:hover{background-color:#f1f1f1}\n"] }] }], propDecorators: { config: [{ type: Input }], onDocumentClick: [{ type: HostListener, args: ['document:click', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtbWVudS1mYW5jeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LW1lbnUtZmFuY3kvcHQtbWVudS1mYW5jeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LW1lbnUtZmFuY3kvcHQtbWVudS1mYW5jeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRL0QsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1XLFdBQU0sR0FBZTtZQUM1QixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1lBQ25FLGFBQWEsRUFBRSxPQUFPO1NBQ3ZCLENBQUM7UUFFRixtQkFBYyxHQUFlO1lBQzNCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLEdBQUc7WUFDWCxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFVRixXQUFNLEdBQUcsS0FBSyxDQUFDO0tBOEVoQjthQXRGeUIsdUJBQWtCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDNUIsMkJBQXNCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDaEMsdUJBQWtCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDNUIsMkJBQXNCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDaEMsc0JBQWlCLEdBQUcsa0JBQWtCLEFBQXJCLENBQXNCO2FBRWhELHFCQUFnQixHQUFnQyxJQUFJLEFBQXBDLENBQXFDO0lBSXBFLFVBQVU7UUFDUixJQUNFLG9CQUFvQixDQUFDLGdCQUFnQjtZQUNyQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsS0FBSyxJ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bnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUNvbmZpZywgQ2FyZENvbmZpZyB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B0LW1lbnUtZmFuY3knLFxuICB0ZW1wbGF0ZVVybDogJy4vcHQtbWVudS1mYW5jeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3B0LW1lbnUtZmFuY3kuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQVE1lbnVGYW5jeUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogTWVudUNvbmZpZyA9IHtcbiAgICBpY29uOiB7IGNvZGU6ICdwaSBwaS1lbGxpcHNpcy12JywgY29sb3I6ICcjMDAwJywgZm9udFNpemU6ICcxNXB4JyB9LFxuICAgIG1lbnVEaXJlY3Rpb246ICdyaWdodCcsXG4gIH07XG5cbiAgY2FyZE1lbnVDb25maWc6IENhcmRDb25maWcgPSB7XG4gICAgbm9Cb3JkZXI6IHRydWUsXG4gICAgbWFyZ2luOiAnMCcsXG4gICAgcGFkZGluZzogJzVweCcsXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9URVhUX0NPTE9SID0gJyMwMDAnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RFWFRfRk9OVF9TSVpFID0gJzE1cHgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0lDT05fQ09MT1IgPSAnIzAwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9GT05UX1NJWkUgPSAnMTVweCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9DT0RFID0gJ3BpIHBpLWVsbGlwc2lzLXYnO1xuXG4gIHByaXZhdGUgc3RhdGljIG9wZW5NZW51SW5zdGFuY2U6IFBUTWVudUZhbmN5Q29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgdG9nZ2xlTWVudSgpIHtcbiAgICBpZiAoXG4gICAgICBQVE1lbnVGYW5jeUNvbXBvbmVudC5vcGVuTWVudUluc3RhbmNlICYmXG4gICAgICBQVE1lbnVGYW5jeUNvbXBvbmVudC5vcGVuTWVudUluc3RhbmNlICE9PSB0aGlzXG4gICAgKSB7XG4gICAgICBQVE1lbnVGYW5jeUNvbXBvbmVudC5vcGVuTWVudUluc3RhbmNlLmNsb3NlTWVudSgpO1xuICAgIH1cblxuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICBQVE1lbnVGYW5jeUNvbXBvbmVudC5vcGVuTWVudUluc3RhbmNlID0gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgUFRNZW51RmFuY3lDb21wb25lbnQub3Blbk1lbnVJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgaWYgKFBUTWVudUZhbmN5Q29tcG9uZW50Lm9wZW5NZW51SW5zdGFuY2UgPT09IHRoaXMpIHtcbiAgICAgIFBUTWVudUZhbmN5Q29tcG9uZW50Lm9wZW5NZW51SW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldE1lbnVJdGVtSWNvbkNsYXNzKGl0ZW06IE1lbnVJdGVtKTogc3RyaW5nIHtcbiAgICAvLyBBc3N1bWluZyB0aGF0IGljb25zIHN0YXJ0aW5nIHdpdGggXCJmYVwiIGFyZSBGb250QXdlc29tZSBpY29uc1xuICAgIHJldHVybiB0eXBlb2YgaXRlbS5pY29uID09PSAnc3RyaW5nJyA/IGl0ZW0uaWNvbiA6IGl0ZW0uaWNvbj8uY29kZSB8fCAnJztcbiAgfVxuXG4gIGdldE1lbnVJdGVtSWNvblN0eWxlcyhpdGVtOiBNZW51SXRlbSkge1xuICAgIGlmICh0eXBlb2YgaXRlbS5pY29uICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGl0ZW0uaWNvbj8uY29sb3IgfHwgUFRNZW51RmFuY3lDb21wb25lbnQuREVGQVVMVF9JQ09OX0NPTE9SLFxuICAgICAgICBmb250U2l6ZTpcbiAgICAgICAgICBpdGVtLmljb24/LmZvbnRTaXplIHx8IFBUTWVudUZhbmN5Q29tcG9uZW50LkRFRkFVTFRfSUNPTl9GT05UX1NJWkUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IFBUTWVudUZhbmN5Q29tcG9uZW50LkRFRkFVTFRfSUNPTl9DT0xPUixcbiAgICAgIGZvbnRTaXplOiBQVE1lbnVGYW5jeUNvbXBvbmVudC5ERUZBVUxUX0lDT05fRk9OVF9TSVpFLFxuICAgIH07XG4gIH1cblxuICBnZXRJY29uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuaWNvbj8uY29kZSB8fCBQVE1lbnVGYW5jeUNvbXBvbmVudC5ERUZBVUxUX0lDT05fQ09ERTtcbiAgfVxuXG4gIGdldEljb25TdHlsZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOlxuICAgICAgICB0aGlzLmNvbmZpZy5jb2xvciB8fFxuICAgICAgICB0aGlzLmNvbmZpZy5pY29uPy5jb2xvciB8fFxuICAgICAgICBQVE1lbnVGYW5jeUNvbXBvbmVudC5ERUZBVUxUX0lDT05fQ09MT1IsXG4gICAgICBmb250U2l6ZTpcbiAgICAgICAgdGhpcy5jb25maWcuZm9udFNpemUgfHxcbiAgICAgICAgdGhpcy5jb25maWcuaWNvbj8uZm9udFNpemUgfHxcbiAgICAgICAgUFRNZW51RmFuY3lDb21wb25lbnQuREVGQVVMVF9JQ09OX0ZPTlRfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0VGV4dFN0eWxlcyhpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjogaXRlbS5jb2xvciB8fCBQVE1lbnVGYW5jeUNvbXBvbmVudC5ERUZBVUxUX1RFWFRfQ09MT1IsXG4gICAgICBmb250U2l6ZTogaXRlbS5mb250U2l6ZSB8fCBQVE1lbnVGYW5jeUNvbXBvbmVudC5ERUZBVUxUX1RFWFRfRk9OVF9TSVpFLFxuICAgIH07XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFxuICAgICAgJy5wdC1tZW51LWZhbmN5J1xuICAgICk7XG4gICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBbbmdDbGFzc109XCJ7XG4gICAgb3BlbjogaXNPcGVuLFxuICAgICdtZW51LWxlZnQnOiBjb25maWcubWVudURpcmVjdGlvbiA9PT0gJ2xlZnQnLFxuICAgICdtZW51LXJpZ2h0JzogY29uZmlnLm1lbnVEaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgfVwiXG4gIGNsYXNzPVwicHQtbWVudS1mYW5jeVwiXG4+XG4gIDxpXG4gICAgY2xhc3M9XCJtZW51LWljb25cIlxuICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIlxuICAgIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcygpXCJcbiAgICBbbmdTdHlsZV09XCJnZXRJY29uU3R5bGVzKClcIlxuICA+PC9pPlxuICA8ZGl2IGNsYXNzPVwibWVudS1kcm9wZG93blwiICpuZ0lmPVwiaXNPcGVuXCI+XG4gICAgPHB0LWNhcmQgW2NvbmZpZ109XCJjYXJkTWVudUNvbmZpZ1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbmZpZy5tZW51SXRlbXNcIlxuICAgICAgICAoY2xpY2spPVwiaXRlbS5hY3Rpb24oKVwiXG4gICAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TWVudUl0ZW1JY29uQ2xhc3MoaXRlbSlcIlxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldE1lbnVJdGVtSWNvblN0eWxlcyhpdGVtKVwiXG4gICAgICAgID48L2k+XG4gICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cImdldFRleHRTdHlsZXMoaXRlbSlcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3B0LWNhcmQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=