{"version":3,"file":"gewd-ng-utils-ng-inspect.mjs","sources":["../../../../libs/ng-utils/ng-inspect/ng-inspect/ng-inspect.component.ts","../../../../libs/ng-utils/ng-inspect/ng-inspect/ng-inspect.component.html","../../../../libs/ng-utils/ng-inspect/ng-inspect/ng-inspect.module.ts","../../../../libs/ng-utils/ng-inspect/gewd-ng-utils-ng-inspect.ts"],"sourcesContent":["import { ChangeDetectorRef, Component, Inject, OnDestroy, TrackByFunction } from '@angular/core';\nimport { BehaviorSubject, fromEvent, isObservable, merge, NEVER, Subject } from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  mapTo,\n  pairwise,\n  startWith,\n  switchMap,\n  takeUntil,\n  tap\n} from 'rxjs/operators';\nimport { ContextWithCd, InstanceProp, InstanceWithProps, PinnedPayload, PropInfo } from './ng-inspect.component.types';\nimport { DOCUMENT } from '@angular/common';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n\nconst highlightClass = 'highlight-item';\n\n/** @dynamic - allows Document in ngc build */\n@Component({\n  selector: 'ng-inspect',\n  templateUrl: './ng-inspect.component.html',\n  styleUrls: ['./ng-inspect.component.scss']\n})\nexport class NgInspectComponent implements OnDestroy {\n  private static _addedStyle = false;\n\n  component$ = new BehaviorSubject<InstanceWithProps>(null);\n  pinnedItems$ = new BehaviorSubject<InstanceWithProps[]>([]);\n\n  pinnedMap = new WeakMap<ContextWithCd, PinnedPayload>();\n  pinnedAr: ContextWithCd[] = [];\n\n  private ng = window && (window as any).ng;\n  private IVY_MODE = this.ng && !!this.ng.getComponent;\n  private destroy$ = new Subject();\n\n  public trackByEntry: TrackByFunction<any> = (index, item) => item.key;\n\n  constructor (private cd: ChangeDetectorRef,\n               private sanitizer: DomSanitizer,\n               @Inject(DOCUMENT) private document: Document) {\n    if (!NgInspectComponent._addedStyle) {\n      NgInspectComponent._addedStyle = true;\n\n      const style = document.createElement('style');\n\n      // WebKit hack :(\n      style.appendChild(document.createTextNode(''));\n\n      // Add the <style> element to the page\n      document.head.appendChild(style);\n      (style.sheet as any).addRule(`.${highlightClass}`,\n        'border: 2px dotted lightblue !important;');\n    }\n\n\n    const weakMap = new WeakMap<Element, ContextWithCd>();\n\n    const highlightItem$ = new BehaviorSubject<Element>(null);\n\n    highlightItem$.pipe(\n      takeUntil(this.destroy$),\n      //filter(item => !!item),\n      pairwise()\n    ).subscribe(([oldItem, current]) => {\n      if (current) {\n        current.classList.add(highlightClass);\n      }\n\n      if (oldItem) {\n        oldItem.classList.remove(highlightClass);\n      }\n    });\n\n    const keyDown$ = fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n      filter(e => e.ctrlKey),\n      mapTo(true)\n    );\n\n\n    const keyUp$ = fromEvent<KeyboardEvent>(document, 'keyup').pipe(\n      map(e => e.ctrlKey)\n    );\n\n    const isActive$ = merge(\n      keyDown$,\n      keyUp$\n    );\n\n    isActive$.pipe(\n      takeUntil(this.destroy$),\n      switchMap(value => value\n        ? fromEvent<MouseEvent>(document, 'mousemove').pipe(\n          startWith(this.getCurrentElement()),\n          tap(x => console.info({ x })),\n          filter(e => !!e && !this.isChildOfIgnoredElement(e.target as any))\n        )\n        : NEVER\n      ),\n      distinctUntilChanged((x, y) => x.target === y.target)\n    ).subscribe(event => {\n      const { target } = event;\n\n      const elementWithContext = this.findNextContext(target as any);\n\n      if (elementWithContext) {\n        const cached = weakMap.has(elementWithContext);\n\n        const context = cached\n          ? weakMap.get(elementWithContext)\n          : (this.getComponent(elementWithContext));\n\n        if (!cached && context) {\n          weakMap.set(elementWithContext, context);\n        }\n\n        if (context) {\n          highlightItem$.next(elementWithContext);\n\n          const instance = context.instance;\n\n          const entries = Object.entries(instance)\n            .map(\n              ([key, value]) => ({ key, propInfo: this.getPropInfo(value) }) as InstanceProp\n            )\n            .filter(e => !!e.propInfo);\n\n          const found = {\n            context,\n            keys: Object.keys(instance),\n            entries,\n            name: instance.__proto__.constructor.name\n          };\n\n          this.component$.next(found);\n        } else {\n          highlightItem$.next(null);\n          this.component$.next(null);\n        }\n      } else {\n        highlightItem$.next(null);\n        this.component$.next(null);\n      }\n    });\n  }\n\n  ngOnDestroy (): void {\n    this.destroy$.next(true);\n    this.destroy$.complete();\n  }\n\n  onChangeGeneric (value: any, context: ContextWithCd, key: string): void  {\n    context.instance[key] = value;\n    context.cd.markForCheck();\n    this.cd.markForCheck();\n  }\n\n  onPinOp (context: ContextWithCd, prop: string, pin: boolean): void  {\n    let pinnedEntry: PinnedPayload = null;\n\n    if (this.pinnedMap.has(context)) {\n      pinnedEntry = this.pinnedMap.get(context);\n    } else {\n      pinnedEntry = { pinned: [] };\n      this.pinnedMap.set(context, pinnedEntry);\n    }\n\n    if (pin) {\n      pinnedEntry.pinned.push(prop);\n      if (!this.pinnedAr.includes(context)) {\n        this.pinnedAr.push(context);\n      }\n    } else {\n      const indexOf = pinnedEntry.pinned.indexOf(prop);\n      pinnedEntry.pinned.splice(indexOf, 1);\n\n      if (pinnedEntry.pinned.length === 0) {\n        const indexOfInstance = this.pinnedAr.indexOf(context);\n        this.pinnedAr.splice(indexOfInstance, 1);\n      }\n    }\n\n    this.cd.markForCheck();\n\n    this.fillPinnedArray();\n  }\n\n  isPinned (context: ContextWithCd, prop: string): boolean  {\n    if (this.pinnedMap.has(context)) {\n      return this.pinnedMap.get(context).pinned.includes(prop);\n    } else {\n      return false;\n    }\n  }\n\n  getPropInfo (value: any): PropInfo {\n    const type = typeof value;\n    switch (type) {\n      case 'boolean':\n      case 'number':\n        return {\n          canEdit: true,\n          type\n        };\n      case 'string':\n        const str = value.toString();\n        const isColor = str.includes('#') && str.length === 7;\n\n        return {\n          canEdit: true,\n          type: isColor ? 'color' : 'string'\n        };\n      case 'object':\n        if (isObservable(value)) {\n          return {\n            canEdit: false,\n            type: 'observable'\n          };\n        }\n\n        return null;\n      default:\n        return null;\n    }\n  }\n\n  toggleEdit (item: InstanceProp): void  {\n    item.editMode = !item.editMode;\n  }\n\n  public byPassAttr (value: any) {\n   return this.sanitizer.bypassSecurityTrustStyle(value);\n  }\n\n  private getCurrentElement() {\n    const hovering = this.document.querySelectorAll(':hover');\n    if (hovering.length > 0) {\n      return {\n        target: hovering.item(hovering.length - 1)\n      }\n    }\n    return null;\n  }\n\n  private isChildOfIgnoredElement(element: Element) {\n    while (element) {\n      const containsAttr = element.hasAttribute('ignore-inspect');\n\n      if (containsAttr) {\n        return true;\n      }\n\n      element = element.parentElement;\n    }\n\n    return false;\n  }\n\n  private getComponent(element: Element): ContextWithCd {\n    if (this.IVY_MODE) {\n      const component = this.ng.getComponent(element)\n        || this.ng.getContext(element);\n\n      return {\n        instance: component,\n        cd: this.cd\n      };\n    } else {\n      const probe = this.ng.probe(element);\n\n      if (probe) {\n        return {\n          instance: probe.context,\n          cd: probe.injector.get(ChangeDetectorRef)\n        };\n      }\n\n      return null;\n    }\n  }\n\n  private fillPinnedArray () {\n    const pinnedItems: InstanceWithProps[] = [];\n    for (const context of this.pinnedAr) {\n      const {instance} = context;\n      pinnedItems.push({\n        name: instance.__proto__.constructor.name, // move to context?\n        context,\n        entries: this.pinnedMap.get(context).pinned.map(key => ({\n          key,\n          propInfo: this.getPropInfo(instance[key])\n        }) as InstanceProp)\n      });\n    }\n\n    this.pinnedItems$.next(pinnedItems);\n  }\n\n  private findNextContext (element: Element): Element {\n    if (!this.IVY_MODE) {\n      return element;\n    }\n\n    while (element && !this.getContext(element as any)) {\n      element = element.parentElement;\n    }\n\n    return element;\n  }\n\n  private getContext (element: any) {\n    return element.__ngContext__;\n  }\n}\n","<ng-template  #itemEdit let-item=\"item\" let-context=\"context\">\n  <div [ngSwitch]=\"item.propInfo.type\">\n    <ng-container *ngSwitchCase=\"'boolean'\">\n      <mat-checkbox [checked]=\"context.instance[item.key]\"\n                    (change)=\"onChangeGeneric($event.checked, context, item.key)\">\n        {{ item.key }}\n      </mat-checkbox>\n    </ng-container>\n    <ng-container *ngSwitchCase=\"'number'\">\n      <mat-form-field>\n        <input type=\"number\" [value]=\"context.instance[item.key]\" #number\n               matInput [placeholder]=\"item.key\"\n               (change)=\"onChangeGeneric(number.value, context, item.key)\">\n      </mat-form-field>\n    </ng-container>\n    <ng-container *ngSwitchCase=\"'string'\">\n      <mat-form-field>\n        <input type=\"text\" [value]=\"context.instance[item.key]\" #text\n                matInput [placeholder]=\"item.key\"\n               (change)=\"onChangeGeneric(text.value, context, item.key)\">\n      </mat-form-field>\n    </ng-container>\n    <ng-container *ngSwitchCase=\"'color'\">\n      <mat-form-field>\n        <input type=\"color\"\n               [value]=\"context.instance[item.key]\" #text\n               matInput [placeholder]=\"item.key\"\n               (change)=\"onChangeGeneric(text.value, context, item.key)\">\n      </mat-form-field>\n    </ng-container>\n  </div>\n</ng-template>\n\n<ng-template #itemsListTemplate let-items=\"items\" let-context=\"context\">\n  <div *ngFor=\"let item of items; let odd = odd; trackBy: trackByEntry\"\n       class=\"item-row\"\n       [class.odd]=\"odd\"\n  >\n    <div [ngSwitch]=\"item.propInfo.type\" style=\"flex: 1\">\n      <ng-container *ngSwitchDefault>\n        <div *ngIf=\"item.propInfo.canEdit && item.editMode; else readOnly\">\n\n          <ng-template *ngTemplateOutlet=\"itemEdit; context: {\n          item: item,\n          context: context\n        }\">\n          </ng-template>\n        </div>\n\n        <ng-template #readOnly>\n          <span class=\"mat-hint\">{{item.key}}:</span>\n          <br />\n          <span class=\"prop-value\">\n            <span *ngIf=\"item.propInfo.type === 'color'\"\n                 [style]=\"byPassAttr('--bg-color:'+context.instance[item.key])\"\n                  class=\"color-box\">\n\n            </span>\n            {{context.instance[item.key]}}</span>\n        </ng-template>\n      </ng-container>\n      <ng-container *ngSwitchCase=\"'observable'\">\n        <span class=\"mat-hint\">{{item.key}}</span>:\n        <br />\n        <span class=\"prop-value\">{{context.instance[item.key] | async | json}}</span>\n      </ng-container>\n    </div>\n    <div class=\"icon\" *ngIf=\"item.propInfo.canEdit\"\n         (click)=\"toggleEdit(item)\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path class=\"svg-color\" d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM5.92 19H5v-.92l9.06-9.06.92.92L5.92 19zM20.71 5.63l-2.34-2.34c-.2-.2-.45-.29-.71-.29s-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41z\"/></svg>\n    </div>\n    <div class=\"icon\">\n      <div *ngIf=\"isPinned(context, item.key), else unpinned\"\n           (click)=\"onPinOp(context, item.key, false)\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\"\n             enable-background=\"new 0 0 24 24\"\n             height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\n          <g><path d=\"M0,0h24v24H0V0z\" fill=\"none\"/>\n            <path d=\"M0,0h24v24H0V0z\" fill=\"none\"/></g>\n          <g><path  class=\"svg-color\" d=\"M12,17.27L18.18,21l-1.64-7.03L22,9.24l-7.19-0.61L12,2L9.19,8.63L2,9.24l5.46,4.73L5.82,21L12,17.27z\"/></g></svg>\n      </div>\n      <ng-template #unpinned>\n        <div (click)=\"onPinOp(context, item.key, true)\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\"\n               height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path class=\"svg-color\" d=\"M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z\"/></svg>\n        </div>\n      </ng-template>\n    </div>\n\n  </div>\n</ng-template>\n\n<div class=\"debug-panel\" ignore-inspect>\n  <ng-container *ngIf=\"pinnedItems$ | async as pinnedItems\">\n    <div class=\"panel-background\" *ngFor=\"let pinnedItem of pinnedItems\">\n      <h4>{{pinnedItem.name}}</h4>\n\n      <ng-template *ngTemplateOutlet=\"itemsListTemplate; context: {\n          items: pinnedItem.entries,\n          context: pinnedItem.context\n        }\">\n      </ng-template>\n    </div>\n  </ng-container>\n\n  <div class=\"panel-background\" *ngIf=\"component$ | async as component; else nothing\">\n    <h4>{{component.name}}</h4>\n\n    <ng-template *ngTemplateOutlet=\"itemsListTemplate; context: {\n          items: component.entries,\n          context: component.context\n        }\">\n    </ng-template>\n  </div>\n  <ng-template #nothing>\n    <div class=\"panel-background center-text\">\n      Press/hold <kbd>ctrl</kbd> to select <br/>\n      your component to inspect\n    </div>\n  </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgInspectComponent } from './ng-inspect.component';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { BootstrapComponentModule } from '@gewd/ng-utils/bootstrap-component';\n\n\n@NgModule({\n    declarations: [NgInspectComponent],\n    imports: [\n        CommonModule,\n        MatCheckboxModule,\n        MatInputModule,\n        BootstrapComponentModule.component({\n            elementName: 'ng-inspect',\n            component: NgInspectComponent\n        })\n    ],\n    exports: [\n        NgInspectComponent\n    ]\n})\nexport class NgInspectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}