flexi-toast
Version:
Lightweight, customizable Angular toast notification component with title, message, icon types, auto-dismiss, manual close, animations, theme and positioning support.
1 lines • 25.7 kB
Source Map (JSON)
{"version":3,"file":"flexi-toast.mjs","sources":["../../../library/src/lib/flexi-swal.component.ts","../../../library/src/lib/flexi-toast.service.ts","../../../library/src/flexi-toast.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostBinding, ViewEncapsulation, ChangeDetectionStrategy, input, linkedSignal, output } from '@angular/core';\r\n\r\n\r\nexport type FlexiSwalContentThemeClass = \"success\" | \"warning\" | \"info\" | \"error\" | \"default\";\r\n\r\n@Component({\r\n selector: 'flexi-swal',\r\n imports: [],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n @if(isVisibleSignal()){\r\n <div class=\"flexi-swal-container\" [attr.data-bs-theme]=\"themeClass()\">\r\n <div class=\"flexi-swal-content\"\r\n [attr.data-bs-theme]=\"themeClass()\">\r\n \r\n <!-- Close button (top right) -->\r\n @if (showCloseBtn()) {\r\n <span class=\"flexi-swal-close-btn\"\r\n (click)=\"onCancel()\">×</span>\r\n }\r\n \r\n <!-- Title container -->\r\n <div class=\"flexi-swal-title-container\">\r\n <span>{{ title() }}</span>\r\n <button class=\"flexi-swal-close-button\" (click)=\"onCancel()\">×</button>\r\n </div>\r\n \r\n <!-- Question container -->\r\n <div class=\"flexi-swal-question-container\">\r\n <span [innerHtml]=\"question()\"></span>\r\n </div>\r\n \r\n <!-- Button container -->\r\n <div class=\"flexi-swal-button-container\">\r\n <button class=\"flexi-swal-button flexi-swal-button-primary\"\r\n (click)=\"onConfirm()\">\r\n {{ confirmBtnText() }}\r\n </button>\r\n <button class=\"flexi-swal-button\"\r\n (click)=\"onCancel()\">\r\n {{ cancelBtnText() }}\r\n </button>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n }\r\n `,\r\n styles: [`\r\n :host {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 9999;\r\n pointer-events: none;\r\n }\r\n\r\n :host(.visible) {\r\n pointer-events: all;\r\n }\r\n\r\n .flexi-swal-container {\r\n display: flex;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.5);\r\n justify-content: center;\r\n align-items: center;\r\n z-index: 9999;\r\n }\r\n\r\n .flexi-swal-content {\r\n animation: fadeIn 0.3s ease-in-out;\r\n }\r\n\r\n .fade-out {\r\n animation: fadeOut 0.2s ease-in-out forwards;\r\n }\r\n\r\n @keyframes fadeIn {\r\n from {\r\n opacity: 0;\r\n transform: scale(0.9);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n }\r\n\r\n @keyframes fadeOut {\r\n from {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n to {\r\n opacity: 0;\r\n transform: scale(0.9);\r\n }\r\n }\r\n `]\r\n})\r\nexport class FlexiSwalComponent {\r\n readonly title = input<string>('');\r\n readonly question = input<string>('');\r\n readonly confirmBtnText = input<string>('Confirm');\r\n readonly cancelBtnText = input<string>('Cancel');\r\n readonly showCloseBtn = input<boolean>(false);\r\n readonly themeClass = input<'light' | 'dark'>('light');\r\n readonly contentThemeClass = input<FlexiSwalContentThemeClass>('default');\r\n readonly isVisible = input<boolean>(false);\r\n\r\n readonly isVisibleSignal = linkedSignal(() => this.isVisible());\r\n\r\n readonly confirmed = output<void>();\r\n readonly cancelled = output<void>();\r\n readonly closed = output<void>();\r\n\r\n @HostBinding('class.visible') get visible() {\r\n return this.isVisibleSignal();\r\n }\r\n\r\n @HostBinding('style.display') get display() {\r\n return this.isVisibleSignal() ? 'block' : 'none';\r\n }\r\n\r\n onConfirm() {\r\n this.confirmed.emit();\r\n this.close();\r\n }\r\n\r\n onCancel() {\r\n this.cancelled.emit();\r\n this.close();\r\n }\r\n\r\n private close() {\r\n this.isVisibleSignal.set(false);\r\n this.closed.emit();\r\n }\r\n\r\n show() {\r\n this.isVisibleSignal.set(true);\r\n // Prevent body scroll\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n hide() {\r\n this.isVisibleSignal.set(false);\r\n // Restore body scroll\r\n document.body.style.overflow = '';\r\n }\r\n}","import { Injectable, Renderer2, RendererFactory2, ComponentRef, ViewContainerRef, ApplicationRef, createComponent, EnvironmentInjector, inject } from '@angular/core';\r\nimport { FlexiSwalComponent } from './flexi-swal.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FlexiToastService {\r\n options: FlexiToastOptionsModel = new FlexiToastOptionsModel();\r\n\r\n private renderer: Renderer2;\r\n private appRef = inject(ApplicationRef);\r\n private injector = inject(EnvironmentInjector);\r\n\r\n constructor(rendererFactory: RendererFactory2) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n showToast(title: string, text: string, icon: FlexiToastIconType = \"success\", options?: FlexiToastOptionsModel) {\r\n if (!options) {\r\n options = this.options;\r\n }\r\n\r\n options.icon = icon;\r\n\r\n let wrapper = document.querySelector(\".flexi-toast-wrapper\");\r\n if (!wrapper) {\r\n wrapper = this.renderer.createElement('div');\r\n this.renderer.addClass(wrapper, `flexi-toast-wrapper`);\r\n this.renderer.addClass(wrapper, `flexi-taost-${options.position}`);\r\n const body = this.renderer.selectRootElement('body', true);\r\n this.renderer.appendChild(body, wrapper);\r\n } else {\r\n wrapper.className = `flexi-toast-wrapper flexi-taost-${options.position}`;\r\n\r\n if (options.preventDuplicate) {\r\n const allEl: any = document.querySelectorAll(\".flexi-toast\");\r\n if (allEl) {\r\n for (const el of allEl) {\r\n this.renderer.removeChild(wrapper, el);\r\n }\r\n }\r\n }\r\n }\r\n\r\n const toast = this.renderer.createElement('div');\r\n this.renderer.addClass(toast, 'flexi-toast');\r\n this.renderer.addClass(toast, `flexi-toast-${options.icon}`);\r\n this.renderer.setAttribute(toast, `data-bs-theme`, options.themeClass!)\r\n\r\n if (!options.showToastCloseBtn) {\r\n this.renderer.listen(toast, 'click', () => {\r\n this.renderer.removeClass(toast, 'flexi-toast-fade-in');\r\n this.renderer.addClass(toast, 'flexi-toast-fade-out');\r\n setTimeout(() => {\r\n this.renderer.removeChild(wrapper, toast);\r\n }, 500);\r\n });\r\n }\r\n\r\n const container = this.renderer.createElement('div');\r\n this.renderer.addClass(container, 'flexi-toast-container');\r\n\r\n const container1 = this.renderer.createElement('div');\r\n this.renderer.addClass(container1, 'flexi-toast-container-1');\r\n\r\n // SVG ikonu eklemek\r\n const svgIcon = this.renderer.createElement('svg', 'http://www.w3.org/2000/svg');\r\n this.renderer.setAttribute(svgIcon, 'xmlns', 'http://www.w3.org/2000/svg');\r\n this.renderer.setAttribute(svgIcon, 'viewBox', '0 0 512 512');\r\n\r\n const path = this.renderer.createElement('path', 'http://www.w3.org/2000/svg');\r\n if (options.icon === \"success\") {\r\n this.renderer.setAttribute(path, 'd', 'M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM227.3 387.3l184-184c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0L216 308.1l-70.1-70.1c-6.2-6.2-16.4-6.2-22.6 0l-22.6 22.6c-6.2 6.2-6.2 16.4 0 22.6l104 104c6.2 6.2 16.4 6.2 22.6 0z');\r\n } else if (options.icon === \"warning\") {\r\n this.renderer.setAttribute(path, 'd', 'M504 256c0 137-111 248-248 248S8 393 8 256C8 119.1 119 8 256 8s248 111.1 248 248zm-248 50c-25.4 0-46 20.6-46 46s20.6 46 46 46 46-20.6 46-46-20.6-46-46-46zm-43.7-165.3l7.4 136c.3 6.4 5.6 11.3 12 11.3h48.5c6.4 0 11.6-5 12-11.3l7.4-136c.4-6.9-5.1-12.7-12-12.7h-63.4c-6.9 0-12.4 5.8-12 12.7z');\r\n } else if (options.icon === \"info\") {\r\n this.renderer.setAttribute(path, 'd', 'M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z');\r\n } else if (options.icon === \"error\") {\r\n this.renderer.setAttribute(path, 'd', 'M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z');\r\n }\r\n\r\n this.renderer.appendChild(svgIcon, path);\r\n this.renderer.appendChild(container1, svgIcon);\r\n\r\n const container2 = this.renderer.createElement('div');\r\n this.renderer.addClass(container2, 'flexi-toast-container-2');\r\n\r\n const titleEl = this.renderer.createElement('span');\r\n const titleText = this.renderer.createText(title);\r\n this.renderer.appendChild(titleEl, titleText);\r\n\r\n const message = this.renderer.createElement('span');\r\n message.innerHTML = text;\r\n\r\n this.renderer.appendChild(container2, titleEl);\r\n this.renderer.appendChild(container2, message);\r\n\r\n this.renderer.appendChild(container, container1);\r\n this.renderer.appendChild(container, container2);\r\n\r\n if (options.autoClose && options.showProgressBar) {\r\n const progressBar = this.renderer.createElement('div');\r\n this.renderer.addClass(progressBar, 'flexi-toast-progress-bar');\r\n this.renderer.addClass(progressBar, `flex-toast-progress-bar-${options.icon}`)\r\n this.renderer.appendChild(toast, progressBar);\r\n\r\n // Add animation to progress bar\r\n this.renderer.setStyle(progressBar, 'transition', `width ${options.timeOut}ms linear`);\r\n this.renderer.setStyle(progressBar, 'width', '100%');\r\n setTimeout(() => {\r\n this.renderer.setStyle(progressBar, 'width', '0%');\r\n }, 10);\r\n }\r\n\r\n this.renderer.appendChild(toast, container);\r\n\r\n if (options.showToastCloseBtn) {\r\n const closeBtn = this.renderer.createElement('span');\r\n this.renderer.addClass(closeBtn, 'flexi-toast-close-btn');\r\n const closeText = this.renderer.createText('×');\r\n this.renderer.appendChild(closeBtn, closeText);\r\n\r\n this.renderer.listen(closeBtn, 'click', () => {\r\n this.renderer.removeClass(toast, 'flexi-toast-fade-in');\r\n this.renderer.addClass(toast, 'flexi-toast-fade-out');\r\n setTimeout(() => {\r\n this.renderer.removeChild(wrapper, toast);\r\n }, 500);\r\n });\r\n\r\n this.renderer.appendChild(toast, closeBtn);\r\n }\r\n\r\n this.renderer.appendChild(wrapper, toast);\r\n\r\n // Timeout to trigger the fade-in animation\r\n setTimeout(() => {\r\n this.renderer.addClass(toast, 'flexi-toast-fade-in');\r\n }, 10);\r\n\r\n if (options.autoClose) {\r\n setTimeout(() => {\r\n this.renderer.removeClass(toast, 'flexi-toast-fade-in');\r\n this.renderer.addClass(toast, 'flexi-toast-fade-out');\r\n setTimeout(() => {\r\n this.renderer.removeChild(wrapper, toast);\r\n }, 500);\r\n }, options.timeOut);\r\n }\r\n }\r\n\r\n showSwal(title: string, question: string, confirmBtnText: string = this.options.confirmBtnText ?? \"Delete\", callBack: () => void, cancelBtnText: string = this.options.cancelBtnText ?? \"Cancel\", cancelCallBack?: () => void): ComponentRef<FlexiSwalComponent> {\r\n\r\n // Create component\r\n const componentRef = createComponent(FlexiSwalComponent, {\r\n environmentInjector: this.injector\r\n });\r\n\r\n // Set inputs\r\n componentRef.setInput('title', title);\r\n componentRef.setInput('question', question);\r\n componentRef.setInput('confirmBtnText', confirmBtnText);\r\n componentRef.setInput('cancelBtnText', cancelBtnText);\r\n componentRef.setInput('showCloseBtn', this.options.showSwalCloseBtn);\r\n componentRef.setInput('themeClass', this.options.themeClass);\r\n componentRef.setInput('contentThemeClass', this.options.swalContentThemeClass);\r\n componentRef.setInput('isVisible', true);\r\n\r\n // Subscribe to outputs\r\n componentRef.instance.confirmed.subscribe(() => {\r\n callBack();\r\n this.destroySwal(componentRef);\r\n });\r\n\r\n componentRef.instance.cancelled.subscribe(() => {\r\n if (cancelCallBack) {\r\n cancelCallBack();\r\n }\r\n this.destroySwal(componentRef);\r\n });\r\n\r\n componentRef.instance.closed.subscribe(() => {\r\n this.destroySwal(componentRef);\r\n });\r\n\r\n // Append to body\r\n document.body.appendChild(componentRef.location.nativeElement);\r\n\r\n // Attach to Angular's change detection\r\n this.appRef.attachView(componentRef.hostView);\r\n\r\n componentRef.changeDetectorRef.detectChanges();\r\n\r\n return componentRef;\r\n }\r\n\r\n private destroySwal(componentRef: ComponentRef<FlexiSwalComponent>) {\r\n setTimeout(() => {\r\n this.appRef.detachView(componentRef.hostView);\r\n componentRef.destroy();\r\n }, 200);\r\n }\r\n}\r\n\r\nexport class FlexiToastOptionsModel {\r\n icon?: FlexiToastIconType = \"success\";\r\n autoClose?: boolean = true;\r\n timeOut?: number = 3000;\r\n showProgressBar?: boolean = true;\r\n showToastCloseBtn?: boolean = true;\r\n showSwalCloseBtn?: boolean = false;\r\n preventDuplicate?: boolean = false;\r\n position?: FlexiToastPositionType = \"bottom-right\"\r\n themeClass?: FlexiToastThemeClassType | string = \"light\";\r\n cancelBtnText?: string = \"Vazgeç\";\r\n confirmBtnText?: string = \"Sil\";\r\n swalContentThemeClass?: FlexiSwalContentThemeClass = \"default\";\r\n}\r\n\r\nexport type FlexiToastIconType = \"success\" | \"warning\" | \"info\" | \"error\";\r\nexport type FlexiToastThemeClassType = \"light\" | \"dark\";\r\nexport type FlexiToastPositionType = \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"full-bottom\" | \"full-top\";\r\nexport type FlexiSwalContentThemeClass = \"success\" | \"warning\" | \"info\" | \"error\" | \"default\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}