{ "version": 3, "sources": ["libs/proman/src/lib/services/outside-click-detector.service.ts", "libs/proman/src/lib/inline-list/inline-list.component.ts", "libs/proman/src/lib/inline-list/inline-list.service.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class OutsideClickDetectorService {\n listeners: any = [];\n\n constructor() {\n\n }\n\n isException(event: MouseEvent) {\n const exceptions: string[] = [];\n\n const result = exceptions.filter((selector) => {\n const exceptionElement = document.querySelector(selector);\n if (!exceptionElement) return false;\n\n return exceptionElement.contains(event.target as Node);\n\n }).length > 0;\n\n return result;\n }\n\n handleClick = (event: MouseEvent) => {\n let element;\n\n if (!this.isException(event)) {\n\n for (const listener of this.listeners) {\n element = listener.element;\n\n const isSameElOrParent = element === event.target || element.contains(event.target);\n\n if (!isSameElOrParent) {\n setTimeout(() => {\n listener.callback(event);\n });\n\n }\n\n }\n\n }\n\n };\n\n addListener(element: HTMLElement, callback: () => void) {\n\n if (this.listeners.length === 0) {\n document.addEventListener('mousedown', this.handleClick);\n\n }\n\n this.listeners.push({ element, callback });\n\n return ((index) => {\n return {\n cancel: () => {\n this.listeners.splice(index, 1);\n\n if (this.listeners.length === 0) {\n document.removeEventListener('mousedown', this.handleClick);\n }\n }\n };\n })(this.listeners.length - 1);\n }\n}\n", "import { Component, Input, ElementRef, ViewChild, OnChanges, ChangeDetectorRef, OnInit } from '@angular/core';\n\n@Component({\n selector: 'pro-inline-list',\n template: `\n
\n \n\n
\n
\n {{ group.name }}\n
\n
\n {{ item.name }}\n
\n
\n
\n `,\n styles: [`\n .InlineList {\n box-shadow: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);\n position: absolute;\n padding-bottom: 16px;\n display: block;\n z-index: 10002;\n background: #ffffff;\n max-height: 30rem;\n overflow: hidden;\n overflow-y: auto;\n }\n\n .InlineList pro-text-simple .mat-input-flex {\n padding-left: 20px;\n }\n\n .InlineList pro-text-simple .mat-input-flex .mat-form-field-label, input {\n text-indent: 16px;\n }\n\n .InlineList-group, .InlineList-item {\n line-height: 18px;\n padding: 10px 16px 10px 16px;\n }\n\n .InlineList-item {\n cursor: pointer;\n }\n\n .InlineList-item:hover {\n background-color: rgb(238, 238, 238);\n }\n\n .InlineList-group {\n font-weight: 500;\n }\n `]\n})\n\nexport class InlineListComponent implements OnInit, OnChanges {\n @ViewChild('element', { static: true }) element: ElementRef;\n @Input() data: any;\n query: any;\n\n constructor(\n private cd: ChangeDetectorRef,\n ) {\n\n }\n\n ngOnInit() {\n this.setPosition();\n }\n\n ngOnChanges() {\n this.cd.markForCheck();\n }\n\n setPosition() {\n let top = this.data.event.pageY - this.element.nativeElement.offsetHeight / 2;\n let left = this.data.event.pageX - this.element.nativeElement.offsetWidth / 2;\n let scrollTop = window.pageYOffset;\n\n if (top < scrollTop) {\n top = scrollTop;\n\n } else if (window.innerHeight + scrollTop < top + this.element.nativeElement.offsetHeight) {\n top = window.innerHeight + scrollTop - this.element.nativeElement.offsetHeight;\n\n }\n\n this.element.nativeElement.style.top = top + 'px';\n this.element.nativeElement.style.left = left + 'px';\n }\n\n select(item: any, $index: any, $event: any) {\n\n if (!item.groupHeader) {\n // callback with selected item, selected item removal fn, selected $index and $event\n this.data.onSelect(item, () => this.data.items.splice($index, 1), $index, $event);\n\n if (this.data.closeOnSelect) {\n this.data.close($event);\n\n }\n\n if (this.data.closeOnEmpty && this.data.items.length === 0) {\n this.data.close($event);\n\n }\n\n }\n\n }\n\n setQuery(value: any) {\n this.query = value;\n }\n}\n", "import {\n Injectable,\n Injector,\n ComponentFactoryResolver,\n EmbeddedViewRef,\n ApplicationRef\n} from '@angular/core';\n\nimport { FilterService } from '@proman/services/filter.service';\nimport { OutsideClickDetectorService } from '@proman/services/outside-click-detector.service';\nimport { InlineListComponent } from './inline-list.component';\n\ninterface InlineListOptionsInterface {\n dataPromise?: Promise;\n isLoading?: boolean;\n items?: any[];\n groupedData?: any;\n data?: object[];\n event: Event|MouseEvent|any;\n showCreateNew?: boolean;\n onCreateNew?: (item?: object) => any;\n onSelect?: (item?: object) => any;\n createNewLabel?: string;\n noResultsLabel?: string;\n isSearch?: boolean;\n removeOnSelect?: boolean;\n closeOnSelect?: boolean;\n closeOnEmpty?: boolean;\n}\n\n@Injectable()\nexport class InlineListService {\n componentRef: any;\n domElem: any;\n listener: any;\n settings: InlineListOptionsInterface;\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private appRef: ApplicationRef,\n private injector: Injector,\n private OutsideClickDetectorService: OutsideClickDetectorService,\n private Filter: FilterService,\n ) {\n this.settings = {\n showCreateNew: false,\n createNewLabel: this.Filter.translate('create_new'),\n noResultsLabel: this.Filter.translate('no_results'),\n onCreateNew: () => {},\n onSelect: () => {},\n event: null,\n data: null,\n isSearch: true,\n removeOnSelect: false,\n closeOnSelect: true,\n closeOnEmpty: true\n };\n }\n\n parseGroupedData(data: any) {\n return data.reduce((data: any, group: any) => {\n let tmpGroup = { name: group.name, items: [] };\n\n for (let item of group.data) {\n tmpGroup.items.push(item);\n\n }\n\n data.push(tmpGroup);\n\n return data;\n }, []);\n }\n\n parseData(data: any) {\n return [{ items: data }];\n }\n\n setup() {\n this.componentRef = this.componentFactoryResolver\n .resolveComponentFactory(InlineListComponent)\n .create(this.injector);\n\n this.appRef.attachView(this.componentRef.hostView);\n\n this.domElem = (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0] as HTMLElement;\n\n document.body.appendChild(this.domElem);\n\n this.addListeners();\n }\n\n show(options: InlineListOptionsInterface) {\n this.setup();\n\n if (options.dataPromise) {\n options.isLoading = true;\n\n options.dataPromise\n .then((response: any[]) => {\n this.componentRef.instance.data.items = this.parseData(response);\n\n this.componentRef.instance.data.isLoading = false;\n });\n\n } else {\n options.items = options.groupedData ? this.parseGroupedData(options.groupedData) : this.parseData(options.data);\n\n }\n\n this.componentRef.instance.data = Object.assign({}, this.settings, options);\n this.componentRef.instance.data.close = this.close;\n }\n\n close = () => {\n this.listener.cancel();\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.domElem.removeEventListener('keydown', this.handleElKeydown);\n };\n\n handleElKeydown = (event: any) => {\n event.stopPropagation();\n\n if (event.keyCode === 27) this.close();\n\n };\n\n addListeners() {\n this.listener = this.OutsideClickDetectorService.addListener(this.domElem, this.close);\n this.domElem.addEventListener('keydown', this.handleElKeydown);\n }\n}\n"], "mappings": "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", "names": ["OutsideClickDetectorService", "constructor", "listeners", "handleClick", "event", "element", "isException", "listener", "isSameElOrParent", "target", "contains", "setTimeout", "callback", "exceptions", "result", "filter", "selector", "exceptionElement", "document", "querySelector", "length", "addListener", "addEventListener", "push", "index", "cancel", "splice", "removeEventListener", "factory", "\u0275fac", "i0", "\u0275\u0275elementStart", "\u0275\u0275listener", "InlineListComponent_pro_text_simple_2_Template_pro_text_simple_onChange_0_listener", "$event", "\u0275\u0275restoreView", "_r4", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "setQuery", "\u0275\u0275elementEnd", "\u0275\u0275property", "\u0275\u0275pureFunction0", "_c1", "ctx_r1", "query", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "group_r5", "name", "InlineListComponent_div_3_div_2_Template_div_click_0_listener", "restoredCtx", "_r12", "item_r9", "$implicit", "$index_r10", "index", "ctx_r11", "select", "\u0275\u0275template", "InlineListComponent_div_3_div_1_Template", "InlineListComponent_div_3_div_2_Template", "\u0275\u0275pipeBind2", "items", "ctx_r2", "InlineListComponent", "constructor", "cd", "ngOnInit", "setPosition", "ngOnChanges", "markForCheck", "top", "data", "event", "pageY", "element", "nativeElement", "offsetHeight", "left", "pageX", "offsetWidth", "scrollTop", "window", "pageYOffset", "innerHeight", "style", "item", "$index", "groupHeader", "onSelect", "splice", "closeOnSelect", "close", "closeOnEmpty", "length", "value", "\u0275\u0275directiveInject", "ChangeDetectorRef", "selectors", "viewQuery", "InlineListComponent_Query", "rf", "ctx", "InlineListComponent_pro_text_simple_2_Template", "InlineListComponent_div_3_Template", "isSearch", "InlineListService", "constructor", "componentFactoryResolver", "appRef", "injector", "OutsideClickDetectorService", "Filter", "close", "listener", "cancel", "detachView", "componentRef", "hostView", "destroy", "domElem", "removeEventListener", "handleElKeydown", "event", "stopPropagation", "keyCode", "settings", "showCreateNew", "createNewLabel", "translate", "noResultsLabel", "onCreateNew", "onSelect", "data", "isSearch", "removeOnSelect", "closeOnSelect", "closeOnEmpty", "parseGroupedData", "reduce", "group", "tmpGroup", "name", "items", "item", "push", "parseData", "setup", "resolveComponentFactory", "InlineListComponent", "create", "attachView", "rootNodes", "document", "body", "appendChild", "addListeners", "show", "options", "dataPromise", "isLoading", "then", "response", "instance", "groupedData", "Object", "assign", "addListener", "addEventListener", "\u0275\u0275inject", "ComponentFactoryResolver", "ApplicationRef", "Injector", "FilterService", "factory", "\u0275fac"] }