@muxima-ui/drawer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ export * from './lib/drawer/drawer.component';
2
+ export * from './lib/drawer/drawer.service';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9vdmVybGF5L2RyYXdlci9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZHJhd2VyL2RyYXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcmF3ZXIvZHJhd2VyLnNlcnZpY2UnO1xyXG4iXX0=
@@ -0,0 +1,118 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./drawer.service";
5
+ import * as i2 from "@angular/common";
6
+ export class DrawerComponent {
7
+ constructor(drawerService) {
8
+ this.drawerService = drawerService;
9
+ this.position = 'right';
10
+ this.size = '400px';
11
+ this.hasBackdrop = true;
12
+ this.closeOnBackdropClick = true;
13
+ this.closeOnEscape = true;
14
+ this.isOpen = false;
15
+ this.opened = new EventEmitter();
16
+ this.closed = new EventEmitter();
17
+ this.subscriptions = [];
18
+ }
19
+ ngOnInit() {
20
+ this.subscriptions.push(this.drawerService.openDrawer$.subscribe(({ config }) => {
21
+ this.applyConfig(config);
22
+ this.open();
23
+ }), this.drawerService.closeDrawer$.subscribe(() => {
24
+ this.close();
25
+ }));
26
+ }
27
+ ngOnDestroy() {
28
+ this.subscriptions.forEach(sub => sub.unsubscribe());
29
+ }
30
+ onEscapeKey() {
31
+ if (this.closeOnEscape && this.isOpen) {
32
+ this.close();
33
+ }
34
+ }
35
+ open() {
36
+ this.isOpen = true;
37
+ this.opened.emit();
38
+ document.body.style.overflow = 'hidden';
39
+ }
40
+ close() {
41
+ this.isOpen = false;
42
+ this.closed.emit();
43
+ document.body.style.overflow = '';
44
+ }
45
+ onBackdropClick() {
46
+ if (this.closeOnBackdropClick) {
47
+ this.close();
48
+ }
49
+ }
50
+ applyConfig(config) {
51
+ if (config.position)
52
+ this.position = config.position;
53
+ if (config.size)
54
+ this.size = config.size;
55
+ if (config.hasBackdrop !== undefined)
56
+ this.hasBackdrop = config.hasBackdrop;
57
+ if (config.closeOnBackdropClick !== undefined)
58
+ this.closeOnBackdropClick = config.closeOnBackdropClick;
59
+ if (config.closeOnEscape !== undefined)
60
+ this.closeOnEscape = config.closeOnEscape;
61
+ }
62
+ getDrawerStyle() {
63
+ const styles = {};
64
+ switch (this.position) {
65
+ case 'left':
66
+ styles.left = '0';
67
+ styles.top = '0';
68
+ styles.bottom = '0';
69
+ styles.width = this.size;
70
+ break;
71
+ case 'right':
72
+ styles.right = '0';
73
+ styles.top = '0';
74
+ styles.bottom = '0';
75
+ styles.width = this.size;
76
+ break;
77
+ case 'top':
78
+ styles.left = '0';
79
+ styles.right = '0';
80
+ styles.top = '0';
81
+ styles.height = this.size;
82
+ break;
83
+ case 'bottom':
84
+ styles.left = '0';
85
+ styles.right = '0';
86
+ styles.bottom = '0';
87
+ styles.height = this.size;
88
+ break;
89
+ }
90
+ return styles;
91
+ }
92
+ }
93
+ DrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerComponent, deps: [{ token: i1.DrawerService }], target: i0.ɵɵFactoryTarget.Component });
94
+ DrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DrawerComponent, isStandalone: true, selector: "muxima-drawer", inputs: { position: "position", size: "size", hasBackdrop: "hasBackdrop", closeOnBackdropClick: "closeOnBackdropClick", closeOnEscape: "closeOnEscape", isOpen: "isOpen" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscapeKey()" } }, ngImport: i0, template: "<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".drawer-container{position:fixed;inset:0;z-index:9999;pointer-events:none}.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);pointer-events:all;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer-panel{position:absolute;background:white;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;display:flex;flex-direction:column;pointer-events:all;overflow:hidden}.drawer-panel.position-left{animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-right{animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-top{animation:slideInTop .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-bottom{animation:slideInBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.drawer-header{padding:24px;border-bottom:2px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,rgba(102,126,234,.05) 0%,rgba(118,75,162,.05) 100%);min-height:72px}.drawer-close{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s ease}.drawer-close:hover{background:rgba(239,68,68,.1)}.drawer-close:hover svg{fill:#ef4444}.drawer-close svg{width:24px;height:24px;fill:#6b7280;transition:fill .2s ease}.drawer-content{flex:1;overflow-y:auto;padding:24px}.drawer-content::-webkit-scrollbar{width:8px}.drawer-content::-webkit-scrollbar-track{background:#f3f4f6}.drawer-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px}.drawer-footer{padding:24px;border-top:2px solid #e5e7eb;background:#f9fafb;min-height:72px}@media (max-width: 768px){.drawer-panel.position-left,.drawer-panel.position-right{width:85vw!important;max-width:400px}.drawer-panel.position-top,.drawer-panel.position-bottom{height:70vh!important;max-height:600px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerComponent, decorators: [{
96
+ type: Component,
97
+ args: [{ selector: 'muxima-drawer', standalone: true, imports: [CommonModule], template: "<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".drawer-container{position:fixed;inset:0;z-index:9999;pointer-events:none}.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);pointer-events:all;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer-panel{position:absolute;background:white;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;display:flex;flex-direction:column;pointer-events:all;overflow:hidden}.drawer-panel.position-left{animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-right{animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-top{animation:slideInTop .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-bottom{animation:slideInBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.drawer-header{padding:24px;border-bottom:2px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,rgba(102,126,234,.05) 0%,rgba(118,75,162,.05) 100%);min-height:72px}.drawer-close{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s ease}.drawer-close:hover{background:rgba(239,68,68,.1)}.drawer-close:hover svg{fill:#ef4444}.drawer-close svg{width:24px;height:24px;fill:#6b7280;transition:fill .2s ease}.drawer-content{flex:1;overflow-y:auto;padding:24px}.drawer-content::-webkit-scrollbar{width:8px}.drawer-content::-webkit-scrollbar-track{background:#f3f4f6}.drawer-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px}.drawer-footer{padding:24px;border-top:2px solid #e5e7eb;background:#f9fafb;min-height:72px}@media (max-width: 768px){.drawer-panel.position-left,.drawer-panel.position-right{width:85vw!important;max-width:400px}.drawer-panel.position-top,.drawer-panel.position-bottom{height:70vh!important;max-height:600px}}\n"] }]
98
+ }], ctorParameters: function () { return [{ type: i1.DrawerService }]; }, propDecorators: { position: [{
99
+ type: Input
100
+ }], size: [{
101
+ type: Input
102
+ }], hasBackdrop: [{
103
+ type: Input
104
+ }], closeOnBackdropClick: [{
105
+ type: Input
106
+ }], closeOnEscape: [{
107
+ type: Input
108
+ }], isOpen: [{
109
+ type: Input
110
+ }], opened: [{
111
+ type: Output
112
+ }], closed: [{
113
+ type: Output
114
+ }], onEscapeKey: [{
115
+ type: HostListener,
116
+ args: ['document:keydown.escape']
117
+ }] } });
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL292ZXJsYXkvZHJhd2VyL3NyYy9saWIvZHJhd2VyL2RyYXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9vdmVybGF5L2RyYXdlci9zcmMvbGliL2RyYXdlci9kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQVcvQyxNQUFNLE9BQU8sZUFBZTtJQWExQixZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVp2QyxhQUFRLEdBQXdDLE9BQU8sQ0FBQztRQUN4RCxTQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFFUSxDQUFDO0lBRXBELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFD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LENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDbEIsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO2dCQUNwQixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLE1BQU07U0FDVDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OzZHQS9GVSxlQUFlO2lHQUFmLGVBQWUsMldDWjVCLDhwQ0FvQ0EsbXVFRDVCWSxZQUFZOzRGQUlYLGVBQWU7a0JBUDNCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQztvR0FLZCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQXVCUCxXQUFXO3NCQURWLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRHJhd2VyU2VydmljZSwgRHJhd2VyQ29uZmlnIH0gZnJvbSAnLi9kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtdXhpbWEtZHJhd2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RyYXdlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgcG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nID0gJ3JpZ2h0JztcclxuICBASW5wdXQoKSBzaXplID0gJzQwMHB4JztcclxuICBASW5wdXQoKSBoYXNCYWNrZHJvcCA9IHRydWU7XHJcbiAgQElucHV0KCkgY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNsb3NlT25Fc2NhcGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGlzT3BlbiA9IGZhbHNlO1xyXG4gIFxyXG4gIEBPdXRwdXQoKSBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZHJhd2VyU2VydmljZTogRHJhd2VyU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5kcmF3ZXJTZXJ2aWNlLm9wZW5EcmF3ZXIkLnN1YnNjcmliZSgoeyBjb25maWcgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb25maWcoY29uZmlnKTtcclxuICAgICAgICB0aGlzLm9wZW4oKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuZHJhd2VyU2VydmljZS5jbG9zZURyYXdlciQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxyXG4gIG9uRXNjYXBlS2V5KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VPbkVzY2FwZSAmJiB0aGlzLmlzT3Blbikge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5vcGVuZWQuZW1pdCgpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25CYWNrZHJvcENsaWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY2xvc2VPbkJhY2tkcm9wQ2xpY2spIHtcclxuICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZyhjb25maWc6IERyYXdlckNvbmZpZyk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmZpZy5wb3NpdGlvbikgdGhpcy5wb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvbjtcclxuICAgIGlmIChjb25maWcuc2l6ZSkgdGhpcy5zaXplID0gY29uZmlnLnNpemU7XHJcbiAgICBpZiAoY29uZmlnLmhhc0JhY2tkcm9wICE9PSB1bmRlZmluZWQpIHRoaXMuaGFzQmFja2Ryb3AgPSBjb25maWcuaGFzQmFja2Ryb3A7XHJcbiAgICBpZiAoY29uZmlnLmNsb3NlT25CYWNrZHJvcENsaWNrICE9PSB1bmRlZmluZWQpIHRoaXMuY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSBjb25maWcuY2xvc2VPbkJhY2tkcm9wQ2xpY2s7XHJcbiAgICBpZiAoY29uZmlnLmNsb3NlT25Fc2NhcGUgIT09IHVuZGVmaW5lZCkgdGhpcy5jbG9zZU9uRXNjYXBlID0gY29uZmlnLmNsb3NlT25Fc2NhcGU7XHJcbiAgfVxyXG5cclxuICBnZXREcmF3ZXJTdHlsZSgpOiBhbnkge1xyXG4gICAgY29uc3Qgc3R5bGVzOiBhbnkgPSB7fTtcclxuICAgIFxyXG4gICAgc3dpdGNoICh0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgIHN0eWxlcy5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIHN0eWxlcy50b3AgPSAnMCc7XHJcbiAgICAgICAgc3R5bGVzLmJvdHRvbSA9ICcwJztcclxuICAgICAgICBzdHlsZXMud2lkdGggPSB0aGlzLnNpemU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICBzdHlsZXMucmlnaHQgPSAnMCc7XHJcbiAgICAgICAgc3R5bGVzLnRvcCA9ICcwJztcclxuICAgICAgICBzdHlsZXMuYm90dG9tID0gJzAnO1xyXG4gICAgICAgIHN0eWxlcy53aWR0aCA9IHRoaXMuc2l6ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICBzdHlsZXMubGVmdCA9ICcwJztcclxuICAgICAgICBzdHlsZXMucmlnaHQgPSAnMCc7XHJcbiAgICAgICAgc3R5bGVzLnRvcCA9ICcwJztcclxuICAgICAgICBzdHlsZXMuaGVpZ2h0ID0gdGhpcy5zaXplO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICAgIHN0eWxlcy5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIHN0eWxlcy5yaWdodCA9ICcwJztcclxuICAgICAgICBzdHlsZXMuYm90dG9tID0gJzAnO1xyXG4gICAgICAgIHN0eWxlcy5oZWlnaHQgPSB0aGlzLnNpemU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBzdHlsZXM7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkcmF3ZXItY29udGFpbmVyXCIgKm5nSWY9XCJpc09wZW5cIj5cclxuICA8ZGl2IFxyXG4gICAgKm5nSWY9XCJoYXNCYWNrZHJvcFwiIFxyXG4gICAgY2xhc3M9XCJkcmF3ZXItYmFja2Ryb3BcIiBcclxuICAgIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soKVwiXHJcbiAgICBbQGZhZGVJbl1cclxuICA+PC9kaXY+XHJcblxyXG4gIDxkaXYgXHJcbiAgICBjbGFzcz1cImRyYXdlci1wYW5lbFwiIFxyXG4gICAgW2NsYXNzLnBvc2l0aW9uLWxlZnRdPVwicG9zaXRpb24gPT09ICdsZWZ0J1wiXHJcbiAgICBbY2xhc3MucG9zaXRpb24tcmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxyXG4gICAgW2NsYXNzLnBvc2l0aW9uLXRvcF09XCJwb3NpdGlvbiA9PT0gJ3RvcCdcIlxyXG4gICAgW2NsYXNzLnBvc2l0aW9uLWJvdHRvbV09XCJwb3NpdGlvbiA9PT0gJ2JvdHRvbSdcIlxyXG4gICAgW25nU3R5bGVdPVwiZ2V0RHJhd2VyU3R5bGUoKVwiXHJcbiAgICBbQHNsaWRlSW5dPVwicG9zaXRpb25cIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItaGVhZGVyXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltkcmF3ZXItaGVhZGVyXVwiPjwvbmctY29udGVudD5cclxuICAgICAgXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJkcmF3ZXItY2xvc2VcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBkcmF3ZXJcIj5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1mb290ZXJcIj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2RyYXdlci1mb290ZXJdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,34 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class DrawerService {
5
+ constructor() {
6
+ this.openDrawerSubject = new Subject();
7
+ this.closeDrawerSubject = new Subject();
8
+ this.openDrawer$ = this.openDrawerSubject.asObservable();
9
+ this.closeDrawer$ = this.closeDrawerSubject.asObservable();
10
+ }
11
+ open(config = {}, content) {
12
+ const afterClosed = new Subject();
13
+ this.openDrawerSubject.next({ config, content });
14
+ return {
15
+ close: () => {
16
+ this.closeDrawerSubject.next();
17
+ afterClosed.complete();
18
+ },
19
+ afterClosed
20
+ };
21
+ }
22
+ close() {
23
+ this.closeDrawerSubject.next();
24
+ }
25
+ }
26
+ DrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
27
+ DrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, providedIn: 'root' });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, decorators: [{
29
+ type: Injectable,
30
+ args: [{
31
+ providedIn: 'root'
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9vdmVybGF5L2RyYXdlci9zcmMvbGliL2RyYXdlci9kcmF3ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBa0IvQixNQUFNLE9BQU8sYUFBYTtJQUgxQjtRQUlVLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUEyQyxDQUFDO1FBQzNFLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsaUJBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7S0FtQnZEO0lBakJDLElBQUksQ0FBQyxTQUF1QixFQUFFLEVBQUUsT0FBYTtRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBRXZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUVqRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsV0FBVztTQUNaLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzsyR0F2QlUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJDb25maWcge1xyXG4gIHBvc2l0aW9uPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XHJcbiAgc2l6ZT86IHN0cmluZztcclxuICBoYXNCYWNrZHJvcD86IGJvb2xlYW47XHJcbiAgY2xvc2VPbkJhY2tkcm9wQ2xpY2s/OiBib29sZWFuO1xyXG4gIGNsb3NlT25Fc2NhcGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERyYXdlclJlZiB7XHJcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XHJcbiAgYWZ0ZXJDbG9zZWQ6IFN1YmplY3Q8YW55PjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJhd2VyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBvcGVuRHJhd2VyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgY29uZmlnOiBEcmF3ZXJDb25maWc7IGNvbnRlbnQ/OiBhbnkgfT4oKTtcclxuICBwcml2YXRlIGNsb3NlRHJhd2VyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIG9wZW5EcmF3ZXIkID0gdGhpcy5vcGVuRHJhd2VyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICBjbG9zZURyYXdlciQgPSB0aGlzLmNsb3NlRHJhd2VyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgb3Blbihjb25maWc6IERyYXdlckNvbmZpZyA9IHt9LCBjb250ZW50PzogYW55KTogRHJhd2VyUmVmIHtcclxuICAgIGNvbnN0IGFmdGVyQ2xvc2VkID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgXHJcbiAgICB0aGlzLm9wZW5EcmF3ZXJTdWJqZWN0Lm5leHQoeyBjb25maWcsIGNvbnRlbnQgfSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY2xvc2U6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlRHJhd2VyU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgICAgYWZ0ZXJDbG9zZWQuY29tcGxldGUoKTtcclxuICAgICAgfSxcclxuICAgICAgYWZ0ZXJDbG9zZWRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VEcmF3ZXJTdWJqZWN0Lm5leHQoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV4aW1hLXVpLWRyYXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL292ZXJsYXkvZHJhd2VyL3NyYy9tdXhpbWEtdWktZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,156 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Component, Input, Output, HostListener } from '@angular/core';
3
+ import * as i2 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import { Subject } from 'rxjs';
6
+
7
+ class DrawerService {
8
+ constructor() {
9
+ this.openDrawerSubject = new Subject();
10
+ this.closeDrawerSubject = new Subject();
11
+ this.openDrawer$ = this.openDrawerSubject.asObservable();
12
+ this.closeDrawer$ = this.closeDrawerSubject.asObservable();
13
+ }
14
+ open(config = {}, content) {
15
+ const afterClosed = new Subject();
16
+ this.openDrawerSubject.next({ config, content });
17
+ return {
18
+ close: () => {
19
+ this.closeDrawerSubject.next();
20
+ afterClosed.complete();
21
+ },
22
+ afterClosed
23
+ };
24
+ }
25
+ close() {
26
+ this.closeDrawerSubject.next();
27
+ }
28
+ }
29
+ DrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
30
+ DrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, providedIn: 'root' });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, decorators: [{
32
+ type: Injectable,
33
+ args: [{
34
+ providedIn: 'root'
35
+ }]
36
+ }] });
37
+
38
+ class DrawerComponent {
39
+ constructor(drawerService) {
40
+ this.drawerService = drawerService;
41
+ this.position = 'right';
42
+ this.size = '400px';
43
+ this.hasBackdrop = true;
44
+ this.closeOnBackdropClick = true;
45
+ this.closeOnEscape = true;
46
+ this.isOpen = false;
47
+ this.opened = new EventEmitter();
48
+ this.closed = new EventEmitter();
49
+ this.subscriptions = [];
50
+ }
51
+ ngOnInit() {
52
+ this.subscriptions.push(this.drawerService.openDrawer$.subscribe(({ config }) => {
53
+ this.applyConfig(config);
54
+ this.open();
55
+ }), this.drawerService.closeDrawer$.subscribe(() => {
56
+ this.close();
57
+ }));
58
+ }
59
+ ngOnDestroy() {
60
+ this.subscriptions.forEach(sub => sub.unsubscribe());
61
+ }
62
+ onEscapeKey() {
63
+ if (this.closeOnEscape && this.isOpen) {
64
+ this.close();
65
+ }
66
+ }
67
+ open() {
68
+ this.isOpen = true;
69
+ this.opened.emit();
70
+ document.body.style.overflow = 'hidden';
71
+ }
72
+ close() {
73
+ this.isOpen = false;
74
+ this.closed.emit();
75
+ document.body.style.overflow = '';
76
+ }
77
+ onBackdropClick() {
78
+ if (this.closeOnBackdropClick) {
79
+ this.close();
80
+ }
81
+ }
82
+ applyConfig(config) {
83
+ if (config.position)
84
+ this.position = config.position;
85
+ if (config.size)
86
+ this.size = config.size;
87
+ if (config.hasBackdrop !== undefined)
88
+ this.hasBackdrop = config.hasBackdrop;
89
+ if (config.closeOnBackdropClick !== undefined)
90
+ this.closeOnBackdropClick = config.closeOnBackdropClick;
91
+ if (config.closeOnEscape !== undefined)
92
+ this.closeOnEscape = config.closeOnEscape;
93
+ }
94
+ getDrawerStyle() {
95
+ const styles = {};
96
+ switch (this.position) {
97
+ case 'left':
98
+ styles.left = '0';
99
+ styles.top = '0';
100
+ styles.bottom = '0';
101
+ styles.width = this.size;
102
+ break;
103
+ case 'right':
104
+ styles.right = '0';
105
+ styles.top = '0';
106
+ styles.bottom = '0';
107
+ styles.width = this.size;
108
+ break;
109
+ case 'top':
110
+ styles.left = '0';
111
+ styles.right = '0';
112
+ styles.top = '0';
113
+ styles.height = this.size;
114
+ break;
115
+ case 'bottom':
116
+ styles.left = '0';
117
+ styles.right = '0';
118
+ styles.bottom = '0';
119
+ styles.height = this.size;
120
+ break;
121
+ }
122
+ return styles;
123
+ }
124
+ }
125
+ DrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerComponent, deps: [{ token: DrawerService }], target: i0.ɵɵFactoryTarget.Component });
126
+ DrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DrawerComponent, isStandalone: true, selector: "muxima-drawer", inputs: { position: "position", size: "size", hasBackdrop: "hasBackdrop", closeOnBackdropClick: "closeOnBackdropClick", closeOnEscape: "closeOnEscape", isOpen: "isOpen" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscapeKey()" } }, ngImport: i0, template: "<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".drawer-container{position:fixed;inset:0;z-index:9999;pointer-events:none}.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);pointer-events:all;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer-panel{position:absolute;background:white;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;display:flex;flex-direction:column;pointer-events:all;overflow:hidden}.drawer-panel.position-left{animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-right{animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-top{animation:slideInTop .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-bottom{animation:slideInBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.drawer-header{padding:24px;border-bottom:2px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,rgba(102,126,234,.05) 0%,rgba(118,75,162,.05) 100%);min-height:72px}.drawer-close{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s ease}.drawer-close:hover{background:rgba(239,68,68,.1)}.drawer-close:hover svg{fill:#ef4444}.drawer-close svg{width:24px;height:24px;fill:#6b7280;transition:fill .2s ease}.drawer-content{flex:1;overflow-y:auto;padding:24px}.drawer-content::-webkit-scrollbar{width:8px}.drawer-content::-webkit-scrollbar-track{background:#f3f4f6}.drawer-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px}.drawer-footer{padding:24px;border-top:2px solid #e5e7eb;background:#f9fafb;min-height:72px}@media (max-width: 768px){.drawer-panel.position-left,.drawer-panel.position-right{width:85vw!important;max-width:400px}.drawer-panel.position-top,.drawer-panel.position-bottom{height:70vh!important;max-height:600px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerComponent, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: 'muxima-drawer', standalone: true, imports: [CommonModule], template: "<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".drawer-container{position:fixed;inset:0;z-index:9999;pointer-events:none}.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);pointer-events:all;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer-panel{position:absolute;background:white;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;display:flex;flex-direction:column;pointer-events:all;overflow:hidden}.drawer-panel.position-left{animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-right{animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-top{animation:slideInTop .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-bottom{animation:slideInBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.drawer-header{padding:24px;border-bottom:2px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,rgba(102,126,234,.05) 0%,rgba(118,75,162,.05) 100%);min-height:72px}.drawer-close{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s ease}.drawer-close:hover{background:rgba(239,68,68,.1)}.drawer-close:hover svg{fill:#ef4444}.drawer-close svg{width:24px;height:24px;fill:#6b7280;transition:fill .2s ease}.drawer-content{flex:1;overflow-y:auto;padding:24px}.drawer-content::-webkit-scrollbar{width:8px}.drawer-content::-webkit-scrollbar-track{background:#f3f4f6}.drawer-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px}.drawer-footer{padding:24px;border-top:2px solid #e5e7eb;background:#f9fafb;min-height:72px}@media (max-width: 768px){.drawer-panel.position-left,.drawer-panel.position-right{width:85vw!important;max-width:400px}.drawer-panel.position-top,.drawer-panel.position-bottom{height:70vh!important;max-height:600px}}\n"] }]
130
+ }], ctorParameters: function () { return [{ type: DrawerService }]; }, propDecorators: { position: [{
131
+ type: Input
132
+ }], size: [{
133
+ type: Input
134
+ }], hasBackdrop: [{
135
+ type: Input
136
+ }], closeOnBackdropClick: [{
137
+ type: Input
138
+ }], closeOnEscape: [{
139
+ type: Input
140
+ }], isOpen: [{
141
+ type: Input
142
+ }], opened: [{
143
+ type: Output
144
+ }], closed: [{
145
+ type: Output
146
+ }], onEscapeKey: [{
147
+ type: HostListener,
148
+ args: ['document:keydown.escape']
149
+ }] } });
150
+
151
+ /**
152
+ * Generated bundle index. Do not edit.
153
+ */
154
+
155
+ export { DrawerComponent, DrawerService };
156
+ //# sourceMappingURL=muxima-ui-drawer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxima-ui-drawer.mjs","sources":["../../../../overlay/drawer/src/lib/drawer/drawer.service.ts","../../../../overlay/drawer/src/lib/drawer/drawer.component.ts","../../../../overlay/drawer/src/lib/drawer/drawer.component.html","../../../../overlay/drawer/src/muxima-ui-drawer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface DrawerConfig {\r\n position?: 'left' | 'right' | 'top' | 'bottom';\r\n size?: string;\r\n hasBackdrop?: boolean;\r\n closeOnBackdropClick?: boolean;\r\n closeOnEscape?: boolean;\r\n}\r\n\r\nexport interface DrawerRef {\r\n close: () => void;\r\n afterClosed: Subject<any>;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DrawerService {\r\n private openDrawerSubject = new Subject<{ config: DrawerConfig; content?: any }>();\r\n private closeDrawerSubject = new Subject<void>();\r\n\r\n openDrawer$ = this.openDrawerSubject.asObservable();\r\n closeDrawer$ = this.closeDrawerSubject.asObservable();\r\n\r\n open(config: DrawerConfig = {}, content?: any): DrawerRef {\r\n const afterClosed = new Subject<any>();\r\n \r\n this.openDrawerSubject.next({ config, content });\r\n\r\n return {\r\n close: () => {\r\n this.closeDrawerSubject.next();\r\n afterClosed.complete();\r\n },\r\n afterClosed\r\n };\r\n }\r\n\r\n close(): void {\r\n this.closeDrawerSubject.next();\r\n }\r\n}\r\n","import { Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DrawerService, DrawerConfig } from './drawer.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'muxima-drawer',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss']\r\n})\r\nexport class DrawerComponent implements OnInit, OnDestroy {\r\n @Input() position: 'left' | 'right' | 'top' | 'bottom' = 'right';\r\n @Input() size = '400px';\r\n @Input() hasBackdrop = true;\r\n @Input() closeOnBackdropClick = true;\r\n @Input() closeOnEscape = true;\r\n @Input() isOpen = false;\r\n \r\n @Output() opened = new EventEmitter<void>();\r\n @Output() closed = new EventEmitter<void>();\r\n \r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private drawerService: DrawerService) {}\r\n\r\n ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.drawerService.openDrawer$.subscribe(({ config }) => {\r\n this.applyConfig(config);\r\n this.open();\r\n }),\r\n this.drawerService.closeDrawer$.subscribe(() => {\r\n this.close();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach(sub => sub.unsubscribe());\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscapeKey(): void {\r\n if (this.closeOnEscape && this.isOpen) {\r\n this.close();\r\n }\r\n }\r\n\r\n open(): void {\r\n this.isOpen = true;\r\n this.opened.emit();\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n close(): void {\r\n this.isOpen = false;\r\n this.closed.emit();\r\n document.body.style.overflow = '';\r\n }\r\n\r\n onBackdropClick(): void {\r\n if (this.closeOnBackdropClick) {\r\n this.close();\r\n }\r\n }\r\n\r\n private applyConfig(config: DrawerConfig): void {\r\n if (config.position) this.position = config.position;\r\n if (config.size) this.size = config.size;\r\n if (config.hasBackdrop !== undefined) this.hasBackdrop = config.hasBackdrop;\r\n if (config.closeOnBackdropClick !== undefined) this.closeOnBackdropClick = config.closeOnBackdropClick;\r\n if (config.closeOnEscape !== undefined) this.closeOnEscape = config.closeOnEscape;\r\n }\r\n\r\n getDrawerStyle(): any {\r\n const styles: any = {};\r\n \r\n switch (this.position) {\r\n case 'left':\r\n styles.left = '0';\r\n styles.top = '0';\r\n styles.bottom = '0';\r\n styles.width = this.size;\r\n break;\r\n case 'right':\r\n styles.right = '0';\r\n styles.top = '0';\r\n styles.bottom = '0';\r\n styles.width = this.size;\r\n break;\r\n case 'top':\r\n styles.left = '0';\r\n styles.right = '0';\r\n styles.top = '0';\r\n styles.height = this.size;\r\n break;\r\n case 'bottom':\r\n styles.left = '0';\r\n styles.right = '0';\r\n styles.bottom = '0';\r\n styles.height = this.size;\r\n break;\r\n }\r\n \r\n return styles;\r\n }\r\n}\r\n","<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DrawerService"],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Component, Input, Output, HostListener } from '@angular/core';
3
+ import * as i2 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import { Subject } from 'rxjs';
6
+
7
+ class DrawerService {
8
+ constructor() {
9
+ this.openDrawerSubject = new Subject();
10
+ this.closeDrawerSubject = new Subject();
11
+ this.openDrawer$ = this.openDrawerSubject.asObservable();
12
+ this.closeDrawer$ = this.closeDrawerSubject.asObservable();
13
+ }
14
+ open(config = {}, content) {
15
+ const afterClosed = new Subject();
16
+ this.openDrawerSubject.next({ config, content });
17
+ return {
18
+ close: () => {
19
+ this.closeDrawerSubject.next();
20
+ afterClosed.complete();
21
+ },
22
+ afterClosed
23
+ };
24
+ }
25
+ close() {
26
+ this.closeDrawerSubject.next();
27
+ }
28
+ }
29
+ DrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
30
+ DrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, providedIn: 'root' });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerService, decorators: [{
32
+ type: Injectable,
33
+ args: [{
34
+ providedIn: 'root'
35
+ }]
36
+ }] });
37
+
38
+ class DrawerComponent {
39
+ constructor(drawerService) {
40
+ this.drawerService = drawerService;
41
+ this.position = 'right';
42
+ this.size = '400px';
43
+ this.hasBackdrop = true;
44
+ this.closeOnBackdropClick = true;
45
+ this.closeOnEscape = true;
46
+ this.isOpen = false;
47
+ this.opened = new EventEmitter();
48
+ this.closed = new EventEmitter();
49
+ this.subscriptions = [];
50
+ }
51
+ ngOnInit() {
52
+ this.subscriptions.push(this.drawerService.openDrawer$.subscribe(({ config }) => {
53
+ this.applyConfig(config);
54
+ this.open();
55
+ }), this.drawerService.closeDrawer$.subscribe(() => {
56
+ this.close();
57
+ }));
58
+ }
59
+ ngOnDestroy() {
60
+ this.subscriptions.forEach(sub => sub.unsubscribe());
61
+ }
62
+ onEscapeKey() {
63
+ if (this.closeOnEscape && this.isOpen) {
64
+ this.close();
65
+ }
66
+ }
67
+ open() {
68
+ this.isOpen = true;
69
+ this.opened.emit();
70
+ document.body.style.overflow = 'hidden';
71
+ }
72
+ close() {
73
+ this.isOpen = false;
74
+ this.closed.emit();
75
+ document.body.style.overflow = '';
76
+ }
77
+ onBackdropClick() {
78
+ if (this.closeOnBackdropClick) {
79
+ this.close();
80
+ }
81
+ }
82
+ applyConfig(config) {
83
+ if (config.position)
84
+ this.position = config.position;
85
+ if (config.size)
86
+ this.size = config.size;
87
+ if (config.hasBackdrop !== undefined)
88
+ this.hasBackdrop = config.hasBackdrop;
89
+ if (config.closeOnBackdropClick !== undefined)
90
+ this.closeOnBackdropClick = config.closeOnBackdropClick;
91
+ if (config.closeOnEscape !== undefined)
92
+ this.closeOnEscape = config.closeOnEscape;
93
+ }
94
+ getDrawerStyle() {
95
+ const styles = {};
96
+ switch (this.position) {
97
+ case 'left':
98
+ styles.left = '0';
99
+ styles.top = '0';
100
+ styles.bottom = '0';
101
+ styles.width = this.size;
102
+ break;
103
+ case 'right':
104
+ styles.right = '0';
105
+ styles.top = '0';
106
+ styles.bottom = '0';
107
+ styles.width = this.size;
108
+ break;
109
+ case 'top':
110
+ styles.left = '0';
111
+ styles.right = '0';
112
+ styles.top = '0';
113
+ styles.height = this.size;
114
+ break;
115
+ case 'bottom':
116
+ styles.left = '0';
117
+ styles.right = '0';
118
+ styles.bottom = '0';
119
+ styles.height = this.size;
120
+ break;
121
+ }
122
+ return styles;
123
+ }
124
+ }
125
+ DrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerComponent, deps: [{ token: DrawerService }], target: i0.ɵɵFactoryTarget.Component });
126
+ DrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DrawerComponent, isStandalone: true, selector: "muxima-drawer", inputs: { position: "position", size: "size", hasBackdrop: "hasBackdrop", closeOnBackdropClick: "closeOnBackdropClick", closeOnEscape: "closeOnEscape", isOpen: "isOpen" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "document:keydown.escape": "onEscapeKey()" } }, ngImport: i0, template: "<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".drawer-container{position:fixed;inset:0;z-index:9999;pointer-events:none}.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);pointer-events:all;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer-panel{position:absolute;background:white;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;display:flex;flex-direction:column;pointer-events:all;overflow:hidden}.drawer-panel.position-left{animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-right{animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-top{animation:slideInTop .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-bottom{animation:slideInBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.drawer-header{padding:24px;border-bottom:2px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,rgba(102,126,234,.05) 0%,rgba(118,75,162,.05) 100%);min-height:72px}.drawer-close{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s ease}.drawer-close:hover{background:rgba(239,68,68,.1)}.drawer-close:hover svg{fill:#ef4444}.drawer-close svg{width:24px;height:24px;fill:#6b7280;transition:fill .2s ease}.drawer-content{flex:1;overflow-y:auto;padding:24px}.drawer-content::-webkit-scrollbar{width:8px}.drawer-content::-webkit-scrollbar-track{background:#f3f4f6}.drawer-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px}.drawer-footer{padding:24px;border-top:2px solid #e5e7eb;background:#f9fafb;min-height:72px}@media (max-width: 768px){.drawer-panel.position-left,.drawer-panel.position-right{width:85vw!important;max-width:400px}.drawer-panel.position-top,.drawer-panel.position-bottom{height:70vh!important;max-height:600px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DrawerComponent, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: 'muxima-drawer', standalone: true, imports: [CommonModule], template: "<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".drawer-container{position:fixed;inset:0;z-index:9999;pointer-events:none}.drawer-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.5);pointer-events:all;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer-panel{position:absolute;background:white;box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;display:flex;flex-direction:column;pointer-events:all;overflow:hidden}.drawer-panel.position-left{animation:slideInLeft .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-right{animation:slideInRight .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-top{animation:slideInTop .3s cubic-bezier(.4,0,.2,1)}.drawer-panel.position-bottom{animation:slideInBottom .3s cubic-bezier(.4,0,.2,1)}@keyframes slideInLeft{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInTop{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slideInBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}.drawer-header{padding:24px;border-bottom:2px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,rgba(102,126,234,.05) 0%,rgba(118,75,162,.05) 100%);min-height:72px}.drawer-close{width:40px;height:40px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:8px;transition:all .2s ease}.drawer-close:hover{background:rgba(239,68,68,.1)}.drawer-close:hover svg{fill:#ef4444}.drawer-close svg{width:24px;height:24px;fill:#6b7280;transition:fill .2s ease}.drawer-content{flex:1;overflow-y:auto;padding:24px}.drawer-content::-webkit-scrollbar{width:8px}.drawer-content::-webkit-scrollbar-track{background:#f3f4f6}.drawer-content::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:12px}.drawer-footer{padding:24px;border-top:2px solid #e5e7eb;background:#f9fafb;min-height:72px}@media (max-width: 768px){.drawer-panel.position-left,.drawer-panel.position-right{width:85vw!important;max-width:400px}.drawer-panel.position-top,.drawer-panel.position-bottom{height:70vh!important;max-height:600px}}\n"] }]
130
+ }], ctorParameters: function () { return [{ type: DrawerService }]; }, propDecorators: { position: [{
131
+ type: Input
132
+ }], size: [{
133
+ type: Input
134
+ }], hasBackdrop: [{
135
+ type: Input
136
+ }], closeOnBackdropClick: [{
137
+ type: Input
138
+ }], closeOnEscape: [{
139
+ type: Input
140
+ }], isOpen: [{
141
+ type: Input
142
+ }], opened: [{
143
+ type: Output
144
+ }], closed: [{
145
+ type: Output
146
+ }], onEscapeKey: [{
147
+ type: HostListener,
148
+ args: ['document:keydown.escape']
149
+ }] } });
150
+
151
+ /**
152
+ * Generated bundle index. Do not edit.
153
+ */
154
+
155
+ export { DrawerComponent, DrawerService };
156
+ //# sourceMappingURL=muxima-ui-drawer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxima-ui-drawer.mjs","sources":["../../../../overlay/drawer/src/lib/drawer/drawer.service.ts","../../../../overlay/drawer/src/lib/drawer/drawer.component.ts","../../../../overlay/drawer/src/lib/drawer/drawer.component.html","../../../../overlay/drawer/src/muxima-ui-drawer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nexport interface DrawerConfig {\r\n position?: 'left' | 'right' | 'top' | 'bottom';\r\n size?: string;\r\n hasBackdrop?: boolean;\r\n closeOnBackdropClick?: boolean;\r\n closeOnEscape?: boolean;\r\n}\r\n\r\nexport interface DrawerRef {\r\n close: () => void;\r\n afterClosed: Subject<any>;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DrawerService {\r\n private openDrawerSubject = new Subject<{ config: DrawerConfig; content?: any }>();\r\n private closeDrawerSubject = new Subject<void>();\r\n\r\n openDrawer$ = this.openDrawerSubject.asObservable();\r\n closeDrawer$ = this.closeDrawerSubject.asObservable();\r\n\r\n open(config: DrawerConfig = {}, content?: any): DrawerRef {\r\n const afterClosed = new Subject<any>();\r\n \r\n this.openDrawerSubject.next({ config, content });\r\n\r\n return {\r\n close: () => {\r\n this.closeDrawerSubject.next();\r\n afterClosed.complete();\r\n },\r\n afterClosed\r\n };\r\n }\r\n\r\n close(): void {\r\n this.closeDrawerSubject.next();\r\n }\r\n}\r\n","import { Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DrawerService, DrawerConfig } from './drawer.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'muxima-drawer',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss']\r\n})\r\nexport class DrawerComponent implements OnInit, OnDestroy {\r\n @Input() position: 'left' | 'right' | 'top' | 'bottom' = 'right';\r\n @Input() size = '400px';\r\n @Input() hasBackdrop = true;\r\n @Input() closeOnBackdropClick = true;\r\n @Input() closeOnEscape = true;\r\n @Input() isOpen = false;\r\n \r\n @Output() opened = new EventEmitter<void>();\r\n @Output() closed = new EventEmitter<void>();\r\n \r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private drawerService: DrawerService) {}\r\n\r\n ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.drawerService.openDrawer$.subscribe(({ config }) => {\r\n this.applyConfig(config);\r\n this.open();\r\n }),\r\n this.drawerService.closeDrawer$.subscribe(() => {\r\n this.close();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach(sub => sub.unsubscribe());\r\n }\r\n\r\n @HostListener('document:keydown.escape')\r\n onEscapeKey(): void {\r\n if (this.closeOnEscape && this.isOpen) {\r\n this.close();\r\n }\r\n }\r\n\r\n open(): void {\r\n this.isOpen = true;\r\n this.opened.emit();\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n close(): void {\r\n this.isOpen = false;\r\n this.closed.emit();\r\n document.body.style.overflow = '';\r\n }\r\n\r\n onBackdropClick(): void {\r\n if (this.closeOnBackdropClick) {\r\n this.close();\r\n }\r\n }\r\n\r\n private applyConfig(config: DrawerConfig): void {\r\n if (config.position) this.position = config.position;\r\n if (config.size) this.size = config.size;\r\n if (config.hasBackdrop !== undefined) this.hasBackdrop = config.hasBackdrop;\r\n if (config.closeOnBackdropClick !== undefined) this.closeOnBackdropClick = config.closeOnBackdropClick;\r\n if (config.closeOnEscape !== undefined) this.closeOnEscape = config.closeOnEscape;\r\n }\r\n\r\n getDrawerStyle(): any {\r\n const styles: any = {};\r\n \r\n switch (this.position) {\r\n case 'left':\r\n styles.left = '0';\r\n styles.top = '0';\r\n styles.bottom = '0';\r\n styles.width = this.size;\r\n break;\r\n case 'right':\r\n styles.right = '0';\r\n styles.top = '0';\r\n styles.bottom = '0';\r\n styles.width = this.size;\r\n break;\r\n case 'top':\r\n styles.left = '0';\r\n styles.right = '0';\r\n styles.top = '0';\r\n styles.height = this.size;\r\n break;\r\n case 'bottom':\r\n styles.left = '0';\r\n styles.right = '0';\r\n styles.bottom = '0';\r\n styles.height = this.size;\r\n break;\r\n }\r\n \r\n return styles;\r\n }\r\n}\r\n","<div class=\"drawer-container\" *ngIf=\"isOpen\">\r\n <div \r\n *ngIf=\"hasBackdrop\" \r\n class=\"drawer-backdrop\" \r\n (click)=\"onBackdropClick()\"\r\n [@fadeIn]\r\n ></div>\r\n\r\n <div \r\n class=\"drawer-panel\" \r\n [class.position-left]=\"position === 'left'\"\r\n [class.position-right]=\"position === 'right'\"\r\n [class.position-top]=\"position === 'top'\"\r\n [class.position-bottom]=\"position === 'bottom'\"\r\n [ngStyle]=\"getDrawerStyle()\"\r\n [@slideIn]=\"position\"\r\n >\r\n <div class=\"drawer-header\">\r\n <ng-content select=\"[drawer-header]\"></ng-content>\r\n \r\n <button class=\"drawer-close\" (click)=\"close()\" aria-label=\"Close drawer\">\r\n <svg viewBox=\"0 0 24 24\">\r\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"drawer-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"drawer-footer\">\r\n <ng-content select=\"[drawer-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DrawerService"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './lib/drawer/drawer.component';
2
+ export * from './lib/drawer/drawer.service';
@@ -0,0 +1,26 @@
1
+ import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
+ import { DrawerService } from './drawer.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class DrawerComponent implements OnInit, OnDestroy {
5
+ private drawerService;
6
+ position: 'left' | 'right' | 'top' | 'bottom';
7
+ size: string;
8
+ hasBackdrop: boolean;
9
+ closeOnBackdropClick: boolean;
10
+ closeOnEscape: boolean;
11
+ isOpen: boolean;
12
+ opened: EventEmitter<void>;
13
+ closed: EventEmitter<void>;
14
+ private subscriptions;
15
+ constructor(drawerService: DrawerService);
16
+ ngOnInit(): void;
17
+ ngOnDestroy(): void;
18
+ onEscapeKey(): void;
19
+ open(): void;
20
+ close(): void;
21
+ onBackdropClick(): void;
22
+ private applyConfig;
23
+ getDrawerStyle(): any;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerComponent, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<DrawerComponent, "muxima-drawer", never, { "position": "position"; "size": "size"; "hasBackdrop": "hasBackdrop"; "closeOnBackdropClick": "closeOnBackdropClick"; "closeOnEscape": "closeOnEscape"; "isOpen": "isOpen"; }, { "opened": "opened"; "closed": "closed"; }, never, ["[drawer-header]", "*", "[drawer-footer]"], true, never>;
26
+ }
@@ -0,0 +1,26 @@
1
+ import { Subject } from 'rxjs';
2
+ import * as i0 from "@angular/core";
3
+ export interface DrawerConfig {
4
+ position?: 'left' | 'right' | 'top' | 'bottom';
5
+ size?: string;
6
+ hasBackdrop?: boolean;
7
+ closeOnBackdropClick?: boolean;
8
+ closeOnEscape?: boolean;
9
+ }
10
+ export interface DrawerRef {
11
+ close: () => void;
12
+ afterClosed: Subject<any>;
13
+ }
14
+ export declare class DrawerService {
15
+ private openDrawerSubject;
16
+ private closeDrawerSubject;
17
+ openDrawer$: import("rxjs").Observable<{
18
+ config: DrawerConfig;
19
+ content?: any;
20
+ }>;
21
+ closeDrawer$: import("rxjs").Observable<void>;
22
+ open(config?: DrawerConfig, content?: any): DrawerRef;
23
+ close(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<DrawerService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<DrawerService>;
26
+ }
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@muxima-ui/drawer",
3
+ "version": "1.0.0",
4
+ "description": "Drawer/sidebar component for Angular 18+ - Muxima UI",
5
+ "keywords": [
6
+ "angular",
7
+ "drawer",
8
+ "sidebar",
9
+ "panel",
10
+ "overlay",
11
+ "muxima-ui"
12
+ ],
13
+ "author": "Muxima UI Team (jokerscript)",
14
+ "license": "MIT",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/Aldemiro20/muxima-ui.git",
18
+ "directory": "packages/overlay/drawer"
19
+ },
20
+ "homepage": "https://muxima-ui.vercel.app/components/drawer",
21
+ "bugs": {
22
+ "url": "https://github.com/Aldemiro20/muxima-ui/issues"
23
+ },
24
+ "documentation": "https://muxima-ui.vercel.app",
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "peerDependencies": {
29
+ "@angular/common": "^18.0.0",
30
+ "@angular/core": "^18.0.0"
31
+ },
32
+ "dependencies": {
33
+ "tslib": "^2.3.0"
34
+ },
35
+ "sideEffects": false,
36
+ "module": "fesm2015/muxima-ui-drawer.mjs",
37
+ "es2020": "fesm2020/muxima-ui-drawer.mjs",
38
+ "esm2020": "esm2020/muxima-ui-drawer.mjs",
39
+ "fesm2020": "fesm2020/muxima-ui-drawer.mjs",
40
+ "fesm2015": "fesm2015/muxima-ui-drawer.mjs",
41
+ "typings": "index.d.ts",
42
+ "exports": {
43
+ "./package.json": {
44
+ "default": "./package.json"
45
+ },
46
+ ".": {
47
+ "types": "./index.d.ts",
48
+ "esm2020": "./esm2020/muxima-ui-drawer.mjs",
49
+ "es2020": "./fesm2020/muxima-ui-drawer.mjs",
50
+ "es2015": "./fesm2015/muxima-ui-drawer.mjs",
51
+ "node": "./fesm2015/muxima-ui-drawer.mjs",
52
+ "default": "./fesm2020/muxima-ui-drawer.mjs"
53
+ }
54
+ }
55
+ }