nxt-json-view
Version:
Angular component for interactive json view.
1 lines • 18.4 kB
Source Map (JSON)
{"version":3,"file":"nxt-json-view.mjs","sources":["../../../packages/json-view/src/lib/expander/expander.service.ts","../../../packages/json-view/src/lib/utils/utils.ts","../../../packages/json-view/src/lib/json-view-item/json-view-item.component.ts","../../../packages/json-view/src/lib/json-view-item/json-view-item.component.html","../../../packages/json-view/src/lib/json-view/json-view.component.ts","../../../packages/json-view/src/lib/json-view/json-view.component.html","../../../packages/json-view/src/lib/json-view.module.ts","../../../packages/json-view/src/nxt-json-view.ts"],"sourcesContent":["import { Injectable } from '@angular/core'\r\nimport { type JsonViewItemComponent } from '../json-view-item/json-view-item.component'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExpanderService {\r\n private readonly items = new Set<JsonViewItemComponent>()\r\n\r\n addItem(item: JsonViewItemComponent) {\r\n this.items.add(item)\r\n }\r\n\r\n removeItem(item: JsonViewItemComponent) {\r\n this.items.delete(item)\r\n }\r\n\r\n expandTo(level: number) {\r\n this.items.forEach(i => {\r\n if (i.level() <= level && !i.isOpen()) {\r\n i.levelOpen.set(level)\r\n i.toggle()\r\n }\r\n })\r\n }\r\n\r\n collapseTo(level: number) {\r\n this.items.forEach(i => {\r\n if (i.level() > level && i.isOpen())\r\n i.toggle()\r\n })\r\n }\r\n}\r\n","/** @internal */\r\nexport function isObject(value: any): value is object {\r\n return value !== null && typeof value === 'object'\r\n}\r\n\r\n/** @internal */\r\nexport function isArray(value: any): value is unknown[] {\r\n return Array.isArray(value)\r\n}\r\n\r\n/** @internal */\r\nexport function isUndefined<T>(value: T | undefined): value is undefined {\r\n return typeof value === 'undefined'\r\n}\r\n\r\n/** @internal */\r\nexport function isString(value: any): value is string {\r\n return typeof value === 'string'\r\n}\r\n\r\n/** @internal */\r\nexport function isNumber(value: any): value is number {\r\n return typeof value === 'number'\r\n}\r\n\r\n/** @internal */\r\nexport function isBoolean(value: any): value is boolean {\r\n return typeof value === 'boolean'\r\n}\r\n","import { Component, computed, effect, inject, input, model, OnDestroy, OnInit, signal, ViewEncapsulation } from '@angular/core'\r\nimport { ExpanderService } from '../expander/expander.service'\r\nimport { LevelLabels } from '../utils/interfaces'\r\nimport { isArray, isBoolean, isNumber, isObject, isString, isUndefined } from '../utils/utils'\r\n\r\n/** @internal */\r\n@Component({\r\n selector: 'nxt-json-view-item',\r\n templateUrl: './json-view-item.component.html',\r\n styleUrls: ['./json-view-item.component.scss'],\r\n encapsulation: ViewEncapsulation.Emulated\r\n\r\n})\r\nexport class JsonViewItemComponent implements OnInit, OnDestroy {\r\n\r\n readonly data = input<any>()\r\n\r\n readonly key = input<string>()\r\n readonly level = input<number>(0)\r\n readonly levelOpen = model<number>()\r\n readonly levelLabels = input<LevelLabels>()\r\n\r\n readonly isOpen = signal(false)\r\n private readonly effectRef = effect(() => {\r\n const levelOpen = this.levelOpen()\r\n this.isOpen.set(!isUndefined(levelOpen) && (this.level() <= levelOpen))\r\n this.effectRef.destroy()\r\n }, { manualCleanup: true })\r\n readonly childrenKeys = computed(() => {\r\n const data = this.data()\r\n if (isObject(data)) {\r\n return Object.keys(data)\r\n }\r\n return []\r\n })\r\n\r\n readonly hasChildren = computed(() => !!(this.childrenKeys().length))\r\n\r\n readonly _levelLabels = computed(() => {\r\n const levelLabels = this.levelLabels()\r\n return levelLabels?.[this.level()] || {}\r\n })\r\n\r\n readonly dataType = computed(() => {\r\n let dataType\r\n const data = this.data()\r\n if (isObject(data)) {\r\n dataType = 'Object'\r\n if (isArray(data)) {\r\n dataType = 'Array'\r\n }\r\n const key = this.key()\r\n if (key && this._levelLabels()[key]) {\r\n dataType = this._levelLabels()[key]\r\n }\r\n }\r\n return dataType\r\n })\r\n readonly value = computed(() => {\r\n let value\r\n const data = this.data()\r\n if (!isObject(data)) {\r\n value = data\r\n if (null === data) {\r\n value = 'null'\r\n }\r\n }\r\n return value\r\n })\r\n readonly valueType = computed(() => {\r\n const data = this.data()\r\n if (!isObject(data)) {\r\n if (isString(data)) {\r\n return 'string'\r\n } else if (isNumber(data)) {\r\n return 'number'\r\n } else if (isBoolean(data)) {\r\n return 'boolean'\r\n } else if (null === data) {\r\n return 'null'\r\n }\r\n }\r\n return\r\n })\r\n readonly isObject = computed(() => isObject(this.data()))\r\n readonly isArray = computed(() => isObject(this.data()) && isArray(this.data()))\r\n\r\n private readonly expanderService = inject(ExpanderService)\r\n\r\n ngOnInit() {\r\n this.expanderService.addItem(this)\r\n }\r\n\r\n ngOnDestroy() {\r\n this.expanderService.removeItem(this)\r\n }\r\n\r\n toggle() {\r\n if (!(this.childrenKeys().length)) {\r\n return\r\n }\r\n this.isOpen.set(!this.isOpen())\r\n }\r\n\r\n}\r\n","<div class=\"json-view\">\r\n <a (click)=\"toggle()\"\r\n tabindex=\"0\"\r\n (keydown.space)=\"toggle()\">\r\n <span class=\"toggler\"\r\n [class]=\"{'collapse': isOpen(), 'expand': !isOpen()}\"\r\n [style.visibility]=\"hasChildren()?'visible':'hidden'\"></span>\r\n @if (key()) {\r\n <span class=\"key\">\r\n <span>{{key()}}</span>\r\n <span>: </span>\r\n </span>\r\n }\r\n <span class=\"value\">\r\n @if (isObject()) {\r\n <span>\r\n {{ dataType() }}\r\n @if (isArray()) {\r\n <span>[ {{ $any(data())?.length }} ]</span>\r\n }\r\n </span>\r\n }\r\n @if (!isObject() && valueType()) {\r\n <span [class]=\"valueType()\">{{ value() }}</span>\r\n }\r\n </span>\r\n </a>\r\n @if (hasChildren() && isOpen()) {\r\n <div class=\"children\">\r\n @for (_key of childrenKeys(); track _key) {\r\n <nxt-json-view-item [data]=\"data()[_key]\"\r\n [key]=\"_key\"\r\n [level]=\"level()+1\"\r\n [levelOpen]=\"levelOpen()\"\r\n [levelLabels]=\"levelLabels()\" />\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { AfterViewChecked, Component, inject, ViewEncapsulation, input, linkedSignal } from '@angular/core'\r\nimport { LevelLabels } from '../utils/interfaces'\r\nimport { ExpanderService } from '../expander/expander.service'\r\nimport { JsonViewItemComponent } from '../json-view-item/json-view-item.component'\r\n\r\n@Component({\r\n selector: 'nxt-json-view',\r\n templateUrl: './json-view.component.html',\r\n styleUrls: ['./json-view.component.scss'],\r\n encapsulation: ViewEncapsulation.Emulated,\r\n providers: [\r\n {\r\n provide: ExpanderService,\r\n useClass: ExpanderService\r\n }\r\n ],\r\n imports: [\r\n JsonViewItemComponent\r\n ]\r\n})\r\nexport class JsonViewComponent implements AfterViewChecked {\r\n /** JSON data, any valid JSON object */\r\n readonly data = input<any>()\r\n /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */\r\n readonly levelOpen = input<number>()\r\n /** Custom labels for elements within the hierarcy */\r\n readonly levelLabels = input<LevelLabels>()\r\n\r\n /** @internal */\r\n readonly _levelOpen = linkedSignal({\r\n source: () => this.levelOpen(),\r\n computation: level => level\r\n })\r\n\r\n private readonly expanderService = inject(ExpanderService)\r\n\r\n ngAfterViewChecked(): void {\r\n if (this._levelOpen() != undefined) {\r\n // Reset levelOpen to keep nested items collapsed when toggling\r\n this._levelOpen.set(undefined)\r\n }\r\n }\r\n\r\n /** Expand all items up to the given level */\r\n expandTo(level: number) {\r\n this._levelOpen.set(level)\r\n this.expanderService.expandTo(level)\r\n }\r\n\r\n /** Collapse any open items above the given level */\r\n collapseTo(level: number) {\r\n this.expanderService.collapseTo(level)\r\n }\r\n}\r\n","<div class=\"nxt-json-view\">\r\n <nxt-json-view-item [data]=\"data()\"\r\n [level]=\"0\"\r\n [levelOpen]=\"_levelOpen()\"\r\n [levelLabels]=\"levelLabels()\"\r\n class=\"json-view\" />\r\n</div>\r\n","import { NgModule } from '@angular/core'\r\nimport { JsonViewComponent } from './json-view/json-view.component'\r\n\r\n/** @deprecated use standalone imports */\r\n@NgModule({\r\n imports: [\r\n JsonViewComponent\r\n ],\r\n exports: [\r\n JsonViewComponent\r\n ]\r\n})\r\nexport class JsonViewModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}