nxt-json-view 19.0.4 → 21.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,16 +18,16 @@ An interactive JSON view component for Angular.
18
18
  npm install --save nxt-json-view
19
19
  ```
20
20
 
21
- ### Import JSON view module
21
+ ### Import JSON view component
22
22
 
23
23
  ```ts
24
- import { JsonViewModule } from 'nxt-json-view'
24
+ import { JsonViewComponent } from 'nxt-json-view'
25
25
 
26
- @NgModule({
26
+ @Component({
27
27
  ...
28
28
  imports: [
29
29
  ...
30
- JsonViewModule
30
+ JsonViewComponent
31
31
  ]
32
32
  })
33
33
  ```
@@ -1,7 +1,39 @@
1
- import * as i1 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
1
  import * as i0 from '@angular/core';
4
- import { Component, ViewEncapsulation, Input, NgModule } from '@angular/core';
2
+ import { Injectable, input, model, signal, effect, computed, inject, ViewEncapsulation, Component, linkedSignal, NgModule } from '@angular/core';
3
+
4
+ class ExpanderService {
5
+ constructor() {
6
+ this.items = new Set();
7
+ }
8
+ addItem(item) {
9
+ this.items.add(item);
10
+ }
11
+ removeItem(item) {
12
+ this.items.delete(item);
13
+ }
14
+ expandTo(level) {
15
+ this.items.forEach(i => {
16
+ if (i.level() <= level && !i.isOpen()) {
17
+ i.levelOpen.set(level);
18
+ i.toggle();
19
+ }
20
+ });
21
+ }
22
+ collapseTo(level) {
23
+ this.items.forEach(i => {
24
+ if (i.level() > level && i.isOpen())
25
+ i.toggle();
26
+ });
27
+ }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: ExpanderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: ExpanderService, providedIn: 'root' }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: ExpanderService, decorators: [{
32
+ type: Injectable,
33
+ args: [{
34
+ providedIn: 'root'
35
+ }]
36
+ }] });
5
37
 
6
38
  /** @internal */
7
39
  function isObject(value) {
@@ -31,134 +63,156 @@ function isBoolean(value) {
31
63
  /** @internal */
32
64
  class JsonViewItemComponent {
33
65
  constructor() {
34
- this.level = 0;
35
- this.isOpen = false;
36
- this.hasChildren = false;
37
- this.isObject = false;
38
- this.isArray = false;
39
- this.isInit = false;
40
- this._levelLabels = {};
41
- }
42
- set data(data) {
43
- this._data = data;
44
- if (this.isInit) {
45
- this.init();
46
- }
47
- }
48
- get data() {
49
- return this._data;
50
- }
51
- ngOnInit() {
52
- this.init();
53
- this.isInit = true;
54
- }
55
- init() {
56
- this.levelLabelHandle();
57
- this.levelOpenHandle();
58
- this.childrenKeysHandle();
59
- this.dataHandle();
60
- }
61
- levelLabelHandle() {
62
- if (this.levelLabels !== undefined) {
63
- this._levelLabels = this.levelLabels[this.level] || {};
64
- }
65
- }
66
- levelOpenHandle() {
67
- if (!isUndefined(this.levelOpen) && (this.level <= this.levelOpen)) {
68
- this.isOpen = true;
69
- }
70
- }
71
- childrenKeysHandle() {
72
- if (isObject(this.data)) {
73
- this.childrenKeys = Object.keys(this.data);
74
- if (this.childrenKeys && this.childrenKeys.length) {
75
- this.hasChildren = true;
76
- }
77
- }
78
- }
79
- dataHandle() {
80
- if (isObject(this.data)) {
81
- this.isObject = true;
82
- this.dataType = 'Object';
83
- if (isArray(this.data)) {
84
- this.isArray = true;
85
- this.dataType = 'Array';
86
- }
87
- if (this.key && this._levelLabels[this.key]) {
88
- this.dataType = this._levelLabels[this.key];
66
+ this.data = input(...(ngDevMode ? [undefined, { debugName: "data" }] : []));
67
+ this.key = input(...(ngDevMode ? [undefined, { debugName: "key" }] : []));
68
+ this.level = input(0, ...(ngDevMode ? [{ debugName: "level" }] : []));
69
+ this.levelOpen = model(...(ngDevMode ? [undefined, { debugName: "levelOpen" }] : []));
70
+ this.levelLabels = input(...(ngDevMode ? [undefined, { debugName: "levelLabels" }] : []));
71
+ this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
72
+ this.effectRef = effect(() => {
73
+ const levelOpen = this.levelOpen();
74
+ this.isOpen.set(!isUndefined(levelOpen) && (this.level() <= levelOpen));
75
+ this.effectRef.destroy();
76
+ }, { ...(ngDevMode ? { debugName: "effectRef" } : {}), manualCleanup: true });
77
+ this.childrenKeys = computed(() => {
78
+ const data = this.data();
79
+ if (isObject(data)) {
80
+ return Object.keys(data);
89
81
  }
90
- }
91
- else {
92
- this.value = this.data;
93
- if (isString(this.data)) {
94
- this.valueType = 'string';
82
+ return [];
83
+ }, ...(ngDevMode ? [{ debugName: "childrenKeys" }] : []));
84
+ this.hasChildren = computed(() => !!(this.childrenKeys().length), ...(ngDevMode ? [{ debugName: "hasChildren" }] : []));
85
+ this._levelLabels = computed(() => {
86
+ const levelLabels = this.levelLabels();
87
+ return levelLabels?.[this.level()] || {};
88
+ }, ...(ngDevMode ? [{ debugName: "_levelLabels" }] : []));
89
+ this.dataType = computed(() => {
90
+ let dataType;
91
+ const data = this.data();
92
+ if (isObject(data)) {
93
+ dataType = 'Object';
94
+ if (isArray(data)) {
95
+ dataType = 'Array';
96
+ }
97
+ const key = this.key();
98
+ if (key && this._levelLabels()[key]) {
99
+ dataType = this._levelLabels()[key];
100
+ }
95
101
  }
96
- else if (isNumber(this.data)) {
97
- this.valueType = 'number';
102
+ return dataType;
103
+ }, ...(ngDevMode ? [{ debugName: "dataType" }] : []));
104
+ this.value = computed(() => {
105
+ let value;
106
+ const data = this.data();
107
+ if (!isObject(data)) {
108
+ value = data;
109
+ if (null === data) {
110
+ value = 'null';
111
+ }
98
112
  }
99
- else if (isBoolean(this.data)) {
100
- this.valueType = 'boolean';
113
+ return value;
114
+ }, ...(ngDevMode ? [{ debugName: "value" }] : []));
115
+ this.valueType = computed(() => {
116
+ const data = this.data();
117
+ if (!isObject(data)) {
118
+ if (isString(data)) {
119
+ return 'string';
120
+ }
121
+ else if (isNumber(data)) {
122
+ return 'number';
123
+ }
124
+ else if (isBoolean(data)) {
125
+ return 'boolean';
126
+ }
127
+ else if (null === data) {
128
+ return 'null';
129
+ }
101
130
  }
102
- else if (null === this.data) {
103
- this.valueType = 'null';
104
- this.value = 'null';
105
- }
106
- }
131
+ return;
132
+ }, ...(ngDevMode ? [{ debugName: "valueType" }] : []));
133
+ this.isObject = computed(() => isObject(this.data()), ...(ngDevMode ? [{ debugName: "isObject" }] : []));
134
+ this.isArray = computed(() => isObject(this.data()) && isArray(this.data()), ...(ngDevMode ? [{ debugName: "isArray" }] : []));
135
+ this.expanderService = inject(ExpanderService);
136
+ }
137
+ ngOnInit() {
138
+ this.expanderService.addItem(this);
139
+ }
140
+ ngOnDestroy() {
141
+ this.expanderService.removeItem(this);
107
142
  }
108
143
  toggle() {
109
- if (!(this.childrenKeys && this.childrenKeys.length)) {
144
+ if (!(this.childrenKeys().length)) {
110
145
  return;
111
146
  }
112
- this.isOpen = !this.isOpen;
147
+ this.isOpen.set(!this.isOpen());
113
148
  }
114
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
115
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.6", type: JsonViewItemComponent, isStandalone: false, selector: "nxt-json-view-item", inputs: { data: "data", key: "key", level: "level", levelOpen: "levelOpen", levelLabels: "levelLabels" }, ngImport: i0, template: "<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 [ngClass]=\"{'collapse': isOpen, 'expand': !isOpen}\"\r\n [style.visibility]=\"hasChildren?'visible':'hidden'\"></span>\r\n <span class=\"key\"\r\n *ngIf=\"key\">\r\n <span>{{key}}</span>\r\n <span>: </span>\r\n </span>\r\n <span class=\"value\">\r\n <span *ngIf=\"isObject\">\r\n {{ dataType }}\r\n <span *ngIf=\"isArray\">[ {{ $any(data)?.length }} ]</span>\r\n </span>\r\n <span *ngIf=\"!isObject && valueType\"\r\n [ngClass]=\"valueType\">{{ value }}</span>\r\n </span>\r\n </a>\r\n <div class=\"children\"\r\n *ngIf=\"hasChildren && isOpen\">\r\n <nxt-json-view-item *ngFor=\"let _key of childrenKeys\"\r\n [data]=\"data[_key]\"\r\n [key]=\"_key\"\r\n [level]=\"level+1\"\r\n [levelOpen]=\"levelOpen\"\r\n [levelLabels]=\"levelLabels\"></nxt-json-view-item>\r\n </div>\r\n</div>\r\n", styles: [".json-view a{cursor:pointer;text-decoration:none}.json-view .toggler{width:1em;padding:0;display:block;text-align:center;float:left}.json-view .collapse:before{content:\"-\"}.json-view .expand:before{content:\"+\"}.json-view .key{color:var(--nxt-json-view-color-key, #92278f)}.json-view .value{color:var(--nxt-json-view-color-value, #000000)}.json-view .value .string{color:var(--nxt-json-view-color-string, #3ab54a)}.json-view .value .number{color:var(--nxt-json-view-color-number, #25aae2)}.json-view .value .boolean{color:var(--nxt-json-view-color-boolean, #aa0d91)}.json-view .value .null{color:var(--nxt-json-view-color-null, #f1592a)}.json-view .children{margin-left:1em}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonViewItemComponent, selector: "nxt-json-view-item", inputs: ["data", "key", "level", "levelOpen", "levelLabels"] }] }); }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: JsonViewItemComponent, isStandalone: true, selector: "nxt-json-view-item", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, levelOpen: { classPropertyName: "levelOpen", publicName: "levelOpen", isSignal: true, isRequired: false, transformFunction: null }, levelLabels: { classPropertyName: "levelLabels", publicName: "levelLabels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { levelOpen: "levelOpenChange" }, ngImport: i0, template: "<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", styles: [".json-view a{cursor:pointer;text-decoration:none}.json-view .toggler{width:1em;padding:0;display:block;text-align:center;float:left}.json-view .collapse:before{content:\"-\"}.json-view .expand:before{content:\"+\"}.json-view .key{color:var(--nxt-json-view-color-key, #92278f)}.json-view .value{color:var(--nxt-json-view-color-value, #000000)}.json-view .value .string{color:var(--nxt-json-view-color-string, #3ab54a)}.json-view .value .number{color:var(--nxt-json-view-color-number, #25aae2)}.json-view .value .boolean{color:var(--nxt-json-view-color-boolean, #aa0d91)}.json-view .value .null{color:var(--nxt-json-view-color-null, #f1592a)}.json-view .children{margin-left:1em}\n"], dependencies: [{ kind: "component", type: JsonViewItemComponent, selector: "nxt-json-view-item", inputs: ["data", "key", "level", "levelOpen", "levelLabels"], outputs: ["levelOpenChange"] }] }); }
116
151
  }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewItemComponent, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewItemComponent, decorators: [{
118
153
  type: Component,
119
- args: [{ selector: 'nxt-json-view-item', encapsulation: ViewEncapsulation.Emulated, standalone: false, template: "<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 [ngClass]=\"{'collapse': isOpen, 'expand': !isOpen}\"\r\n [style.visibility]=\"hasChildren?'visible':'hidden'\"></span>\r\n <span class=\"key\"\r\n *ngIf=\"key\">\r\n <span>{{key}}</span>\r\n <span>: </span>\r\n </span>\r\n <span class=\"value\">\r\n <span *ngIf=\"isObject\">\r\n {{ dataType }}\r\n <span *ngIf=\"isArray\">[ {{ $any(data)?.length }} ]</span>\r\n </span>\r\n <span *ngIf=\"!isObject && valueType\"\r\n [ngClass]=\"valueType\">{{ value }}</span>\r\n </span>\r\n </a>\r\n <div class=\"children\"\r\n *ngIf=\"hasChildren && isOpen\">\r\n <nxt-json-view-item *ngFor=\"let _key of childrenKeys\"\r\n [data]=\"data[_key]\"\r\n [key]=\"_key\"\r\n [level]=\"level+1\"\r\n [levelOpen]=\"levelOpen\"\r\n [levelLabels]=\"levelLabels\"></nxt-json-view-item>\r\n </div>\r\n</div>\r\n", styles: [".json-view a{cursor:pointer;text-decoration:none}.json-view .toggler{width:1em;padding:0;display:block;text-align:center;float:left}.json-view .collapse:before{content:\"-\"}.json-view .expand:before{content:\"+\"}.json-view .key{color:var(--nxt-json-view-color-key, #92278f)}.json-view .value{color:var(--nxt-json-view-color-value, #000000)}.json-view .value .string{color:var(--nxt-json-view-color-string, #3ab54a)}.json-view .value .number{color:var(--nxt-json-view-color-number, #25aae2)}.json-view .value .boolean{color:var(--nxt-json-view-color-boolean, #aa0d91)}.json-view .value .null{color:var(--nxt-json-view-color-null, #f1592a)}.json-view .children{margin-left:1em}\n"] }]
120
- }], propDecorators: { data: [{
121
- type: Input
122
- }], key: [{
123
- type: Input
124
- }], level: [{
125
- type: Input
126
- }], levelOpen: [{
127
- type: Input
128
- }], levelLabels: [{
129
- type: Input
130
- }] } });
154
+ args: [{ selector: 'nxt-json-view-item', encapsulation: ViewEncapsulation.Emulated, template: "<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", styles: [".json-view a{cursor:pointer;text-decoration:none}.json-view .toggler{width:1em;padding:0;display:block;text-align:center;float:left}.json-view .collapse:before{content:\"-\"}.json-view .expand:before{content:\"+\"}.json-view .key{color:var(--nxt-json-view-color-key, #92278f)}.json-view .value{color:var(--nxt-json-view-color-value, #000000)}.json-view .value .string{color:var(--nxt-json-view-color-string, #3ab54a)}.json-view .value .number{color:var(--nxt-json-view-color-number, #25aae2)}.json-view .value .boolean{color:var(--nxt-json-view-color-boolean, #aa0d91)}.json-view .value .null{color:var(--nxt-json-view-color-null, #f1592a)}.json-view .children{margin-left:1em}\n"] }]
155
+ }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: false }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], levelOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "levelOpen", required: false }] }, { type: i0.Output, args: ["levelOpenChange"] }], levelLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "levelLabels", required: false }] }] } });
131
156
 
132
157
  class JsonViewComponent {
133
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.6", type: JsonViewComponent, isStandalone: false, selector: "nxt-json-view", inputs: { data: "data", levelOpen: "levelOpen", levelLabels: "levelLabels" }, ngImport: i0, template: "<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\"></nxt-json-view-item>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: JsonViewItemComponent, selector: "nxt-json-view-item", inputs: ["data", "key", "level", "levelOpen", "levelLabels"] }] }); }
158
+ constructor() {
159
+ /** JSON data, any valid JSON object */
160
+ this.data = input(...(ngDevMode ? [undefined, { debugName: "data" }] : []));
161
+ /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */
162
+ this.levelOpen = input(...(ngDevMode ? [undefined, { debugName: "levelOpen" }] : []));
163
+ /** Custom labels for elements within the hierarcy */
164
+ this.levelLabels = input(...(ngDevMode ? [undefined, { debugName: "levelLabels" }] : []));
165
+ /** @internal */
166
+ this._levelOpen = linkedSignal({ ...(ngDevMode ? { debugName: "_levelOpen" } : {}), source: () => this.levelOpen(),
167
+ computation: level => level });
168
+ this.expanderService = inject(ExpanderService);
169
+ }
170
+ ngAfterViewChecked() {
171
+ if (this._levelOpen() != undefined) {
172
+ // Reset levelOpen to keep nested items collapsed when toggling
173
+ this._levelOpen.set(undefined);
174
+ }
175
+ }
176
+ /** Expand all items up to the given level */
177
+ expandTo(level) {
178
+ this._levelOpen.set(level);
179
+ this.expanderService.expandTo(level);
180
+ }
181
+ /** Collapse any open items above the given level */
182
+ collapseTo(level) {
183
+ this.expanderService.collapseTo(level);
184
+ }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.8", type: JsonViewComponent, isStandalone: true, selector: "nxt-json-view", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, levelOpen: { classPropertyName: "levelOpen", publicName: "levelOpen", isSignal: true, isRequired: false, transformFunction: null }, levelLabels: { classPropertyName: "levelLabels", publicName: "levelLabels", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
187
+ {
188
+ provide: ExpanderService,
189
+ useClass: ExpanderService
190
+ }
191
+ ], ngImport: i0, template: "<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", styles: [""], dependencies: [{ kind: "component", type: JsonViewItemComponent, selector: "nxt-json-view-item", inputs: ["data", "key", "level", "levelOpen", "levelLabels"], outputs: ["levelOpenChange"] }] }); }
135
192
  }
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewComponent, decorators: [{
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewComponent, decorators: [{
137
194
  type: Component,
138
- args: [{ selector: 'nxt-json-view', encapsulation: ViewEncapsulation.Emulated, standalone: false, template: "<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\"></nxt-json-view-item>\r\n</div>\r\n" }]
139
- }], propDecorators: { data: [{
140
- type: Input
141
- }], levelOpen: [{
142
- type: Input
143
- }], levelLabels: [{
144
- type: Input
145
- }] } });
195
+ args: [{ selector: 'nxt-json-view', encapsulation: ViewEncapsulation.Emulated, providers: [
196
+ {
197
+ provide: ExpanderService,
198
+ useClass: ExpanderService
199
+ }
200
+ ], imports: [
201
+ JsonViewItemComponent
202
+ ], template: "<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" }]
203
+ }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], levelOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "levelOpen", required: false }] }], levelLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "levelLabels", required: false }] }] } });
146
204
 
205
+ /** @deprecated use standalone imports */
147
206
  class JsonViewModule {
148
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
149
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.6", ngImport: i0, type: JsonViewModule, declarations: [JsonViewItemComponent,
150
- JsonViewComponent], imports: [CommonModule], exports: [JsonViewComponent] }); }
151
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewModule, imports: [CommonModule] }); }
207
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
208
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: JsonViewModule, imports: [JsonViewComponent], exports: [JsonViewComponent] }); }
209
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewModule }); }
152
210
  }
153
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.6", ngImport: i0, type: JsonViewModule, decorators: [{
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewModule, decorators: [{
154
212
  type: NgModule,
155
213
  args: [{
156
- declarations: [
157
- JsonViewItemComponent,
158
- JsonViewComponent
159
- ],
160
214
  imports: [
161
- CommonModule
215
+ JsonViewComponent
162
216
  ],
163
217
  exports: [
164
218
  JsonViewComponent
@@ -1 +1 @@
1
- {"version":3,"file":"nxt-json-view.mjs","sources":["../../../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":["/** @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, Input, OnInit, ViewEncapsulation } from '@angular/core'\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({\n selector: 'nxt-json-view-item',\n templateUrl: './json-view-item.component.html',\n styleUrls: ['./json-view-item.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n standalone: false\n})\r\nexport class JsonViewItemComponent implements OnInit {\r\n private _data?: any\r\n @Input()\r\n set data(data: any | undefined) {\r\n this._data = data\r\n if (this.isInit) {\r\n this.init()\r\n }\r\n }\r\n get data(): any | undefined {\r\n return this._data\r\n }\r\n @Input() key?: string\r\n @Input() level: number = 0\r\n @Input() levelOpen?: number\r\n @Input() levelLabels?: LevelLabels\r\n\r\n isOpen: boolean = false\r\n childrenKeys?: string[]\r\n hasChildren: boolean = false\r\n dataType?: string\r\n value: any\r\n valueType?: string\r\n isObject: boolean = false\r\n isArray: boolean = false\r\n isInit: boolean = false\r\n _levelLabels: { [key: string]: string } = {}\r\n\r\n ngOnInit() {\r\n this.init()\r\n this.isInit = true\r\n }\r\n\r\n init() {\r\n this.levelLabelHandle()\r\n this.levelOpenHandle()\r\n this.childrenKeysHandle()\r\n this.dataHandle()\r\n }\r\n\r\n levelLabelHandle() {\r\n if (this.levelLabels !== undefined) {\r\n this._levelLabels = this.levelLabels[this.level] || {}\r\n }\r\n }\r\n\r\n levelOpenHandle() {\r\n if (!isUndefined(this.levelOpen) && (this.level <= this.levelOpen)) {\r\n this.isOpen = true\r\n }\r\n }\r\n\r\n childrenKeysHandle() {\r\n if (isObject(this.data)) {\r\n this.childrenKeys = Object.keys(this.data)\r\n if (this.childrenKeys && this.childrenKeys.length) {\r\n this.hasChildren = true\r\n }\r\n }\r\n }\r\n\r\n dataHandle() {\r\n if (isObject(this.data)) {\r\n this.isObject = true\r\n this.dataType = 'Object'\r\n if (isArray(this.data)) {\r\n this.isArray = true\r\n this.dataType = 'Array'\r\n }\r\n if (this.key && this._levelLabels[this.key]) {\r\n this.dataType = this._levelLabels[this.key]\r\n }\r\n } else {\r\n this.value = this.data\r\n if (isString(this.data)) {\r\n this.valueType = 'string'\r\n } else if (isNumber(this.data)) {\r\n this.valueType = 'number'\r\n } else if (isBoolean(this.data)) {\r\n this.valueType = 'boolean'\r\n } else if (null === this.data) {\r\n this.valueType = 'null'\r\n this.value = 'null'\r\n }\r\n }\r\n }\r\n\r\n toggle() {\r\n if (!(this.childrenKeys && this.childrenKeys.length)) {\r\n return\r\n }\r\n this.isOpen = !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 [ngClass]=\"{'collapse': isOpen, 'expand': !isOpen}\"\r\n [style.visibility]=\"hasChildren?'visible':'hidden'\"></span>\r\n <span class=\"key\"\r\n *ngIf=\"key\">\r\n <span>{{key}}</span>\r\n <span>: </span>\r\n </span>\r\n <span class=\"value\">\r\n <span *ngIf=\"isObject\">\r\n {{ dataType }}\r\n <span *ngIf=\"isArray\">[ {{ $any(data)?.length }} ]</span>\r\n </span>\r\n <span *ngIf=\"!isObject && valueType\"\r\n [ngClass]=\"valueType\">{{ value }}</span>\r\n </span>\r\n </a>\r\n <div class=\"children\"\r\n *ngIf=\"hasChildren && isOpen\">\r\n <nxt-json-view-item *ngFor=\"let _key of childrenKeys\"\r\n [data]=\"data[_key]\"\r\n [key]=\"_key\"\r\n [level]=\"level+1\"\r\n [levelOpen]=\"levelOpen\"\r\n [levelLabels]=\"levelLabels\"></nxt-json-view-item>\r\n </div>\r\n</div>\r\n","import { Component, Input, ViewEncapsulation } from '@angular/core'\r\nimport { LevelLabels } from '../utils/interfaces'\r\n\r\n@Component({\n selector: 'nxt-json-view',\n templateUrl: './json-view.component.html',\n styleUrls: ['./json-view.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n standalone: false\n})\r\nexport class JsonViewComponent {\r\n /** JSON data, any valid JSON object */\r\n @Input() data: any\r\n /** Initial number of levels to be expanded */\r\n @Input() levelOpen?: number\r\n /** Custom labels for elements within the hierarcy */\r\n @Input() levelLabels?: LevelLabels\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\"></nxt-json-view-item>\r\n</div>\r\n","import { CommonModule } from '@angular/common'\r\nimport { NgModule } from '@angular/core'\r\nimport { JsonViewItemComponent } from './json-view-item/json-view-item.component'\r\nimport { JsonViewComponent } from './json-view/json-view.component'\r\n\r\n@NgModule({\r\n declarations: [\r\n JsonViewItemComponent,\r\n JsonViewComponent\r\n ],\r\n imports: [\r\n CommonModule\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":["i1.JsonViewItemComponent"],"mappings":"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"}
1
+ {"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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"}
package/package.json CHANGED
@@ -2,10 +2,13 @@
2
2
  "name": "nxt-json-view",
3
3
  "description": "Angular component for interactive json view.",
4
4
  "bugs": "https://github.com/Liquid-JS/nxt-components/issues",
5
- "version": "19.0.4",
5
+ "version": "21.0.0-alpha.0",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
- "repository": "https://github.com/Liquid-JS/nxt-components.git",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Liquid-JS/nxt-components.git"
11
+ },
9
12
  "homepage": "https://github.com/Liquid-JS/nxt-components/tree/master/packages/json-view",
10
13
  "keywords": [
11
14
  "nxt-json-view",
@@ -20,20 +23,20 @@
20
23
  "tree"
21
24
  ],
22
25
  "peerDependencies": {
23
- "@angular/common": "^19.0.0",
24
- "@angular/core": "^19.0.0"
26
+ "@angular/common": "^21.0.0",
27
+ "@angular/core": "^21.0.0"
25
28
  },
26
29
  "dependencies": {
27
30
  "tslib": "^2.8.1"
28
31
  },
29
32
  "module": "fesm2022/nxt-json-view.mjs",
30
- "typings": "index.d.ts",
33
+ "typings": "types/nxt-json-view.d.ts",
31
34
  "exports": {
32
35
  "./package.json": {
33
36
  "default": "./package.json"
34
37
  },
35
38
  ".": {
36
- "types": "./index.d.ts",
39
+ "types": "./types/nxt-json-view.d.ts",
37
40
  "default": "./fesm2022/nxt-json-view.mjs"
38
41
  }
39
42
  },
@@ -0,0 +1,37 @@
1
+ import * as i0 from '@angular/core';
2
+ import { AfterViewChecked } from '@angular/core';
3
+
4
+ interface LevelLabels {
5
+ [level: number]: {
6
+ [key: string]: string;
7
+ };
8
+ }
9
+
10
+ declare class JsonViewComponent implements AfterViewChecked {
11
+ /** JSON data, any valid JSON object */
12
+ readonly data: i0.InputSignal<any>;
13
+ /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */
14
+ readonly levelOpen: i0.InputSignal<number | undefined>;
15
+ /** Custom labels for elements within the hierarcy */
16
+ readonly levelLabels: i0.InputSignal<LevelLabels | undefined>;
17
+ /** @internal */
18
+ readonly _levelOpen: i0.WritableSignal<number | undefined>;
19
+ private readonly expanderService;
20
+ ngAfterViewChecked(): void;
21
+ /** Expand all items up to the given level */
22
+ expandTo(level: number): void;
23
+ /** Collapse any open items above the given level */
24
+ collapseTo(level: number): void;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<JsonViewComponent, "nxt-json-view", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "levelOpen": { "alias": "levelOpen"; "required": false; "isSignal": true; }; "levelLabels": { "alias": "levelLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
27
+ }
28
+
29
+ /** @deprecated use standalone imports */
30
+ declare class JsonViewModule {
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewModule, never>;
32
+ static ɵmod: i0.ɵɵNgModuleDeclaration<JsonViewModule, never, [typeof JsonViewComponent], [typeof JsonViewComponent]>;
33
+ static ɵinj: i0.ɵɵInjectorDeclaration<JsonViewModule>;
34
+ }
35
+
36
+ export { JsonViewComponent, JsonViewModule };
37
+ export type { LevelLabels };
package/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="nxt-json-view" />
5
- export * from './public-api';
@@ -1,12 +0,0 @@
1
- import { LevelLabels } from '../utils/interfaces';
2
- import * as i0 from "@angular/core";
3
- export declare class JsonViewComponent {
4
- /** JSON data, any valid JSON object */
5
- data: any;
6
- /** Initial number of levels to be expanded */
7
- levelOpen?: number;
8
- /** Custom labels for elements within the hierarcy */
9
- levelLabels?: LevelLabels;
10
- static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewComponent, never>;
11
- static ɵcmp: i0.ɵɵComponentDeclaration<JsonViewComponent, "nxt-json-view", never, { "data": { "alias": "data"; "required": false; }; "levelOpen": { "alias": "levelOpen"; "required": false; }; "levelLabels": { "alias": "levelLabels"; "required": false; }; }, {}, never, never, false, never>;
12
- }
@@ -1,34 +0,0 @@
1
- import { OnInit } from '@angular/core';
2
- import { LevelLabels } from '../utils/interfaces';
3
- import * as i0 from "@angular/core";
4
- /** @internal */
5
- export declare class JsonViewItemComponent implements OnInit {
6
- private _data?;
7
- set data(data: any | undefined);
8
- get data(): any | undefined;
9
- key?: string;
10
- level: number;
11
- levelOpen?: number;
12
- levelLabels?: LevelLabels;
13
- isOpen: boolean;
14
- childrenKeys?: string[];
15
- hasChildren: boolean;
16
- dataType?: string;
17
- value: any;
18
- valueType?: string;
19
- isObject: boolean;
20
- isArray: boolean;
21
- isInit: boolean;
22
- _levelLabels: {
23
- [key: string]: string;
24
- };
25
- ngOnInit(): void;
26
- init(): void;
27
- levelLabelHandle(): void;
28
- levelOpenHandle(): void;
29
- childrenKeysHandle(): void;
30
- dataHandle(): void;
31
- toggle(): void;
32
- static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewItemComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<JsonViewItemComponent, "nxt-json-view-item", never, { "data": { "alias": "data"; "required": false; }; "key": { "alias": "key"; "required": false; }; "level": { "alias": "level"; "required": false; }; "levelOpen": { "alias": "levelOpen"; "required": false; }; "levelLabels": { "alias": "levelLabels"; "required": false; }; }, {}, never, never, false, never>;
34
- }
@@ -1,9 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./json-view-item/json-view-item.component";
3
- import * as i2 from "./json-view/json-view.component";
4
- import * as i3 from "@angular/common";
5
- export declare class JsonViewModule {
6
- static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewModule, never>;
7
- static ɵmod: i0.ɵɵNgModuleDeclaration<JsonViewModule, [typeof i1.JsonViewItemComponent, typeof i2.JsonViewComponent], [typeof i3.CommonModule], [typeof i2.JsonViewComponent]>;
8
- static ɵinj: i0.ɵɵInjectorDeclaration<JsonViewModule>;
9
- }
@@ -1,5 +0,0 @@
1
- export interface LevelLabels {
2
- [level: number]: {
3
- [key: string]: string;
4
- };
5
- }
@@ -1,12 +0,0 @@
1
- /** @internal */
2
- export declare function isObject(value: any): value is object;
3
- /** @internal */
4
- export declare function isArray(value: any): value is unknown[];
5
- /** @internal */
6
- export declare function isUndefined<T>(value: T | undefined): value is undefined;
7
- /** @internal */
8
- export declare function isString(value: any): value is string;
9
- /** @internal */
10
- export declare function isNumber(value: any): value is number;
11
- /** @internal */
12
- export declare function isBoolean(value: any): value is boolean;
package/public-api.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from './lib/json-view.module';
2
- export * from './lib/json-view/json-view.component';
3
- export { LevelLabels } from './lib/utils/interfaces';