nxt-json-view 20.0.0 → 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,32 +1,5 @@
1
- import * as i1 from '@angular/common';
2
- import { CommonModule } from '@angular/common';
3
1
  import * as i0 from '@angular/core';
4
- import { Injectable, inject, Input, ViewEncapsulation, Component, ChangeDetectorRef, NgModule } from '@angular/core';
5
-
6
- /** @internal */
7
- function isObject(value) {
8
- return value !== null && typeof value === 'object';
9
- }
10
- /** @internal */
11
- function isArray(value) {
12
- return Array.isArray(value);
13
- }
14
- /** @internal */
15
- function isUndefined(value) {
16
- return typeof value === 'undefined';
17
- }
18
- /** @internal */
19
- function isString(value) {
20
- return typeof value === 'string';
21
- }
22
- /** @internal */
23
- function isNumber(value) {
24
- return typeof value === 'number';
25
- }
26
- /** @internal */
27
- function isBoolean(value) {
28
- return typeof value === 'boolean';
29
- }
2
+ import { Injectable, input, model, signal, effect, computed, inject, ViewEncapsulation, Component, linkedSignal, NgModule } from '@angular/core';
30
3
 
31
4
  class ExpanderService {
32
5
  constructor() {
@@ -40,194 +13,206 @@ class ExpanderService {
40
13
  }
41
14
  expandTo(level) {
42
15
  this.items.forEach(i => {
43
- if (i.level <= level && !i.isOpen) {
44
- i.levelOpen = level;
16
+ if (i.level() <= level && !i.isOpen()) {
17
+ i.levelOpen.set(level);
45
18
  i.toggle();
46
19
  }
47
20
  });
48
21
  }
49
22
  collapseTo(level) {
50
23
  this.items.forEach(i => {
51
- if (i.level > level && i.isOpen)
24
+ if (i.level() > level && i.isOpen())
52
25
  i.toggle();
53
26
  });
54
27
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ExpanderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
56
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ExpanderService, providedIn: 'root' }); }
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' }); }
57
30
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: ExpanderService, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: ExpanderService, decorators: [{
59
32
  type: Injectable,
60
33
  args: [{
61
34
  providedIn: 'root'
62
35
  }]
63
- }], ctorParameters: () => [] });
36
+ }] });
37
+
38
+ /** @internal */
39
+ function isObject(value) {
40
+ return value !== null && typeof value === 'object';
41
+ }
42
+ /** @internal */
43
+ function isArray(value) {
44
+ return Array.isArray(value);
45
+ }
46
+ /** @internal */
47
+ function isUndefined(value) {
48
+ return typeof value === 'undefined';
49
+ }
50
+ /** @internal */
51
+ function isString(value) {
52
+ return typeof value === 'string';
53
+ }
54
+ /** @internal */
55
+ function isNumber(value) {
56
+ return typeof value === 'number';
57
+ }
58
+ /** @internal */
59
+ function isBoolean(value) {
60
+ return typeof value === 'boolean';
61
+ }
64
62
 
65
63
  /** @internal */
66
64
  class JsonViewItemComponent {
67
65
  constructor() {
68
- this.level = 0;
69
- this.isOpen = false;
70
- this.hasChildren = false;
71
- this.isObject = false;
72
- this.isArray = false;
73
- this.isInit = false;
74
- this._levelLabels = {};
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);
81
+ }
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
+ }
101
+ }
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
+ }
112
+ }
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
+ }
130
+ }
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" }] : []));
75
135
  this.expanderService = inject(ExpanderService);
76
136
  }
77
- set data(data) {
78
- this._data = data;
79
- if (this.isInit) {
80
- this.init();
81
- }
82
- }
83
- get data() {
84
- return this._data;
85
- }
86
137
  ngOnInit() {
87
- this.init();
88
- this.isInit = true;
89
138
  this.expanderService.addItem(this);
90
139
  }
91
140
  ngOnDestroy() {
92
141
  this.expanderService.removeItem(this);
93
142
  }
94
- init() {
95
- this.levelLabelHandle();
96
- this.levelOpenHandle();
97
- this.childrenKeysHandle();
98
- this.dataHandle();
99
- }
100
- levelLabelHandle() {
101
- if (this.levelLabels !== undefined) {
102
- this._levelLabels = this.levelLabels[this.level] || {};
103
- }
104
- }
105
- levelOpenHandle() {
106
- if (!isUndefined(this.levelOpen) && (this.level <= this.levelOpen)) {
107
- this.isOpen = true;
108
- }
109
- }
110
- childrenKeysHandle() {
111
- if (isObject(this.data)) {
112
- this.childrenKeys = Object.keys(this.data);
113
- if (this.childrenKeys && this.childrenKeys.length) {
114
- this.hasChildren = true;
115
- }
116
- }
117
- }
118
- dataHandle() {
119
- if (isObject(this.data)) {
120
- this.isObject = true;
121
- this.dataType = 'Object';
122
- if (isArray(this.data)) {
123
- this.isArray = true;
124
- this.dataType = 'Array';
125
- }
126
- if (this.key && this._levelLabels[this.key]) {
127
- this.dataType = this._levelLabels[this.key];
128
- }
129
- }
130
- else {
131
- this.value = this.data;
132
- if (isString(this.data)) {
133
- this.valueType = 'string';
134
- }
135
- else if (isNumber(this.data)) {
136
- this.valueType = 'number';
137
- }
138
- else if (isBoolean(this.data)) {
139
- this.valueType = 'boolean';
140
- }
141
- else if (null === this.data) {
142
- this.valueType = 'null';
143
- this.value = 'null';
144
- }
145
- }
146
- }
147
143
  toggle() {
148
- if (!(this.childrenKeys && this.childrenKeys.length)) {
144
+ if (!(this.childrenKeys().length)) {
149
145
  return;
150
146
  }
151
- this.isOpen = !this.isOpen;
147
+ this.isOpen.set(!this.isOpen());
152
148
  }
153
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: JsonViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
154
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.5", 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"] }] }); }
155
151
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: JsonViewItemComponent, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewItemComponent, decorators: [{
157
153
  type: Component,
158
- 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"] }]
159
- }], propDecorators: { data: [{
160
- type: Input
161
- }], key: [{
162
- type: Input
163
- }], level: [{
164
- type: Input
165
- }], levelOpen: [{
166
- type: Input
167
- }], levelLabels: [{
168
- type: Input
169
- }] } });
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 }] }] } });
170
156
 
171
157
  class JsonViewComponent {
172
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 });
173
168
  this.expanderService = inject(ExpanderService);
174
- this.cdRef = inject(ChangeDetectorRef);
175
169
  }
176
170
  ngAfterViewChecked() {
177
- if (this.levelOpen != undefined) {
171
+ if (this._levelOpen() != undefined) {
178
172
  // Reset levelOpen to keep nested items collapsed when toggling
179
- this.levelOpen = undefined;
180
- this.cdRef.detectChanges();
173
+ this._levelOpen.set(undefined);
181
174
  }
182
175
  }
183
176
  /** Expand all items up to the given level */
184
177
  expandTo(level) {
185
- this.levelOpen = level;
178
+ this._levelOpen.set(level);
186
179
  this.expanderService.expandTo(level);
187
180
  }
188
181
  /** Collapse any open items above the given level */
189
182
  collapseTo(level) {
190
183
  this.expanderService.collapseTo(level);
191
184
  }
192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: JsonViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
193
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.5", type: JsonViewComponent, isStandalone: false, selector: "nxt-json-view", inputs: { data: "data", levelOpen: "levelOpen", levelLabels: "levelLabels" }, providers: [
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: [
194
187
  {
195
188
  provide: ExpanderService,
196
189
  useClass: ExpanderService
197
190
  }
198
- ], 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"] }] }); }
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"] }] }); }
199
192
  }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: JsonViewComponent, decorators: [{
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewComponent, decorators: [{
201
194
  type: Component,
202
- args: [{ selector: 'nxt-json-view', encapsulation: ViewEncapsulation.Emulated, standalone: false, providers: [
195
+ args: [{ selector: 'nxt-json-view', encapsulation: ViewEncapsulation.Emulated, providers: [
203
196
  {
204
197
  provide: ExpanderService,
205
198
  useClass: ExpanderService
206
199
  }
207
- ], 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" }]
208
- }], propDecorators: { data: [{
209
- type: Input
210
- }], levelOpen: [{
211
- type: Input
212
- }], levelLabels: [{
213
- type: Input
214
- }] } });
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 }] }] } });
215
204
 
205
+ /** @deprecated use standalone imports */
216
206
  class JsonViewModule {
217
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: JsonViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
218
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.5", ngImport: i0, type: JsonViewModule, declarations: [JsonViewItemComponent,
219
- JsonViewComponent], imports: [CommonModule], exports: [JsonViewComponent] }); }
220
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.5", 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 }); }
221
210
  }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: JsonViewModule, decorators: [{
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: JsonViewModule, decorators: [{
223
212
  type: NgModule,
224
213
  args: [{
225
- declarations: [
226
- JsonViewItemComponent,
227
- JsonViewComponent
228
- ],
229
214
  imports: [
230
- CommonModule
215
+ JsonViewComponent
231
216
  ],
232
217
  exports: [
233
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/expander/expander.service.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 { 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 constructor() { }\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 = 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","import { Component, inject, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'\r\nimport { LevelLabels } from '../utils/interfaces'\r\nimport { isArray, isBoolean, isNumber, isObject, isString, isUndefined } from '../utils/utils'\r\nimport { ExpanderService } from '../expander/expander.service'\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 standalone: false\r\n})\r\nexport class JsonViewItemComponent implements OnInit, OnDestroy {\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 private readonly expanderService = inject(ExpanderService)\r\n\r\n ngOnInit() {\r\n this.init()\r\n this.isInit = true\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 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 { AfterViewChecked, ChangeDetectorRef, Component, inject, Input, ViewEncapsulation } from '@angular/core'\r\nimport { LevelLabels } from '../utils/interfaces'\r\nimport { ExpanderService } from '../expander/expander.service'\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 standalone: false,\r\n providers: [\r\n {\r\n provide: ExpanderService,\r\n useClass: ExpanderService\r\n }\r\n ]\r\n})\r\nexport class JsonViewComponent implements AfterViewChecked {\r\n /** JSON data, any valid JSON object */\r\n @Input() data: any\r\n /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */\r\n @Input() levelOpen?: number\r\n /** Custom labels for elements within the hierarcy */\r\n @Input() levelLabels?: LevelLabels\r\n\r\n private readonly expanderService = inject(ExpanderService)\r\n private readonly cdRef = inject(ChangeDetectorRef)\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 = undefined\r\n this.cdRef.detectChanges()\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 = 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\"></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": "20.0.0",
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": "^20.0.0",
24
- "@angular/core": "^20.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,70 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { OnInit, OnDestroy, AfterViewChecked } from '@angular/core';
3
- import * as i3 from '@angular/common';
4
-
5
- interface LevelLabels {
6
- [level: number]: {
7
- [key: string]: string;
8
- };
9
- }
10
-
11
- /** @internal */
12
- declare class JsonViewItemComponent implements OnInit, OnDestroy {
13
- private _data?;
14
- set data(data: any | undefined);
15
- get data(): any | undefined;
16
- key?: string;
17
- level: number;
18
- levelOpen?: number;
19
- levelLabels?: LevelLabels;
20
- isOpen: boolean;
21
- childrenKeys?: string[];
22
- hasChildren: boolean;
23
- dataType?: string;
24
- value: any;
25
- valueType?: string;
26
- isObject: boolean;
27
- isArray: boolean;
28
- isInit: boolean;
29
- _levelLabels: {
30
- [key: string]: string;
31
- };
32
- private readonly expanderService;
33
- ngOnInit(): void;
34
- ngOnDestroy(): void;
35
- init(): void;
36
- levelLabelHandle(): void;
37
- levelOpenHandle(): void;
38
- childrenKeysHandle(): void;
39
- dataHandle(): void;
40
- toggle(): void;
41
- static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewItemComponent, never>;
42
- 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>;
43
- }
44
-
45
- declare class JsonViewComponent implements AfterViewChecked {
46
- /** JSON data, any valid JSON object */
47
- data: any;
48
- /** Initial number of levels to be expanded; to expand / collapse the view after initial render, use `expandTo` / `collapseTo` */
49
- levelOpen?: number;
50
- /** Custom labels for elements within the hierarcy */
51
- levelLabels?: LevelLabels;
52
- private readonly expanderService;
53
- private readonly cdRef;
54
- ngAfterViewChecked(): void;
55
- /** Expand all items up to the given level */
56
- expandTo(level: number): void;
57
- /** Collapse any open items above the given level */
58
- collapseTo(level: number): void;
59
- static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewComponent, never>;
60
- 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>;
61
- }
62
-
63
- declare class JsonViewModule {
64
- static ɵfac: i0.ɵɵFactoryDeclaration<JsonViewModule, never>;
65
- static ɵmod: i0.ɵɵNgModuleDeclaration<JsonViewModule, [typeof JsonViewItemComponent, typeof JsonViewComponent], [typeof i3.CommonModule], [typeof JsonViewComponent]>;
66
- static ɵinj: i0.ɵɵInjectorDeclaration<JsonViewModule>;
67
- }
68
-
69
- export { JsonViewComponent, JsonViewModule };
70
- export type { LevelLabels };