UNPKG

primeng

Version:

PrimeNG is an open source UI library for Angular featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeB

1 lines 5.95 kB
{"version":3,"file":"primeng-bind.mjs","sources":["../../src/bind/bind.ts","../../src/bind/primeng-bind.ts"],"sourcesContent":["import { computed, Directive, effect, ElementRef, input, NgModule, Renderer2, signal } from '@angular/core';\nimport { cn, equals } from '@primeuix/utils';\n\n/**\n * Bind directive provides dynamic attribute, property, and event listener binding functionality.\n * @group Components\n */\n@Directive({\n selector: '[pBind]',\n standalone: true,\n host: {\n '[style]': 'styles()',\n '[class]': 'classes()'\n }\n})\nexport class Bind {\n /**\n * Dynamic attributes, properties, and event listeners to be applied to the host element.\n * @group Props\n */\n pBind = input<{ [key: string]: any } | undefined>(undefined);\n\n private _attrs = signal<{ [key: string]: any } | undefined>(undefined);\n private attrs = computed(() => this._attrs() || this.pBind());\n\n styles = computed(() => this.attrs()?.style);\n classes = computed(() => cn(this.attrs()?.class));\n\n private listeners: { eventName: string; unlisten: () => void }[] = [];\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2\n ) {\n effect(() => {\n const { style, class: className, ...rest } = this.attrs() || {};\n\n for (const [key, value] of Object.entries(rest)) {\n if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase();\n\n // add listener if not already added\n if (!this.listeners.some((l) => l.eventName === eventName)) {\n const unlisten = this.renderer.listen(this.el.nativeElement, eventName, value);\n this.listeners.push({ eventName, unlisten });\n }\n } else if (value === null || value === undefined) {\n // remove attr\n this.renderer.removeAttribute(this.el.nativeElement, key);\n } else {\n // attr & prop fallback\n this.renderer.setAttribute(this.el.nativeElement, key, value.toString());\n if (key in this.el.nativeElement) {\n (this.el.nativeElement as any)[key] = value;\n }\n }\n }\n });\n }\n\n ngOnDestroy() {\n this.clearListeners();\n }\n\n public setAttrs(attrs: { [key: string]: any } | undefined) {\n if (!equals(this._attrs(), attrs)) {\n this._attrs.set(attrs);\n }\n }\n\n private clearListeners() {\n this.listeners.forEach(({ unlisten }) => unlisten());\n this.listeners = [];\n }\n}\n\n@NgModule({\n imports: [Bind],\n exports: [Bind]\n})\nexport class BindModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}