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 +4 -4
- package/fesm2022/nxt-json-view.mjs +136 -151
- package/fesm2022/nxt-json-view.mjs.map +1 -1
- package/package.json +9 -6
- package/types/nxt-json-view.d.ts +37 -0
- package/index.d.ts +0 -70
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
|
|
21
|
+
### Import JSON view component
|
|
22
22
|
|
|
23
23
|
```ts
|
|
24
|
-
import {
|
|
24
|
+
import { JsonViewComponent } from 'nxt-json-view'
|
|
25
25
|
|
|
26
|
-
@
|
|
26
|
+
@Component({
|
|
27
27
|
...
|
|
28
28
|
imports: [
|
|
29
29
|
...
|
|
30
|
-
|
|
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,
|
|
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
|
|
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: "
|
|
56
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
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: "
|
|
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
|
-
}]
|
|
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.
|
|
69
|
-
this.
|
|
70
|
-
this.
|
|
71
|
-
this.
|
|
72
|
-
this.
|
|
73
|
-
this.
|
|
74
|
-
this.
|
|
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
|
|
144
|
+
if (!(this.childrenKeys().length)) {
|
|
149
145
|
return;
|
|
150
146
|
}
|
|
151
|
-
this.isOpen
|
|
147
|
+
this.isOpen.set(!this.isOpen());
|
|
152
148
|
}
|
|
153
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
154
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
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: "
|
|
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,
|
|
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.
|
|
171
|
+
if (this._levelOpen() != undefined) {
|
|
178
172
|
// Reset levelOpen to keep nested items collapsed when toggling
|
|
179
|
-
this.
|
|
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.
|
|
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: "
|
|
193
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
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]=\"
|
|
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: "
|
|
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,
|
|
195
|
+
args: [{ selector: 'nxt-json-view', encapsulation: ViewEncapsulation.Emulated, providers: [
|
|
203
196
|
{
|
|
204
197
|
provide: ExpanderService,
|
|
205
198
|
useClass: ExpanderService
|
|
206
199
|
}
|
|
207
|
-
],
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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: "
|
|
218
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
219
|
-
|
|
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: "
|
|
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
|
-
|
|
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": "
|
|
5
|
+
"version": "21.0.0-alpha.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
|
-
"repository":
|
|
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": "^
|
|
24
|
-
"@angular/core": "^
|
|
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": "
|
|
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": "./
|
|
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 };
|